From 2c2286a24bd3b13a29b497e127fe66537c28bc06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 11 Jul 2021 13:44:15 +0200 Subject: [PATCH] Add util class to avoid a bit of boilerplate in registration. --- src/main/java/li/cil/oc2/common/Main.java | 4 ++ .../java/li/cil/oc2/common/block/Blocks.java | 6 +- .../oc2/common/bus/device/DeviceTypes.java | 6 +- .../data/BlockDeviceDataRegistration.java | 6 +- .../oc2/common/bus/device/data/Firmwares.java | 6 +- .../common/bus/device/provider/Providers.java | 10 +--- .../cil/oc2/common/container/Containers.java | 6 +- .../li/cil/oc2/common/entity/Entities.java | 6 +- .../java/li/cil/oc2/common/item/Items.java | 6 +- .../item/crafting/RecipeSerializers.java | 10 ++-- .../oc2/common/tileentity/TileEntities.java | 6 +- .../li/cil/oc2/common/util/RegistryUtils.java | 56 +++++++++++++++++++ .../li/cil/oc2/common/util/SoundEvents.java | 4 +- 13 files changed, 86 insertions(+), 46 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/util/RegistryUtils.java diff --git a/src/main/java/li/cil/oc2/common/Main.java b/src/main/java/li/cil/oc2/common/Main.java index f456721a..dacacc93 100644 --- a/src/main/java/li/cil/oc2/common/Main.java +++ b/src/main/java/li/cil/oc2/common/Main.java @@ -33,6 +33,8 @@ public final class Main { ConfigManager.add(Config::new); ConfigManager.initialize(); + RegistryUtils.begin(); + ItemTags.initialize(); BlockTags.initialize(); Blocks.initialize(); @@ -48,6 +50,8 @@ public final class Main { BlockDeviceDataRegistration.initialize(); Firmwares.initialize(); + RegistryUtils.finish(); + FMLJavaModLoadingContext.get().getModEventBus().register(CommonSetup.class); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().register(ClientSetup.class)); } diff --git a/src/main/java/li/cil/oc2/common/block/Blocks.java b/src/main/java/li/cil/oc2/common/block/Blocks.java index 8da76d9e..26622f08 100644 --- a/src/main/java/li/cil/oc2/common/block/Blocks.java +++ b/src/main/java/li/cil/oc2/common/block/Blocks.java @@ -1,14 +1,13 @@ package li.cil.oc2.common.block; -import li.cil.oc2.api.API; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.block.Block; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public final class Blocks { - private static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, API.MOD_ID); + private static final DeferredRegister BLOCKS = RegistryUtils.create(ForgeRegistries.BLOCKS); /////////////////////////////////////////////////////////////////// @@ -24,6 +23,5 @@ public final class Blocks { /////////////////////////////////////////////////////////////////// public static void initialize() { - BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java b/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java index 09f95c0e..b5becd6b 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java +++ b/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java @@ -3,9 +3,9 @@ package li.cil.oc2.common.bus.device; import li.cil.oc2.api.API; import li.cil.oc2.api.bus.device.DeviceType; import li.cil.oc2.common.bus.device.util.DeviceTypeImpl; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TranslationTextComponent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.RegistryBuilder; @@ -13,7 +13,7 @@ import net.minecraftforge.registries.RegistryBuilder; import java.util.function.Supplier; public final class DeviceTypes { - private static final DeferredRegister DEVICE_TYPES = DeferredRegister.create(DeviceType.class, API.MOD_ID); + private static final DeferredRegister DEVICE_TYPES = RegistryUtils.create(DeviceType.class); /////////////////////////////////////////////////////////////////// @@ -28,8 +28,6 @@ public final class DeviceTypes { register("card"); register("robot_module"); register("floppy"); - - DEVICE_TYPES.register(FMLJavaModLoadingContext.get().getModEventBus()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/data/BlockDeviceDataRegistration.java b/src/main/java/li/cil/oc2/common/bus/device/data/BlockDeviceDataRegistration.java index cf3d49f9..d674d2fa 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/data/BlockDeviceDataRegistration.java +++ b/src/main/java/li/cil/oc2/common/bus/device/data/BlockDeviceDataRegistration.java @@ -1,9 +1,8 @@ package li.cil.oc2.common.bus.device.data; -import li.cil.oc2.api.API; import li.cil.oc2.api.bus.device.data.BlockDeviceData; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.RegistryBuilder; @@ -11,7 +10,7 @@ import net.minecraftforge.registries.RegistryBuilder; import java.util.function.Supplier; public final class BlockDeviceDataRegistration { - private static final DeferredRegister INITIALIZER = DeferredRegister.create(BlockDeviceData.class, API.MOD_ID); + private static final DeferredRegister INITIALIZER = RegistryUtils.create(BlockDeviceData.class); /////////////////////////////////////////////////////////////////// @@ -24,6 +23,5 @@ public final class BlockDeviceDataRegistration { /////////////////////////////////////////////////////////////////// public static void initialize() { - INITIALIZER.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/bus/device/data/Firmwares.java b/src/main/java/li/cil/oc2/common/bus/device/data/Firmwares.java index d557fdba..e9408528 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/data/Firmwares.java +++ b/src/main/java/li/cil/oc2/common/bus/device/data/Firmwares.java @@ -1,9 +1,8 @@ package li.cil.oc2.common.bus.device.data; -import li.cil.oc2.api.API; import li.cil.oc2.api.bus.device.data.Firmware; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.RegistryBuilder; @@ -11,7 +10,7 @@ import net.minecraftforge.registries.RegistryBuilder; import java.util.function.Supplier; public final class Firmwares { - private static final DeferredRegister INITIALIZER = DeferredRegister.create(Firmware.class, API.MOD_ID); + private static final DeferredRegister INITIALIZER = RegistryUtils.create(Firmware.class); /////////////////////////////////////////////////////////////////// @@ -24,6 +23,5 @@ public final class Firmwares { /////////////////////////////////////////////////////////////////// public static void initialize() { - INITIALIZER.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java b/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java index 2c14f16d..b27cead6 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java @@ -1,11 +1,10 @@ package li.cil.oc2.common.bus.device.provider; -import li.cil.oc2.api.API; import li.cil.oc2.api.bus.device.provider.BlockDeviceProvider; import li.cil.oc2.api.bus.device.provider.ItemDeviceProvider; import li.cil.oc2.common.bus.device.provider.block.*; import li.cil.oc2.common.bus.device.provider.item.*; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.RegistryBuilder; @@ -13,8 +12,8 @@ import net.minecraftforge.registries.RegistryBuilder; import java.util.function.Supplier; public final class Providers { - private static final DeferredRegister BLOCK_DEVICE_PROVIDERS = DeferredRegister.create(BlockDeviceProvider.class, API.MOD_ID); - private static final DeferredRegister ITEM_DEVICE_PROVIDERS = DeferredRegister.create(ItemDeviceProvider.class, API.MOD_ID); + private static final DeferredRegister BLOCK_DEVICE_PROVIDERS = RegistryUtils.create(BlockDeviceProvider.class); + private static final DeferredRegister ITEM_DEVICE_PROVIDERS = RegistryUtils.create(ItemDeviceProvider.class); /////////////////////////////////////////////////////////////////// @@ -44,8 +43,5 @@ public final class Providers { ITEM_DEVICE_PROVIDERS.register("inventory_operations_module", InventoryOperationsModuleDeviceProvider::new); ITEM_DEVICE_PROVIDERS.register("block_operations_module", BlockOperationsModuleDeviceProvider::new); - - BLOCK_DEVICE_PROVIDERS.register(FMLJavaModLoadingContext.get().getModEventBus()); - ITEM_DEVICE_PROVIDERS.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/container/Containers.java b/src/main/java/li/cil/oc2/common/container/Containers.java index 07e82710..d4504f02 100644 --- a/src/main/java/li/cil/oc2/common/container/Containers.java +++ b/src/main/java/li/cil/oc2/common/container/Containers.java @@ -1,15 +1,14 @@ package li.cil.oc2.common.container; -import li.cil.oc2.api.API; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.inventory.container.ContainerType; import net.minecraftforge.common.extensions.IForgeContainerType; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public final class Containers { - private static final DeferredRegister> CONTAINERS = DeferredRegister.create(ForgeRegistries.CONTAINERS, API.MOD_ID); + private static final DeferredRegister> CONTAINERS = RegistryUtils.create(ForgeRegistries.CONTAINERS); /////////////////////////////////////////////////////////////////// @@ -21,6 +20,5 @@ public final class Containers { /////////////////////////////////////////////////////////////////// public static void initialize() { - CONTAINERS.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/entity/Entities.java b/src/main/java/li/cil/oc2/common/entity/Entities.java index ac1e6592..5d67457c 100644 --- a/src/main/java/li/cil/oc2/common/entity/Entities.java +++ b/src/main/java/li/cil/oc2/common/entity/Entities.java @@ -1,18 +1,17 @@ package li.cil.oc2.common.entity; -import li.cil.oc2.api.API; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import java.util.function.Function; public final class Entities { - private static final DeferredRegister> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, API.MOD_ID); + private static final DeferredRegister> ENTITIES = RegistryUtils.create(ForgeRegistries.ENTITIES); /////////////////////////////////////////////////////////////////// @@ -21,7 +20,6 @@ public final class Entities { /////////////////////////////////////////////////////////////////// public static void initialize() { - ENTITIES.register(FMLJavaModLoadingContext.get().getModEventBus()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/item/Items.java b/src/main/java/li/cil/oc2/common/item/Items.java index db97ca9b..ad42037c 100644 --- a/src/main/java/li/cil/oc2/common/item/Items.java +++ b/src/main/java/li/cil/oc2/common/item/Items.java @@ -1,15 +1,14 @@ package li.cil.oc2.common.item; -import li.cil.oc2.api.API; import li.cil.oc2.common.Constants; import li.cil.oc2.common.block.Blocks; import li.cil.oc2.common.bus.device.data.BlockDeviceDataRegistration; import li.cil.oc2.common.bus.device.data.Firmwares; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.block.Block; import net.minecraft.item.DyeColor; import net.minecraft.item.Item; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; @@ -17,7 +16,7 @@ import java.util.function.Function; import java.util.function.Supplier; public final class Items { - private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, API.MOD_ID); + private static final DeferredRegister ITEMS = RegistryUtils.create(ForgeRegistries.ITEMS); /////////////////////////////////////////////////////////////////// @@ -75,7 +74,6 @@ public final class Items { /////////////////////////////////////////////////////////////////// public static void initialize() { - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java b/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java index 907ee0ae..ce2039cf 100644 --- a/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java +++ b/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java @@ -1,18 +1,20 @@ package li.cil.oc2.common.item.crafting; -import li.cil.oc2.api.API; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public final class RecipeSerializers { - private static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, API.MOD_ID); + private static final DeferredRegister> RECIPE_SERIALIZERS = RegistryUtils.create(ForgeRegistries.RECIPE_SERIALIZERS); + + /////////////////////////////////////////////////////////////////// public static final RegistryObject WRENCH = RECIPE_SERIALIZERS.register("wrench", () -> WrenchRecipe.Serializer.INSTANCE); + /////////////////////////////////////////////////////////////////// + public static void initialize() { - RECIPE_SERIALIZERS.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/tileentity/TileEntities.java b/src/main/java/li/cil/oc2/common/tileentity/TileEntities.java index 990e4cb2..5f1a2ea2 100644 --- a/src/main/java/li/cil/oc2/common/tileentity/TileEntities.java +++ b/src/main/java/li/cil/oc2/common/tileentity/TileEntities.java @@ -1,19 +1,18 @@ package li.cil.oc2.common.tileentity; -import li.cil.oc2.api.API; import li.cil.oc2.common.block.Blocks; +import li.cil.oc2.common.util.RegistryUtils; import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import java.util.function.Supplier; public final class TileEntities { - private static final DeferredRegister> TILES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, API.MOD_ID); + private static final DeferredRegister> TILES = RegistryUtils.create(ForgeRegistries.TILE_ENTITIES); /////////////////////////////////////////////////////////////////// @@ -29,7 +28,6 @@ public final class TileEntities { /////////////////////////////////////////////////////////////////// public static void initialize() { - TileEntities.TILES.register(FMLJavaModLoadingContext.get().getModEventBus()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/util/RegistryUtils.java b/src/main/java/li/cil/oc2/common/util/RegistryUtils.java new file mode 100644 index 00000000..6dc83948 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/util/RegistryUtils.java @@ -0,0 +1,56 @@ +package li.cil.oc2.common.util; + +import li.cil.oc2.api.API; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.IForgeRegistryEntry; + +import java.util.ArrayList; +import java.util.List; + +public abstract class RegistryUtils { + private enum Phase { + PRE_INIT, + INIT, + POST_INIT, + } + + private static final List> ENTRIES = new ArrayList<>(); + private static Phase phase = Phase.PRE_INIT; + + public static > DeferredRegister create(final Class type) { + if (phase != Phase.INIT) throw new IllegalStateException(); + + final DeferredRegister entry = DeferredRegister.create(type, API.MOD_ID); + ENTRIES.add(entry); + return entry; + } + + public static > DeferredRegister create(final IForgeRegistry registry) { + if (phase != Phase.INIT) throw new IllegalStateException(); + + final DeferredRegister entry = DeferredRegister.create(registry, API.MOD_ID); + ENTRIES.add(entry); + return entry; + } + + public static void begin() { + if (phase != Phase.PRE_INIT) throw new IllegalStateException(); + phase = Phase.INIT; + } + + public static void finish() { + if (phase != Phase.INIT) throw new IllegalStateException(); + phase = Phase.POST_INIT; + + for (final DeferredRegister register : ENTRIES) { + register.register(FMLJavaModLoadingContext.get().getModEventBus()); + } + + ENTRIES.clear(); + } + + private RegistryUtils() { + } +} diff --git a/src/main/java/li/cil/oc2/common/util/SoundEvents.java b/src/main/java/li/cil/oc2/common/util/SoundEvents.java index 615ffc88..bf7fa4ca 100644 --- a/src/main/java/li/cil/oc2/common/util/SoundEvents.java +++ b/src/main/java/li/cil/oc2/common/util/SoundEvents.java @@ -4,12 +4,11 @@ import li.cil.oc2.api.API; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public final class SoundEvents { - private static final DeferredRegister SOUNDS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, API.MOD_ID); + private static final DeferredRegister SOUNDS = RegistryUtils.create(ForgeRegistries.SOUND_EVENTS); /////////////////////////////////////////////////////////////////// @@ -22,7 +21,6 @@ public final class SoundEvents { /////////////////////////////////////////////////////////////////// public static void initialize() { - SOUNDS.register(FMLJavaModLoadingContext.get().getModEventBus()); } ///////////////////////////////////////////////////////////////////