Move tick, timer and writeonce to util

This commit is contained in:
DBotThePony 2023-01-14 17:34:48 +07:00
parent aa07bdea3b
commit ea6a237de8
Signed by: DBot
GPG Key ID: DCC23B5715498507
25 changed files with 82 additions and 79 deletions

View File

@ -20,7 +20,7 @@ import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.android.AndroidResearchDataProvider import ru.dbotthepony.mc.otm.android.AndroidResearchDataProvider
import ru.dbotthepony.mc.otm.block.* import ru.dbotthepony.mc.otm.block.*
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.datagen.blocks.BatteryBankProvider import ru.dbotthepony.mc.otm.datagen.blocks.BatteryBankProvider
import ru.dbotthepony.mc.otm.datagen.blocks.MatterBankProvider import ru.dbotthepony.mc.otm.datagen.blocks.MatterBankProvider
import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider

View File

@ -16,10 +16,10 @@ import net.minecraftforge.event.server.ServerStoppingEvent
import net.minecraftforge.fml.loading.FMLLoader import net.minecraftforge.fml.loading.FMLLoader
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.core.IConditionalTickable import ru.dbotthepony.mc.otm.core.util.IConditionalTickable
import ru.dbotthepony.mc.otm.core.ITickable import ru.dbotthepony.mc.otm.core.util.ITickable
import ru.dbotthepony.mc.otm.core.TickList import ru.dbotthepony.mc.otm.core.util.TickList
import ru.dbotthepony.mc.otm.core.TimerQueue import ru.dbotthepony.mc.otm.core.util.TimerQueue
import java.util.* import java.util.*
private val preServerTick = TickList() private val preServerTick = TickList()

View File

@ -2,12 +2,11 @@ package ru.dbotthepony.mc.otm.android
import it.unimi.dsi.fastutil.objects.ObjectArraySet import it.unimi.dsi.fastutil.objects.ObjectArraySet
import net.minecraft.data.CachedOutput import net.minecraft.data.CachedOutput
import net.minecraft.data.DataGenerator
import net.minecraft.data.DataProvider import net.minecraft.data.DataProvider
import net.minecraft.data.PackOutput import net.minecraft.data.PackOutput
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraftforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import java.util.Collections import java.util.Collections
import java.util.LinkedList import java.util.LinkedList
import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletableFuture

View File

@ -21,7 +21,7 @@ import ru.dbotthepony.mc.otm.menu.AndroidStationMenu
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
@Suppress("ObjectPropertyName") @Suppress("ObjectPropertyName")
class AndroidStationBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : class AndroidStationBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :

View File

@ -29,7 +29,7 @@ import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.menu.ChemicalGeneratorMenu import ru.dbotthepony.mc.otm.menu.ChemicalGeneratorMenu
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal

View File

@ -38,7 +38,7 @@ import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal

View File

@ -28,7 +28,6 @@ import ru.dbotthepony.mc.otm.capability.matter.IMatterStorage
import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl
import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.container.MatteryContainerHooks import ru.dbotthepony.mc.otm.container.MatteryContainerHooks
import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.graph.Graph6Node import ru.dbotthepony.mc.otm.graph.Graph6Node
import ru.dbotthepony.mc.otm.graph.matter.IMatterGraphNode import ru.dbotthepony.mc.otm.graph.matter.IMatterGraphNode
import ru.dbotthepony.mc.otm.graph.matter.MatterNetworkGraph import ru.dbotthepony.mc.otm.graph.matter.MatterNetworkGraph
@ -38,7 +37,7 @@ import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal

View File

@ -41,7 +41,7 @@ import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.math.getDecimal import ru.dbotthepony.mc.otm.core.math.getDecimal
import ru.dbotthepony.mc.otm.core.math.set import ru.dbotthepony.mc.otm.core.math.set

View File

@ -31,10 +31,9 @@ import ru.dbotthepony.mc.otm.graph.matter.IMatterGraphNode
import ru.dbotthepony.mc.otm.graph.matter.MatterNetworkGraph import ru.dbotthepony.mc.otm.graph.matter.MatterNetworkGraph
import ru.dbotthepony.mc.otm.menu.MatterReplicatorMenu import ru.dbotthepony.mc.otm.menu.MatterReplicatorMenu
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal

View File

@ -37,7 +37,7 @@ import ru.dbotthepony.mc.otm.menu.MatterScannerMenu
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.matter.MatterManager
import java.util.* import java.util.*
import kotlin.math.pow import kotlin.math.pow

View File

@ -2,11 +2,10 @@ package ru.dbotthepony.mc.otm.client
import net.minecraftforge.client.event.ClientPlayerNetworkEvent import net.minecraftforge.client.event.ClientPlayerNetworkEvent
import net.minecraftforge.event.TickEvent import net.minecraftforge.event.TickEvent
import org.apache.logging.log4j.LogManager import ru.dbotthepony.mc.otm.core.util.IConditionalTickable
import ru.dbotthepony.mc.otm.core.IConditionalTickable import ru.dbotthepony.mc.otm.core.util.ITickable
import ru.dbotthepony.mc.otm.core.ITickable import ru.dbotthepony.mc.otm.core.util.TickList
import ru.dbotthepony.mc.otm.core.TickList import ru.dbotthepony.mc.otm.core.util.TimerQueue
import ru.dbotthepony.mc.otm.core.TimerQueue
import ru.dbotthepony.mc.otm.isClient import ru.dbotthepony.mc.otm.isClient
private val preTickList = TickList() private val preTickList = TickList()

View File

@ -15,7 +15,7 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider
import net.minecraftforge.common.util.LazyOptional import net.minecraftforge.common.util.LazyOptional
import net.minecraftforge.event.AttachCapabilitiesEvent import net.minecraftforge.event.AttachCapabilitiesEvent
import net.minecraftforge.eventbus.api.SubscribeEvent import net.minecraftforge.eventbus.api.SubscribeEvent
import ru.dbotthepony.mc.otm.core.ITickable import ru.dbotthepony.mc.otm.core.util.ITickable
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.onceServer import ru.dbotthepony.mc.otm.onceServer
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability

View File

@ -0,0 +1,36 @@
package ru.dbotthepony.mc.otm.core.util
/**
* Represents tick callback with condition, once
*/
interface IConditionalTickable : ITickable {
/**
* Once this returns false, it should stay false.
*
* If it suddenly turns true after being false, result is undefined.
*/
val canTick: Boolean
companion object {
fun wrap(ticker: () -> Boolean): IConditionalTickable {
return object : IConditionalTickable {
override var canTick: Boolean = true
private set
override fun tick() {
canTick = !ticker.invoke()
}
}
}
fun wrap(condition: () -> Boolean, ticker: () -> Unit): IConditionalTickable {
return object : IConditionalTickable {
override val canTick: Boolean get() = condition.invoke()
override fun tick() {
ticker.invoke()
}
}
}
}
}

View File

@ -0,0 +1,8 @@
package ru.dbotthepony.mc.otm.core.util
/**
* Represents tick callback
*/
fun interface ITickable {
fun tick()
}

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.core package ru.dbotthepony.mc.otm.core.util
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import kotlin.ConcurrentModificationException
class TickList { class TickList {
private val conditional = ArrayDeque<IConditionalTickable>() private val conditional = ArrayDeque<IConditionalTickable>()
@ -47,10 +46,16 @@ class TickList {
} }
fun until(ticker: () -> Boolean) = add(IConditionalTickable.wrap(ticker)) fun until(ticker: () -> Boolean) = add(IConditionalTickable.wrap(ticker))
fun `while`(tickerCondition: () -> Boolean, ticker: () -> Unit) = add(IConditionalTickable.wrap(tickerCondition, ticker)) fun `while`(tickerCondition: () -> Boolean, ticker: () -> Unit) = add(
IConditionalTickable.wrap(
tickerCondition,
ticker
)
)
fun until(ticker: () -> Boolean, condition: Boolean, reason: String) = add(IConditionalTickable.wrap(ticker), condition, reason) fun until(ticker: () -> Boolean, condition: Boolean, reason: String) = add(IConditionalTickable.wrap(ticker), condition, reason)
fun `while`(tickerCondition: () -> Boolean, ticker: () -> Unit, condition: Boolean, reason: String) = add(IConditionalTickable.wrap(tickerCondition, ticker), condition, reason) fun `while`(tickerCondition: () -> Boolean, ticker: () -> Unit, condition: Boolean, reason: String) = add(
IConditionalTickable.wrap(tickerCondition, ticker), condition, reason)
fun tick() { fun tick() {
if (inTicker) { if (inTicker) {
@ -97,39 +102,3 @@ class TickList {
private val LOGGER = LogManager.getLogger() private val LOGGER = LogManager.getLogger()
} }
} }
fun interface ITickable {
fun tick()
}
interface IConditionalTickable : ITickable {
/**
* Once this returns false, it should stay false.
*
* If it suddenly turns true after being false, result is undefined.
*/
val canTick: Boolean
companion object {
fun wrap(ticker: () -> Boolean): IConditionalTickable {
return object : IConditionalTickable {
override var canTick: Boolean = true
private set
override fun tick() {
canTick = !ticker.invoke()
}
}
}
fun wrap(condition: () -> Boolean, ticker: () -> Unit): IConditionalTickable {
return object : IConditionalTickable {
override val canTick: Boolean get() = condition.invoke()
override fun tick() {
ticker.invoke()
}
}
}
}
}

View File

@ -1,4 +1,4 @@
package ru.dbotthepony.mc.otm.core package ru.dbotthepony.mc.otm.core.util
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager

View File

@ -1,4 +1,4 @@
package ru.dbotthepony.mc.otm.core package ru.dbotthepony.mc.otm.core.util
import kotlin.properties.ReadWriteProperty import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty import kotlin.reflect.KProperty

View File

@ -5,7 +5,7 @@ import net.minecraft.core.Direction
import net.minecraft.core.SectionPos import net.minecraft.core.SectionPos
import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerLevel
import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.entity.BlockEntity
import ru.dbotthepony.mc.otm.core.IConditionalTickable import ru.dbotthepony.mc.otm.core.util.IConditionalTickable
import ru.dbotthepony.mc.otm.core.math.plus import ru.dbotthepony.mc.otm.core.math.plus
import ru.dbotthepony.mc.otm.addTicker import ru.dbotthepony.mc.otm.addTicker
import java.util.* import java.util.*

View File

@ -1,8 +1,8 @@
package ru.dbotthepony.mc.otm.graph package ru.dbotthepony.mc.otm.graph
import net.minecraft.core.Direction import net.minecraft.core.Direction
import ru.dbotthepony.mc.otm.core.IConditionalTickable import ru.dbotthepony.mc.otm.core.util.IConditionalTickable
import ru.dbotthepony.mc.otm.core.ITickable import ru.dbotthepony.mc.otm.core.util.ITickable
import ru.dbotthepony.mc.otm.SERVER_IS_LIVE import ru.dbotthepony.mc.otm.SERVER_IS_LIVE
interface GraphNodeListener { interface GraphNodeListener {

View File

@ -42,7 +42,7 @@ import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.ifPresentK import ru.dbotthepony.mc.otm.core.ifPresentK
import ru.dbotthepony.mc.otm.core.orNull import ru.dbotthepony.mc.otm.core.orNull
import ru.dbotthepony.mc.otm.registry.EMPDamageSource import ru.dbotthepony.mc.otm.registry.EMPDamageSource
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
/** /**
* This is called from [net.minecraft.world.item.enchantment.EnchantmentHelper.getSweepingDamageRatio] * This is called from [net.minecraft.world.item.enchantment.EnchantmentHelper.getSweepingDamageRatio]

View File

@ -9,7 +9,7 @@ import net.minecraft.world.item.Item
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import net.minecraftforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.core.registryName
import java.util.Collections import java.util.Collections
import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletableFuture

View File

@ -1,17 +1,11 @@
package ru.dbotthepony.mc.otm.registry package ru.dbotthepony.mc.otm.registry
import com.google.common.collect.Iterators
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap
import it.unimi.dsi.fastutil.objects.ReferenceLinkedOpenHashSet
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.CreativeModeTab
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraftforge.event.CreativeModeTabEvent import net.minecraftforge.event.CreativeModeTabEvent
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.registry.MItems.BATTERY_CREATIVE import ru.dbotthepony.mc.otm.registry.MItems.BATTERY_CREATIVE
object MCreativeTabs { object MCreativeTabs {

View File

@ -8,7 +8,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour
import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.RegistryObject import net.minecraftforge.registries.RegistryObject
import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.core.collect.SupplierMap
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
/** /**
* Base + Colored * Base + Colored

View File

@ -10,7 +10,7 @@ import net.minecraft.world.level.saveddata.SavedData
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.core.collect.ProxiedMap import ru.dbotthepony.mc.otm.core.collect.ProxiedMap
import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.core.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
class SavedMapDelegate<V>(val parent: SavedCountingMap<SavedMapDelegate<V>>?, val index: Int, value: V) { class SavedMapDelegate<V>(val parent: SavedCountingMap<SavedMapDelegate<V>>?, val index: Int, value: V) {
constructor(value: V) : this(null, -1, value) constructor(value: V) : this(null, -1, value)

View File

@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.tests
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import ru.dbotthepony.mc.otm.core.TimerQueue import ru.dbotthepony.mc.otm.core.util.TimerQueue
object TimerQueueTests { object TimerQueueTests {
@Test @Test