Move TickList to core

This commit is contained in:
DBotThePony 2022-09-07 14:23:15 +07:00
parent fcbe68297c
commit b0c845e0f9
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 74 additions and 71 deletions

View File

@ -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()

View 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()
}
}