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.ServerAboutToStartEvent
|
||||||
import net.minecraftforge.event.server.ServerStoppedEvent
|
import net.minecraftforge.event.server.ServerStoppedEvent
|
||||||
import net.minecraftforge.event.server.ServerStoppingEvent
|
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 org.apache.logging.log4j.LogManager
|
||||||
|
import ru.dbotthepony.mc.otm.core.TickList
|
||||||
import java.util.*
|
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 preServerTick = TickList()
|
||||||
private val postServerTick = 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