Move TickList to core
This commit is contained in:
parent
fcbe68297c
commit
b0c845e0f9
@ -11,79 +11,9 @@ import net.minecraftforge.event.TickEvent.LevelTickEvent
|
||||
import net.minecraftforge.event.server.ServerAboutToStartEvent
|
||||
import net.minecraftforge.event.server.ServerStoppedEvent
|
||||
import net.minecraftforge.event.server.ServerStoppingEvent
|
||||
import net.minecraftforge.eventbus.api.EventPriority
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.mc.otm.core.TickList
|
||||
import java.util.*
|
||||
import kotlin.ConcurrentModificationException
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
private class TickList {
|
||||
private val conditional = LinkedList<IConditionalTickable>()
|
||||
private val once = LinkedList<ITickable>()
|
||||
|
||||
private val conditionalValveTime = LinkedList<IConditionalTickable>()
|
||||
private val onceValveTime = LinkedList<ITickable>()
|
||||
|
||||
private var inTicker = false
|
||||
|
||||
fun add(ticker: IConditionalTickable) {
|
||||
if (inTicker) {
|
||||
conditionalValveTime.add(ticker)
|
||||
} else {
|
||||
conditional.addFirst(ticker)
|
||||
}
|
||||
}
|
||||
|
||||
fun add(ticker: ITickable) {
|
||||
if (inTicker) {
|
||||
onceValveTime.add(ticker)
|
||||
} else {
|
||||
once.addFirst(ticker)
|
||||
}
|
||||
}
|
||||
|
||||
fun tick() {
|
||||
if (inTicker) {
|
||||
throw ConcurrentModificationException("Already ticking")
|
||||
}
|
||||
|
||||
inTicker = true
|
||||
val iterator = conditional.iterator()
|
||||
|
||||
for (ticker in iterator) {
|
||||
if (!ticker.canTick) {
|
||||
iterator.remove()
|
||||
} else {
|
||||
ticker.tick()
|
||||
}
|
||||
}
|
||||
|
||||
for (ticker in once) {
|
||||
ticker.tick()
|
||||
}
|
||||
|
||||
once.clear()
|
||||
|
||||
for (ticker in conditionalValveTime) {
|
||||
conditional.addFirst(ticker)
|
||||
}
|
||||
|
||||
for (ticker in onceValveTime) {
|
||||
once.addFirst(ticker)
|
||||
}
|
||||
|
||||
conditionalValveTime.clear()
|
||||
onceValveTime.clear()
|
||||
|
||||
inTicker = false
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
conditional.clear()
|
||||
once.clear()
|
||||
}
|
||||
}
|
||||
|
||||
private val preServerTick = TickList()
|
||||
private val postServerTick = TickList()
|
||||
|
73
src/main/kotlin/ru/dbotthepony/mc/otm/core/TickList.kt
Normal file
73
src/main/kotlin/ru/dbotthepony/mc/otm/core/TickList.kt
Normal file
@ -0,0 +1,73 @@
|
||||
package ru.dbotthepony.mc.otm.core
|
||||
|
||||
import ru.dbotthepony.mc.otm.IConditionalTickable
|
||||
import ru.dbotthepony.mc.otm.ITickable
|
||||
import java.util.*
|
||||
import kotlin.ConcurrentModificationException
|
||||
|
||||
class TickList {
|
||||
private val conditional = LinkedList<IConditionalTickable>()
|
||||
private val once = LinkedList<ITickable>()
|
||||
|
||||
private val conditionalValveTime = LinkedList<IConditionalTickable>()
|
||||
private val onceValveTime = LinkedList<ITickable>()
|
||||
|
||||
private var inTicker = false
|
||||
|
||||
fun add(ticker: IConditionalTickable) {
|
||||
if (inTicker) {
|
||||
conditionalValveTime.add(ticker)
|
||||
} else {
|
||||
conditional.addFirst(ticker)
|
||||
}
|
||||
}
|
||||
|
||||
fun add(ticker: ITickable) {
|
||||
if (inTicker) {
|
||||
onceValveTime.add(ticker)
|
||||
} else {
|
||||
once.addFirst(ticker)
|
||||
}
|
||||
}
|
||||
|
||||
fun tick() {
|
||||
if (inTicker) {
|
||||
throw ConcurrentModificationException("Already ticking")
|
||||
}
|
||||
|
||||
inTicker = true
|
||||
val iterator = conditional.iterator()
|
||||
|
||||
for (ticker in iterator) {
|
||||
if (!ticker.canTick) {
|
||||
iterator.remove()
|
||||
} else {
|
||||
ticker.tick()
|
||||
}
|
||||
}
|
||||
|
||||
for (ticker in once) {
|
||||
ticker.tick()
|
||||
}
|
||||
|
||||
once.clear()
|
||||
|
||||
for (ticker in conditionalValveTime) {
|
||||
conditional.addFirst(ticker)
|
||||
}
|
||||
|
||||
for (ticker in onceValveTime) {
|
||||
once.addFirst(ticker)
|
||||
}
|
||||
|
||||
conditionalValveTime.clear()
|
||||
onceValveTime.clear()
|
||||
|
||||
inTicker = false
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
conditional.clear()
|
||||
once.clear()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user