Move criteria triggers registration to deferred register
This commit is contained in:
parent
3f77b86bd5
commit
02db21cde9
@ -126,6 +126,7 @@ public final class OverdriveThatMatters {
|
||||
MRecipes.INSTANCE.register(bus);
|
||||
MDataComponentTypes.INSTANCE.register(bus);
|
||||
MArmorMaterials.INSTANCE.register(bus);
|
||||
MCriteriaTriggers.INSTANCE.register(bus);
|
||||
|
||||
StorageStack.Companion.register(bus);
|
||||
MatteryChestMenu.Companion.register(bus);
|
||||
|
@ -0,0 +1,60 @@
|
||||
package ru.dbotthepony.mc.otm.registry
|
||||
|
||||
import net.minecraft.advancements.CriteriaTriggers
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.neoforged.bus.api.IEventBus
|
||||
import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.AndroidTravelUnderwater
|
||||
import ru.dbotthepony.mc.otm.triggers.BecomeAndroidDeathTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.BecomeAndroidSleepTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.BecomeAndroidTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.EnderTeleporterFallDeathTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ExopackGainedEnderAccessTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.FallDampenersSaveTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.NanobotsArmorTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ShockwaveDamageMobTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger
|
||||
import ru.dbotthepony.mc.otm.triggers.TakeItemOutOfReplicatorTrigger
|
||||
|
||||
object MCriteriaTriggers {
|
||||
private val registrar = MDeferredRegister(BuiltInRegistries.TRIGGER_TYPES)
|
||||
|
||||
fun register(bus: IEventBus) {
|
||||
registrar.register(bus)
|
||||
}
|
||||
|
||||
init {
|
||||
registrar.register(BlackHoleTrigger.id, BlackHoleTrigger)
|
||||
registrar.register(BecomeAndroidTrigger.id, BecomeAndroidTrigger)
|
||||
registrar.register(BecomeAndroidDeathTrigger.id, BecomeAndroidDeathTrigger)
|
||||
registrar.register(BecomeAndroidSleepTrigger.id, BecomeAndroidSleepTrigger)
|
||||
registrar.register(BecomeHumaneTrigger.id, BecomeHumaneTrigger)
|
||||
registrar.register(AndroidResearchTrigger.id, AndroidResearchTrigger)
|
||||
registrar.register(ShockwaveDamageMobTrigger.id, ShockwaveDamageMobTrigger)
|
||||
registrar.register(ShockwaveTrigger.id, ShockwaveTrigger)
|
||||
registrar.register(AndroidBatteryTrigger.id, AndroidBatteryTrigger)
|
||||
registrar.register(NanobotsArmorTrigger.id, NanobotsArmorTrigger)
|
||||
registrar.register(FallDampenersSaveTrigger.id, FallDampenersSaveTrigger)
|
||||
registrar.register(EnderTeleporterFallDeathTrigger.id, EnderTeleporterFallDeathTrigger)
|
||||
registrar.register(KillAsAndroidTrigger.id, KillAsAndroidTrigger)
|
||||
registrar.register(AndroidTravelUnderwater.id, AndroidTravelUnderwater)
|
||||
registrar.register(NailedEntityTrigger.id, NailedEntityTrigger)
|
||||
registrar.register(ExopackObtainedTrigger.id, ExopackObtainedTrigger)
|
||||
registrar.register(ExopackGainedSmeltingTrigger.id, ExopackGainedSmeltingTrigger)
|
||||
registrar.register(ExopackGainedCraftingTrigger.id, ExopackGainedCraftingTrigger)
|
||||
registrar.register(ExopackGainedEnderAccessTrigger.id, ExopackGainedEnderAccessTrigger)
|
||||
registrar.register(ExopackSlotsExpandedTrigger.id, ExopackSlotsExpandedTrigger)
|
||||
registrar.register(ExopackBatterySlotTrigger.id, ExopackBatterySlotTrigger)
|
||||
registrar.register(TakeItemOutOfReplicatorTrigger.id, TakeItemOutOfReplicatorTrigger)
|
||||
}
|
||||
}
|
@ -35,12 +35,12 @@ import kotlin.reflect.KProperty
|
||||
class MDeferredRegister<R : Any>(val registry: ResourceKey<out Registry<R>>, val modId: String = OverdriveThatMatters.MOD_ID, val allowParallel: Boolean = false) {
|
||||
constructor(registry: Registry<R>, modId: String = OverdriveThatMatters.MOD_ID, allowParallel: Boolean = false) : this(registry.key(), modId, allowParallel)
|
||||
|
||||
private val entriesInternal = Object2ObjectLinkedOpenHashMap<String, Entry<R>>()
|
||||
private val entriesInternal = Object2ObjectLinkedOpenHashMap<ResourceLocation, Entry<R>>()
|
||||
private var allowRegistration = true
|
||||
private var eventRegistered = false
|
||||
private val stages = ArrayList<RegistrationStage>()
|
||||
|
||||
val entries: Map<String, Entry<R>> = Collections.unmodifiableMap(entriesInternal)
|
||||
val entries: Map<ResourceLocation, Entry<R>> = Collections.unmodifiableMap(entriesInternal)
|
||||
|
||||
private inner class RegistrationStage(val serial: Boolean) {
|
||||
private val entries = ArrayList<Entry<R>>()
|
||||
@ -79,8 +79,10 @@ class MDeferredRegister<R : Any>(val registry: ResourceKey<out Registry<R>>, val
|
||||
}
|
||||
}
|
||||
|
||||
inner class Entry<out T : R>(val name: String, private val factory: Supplier<T>, serial: Boolean) : Supplier<@UnsafeVariance T>, Lazy<T>, Holder<R> {
|
||||
constructor(name: String, factory: Supplier<T>) : this(name, factory, false)
|
||||
inner class Entry<out T : R>(name: ResourceLocation, private val factory: Supplier<T>, serial: Boolean) : Supplier<@UnsafeVariance T>, Lazy<T>, Holder<R> {
|
||||
constructor(name: String, factory: Supplier<T>, serial: Boolean) : this(ResourceLocation(modId, name), factory, serial)
|
||||
constructor(name: String, factory: Supplier<T>) : this(ResourceLocation(modId, name), factory, false)
|
||||
constructor(name: ResourceLocation, factory: Supplier<T>) : this(name, factory, false)
|
||||
|
||||
init {
|
||||
check(allowRegistration) { "Unable to register new entries after RegisterEvent has been fired" }
|
||||
@ -98,7 +100,7 @@ class MDeferredRegister<R : Any>(val registry: ResourceKey<out Registry<R>>, val
|
||||
}
|
||||
|
||||
@JvmField
|
||||
val key: ResourceKey<R> = ResourceKey.create(registry, ResourceLocation(modId, name))
|
||||
val key: ResourceKey<R> = ResourceKey.create(registry, name)
|
||||
private var parentHolder: Holder<R>? = null
|
||||
|
||||
override fun value(): T {
|
||||
@ -153,7 +155,7 @@ class MDeferredRegister<R : Any>(val registry: ResourceKey<out Registry<R>>, val
|
||||
private var _value: T? = null
|
||||
|
||||
override val value: T get() {
|
||||
return _value ?: throw IllegalStateException("Trying to access $name of $registry before it is initialized")
|
||||
return _value ?: throw IllegalStateException("Trying to access ${key.location()} of $registry before it is initialized")
|
||||
}
|
||||
|
||||
override fun isInitialized(): Boolean {
|
||||
@ -169,12 +171,12 @@ class MDeferredRegister<R : Any>(val registry: ResourceKey<out Registry<R>>, val
|
||||
}
|
||||
|
||||
fun initialize(registry: Registry<R>): T {
|
||||
check(_value == null) { "Already initialized $name of $registry!" }
|
||||
check(_value == null) { "Already initialized ${key.location()} of $registry!" }
|
||||
|
||||
val compute = try {
|
||||
factory.get()
|
||||
} catch (err: Throwable) {
|
||||
throw RuntimeException("Unable to initialize registry entry $name of $registry", err)
|
||||
throw RuntimeException("Unable to initialize registry entry ${key.location()} of $registry", err)
|
||||
}
|
||||
|
||||
_value = compute
|
||||
@ -200,6 +202,12 @@ class MDeferredRegister<R : Any>(val registry: ResourceKey<out Registry<R>>, val
|
||||
fun <T : R> register(name: String, factory: Supplier<T>, serial: Boolean) = Entry(name, factory, serial)
|
||||
fun <T : R> register(name: String, serial: Boolean, factory: Supplier<T>) = Entry(name, factory, serial)
|
||||
|
||||
fun <T : R> register(name: ResourceLocation, factory: Supplier<T>) = Entry(name, factory)
|
||||
fun <T : R> register(name: ResourceLocation, factory: Supplier<T>, serial: Boolean) = Entry(name, factory, serial)
|
||||
fun <T : R> register(name: ResourceLocation, serial: Boolean, factory: Supplier<T>) = Entry(name, factory, serial)
|
||||
|
||||
fun <T : R> register(name: ResourceLocation, value: T) = Entry(name) { value }
|
||||
|
||||
private fun onRegisterEvent(event: RegisterEvent) {
|
||||
if (event.registryKey == registry) {
|
||||
allowRegistration = false
|
||||
|
@ -295,29 +295,6 @@ object MRegistry : IBlockItemRegistryAcceptor {
|
||||
// call static constructors
|
||||
NanobotsArmorFeature.Companion
|
||||
EnderTeleporterFeature.Companion
|
||||
|
||||
CriteriaTriggers.register(BlackHoleTrigger.id.toString(), BlackHoleTrigger)
|
||||
CriteriaTriggers.register(BecomeAndroidTrigger.id.toString(), BecomeAndroidTrigger)
|
||||
CriteriaTriggers.register(BecomeAndroidDeathTrigger.id.toString(), BecomeAndroidDeathTrigger)
|
||||
CriteriaTriggers.register(BecomeAndroidSleepTrigger.id.toString(), BecomeAndroidSleepTrigger)
|
||||
CriteriaTriggers.register(BecomeHumaneTrigger.id.toString(), BecomeHumaneTrigger)
|
||||
CriteriaTriggers.register(AndroidResearchTrigger.id.toString(), AndroidResearchTrigger)
|
||||
CriteriaTriggers.register(ShockwaveDamageMobTrigger.id.toString(), ShockwaveDamageMobTrigger)
|
||||
CriteriaTriggers.register(ShockwaveTrigger.id.toString(), ShockwaveTrigger)
|
||||
CriteriaTriggers.register(AndroidBatteryTrigger.id.toString(), AndroidBatteryTrigger)
|
||||
CriteriaTriggers.register(NanobotsArmorTrigger.id.toString(), NanobotsArmorTrigger)
|
||||
CriteriaTriggers.register(FallDampenersSaveTrigger.id.toString(), FallDampenersSaveTrigger)
|
||||
CriteriaTriggers.register(EnderTeleporterFallDeathTrigger.id.toString(), EnderTeleporterFallDeathTrigger)
|
||||
CriteriaTriggers.register(KillAsAndroidTrigger.id.toString(), KillAsAndroidTrigger)
|
||||
CriteriaTriggers.register(AndroidTravelUnderwater.id.toString(), AndroidTravelUnderwater)
|
||||
CriteriaTriggers.register(NailedEntityTrigger.id.toString(), NailedEntityTrigger)
|
||||
CriteriaTriggers.register(ExopackObtainedTrigger.id.toString(), ExopackObtainedTrigger)
|
||||
CriteriaTriggers.register(ExopackGainedSmeltingTrigger.id.toString(), ExopackGainedSmeltingTrigger)
|
||||
CriteriaTriggers.register(ExopackGainedCraftingTrigger.id.toString(), ExopackGainedCraftingTrigger)
|
||||
CriteriaTriggers.register(ExopackGainedEnderAccessTrigger.id.toString(), ExopackGainedEnderAccessTrigger)
|
||||
CriteriaTriggers.register(ExopackSlotsExpandedTrigger.id.toString(), ExopackSlotsExpandedTrigger)
|
||||
CriteriaTriggers.register(ExopackBatterySlotTrigger.id.toString(), ExopackBatterySlotTrigger)
|
||||
CriteriaTriggers.register(TakeItemOutOfReplicatorTrigger.id.toString(), TakeItemOutOfReplicatorTrigger)
|
||||
}
|
||||
|
||||
private fun initializeCommon(event: FMLCommonSetupEvent) {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package ru.dbotthepony.mc.otm.triggers
|
||||
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user