diff --git a/build.gradle b/build.gradle index d746c42..f9d5767 100755 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.8-11.14.0.1251-1.8" + version = "1.8-11.14.0.1292-1.8" } // This wrangles the resources for the jar files- stuff like textures and languages diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/api/java/invtweaks/api/container/ChestContainer.java index 4722921..dc27377 100755 --- a/src/api/java/invtweaks/api/container/ChestContainer.java +++ b/src/api/java/invtweaks/api/container/ChestContainer.java @@ -12,6 +12,9 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface ChestContainer { + // Set to true if the Inventory Tweaks sorting buttons should be shown for this container. + boolean showButtons() default true; + // Size of a chest row int rowSize() default 9; @@ -25,4 +28,11 @@ public @interface ChestContainer { @Target(ElementType.METHOD) public @interface RowSizeCallback { } + + // Annotation for method to get size of a chest row if it is not a fixed size for this container class + // Signature int func() + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface IsLargeCallback { + } } \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java index 2257aeb..6c32beb 100755 --- a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import invtweaks.api.container.ChestContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -17,7 +18,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -//@ChestContainer(isLargeChest = true) +@ChestContainer(isLargeChest = true) public class ContainerIronChest extends Container { private IronChestType type; private EntityPlayer player; @@ -117,7 +118,7 @@ public class ContainerIronChest extends Container { return player; } - //@ChestContainer.RowSizeCallback + @ChestContainer.RowSizeCallback public int getNumColumns() { return type.getRowLength(); } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index c190510..6ecfe73 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -52,7 +52,7 @@ public class IronChest ironChestBlock = new BlockIronChest(); RegistryHelper.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().registerBuiltInBlocks(ironChestBlock); for (IronChestType typ : IronChestType.values()) { diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 50781ac..84ab992 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -12,7 +12,6 @@ package cpw.mods.ironchest; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -20,7 +19,6 @@ import net.minecraft.tileentity.TileEntityChest; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; public class ItemChestChanger extends Item { @@ -36,61 +34,54 @@ public class ItemChestChanger extends Item } @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) + public boolean onItemUseFirst (ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.isRemote) return false; - TileEntity te = world.getTileEntity(pos); - TileEntityIronChest newchest; - if (te != null && te instanceof TileEntityIronChest) - { - TileEntityIronChest ironchest = (TileEntityIronChest) te; - newchest = ironchest.applyUpgradeItem(this); - if (newchest == null) - { - return false; - } - } - else if (te != null && te instanceof TileEntityChest) - { - TileEntityChest tec = (TileEntityChest) te; - if (tec.numPlayersUsing > 0) - { - return false; - } - if (!getType().canUpgrade(IronChestType.WOOD)) - { - return false; - } - // Force old TE out of the world so that adjacent chests can update - newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); - int newSize = newchest.chestContents.length; - ItemStack[] chestContents = ObfuscationReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); - System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); - BlockIronChest block = IronChest.ironChestBlock; - block.dropContent(newSize, tec, world, tec.getPos()); - newchest.setFacing((byte) tec.getBlockMetadata()); - newchest.sortTopStacks(); - for (int i = 0; i < Math.min(newSize, chestContents.length); i++) - { - chestContents[i] = null; - } - // Clear the old block out - world.setBlockState(pos, Blocks.air.getDefaultState(), 3); - // Force the Chest TE to reset it's knowledge of neighbouring blocks - tec.updateContainingBlockInfo(); - // Force the Chest TE to update any neighbours so they update next - // tick - tec.checkForAdjacentChests(); - // And put in our block instead - world.setBlockState(pos, block.getStateFromMeta(newchest.getType().ordinal()), 3); - } - else - { + if (world.isRemote) return false; + TileEntity te = world.getTileEntity(pos); + TileEntityIronChest newchest = new TileEntityIronChest(); + ItemStack[] chestContents = new ItemStack[27]; + if (te != null) + { + if (te instanceof TileEntityIronChest) + { + chestContents = ((TileEntityIronChest) te).chestContents; + newchest = IronChestType.makeEntity(this.getTargetChestOrdinal(this.type.ordinal())); + if (newchest == null) + return false; + } + else if (te instanceof TileEntityChest) + { + if (((TileEntityChest) te).numPlayersUsing > 0) + return false; + if (!getType().canUpgrade(IronChestType.WOOD)) + return false; + chestContents = new ItemStack[((TileEntityChest) te).getSizeInventory()]; + for (int i = 0; i < chestContents.length; i++) + chestContents[i] = ((TileEntityChest) te).getStackInSlot(i); + newchest = IronChestType.makeEntity(IronChestType.IRON.ordinal()); + } } + + te.updateContainingBlockInfo(); + if (te instanceof TileEntityChest) + ((TileEntityChest) te).checkForAdjacentChests(); + + world.removeTileEntity(pos); + world.setBlockToAir(pos); + world.setTileEntity(pos, newchest); world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3); - stack.stackSize = 0; + + world.markBlockForUpdate(pos); + + TileEntity te2 = world.getTileEntity(pos); + if (te2 instanceof TileEntityIronChest) + { + ((TileEntityIronChest) te2).setContents(chestContents); + } + + stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1; return true; } diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java index 53d9a58..770f608 100644 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -11,13 +11,10 @@ package cpw.mods.ironchest; 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.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.registry.GameRegistry; diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 8bf2617..217eceb 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -59,6 +59,19 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return chestContents; } + + public void setContents (ItemStack[] contents) + { + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < contents.length; i++) + { + if (i < chestContents.length) + { + chestContents[i] = contents[i]; + } + } + inventoryTouched = true; + } @Override public int getSizeInventory() @@ -402,27 +415,6 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl this.facing = facing2; } - public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) - { - if (numUsingPlayers > 0) - { - return null; - } - if (!itemChestChanger.getType().canUpgrade(this.getType())) - { - return null; - } - TileEntityIronChest newEntity = IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); - int newSize = newEntity.chestContents.length; - System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); - BlockIronChest block = IronChest.ironChestBlock; - block.dropContent(newSize, this, this.worldObj, pos); - newEntity.setFacing(facing); - newEntity.sortTopStacks(); - newEntity.ticksSinceSync = -1; - return newEntity; - } - public ItemStack[] getTopItemStacks() { return topStacks; @@ -578,4 +570,4 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return true; } -} \ No newline at end of file +} diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 9c45f41..09ad48a 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -10,9 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest.client; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; -import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 223c915..b6235ee 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -136,7 +136,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer GlStateManager.popMatrix(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.field_147560_j, this.rendererDispatcher.field_147561_k, this.rendererDispatcher.field_147558_l) < 128d) { + if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.entityX, this.rendererDispatcher.entityY, this.rendererDispatcher.entityZ) < 128d) { random.setSeed(254L); float shiftX; float shiftY;