From a84311f0d38f05c5fd6b7622e456fde663dfdcd3 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sat, 27 Sep 2014 11:31:58 +1000 Subject: [PATCH] Inventory rendering now works correctly --- .../cpw/mods/ironchest/ChestChangerType.java | 2 +- .../java/cpw/mods/ironchest/IronChest.java | 7 ++- .../cpw/mods/ironchest/RegistryHelper.java | 58 +++++++++++++++++++ .../mods/ironchest/TileEntityIronChest.java | 8 +-- .../mods/ironchest/client/ClientProxy.java | 9 +++ .../client/IronChestRenderHelper.java | 4 +- .../mods/ironchest/client/ModelHelper.java | 28 ++++++--- .../ironchest/blockstates/BlockIronChest.json | 5 -- 8 files changed, 99 insertions(+), 22 deletions(-) create mode 100644 src/main/java/cpw/mods/ironchest/RegistryHelper.java delete mode 100755 src/main/resources/assets/ironchest/blockstates/BlockIronChest.json diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index cac424b..ebf2e95 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -64,7 +64,7 @@ public enum ChestChangerType { { item = new ItemChestChanger(this); GameRegistry.registerItem(item, itemName); - ModelHelper.loadInventoryModel(item, "ironchest:" + itemName); + ModelHelper.registerItem(item, "ironchest:" + itemName); return item; } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 83bc6ea..1b34369 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -19,6 +19,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Blocks; import net.minecraft.item.Item; +import net.minecraft.util.RegistrySimple; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; @@ -50,6 +51,8 @@ public class IronChest PacketHandler.INSTANCE.ordinal(); } + private static boolean run = false; + @EventHandler public void load(FMLInitializationEvent evt) { @@ -57,9 +60,9 @@ public class IronChest //Minecraft.getRenderItem() returns null before this stage ChestChangerType.buildItems(); ironChestBlock = new BlockIronChest(); - GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + RegistryHelper.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); - ModelHelper.loadInventoryModel(ironChestBlock, "ironchest:BlockIronChest"); for (IronChestType typ : IronChestType.values()) { diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java new file mode 100644 index 0000000..24b3089 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.lang.reflect.Constructor; +import java.util.Iterator; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraftforge.fml.common.FMLLog; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.LoaderException; +import net.minecraftforge.fml.common.LoaderState; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.common.registry.GameData; +import net.minecraftforge.fml.common.registry.GameRegistry; + +import org.apache.logging.log4j.Level; + +import com.google.common.collect.ObjectArrays; + +public class RegistryHelper +{ + /** + * A temporary workaround whilst GameRegistry hasn't been fully updated to support 1.8 + */ + public static Block registerBlock(Block block, Class itemclass, String name, Object... itemCtorArgs) + { + block = GameRegistry.registerBlock(block, itemclass, name, itemCtorArgs); + Item associatedItem = GameRegistry.findItem("ironchest", name); + + Map itemBlockMap = (Map)ObfuscationReflectionHelper.getPrivateValue(Item.class, null, "field_179220_a"); + + if (!itemBlockMap.containsKey(block)) itemBlockMap.put(block, associatedItem); + + Iterator iterator = block.getBlockState().getValidStates().iterator(); + + while (iterator.hasNext()) + { + IBlockState iblockstate = (IBlockState)iterator.next(); + int id = Block.blockRegistry.getIDForObject(block) << 4 | block.getMetaFromBlockState(iblockstate); + Block.field_176229_d.func_148746_a(iblockstate, id); + } + + return block; + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 8eebc33..558412d 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -208,13 +208,13 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } @Override - public String getName() + public String getCommandSenderName() { - return this.hasCustomName() ? this.customName : type.name(); + return this.hasName() ? this.customName : type.name(); } @Override - public boolean hasCustomName() + public boolean hasName() { return this.customName != null && this.customName.length() > 0; } @@ -271,7 +271,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl nbttagcompound.setTag("Items", nbttaglist); nbttagcompound.setByte("facing", (byte)facing); - if (this.hasCustomName()) + if (this.hasName()) { nbttagcompound.setString("CustomName", this.customName); } diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 9ff1c48..ea88561 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -20,6 +20,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.client.registry.ClientRegistry; import cpw.mods.ironchest.CommonProxy; +import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; @@ -28,6 +29,14 @@ public class ClientProxy extends CommonProxy @Override public void registerRenderInformation() { + for (IronChestType chestType : IronChestType.values()) + { + if (chestType != IronChestType.WOOD) + { + ModelHelper.registerBlock(IronChest.ironChestBlock, chestType.ordinal(), "ironchest:BlockIronChest"); + } + } + TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); } diff --git a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java index fd44c88..232fda9 100755 --- a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -36,7 +36,7 @@ public class IronChestRenderHelper extends TileEntityRendererChestHelper } @Override - public void renderChest(ItemStack itemStack) + public void renderByItem(ItemStack itemStack) { Block block = Block.getBlockFromItem(itemStack.getItem()); @@ -46,7 +46,7 @@ public class IronChestRenderHelper extends TileEntityRendererChestHelper } else { - super.renderChest(itemStack); + super.renderByItem(itemStack); } } } diff --git a/src/main/java/cpw/mods/ironchest/client/ModelHelper.java b/src/main/java/cpw/mods/ironchest/client/ModelHelper.java index b3f5612..9fb7a35 100644 --- a/src/main/java/cpw/mods/ironchest/client/ModelHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/ModelHelper.java @@ -1,7 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.client; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemModelMesher; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraftforge.fml.relauncher.Side; @@ -10,23 +21,24 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ModelHelper { - public static void loadInventoryModel(Item item, int metadata, String itemName) + public static void registerItem(Item item, int metadata, String itemName) { - Minecraft.getMinecraft().getRenderItem().getItemModelMesher().loadItemModel(item, metadata, new ModelResourceLocation(itemName, "inventory")); + ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher(); + mesher.register(item, metadata, new ModelResourceLocation(itemName, "inventory")); } - public static void loadInventoryModel(Block block, int metadata, String blockName) + public static void registerBlock(Block block, int metadata, String blockName) { - loadInventoryModel(Item.getItemFromBlock(block), metadata, blockName); + registerItem(Item.getItemFromBlock(block), metadata, blockName); } - public static void loadInventoryModel(Block block, String blockName) + public static void registerBlock(Block block, String blockName) { - loadInventoryModel(block, 0, blockName); + registerBlock(block, 0, blockName); } - public static void loadInventoryModel(Item item, String itemName) + public static void registerItem(Item item, String itemName) { - loadInventoryModel(item, 0, itemName); + registerItem(item, 0, itemName); } } diff --git a/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json b/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json deleted file mode 100755 index 5b108aa..0000000 --- a/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "ironchest:BlockIronChest" } - } -}