diff --git a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java index 51f56518c..ff5850eba 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java +++ b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java @@ -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); diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCriteriaTriggers.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCriteriaTriggers.kt new file mode 100644 index 000000000..200f7f3c4 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCriteriaTriggers.kt @@ -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) + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDeferredRegister.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDeferredRegister.kt index 685f10d8f..b35c37892 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDeferredRegister.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDeferredRegister.kt @@ -35,12 +35,12 @@ import kotlin.reflect.KProperty class MDeferredRegister(val registry: ResourceKey>, val modId: String = OverdriveThatMatters.MOD_ID, val allowParallel: Boolean = false) { constructor(registry: Registry, modId: String = OverdriveThatMatters.MOD_ID, allowParallel: Boolean = false) : this(registry.key(), modId, allowParallel) - private val entriesInternal = Object2ObjectLinkedOpenHashMap>() + private val entriesInternal = Object2ObjectLinkedOpenHashMap>() private var allowRegistration = true private var eventRegistered = false private val stages = ArrayList() - val entries: Map> = Collections.unmodifiableMap(entriesInternal) + val entries: Map> = Collections.unmodifiableMap(entriesInternal) private inner class RegistrationStage(val serial: Boolean) { private val entries = ArrayList>() @@ -79,8 +79,10 @@ class MDeferredRegister(val registry: ResourceKey>, val } } - inner class Entry(val name: String, private val factory: Supplier, serial: Boolean) : Supplier<@UnsafeVariance T>, Lazy, Holder { - constructor(name: String, factory: Supplier) : this(name, factory, false) + inner class Entry(name: ResourceLocation, private val factory: Supplier, serial: Boolean) : Supplier<@UnsafeVariance T>, Lazy, Holder { + constructor(name: String, factory: Supplier, serial: Boolean) : this(ResourceLocation(modId, name), factory, serial) + constructor(name: String, factory: Supplier) : this(ResourceLocation(modId, name), factory, false) + constructor(name: ResourceLocation, factory: Supplier) : this(name, factory, false) init { check(allowRegistration) { "Unable to register new entries after RegisterEvent has been fired" } @@ -98,7 +100,7 @@ class MDeferredRegister(val registry: ResourceKey>, val } @JvmField - val key: ResourceKey = ResourceKey.create(registry, ResourceLocation(modId, name)) + val key: ResourceKey = ResourceKey.create(registry, name) private var parentHolder: Holder? = null override fun value(): T { @@ -153,7 +155,7 @@ class MDeferredRegister(val registry: ResourceKey>, 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(val registry: ResourceKey>, val } fun initialize(registry: Registry): 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(val registry: ResourceKey>, val fun register(name: String, factory: Supplier, serial: Boolean) = Entry(name, factory, serial) fun register(name: String, serial: Boolean, factory: Supplier) = Entry(name, factory, serial) + fun register(name: ResourceLocation, factory: Supplier) = Entry(name, factory) + fun register(name: ResourceLocation, factory: Supplier, serial: Boolean) = Entry(name, factory, serial) + fun register(name: ResourceLocation, serial: Boolean, factory: Supplier) = Entry(name, factory, serial) + + fun register(name: ResourceLocation, value: T) = Entry(name) { value } + private fun onRegisterEvent(event: RegisterEvent) { if (event.registryKey == registry) { allowRegistration = false diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index c11fc6641..143136b14 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -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) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/triggers/SimpleTriggers.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/triggers/SimpleTriggers.kt index e014aeacb..8ca0ee327 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/triggers/SimpleTriggers.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/triggers/SimpleTriggers.kt @@ -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