From 0ca64350d46132fcf6d17fd39ba03943b8336026 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Sun, 6 Oct 2024 14:16:15 +0200 Subject: [PATCH] Move base mod classes to common --- gradle.properties | 6 +- .../cyclops/colossalchests/GeneralConfig.java | 49 ++++++++++++ .../org/cyclops/colossalchests/Reference.java | 19 +++++ .../colossalchests/RegistryEntriesCommon.java | 29 +++++++ .../colossalchests/ColossalChests.java | 4 +- .../cyclops/colossalchests/GeneralConfig.java | 76 ------------------- .../org/cyclops/colossalchests/Reference.java | 32 -------- .../colossalchests/RegistryEntries.java | 9 +-- .../BlockEntityUncolossalChest.java | 3 +- .../BlockEntityUncolossalChestConfig.java | 4 +- ...mStackTileEntityUncolossalChestRender.java | 4 +- 11 files changed, 110 insertions(+), 125 deletions(-) create mode 100644 loader-common/src/main/java/org/cyclops/colossalchests/GeneralConfig.java create mode 100644 loader-common/src/main/java/org/cyclops/colossalchests/Reference.java create mode 100644 loader-common/src/main/java/org/cyclops/colossalchests/RegistryEntriesCommon.java delete mode 100644 loader-neoforge/src/main/java/org/cyclops/colossalchests/GeneralConfig.java delete mode 100644 loader-neoforge/src/main/java/org/cyclops/colossalchests/Reference.java diff --git a/gradle.properties b/gradle.properties index 1013ef3a..93b933d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ mod_id=colossalchests license=MIT github_url=https://github.com/CyclopsMC/ColossalChests issue_tracker_url=https://github.com/CyclopsMC/ColossalChests/issues -display_url=https://www.curseforge.com/minecraft/mc-mods/colossalchests +display_url=https://www.curseforge.com/minecraft/mc-mods/colossal-chests description=For when regular chests are too small. fingerprint=bd0353b3e8a2810d60dd584e256e364bc3bedd44 neo_form_version=1.21-20240613.152323 @@ -29,14 +29,14 @@ fabric_forgeconfigapiport_version=21.1.0 # NeoForge neoforge_version=21.1.2 neoforge_loader_version_range=[4,) -neoforge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/neoforge_update/colossalchests.json +neoforge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/neoforge_update/colossal-chests.json # Dependencies neoforge_commoncapabilities_version=2.9.3-147 # Forge forge_version=52.0.3 forge_loader_version_range=[2,) -forge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/forge_update/colossalchests.json +forge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/forge_update/colossal-chests.json # Gradle org.gradle.jvmargs=-Xmx3G diff --git a/loader-common/src/main/java/org/cyclops/colossalchests/GeneralConfig.java b/loader-common/src/main/java/org/cyclops/colossalchests/GeneralConfig.java new file mode 100644 index 00000000..471cd688 --- /dev/null +++ b/loader-common/src/main/java/org/cyclops/colossalchests/GeneralConfig.java @@ -0,0 +1,49 @@ +package org.cyclops.colossalchests; + +import org.cyclops.cyclopscore.config.ConfigurablePropertyCommon; +import org.cyclops.cyclopscore.config.ModConfigLocation; +import org.cyclops.cyclopscore.config.extendedconfig.DummyConfigCommon; +import org.cyclops.cyclopscore.init.IModBase; + +/** + * A config with general options for this mod. + * @author rubensworks + * + */ +public class GeneralConfig extends DummyConfigCommon { + + @ConfigurablePropertyCommon(category = "general", comment = "If items should be ejected from the chests if one of the structure blocks are removed.", configLocation = ModConfigLocation.SERVER) + public static boolean ejectItemsOnDestroy = false; + + @ConfigurablePropertyCommon(category = "general", comment = "If the higher tier metal variants (including diamond and obsidian) can be crafted.", configLocation = ModConfigLocation.SERVER) + public static boolean metalVariants = true; + + @ConfigurablePropertyCommon(category = "core", comment = "Maximum buffer byte size for adaptive inventory slots fragmentation.") + public static int maxPacketBufferSize = 20000; + + @ConfigurablePropertyCommon(category = "general", comment = "If the interface input overlay should always be rendered on chests.", isCommandable = true, configLocation = ModConfigLocation.CLIENT) + public static boolean alwaysShowInterfaceOverlay = true; + + @ConfigurablePropertyCommon(category = "general", comment = "Always create full creative-mode chests when formed. Should not be used in survival worlds!", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static boolean creativeChests = false; + + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorWood = 1; + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorCopper = 1.666; + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorIron = 2; + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorSilver = 2.666; + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorGold = 3; + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorDiamond = 4; + @ConfigurablePropertyCommon(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfigLocation.SERVER) + public static double chestInventoryMaterialFactorObsidian = 4; + + public GeneralConfig(M mod) { + super(mod, "general"); + } + +} diff --git a/loader-common/src/main/java/org/cyclops/colossalchests/Reference.java b/loader-common/src/main/java/org/cyclops/colossalchests/Reference.java new file mode 100644 index 00000000..01a3faa6 --- /dev/null +++ b/loader-common/src/main/java/org/cyclops/colossalchests/Reference.java @@ -0,0 +1,19 @@ +package org.cyclops.colossalchests; + +/** + * Class that can hold basic static things that are better not hard-coded + * like mod details, texture paths, ID's... + * @author rubensworks + * + */ +@SuppressWarnings("javadoc") +public class Reference { + + // Mod info + public static final String MOD_ID = "colossalchests"; + public static final String GA_TRACKING_ID = "UA-65307010-5"; + + // MOD ID's + public static final String MOD_IRONCHEST = "ironchest"; + public static final String MOD_COMMONCAPABILITIES = "commoncapabilities"; +} diff --git a/loader-common/src/main/java/org/cyclops/colossalchests/RegistryEntriesCommon.java b/loader-common/src/main/java/org/cyclops/colossalchests/RegistryEntriesCommon.java new file mode 100644 index 00000000..889c49a8 --- /dev/null +++ b/loader-common/src/main/java/org/cyclops/colossalchests/RegistryEntriesCommon.java @@ -0,0 +1,29 @@ +package org.cyclops.colossalchests; + +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import org.cyclops.cyclopscore.config.DeferredHolderCommon; + +/** + * Referenced registry entries. + * @author rubensworks + */ +public class RegistryEntriesCommon { // TODO: rename when done + + public static final DeferredHolderCommon ITEM_CHEST = DeferredHolderCommon.create(Registries.ITEM, ResourceLocation.parse("minecraft:chest")); + + public static final DeferredHolderCommon BLOCK_UNCOLOSSAL_CHEST = DeferredHolderCommon.create(Registries.BLOCK, ResourceLocation.parse("colossalchests:uncolossal_chest")); + + // TODO +// public static final DeferredHolderCommon, BlockEntityType> BLOCK_ENTITY_COLOSSAL_CHEST = DeferredHolderCommon.create(Registries.BLOCK_ENTITY_TYPE, ResourceLocation.parse("colossalchests:colossal_chest")); +// public static final DeferredHolderCommon, BlockEntityType> BLOCK_ENTITY_INTERFACE = DeferredHolderCommon.create(Registries.BLOCK_ENTITY_TYPE, ResourceLocation.parse("colossalchests:interface")); +// public static final DeferredHolderCommon, BlockEntityType> BLOCK_ENTITY_UNCOLOSSAL_CHEST = DeferredHolderCommon.create(Registries.BLOCK_ENTITY_TYPE, ResourceLocation.parse("colossalchests:uncolossal_chest")); +// +// public static final DeferredHolderCommon, MenuType> CONTAINER_COLOSSAL_CHEST = DeferredHolderCommon.create(Registries.MENU, ResourceLocation.parse("colossalchests:colossal_chest")); +// public static final DeferredHolderCommon, MenuType> CONTAINER_UNCOLOSSAL_CHEST = DeferredHolderCommon.create(Registries.MENU, ResourceLocation.parse("colossalchests:uncolossal_chest")); +// +// public static final DeferredHolderCommon, ChestFormedTrigger> TRIGGER_CHEST_FORMED = DeferredHolderCommon.create(Registries.TRIGGER_TYPE, ResourceLocation.parse("colossalchests:chest_formed")); + +} diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/ColossalChests.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/ColossalChests.java index e974c452..41b5b565 100644 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/ColossalChests.java +++ b/loader-neoforge/src/main/java/org/cyclops/colossalchests/ColossalChests.java @@ -67,14 +67,14 @@ protected ICommonProxy constructCommonProxy() { @Override protected CreativeModeTab.Builder constructDefaultCreativeModeTab(CreativeModeTab.Builder builder) { return super.constructDefaultCreativeModeTab(builder) - .icon(() -> new ItemStack(RegistryEntries.ITEM_CHEST)); + .icon(() -> new ItemStack(RegistryEntriesCommon.ITEM_CHEST)); } @Override protected void onConfigsRegister(ConfigHandler configHandler) { super.onConfigsRegister(configHandler); - configHandler.addConfigurable(new GeneralConfig()); + configHandler.addConfigurable(new GeneralConfig<>(this)); for (ChestMaterial material : ChestMaterial.VALUES) { configHandler.addConfigurable(new ChestWallConfig(material)); diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/GeneralConfig.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/GeneralConfig.java deleted file mode 100644 index dc6b44bd..00000000 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/GeneralConfig.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.cyclops.colossalchests; - -import net.neoforged.fml.config.ModConfig; -import org.cyclops.cyclopscore.config.ConfigurableProperty; -import org.cyclops.cyclopscore.config.extendedconfig.DummyConfig; -import org.cyclops.cyclopscore.init.ModBase; -import org.cyclops.cyclopscore.tracking.Analytics; -import org.cyclops.cyclopscore.tracking.Versions; - -/** - * A config with general options for this mod. - * @author rubensworks - * - */ -public class GeneralConfig extends DummyConfig { - - @ConfigurableProperty(category = "core", comment = "If the recipe loader should crash when finding invalid recipes.", requiresMcRestart = true, configLocation = ModConfig.Type.SERVER) - public static boolean crashOnInvalidRecipe = false; - - @ConfigurableProperty(category = "core", comment = "If mod compatibility loader should crash hard if errors occur in that process.", requiresMcRestart = true, configLocation = ModConfig.Type.SERVER) - public static boolean crashOnModCompatCrash = false; - - @ConfigurableProperty(category = "core", comment = "If an anonymous mod startup analytics request may be sent to our analytics service.") - public static boolean analytics = true; - - @ConfigurableProperty(category = "core", comment = "If the version checker should be enabled.") - public static boolean versionChecker = true; - - @ConfigurableProperty(category = "general", comment = "If items should be ejected from the chests if one of the structure blocks are removed.", configLocation = ModConfig.Type.SERVER) - public static boolean ejectItemsOnDestroy = false; - - @ConfigurableProperty(category = "general", comment = "If the higher tier metal variants (including diamond and obsidian) can be crafted.", configLocation = ModConfig.Type.SERVER) - public static boolean metalVariants = true; - - @ConfigurableProperty(category = "core", comment = "Maximum buffer byte size for adaptive inventory slots fragmentation.") - public static int maxPacketBufferSize = 20000; - - @ConfigurableProperty(category = "general", comment = "If the interface input overlay should always be rendered on chests.", isCommandable = true, configLocation = ModConfig.Type.CLIENT) - public static boolean alwaysShowInterfaceOverlay = true; - - @ConfigurableProperty(category = "general", comment = "Always create full creative-mode chests when formed. Should not be used in survival worlds!", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static boolean creativeChests = false; - - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorWood = 1; - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorCopper = 1.666; - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorIron = 2; - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorSilver = 2.666; - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorGold = 3; - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorDiamond = 4; - @ConfigurableProperty(category = "general", comment = "Multiplier for the number of inventory slots for this chest material.", isCommandable = true, configLocation = ModConfig.Type.SERVER) - public static double chestInventoryMaterialFactorObsidian = 4; - - public GeneralConfig() { - super(ColossalChests._instance, "general"); - } - - @Override - public void onRegistered() { - getMod().putGenericReference(ModBase.REFKEY_CRASH_ON_INVALID_RECIPE, GeneralConfig.crashOnInvalidRecipe); - getMod().putGenericReference(ModBase.REFKEY_CRASH_ON_MODCOMPAT_CRASH, GeneralConfig.crashOnModCompatCrash); - - if(analytics) { - Analytics.registerMod(getMod(), Reference.GA_TRACKING_ID); - } - if(versionChecker) { - Versions.registerMod(getMod(), ColossalChests._instance, Reference.VERSION_URL); - } - } - -} diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/Reference.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/Reference.java deleted file mode 100644 index a318eca7..00000000 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/Reference.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.cyclops.colossalchests; - -import org.cyclops.cyclopscore.helper.MinecraftHelpers; - -/** - * Class that can hold basic static things that are better not hard-coded - * like mod details, texture paths, ID's... - * @author rubensworks - * - */ -@SuppressWarnings("javadoc") -public class Reference { - - // Mod info - public static final String MOD_ID = "colossalchests"; - public static final String GA_TRACKING_ID = "UA-65307010-5"; - public static final String VERSION_URL = "https://raw.githubusercontent.com/CyclopsMC/Versions/master/" + MinecraftHelpers.getMinecraftVersionMajorMinor() + "/ColossalChests.txt"; - - // Paths - public static final String TEXTURE_PATH_GUI = "textures/gui/"; - public static final String TEXTURE_PATH_SKINS = "textures/skins/"; - public static final String TEXTURE_PATH_MODELS = "textures/models/"; - public static final String TEXTURE_PATH_ENTITIES = "textures/entities/"; - public static final String TEXTURE_PATH_GUIBACKGROUNDS = "textures/gui/title/background/"; - public static final String TEXTURE_PATH_ITEMS = "textures/items/"; - public static final String TEXTURE_PATH_PARTICLES = "textures/particles/"; - public static final String MODEL_PATH = "models/"; - - // MOD ID's - public static final String MOD_IRONCHEST = "ironchest"; - public static final String MOD_COMMONCAPABILITIES = "commoncapabilities"; -} diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/RegistryEntries.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/RegistryEntries.java index 3a46c6e8..4ddd198e 100644 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/RegistryEntries.java +++ b/loader-neoforge/src/main/java/org/cyclops/colossalchests/RegistryEntries.java @@ -4,8 +4,6 @@ import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.neoforge.registries.DeferredHolder; import org.cyclops.colossalchests.advancement.criterion.ChestFormedTrigger; @@ -19,11 +17,8 @@ * Referenced registry entries. * @author rubensworks */ -public class RegistryEntries { - - public static final DeferredHolder ITEM_CHEST = DeferredHolder.create(Registries.ITEM, ResourceLocation.parse("minecraft:chest")); - - public static final DeferredHolder BLOCK_UNCOLOSSAL_CHEST = DeferredHolder.create(Registries.BLOCK, ResourceLocation.parse("colossalchests:uncolossal_chest")); +@Deprecated +public class RegistryEntries { // TODO: rm public static final DeferredHolder, BlockEntityType> BLOCK_ENTITY_COLOSSAL_CHEST = DeferredHolder.create(Registries.BLOCK_ENTITY_TYPE, ResourceLocation.parse("colossalchests:colossal_chest")); public static final DeferredHolder, BlockEntityType> BLOCK_ENTITY_INTERFACE = DeferredHolder.create(Registries.BLOCK_ENTITY_TYPE, ResourceLocation.parse("colossalchests:interface")); diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChest.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChest.java index ce07726e..05165d9e 100644 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChest.java +++ b/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChest.java @@ -21,6 +21,7 @@ import net.minecraft.world.level.block.entity.LidBlockEntity; import net.minecraft.world.level.block.state.BlockState; import org.cyclops.colossalchests.RegistryEntries; +import org.cyclops.colossalchests.RegistryEntriesCommon; import org.cyclops.colossalchests.block.UncolossalChest; import org.cyclops.colossalchests.inventory.container.ContainerUncolossalChest; import org.cyclops.cyclopscore.blockentity.CyclopsBlockEntity; @@ -178,7 +179,7 @@ public Direction getRotation() { } BlockState blockState = getLevel().getBlockState(getBlockPos()); - if(blockState.getBlock() != RegistryEntries.BLOCK_UNCOLOSSAL_CHEST.get()) return Direction.NORTH; + if(blockState.getBlock() != RegistryEntriesCommon.BLOCK_UNCOLOSSAL_CHEST.value()) return Direction.NORTH; return BlockHelpers.getSafeBlockStateProperty(blockState, UncolossalChest.FACING, Direction.NORTH); } diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChestConfig.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChestConfig.java index 1fcfd329..606ace11 100644 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChestConfig.java +++ b/loader-neoforge/src/main/java/org/cyclops/colossalchests/blockentity/BlockEntityUncolossalChestConfig.java @@ -8,7 +8,7 @@ import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.items.wrapper.InvWrapper; import org.cyclops.colossalchests.ColossalChests; -import org.cyclops.colossalchests.RegistryEntries; +import org.cyclops.colossalchests.RegistryEntriesCommon; import org.cyclops.colossalchests.client.render.blockentity.RenderTileEntityUncolossalChest; import org.cyclops.cyclopscore.config.extendedconfig.BlockEntityConfig; @@ -24,7 +24,7 @@ public BlockEntityUncolossalChestConfig() { ColossalChests._instance, "uncolossal_chest", (eConfig) -> new BlockEntityType<>(BlockEntityUncolossalChest::new, - Sets.newHashSet(RegistryEntries.BLOCK_UNCOLOSSAL_CHEST.get()), null) + Sets.newHashSet(RegistryEntriesCommon.BLOCK_UNCOLOSSAL_CHEST.value()), null) ); ColossalChests._instance.getModEventBus().addListener(this::registerCapabilities); } diff --git a/loader-neoforge/src/main/java/org/cyclops/colossalchests/client/render/blockentity/ItemStackTileEntityUncolossalChestRender.java b/loader-neoforge/src/main/java/org/cyclops/colossalchests/client/render/blockentity/ItemStackTileEntityUncolossalChestRender.java index e6d2cbf8..59467714 100644 --- a/loader-neoforge/src/main/java/org/cyclops/colossalchests/client/render/blockentity/ItemStackTileEntityUncolossalChestRender.java +++ b/loader-neoforge/src/main/java/org/cyclops/colossalchests/client/render/blockentity/ItemStackTileEntityUncolossalChestRender.java @@ -5,7 +5,7 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; -import org.cyclops.colossalchests.RegistryEntries; +import org.cyclops.colossalchests.RegistryEntriesCommon; import org.cyclops.colossalchests.blockentity.BlockEntityUncolossalChest; import org.cyclops.cyclopscore.client.render.blockentity.ItemStackBlockEntityRendererBase; @@ -16,7 +16,7 @@ public class ItemStackTileEntityUncolossalChestRender extends ItemStackBlockEntityRendererBase { public ItemStackTileEntityUncolossalChestRender() { - super(() -> new BlockEntityUncolossalChest(BlockPos.ZERO, RegistryEntries.BLOCK_UNCOLOSSAL_CHEST.get().defaultBlockState())); + super(() -> new BlockEntityUncolossalChest(BlockPos.ZERO, RegistryEntriesCommon.BLOCK_UNCOLOSSAL_CHEST.value().defaultBlockState())); } public static class ClientItemExtensions implements IClientItemExtensions {