diff --git a/build.gradle b/build.gradle index aeb6feb..855238c 100755 --- a/build.gradle +++ b/build.gradle @@ -43,7 +43,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.11-13.19.0.2130" + version = "1.11-13.19.0.2148" mappings = "snapshot_20161111" runDir = "run" } diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/main/api/java/invtweaks/api/container/ChestContainer.java old mode 100755 new mode 100644 similarity index 100% rename from src/api/java/invtweaks/api/container/ChestContainer.java rename to src/main/api/java/invtweaks/api/container/ChestContainer.java diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index e5a6328..e041d81 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,8 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.List; - import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyEnum; @@ -30,6 +28,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -42,6 +41,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockIronChest extends Block { public static final PropertyEnum VARIANT_PROP = PropertyEnum.create("variant", IronChestType.class); + protected static final AxisAlignedBB IRON_CHEST_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.875D, 0.9375D); public BlockIronChest() @@ -82,27 +82,28 @@ public class BlockIronChest extends Block @Override //@formatter:off - public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing direction, float hitX, float hitY, float hitZ) + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing heldItem, float side, float hitX, float hitY) + //public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing direction, float hitX, float hitY, float hitZ) //@formatter:on { - TileEntity te = world.getTileEntity(pos); + TileEntity te = worldIn.getTileEntity(pos); if (te == null || !(te instanceof TileEntityIronChest)) { return true; } - if (world.isSideSolid(pos.add(0, 1, 0), EnumFacing.DOWN)) + if (worldIn.isSideSolid(pos.add(0, 1, 0), EnumFacing.DOWN)) { return true; } - if (world.isRemote) + if (worldIn.isRemote) { return true; } - player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + playerIn.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), worldIn, pos.getX(), pos.getY(), pos.getZ()); return true; } @@ -120,7 +121,8 @@ public class BlockIronChest extends Block @Override @SideOnly(Side.CLIENT) - public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) + //public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) + public void getSubBlocks(Item itemIn, CreativeTabs tab, NonNullList list) { for (IronChestType type : IronChestType.VALUES) { diff --git a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java index 90f6668..83819c3 100755 --- a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -10,7 +10,6 @@ ******************************************************************************/ 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; @@ -18,11 +17,13 @@ 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; + private IInventory chest; public ContainerIronChest(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) @@ -43,7 +44,7 @@ public class ContainerIronChest extends Container @Override public ItemStack transferStackInSlot(EntityPlayer p, int i) { - ItemStack itemstack = null; + ItemStack itemstack = ItemStack.field_190927_a; Slot slot = this.inventorySlots.get(i); if (slot != null && slot.getHasStack()) { @@ -53,20 +54,20 @@ public class ContainerIronChest extends Container { if (!this.mergeItemStack(itemstack1, this.type.size, this.inventorySlots.size(), true)) { - return null; + return ItemStack.field_190927_a; } } else if (!this.type.acceptsStack(itemstack1)) { - return null; + return ItemStack.field_190927_a; } else if (!this.mergeItemStack(itemstack1, 0, this.type.size, false)) { - return null; + return ItemStack.field_190927_a; } if (itemstack1.func_190916_E() == 0) { - slot.putStack(null); + slot.putStack(ItemStack.field_190927_a); } else { @@ -122,9 +123,9 @@ public class ContainerIronChest extends Container return this.player; } - @ChestContainer.RowSizeCallback - public int getNumColumns() - { - return this.type.rowLength; - } + //@ChestContainer.RowSizeCallback + //public int getNumColumns() + //{ + // return this.type.rowLength; + //} } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index ed1db12..ea641ba 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -21,7 +21,7 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; -@Mod(modid = IronChest.MOD_ID, name = "Iron Chests", dependencies = "required-after:Forge@[12.17.0.1909,)", acceptedMinecraftVersions = "[1.11, 1.12)") +@Mod(modid = IronChest.MOD_ID, name = "Iron Chests", /*dependencies = "required-after:Forge@[12.17.0.1909,)",*/ acceptedMinecraftVersions = "[1.11, 1.12)") public class IronChest { public static final String MOD_ID = "ironchest"; @@ -33,6 +33,7 @@ public class IronChest public static CommonProxy proxy; public static BlockIronChest ironChestBlock; + public static ItemIronChest ironChestItemBlock; @EventHandler @@ -56,7 +57,8 @@ public class IronChest for (IronChestType typ : IronChestType.VALUES) { - GameRegistry.registerTileEntity(typ.clazz, "IronChest." + typ.name()); + if (typ.clazz != null) + GameRegistry.registerTileEntity(typ.clazz, "IronChest." + typ.name()); } IronChestType.registerBlocksAndRecipes(ironChestBlock); diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index d2b3cda..a9fdf36 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -42,15 +42,25 @@ public enum IronChestType implements IStringSerializable public static final IronChestType VALUES[] = values(); public final String name; + public final int size; + public final int rowLength; + public final boolean tieredChest; + public final ResourceLocation modelTexture; + private String breakTexture; + public final Class clazz; + public final Collection recipes; + public final Collection matList; + public final int xSize; + public final int ySize; //@formatter:off @@ -192,7 +202,7 @@ public enum IronChestType implements IStringSerializable { if (this == DIRTCHEST9000) { - return itemstack == null || itemstack.getItem() == DIRT_ITEM; + return itemstack == ItemStack.field_190927_a || itemstack.getItem() == DIRT_ITEM; } return true; @@ -230,4 +240,4 @@ public enum IronChestType implements IStringSerializable return null; } } -} \ No newline at end of file +} diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 12e4dcc..9da9e62 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -21,6 +21,7 @@ import net.minecraft.tileentity.TileEntityChest; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -38,17 +39,18 @@ public class ItemChestChanger extends Item @Override //@formatter:off - public EnumActionResult onItemUseFirst(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, EnumHand hand) + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + //public EnumActionResult onItemUseFirst(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, EnumHand hand) //@formatter:on { - if (worldIn.isRemote) + if (world.isRemote) { return EnumActionResult.PASS; } if (this.type.canUpgrade(IronChestType.WOOD)) { - if (!(worldIn.getBlockState(pos).getBlock() instanceof BlockChest)) + if (!(world.getBlockState(pos).getBlock() instanceof BlockChest)) { return EnumActionResult.PASS; } @@ -56,23 +58,23 @@ public class ItemChestChanger extends Item else { //@formatter:off - if (worldIn.getBlockState(pos) != IronChest.ironChestBlock.getStateFromMeta(IronChestType.valueOf(this.type.source.getName().toUpperCase()).ordinal())) + if (world.getBlockState(pos) != IronChest.ironChestBlock.getStateFromMeta(IronChestType.valueOf(this.type.source.getName().toUpperCase()).ordinal())) //@formatter:on { return EnumActionResult.PASS; } } - TileEntity te = worldIn.getTileEntity(pos); + TileEntity te = world.getTileEntity(pos); TileEntityIronChest newchest = new TileEntityIronChest(); - ItemStack[] chestContents = new ItemStack[27]; + NonNullList chestContents = NonNullList. func_191197_a(27, ItemStack.field_190927_a); EnumFacing chestFacing = EnumFacing.DOWN; if (te != null) { if (te instanceof TileEntityIronChest) { - chestContents = ((TileEntityIronChest) te).chestContents; + chestContents = ((TileEntityIronChest) te).func_190576_q(); chestFacing = ((TileEntityIronChest) te).getFacing(); newchest = this.type.target.makeEntity(); if (newchest == null) @@ -82,7 +84,7 @@ public class ItemChestChanger extends Item } else if (te instanceof TileEntityChest) { - IBlockState chestState = worldIn.getBlockState(pos); + IBlockState chestState = world.getBlockState(pos); chestFacing = chestState.getValue(BlockChest.FACING); TileEntityChest chest = (TileEntityChest) te; @@ -94,10 +96,10 @@ public class ItemChestChanger extends Item { return EnumActionResult.PASS; } - chestContents = new ItemStack[chest.getSizeInventory()]; - for (int i = 0; i < chestContents.length; i++) + chestContents = NonNullList. func_191197_a(chest.getSizeInventory(), ItemStack.field_190927_a);//new ItemStack[chest.getSizeInventory()]; + for (int i = 0; i < chestContents.size(); i++) { - chestContents[i] = chest.getStackInSlot(i); + chestContents.set(i, chest.getStackInSlot(i)); } newchest = this.type.target.makeEntity(); } @@ -110,17 +112,17 @@ public class ItemChestChanger extends Item ((TileEntityChest) te).checkForAdjacentChests(); } - worldIn.removeTileEntity(pos); - worldIn.setBlockToAir(pos); + world.removeTileEntity(pos); + world.setBlockToAir(pos); IBlockState iblockstate = IronChest.ironChestBlock.getDefaultState().withProperty(BlockIronChest.VARIANT_PROP, this.type.target); - worldIn.setTileEntity(pos, newchest); - worldIn.setBlockState(pos, iblockstate, 3); + world.setTileEntity(pos, newchest); + world.setBlockState(pos, iblockstate, 3); - worldIn.notifyBlockUpdate(pos, iblockstate, iblockstate, 3); + world.notifyBlockUpdate(pos, iblockstate, iblockstate, 3); - TileEntity te2 = worldIn.getTileEntity(pos); + TileEntity te2 = world.getTileEntity(pos); if (te2 instanceof TileEntityIronChest) { @@ -128,7 +130,9 @@ public class ItemChestChanger extends Item ((TileEntityIronChest) te2).setFacing(chestFacing); } - stack.func_190920_e(playerIn.capabilities.isCreativeMode ? stack.func_190916_E() : stack.func_190916_E() - 1); + ItemStack stack = player.getHeldItem(hand); + + stack.func_190920_e(player.capabilities.isCreativeMode ? stack.func_190916_E() : stack.func_190916_E() - 1); return EnumActionResult.SUCCESS; } diff --git a/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java b/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java index b7b0f6e..0b04bb2 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java @@ -42,9 +42,9 @@ public class TileEntityDirtChest extends TileEntityIronChest @Override public void removeAdornments() { - if (this.chestContents[0] != null && this.chestContents[0].isItemEqual(dirtChest9000GuideBook)) + if (this.func_190576_q().get(0) != ItemStack.field_190927_a && this.func_190576_q().get(0).isItemEqual(dirtChest9000GuideBook)) { - this.chestContents[0] = null; + this.func_190576_q().set(0, ItemStack.field_190927_a); } } -} \ No newline at end of file +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 2cc499e..c8dcad6 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -16,56 +16,68 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntityLockableLoot; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.common.util.Constants; -import java.util.Arrays; -import java.util.Comparator; - -import javax.annotation.Nullable; - -public class TileEntityIronChest extends TileEntityLockableLoot implements ITickable, IInventory { - public float prevLidAngle; +public class TileEntityIronChest extends TileEntityLockableLoot implements ITickable//, IInventory +{ + /** The current angle of the lid (between 0 and 1) */ public float lidAngle; - public ItemStack[] chestContents; + + /** The angle of the lid last tick */ + public float prevLidAngle; + + private NonNullList chestContents; + private int ticksSinceSync = -1; + private int numPlayersUsing; - private ItemStack[] topStacks; + + //private ItemStack[] topStacks; + private EnumFacing facing; + private boolean inventoryTouched; + private boolean hadStuff; + private String customName; + private IronChestType chestType; - public TileEntityIronChest () { + public TileEntityIronChest() + { this(IronChestType.IRON); } - protected TileEntityIronChest (IronChestType type) { + protected TileEntityIronChest(IronChestType type) + { super(); this.chestType = type; - this.chestContents = new ItemStack[type.size]; - this.topStacks = new ItemStack[8]; + this.chestContents = NonNullList. func_191197_a(type.size, ItemStack.field_190927_a); + //this.topStacks = new ItemStack[8]; this.facing = EnumFacing.NORTH; } - public void setContents (ItemStack[] contents) { - this.chestContents = new ItemStack[this.getType().size]; + public void setContents(NonNullList contents) + { + this.chestContents = NonNullList. func_191197_a(this.getType().size, ItemStack.field_190927_a); - for (int i = 0; i < contents.length; i++) { - if (i < this.chestContents.length) { - this.chestContents[i] = contents[i]; + for (int i = 0; i < contents.size(); i++) + { + if (i < this.chestContents.size()) + { + this.chestContents.set(i, contents.get(i)); } } @@ -73,25 +85,31 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick } @Override - public int getSizeInventory () { - return this.chestContents.length; + public int getSizeInventory() + { + return this.chestContents.size(); } - public EnumFacing getFacing () { + public EnumFacing getFacing() + { return this.facing; } - public void setFacing (EnumFacing facing) { + public void setFacing(EnumFacing facing) + { this.facing = facing; } - public IronChestType getType () { + public IronChestType getType() + { IronChestType type = IronChestType.IRON; - if (this.hasWorldObj()) { + if (this.hasWorldObj()) + { IBlockState state = this.worldObj.getBlockState(this.pos); - if (state.getBlock() == IronChest.ironChestBlock) { + if (state.getBlock() == IronChest.ironChestBlock) + { type = state.getValue(BlockIronChest.VARIANT_PROP); } } @@ -100,37 +118,45 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick } @Override - public ItemStack getStackInSlot (int index) { + public ItemStack getStackInSlot(int index) + { this.fillWithLoot((EntityPlayer) null); this.inventoryTouched = true; - return this.chestContents[index]; + return this.func_190576_q().get(index); } @Override - public void markDirty () { + public void markDirty() + { super.markDirty(); - this.sortTopStacks(); + //this.sortTopStacks(); } - protected void sortTopStacks () { - if (!this.getType().isTransparent() || (this.worldObj != null && this.worldObj.isRemote)) { + /*protected void sortTopStacks() + { + if (!this.getType().isTransparent() || (this.worldObj != null && this.worldObj.isRemote)) + { return; } - + ItemStack[] tempCopy = new ItemStack[this.getSizeInventory()]; - + boolean hasStuff = false; - + int compressedIdx = 0; - + mainLoop: - for (int i = 0; i < this.getSizeInventory(); i++) { - if (this.chestContents[i] != null) { - for (int j = 0; j < compressedIdx; j++) { - if (tempCopy[j].isItemEqual(this.chestContents[i])) { + for (int i = 0; i < this.getSizeInventory(); i++) + { + if (this.chestContents[i] != null) + { + for (int j = 0; j < compressedIdx; j++) + { + if (tempCopy[j].isItemEqual(this.chestContents[i])) + { tempCopy[j].func_190920_e(tempCopy[j].func_190916_E() + this.chestContents[i].func_190916_E()); continue mainLoop; } @@ -139,155 +165,128 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick hasStuff = true; } } - - if (!hasStuff && this.hadStuff) { + + if (!hasStuff && this.hadStuff) + { this.hadStuff = false; - - for (int i = 0; i < this.topStacks.length; i++) { + + for (int i = 0; i < this.topStacks.length; i++) + { this.topStacks[i] = null; } - - if (this.worldObj != null) { + + if (this.worldObj != null) + { IBlockState iblockstate = this.worldObj.getBlockState(this.pos); this.worldObj.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3); } - + return; } - + this.hadStuff = true; - - Arrays.sort(tempCopy, new Comparator() { + + Arrays.sort(tempCopy, new Comparator() + { @Override - public int compare (ItemStack o1, ItemStack o2) { - if (o1 == null) { + public int compare(ItemStack o1, ItemStack o2) + { + if (o1 == null) + { return 1; - } else if (o2 == null) { + } + else if (o2 == null) + { return -1; - } else { + } + else + { return o2.func_190916_E() - o1.func_190916_E(); } } }); - + int p = 0; - - for (ItemStack element : tempCopy) { - if (element != ItemStack.field_190927_a && element.func_190916_E() > 0) { + + for (ItemStack element : tempCopy) + { + if (element != ItemStack.field_190927_a && element.func_190916_E() > 0) + { this.topStacks[p++] = element; - - if (p == this.topStacks.length) { + + if (p == this.topStacks.length) + { break; } } } - - for (int i = p; i < this.topStacks.length; i++) { + + for (int i = p; i < this.topStacks.length; i++) + { this.topStacks[i] = null; } - - if (this.worldObj != null) { + + if (this.worldObj != null) + { IBlockState iblockstate = this.worldObj.getBlockState(this.pos); - + this.worldObj.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3); } - } + }*/ @Override - @Nullable - public ItemStack decrStackSize (int index, int count) { - this.fillWithLoot((EntityPlayer) null); - - ItemStack itemstack = ItemStackHelper.getAndSplit(this.chestContents, index, count); - - if (itemstack != null) { - this.markDirty(); - } - - return itemstack; - } - - @Override - public void setInventorySlotContents (int index, @Nullable ItemStack stack) { - this.fillWithLoot((EntityPlayer) null); - - this.chestContents[index] = stack; - - if (stack != null && stack.func_190916_E() > this.getInventoryStackLimit()) { - stack.func_190920_e(this.getInventoryStackLimit()); - } - - this.markDirty(); - } - - @Override - public String getName () { + public String getName() + { return this.hasCustomName() ? this.customName : this.getType().name(); } @Override - public boolean hasCustomName () { + public boolean hasCustomName() + { return this.customName != null && this.customName.length() > 0; } - public void setCustomName (String name) { + public void setCustomName(String name) + { this.customName = name; } @Override - public void readFromNBT (NBTTagCompound compound) { + public void readFromNBT(NBTTagCompound compound) + { super.readFromNBT(compound); - this.chestContents = new ItemStack[this.getSizeInventory()]; + this.chestContents = NonNullList. func_191197_a(this.getSizeInventory(), ItemStack.field_190927_a); - if (compound.hasKey("CustomName", Constants.NBT.TAG_STRING)) { + if (compound.hasKey("CustomName", Constants.NBT.TAG_STRING)) + { this.customName = compound.getString("CustomName"); } - if (!this.checkLootAndRead(compound)) { - NBTTagList itemList = compound.getTagList("Items", Constants.NBT.TAG_COMPOUND); - - for (int itemNumber = 0; itemNumber < itemList.tagCount(); ++itemNumber) { - NBTTagCompound item = itemList.getCompoundTagAt(itemNumber); - - int slot = item.getByte("Slot") & 255; - - if (slot >= 0 && slot < this.chestContents.length) { - this.chestContents[slot] = ItemStack.loadItemStackFromNBT(item); - } - } + if (!this.checkLootAndRead(compound)) + { + ItemStackHelper.func_191283_b(compound, this.chestContents); } this.facing = EnumFacing.VALUES[compound.getByte("facing")]; - this.sortTopStacks(); + //this.sortTopStacks(); } @Override - public NBTTagCompound writeToNBT (NBTTagCompound compound) { + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { super.writeToNBT(compound); - if (!this.checkLootAndWrite(compound)) { - NBTTagList itemList = new NBTTagList(); - - for (int slot = 0; slot < this.chestContents.length; ++slot) { - if (this.chestContents[slot] != null) { - NBTTagCompound tag = new NBTTagCompound(); - - tag.setByte("Slot", (byte) slot); - - this.chestContents[slot].writeToNBT(tag); - - itemList.appendTag(tag); - } - } - - compound.setTag("Items", itemList); + if (!this.checkLootAndWrite(compound)) + { + ItemStackHelper.func_191282_a(compound, this.chestContents); } compound.setByte("facing", (byte) this.facing.ordinal()); - if (this.hasCustomName()) { + if (this.hasCustomName()) + { compound.setString("CustomName", this.customName); } @@ -295,17 +294,21 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick } @Override - public int getInventoryStackLimit () { + public int getInventoryStackLimit() + { return 64; } @Override - public boolean isUseableByPlayer (EntityPlayer player) { - if (this.worldObj == null) { + public boolean isUseableByPlayer(EntityPlayer player) + { + if (this.worldObj == null) + { return true; } - if (this.worldObj.getTileEntity(this.pos) != this) { + if (this.worldObj.getTileEntity(this.pos) != this) + { return false; } @@ -313,7 +316,8 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick } @Override - public void update () { + public void update() + { // Resynchronizes clients with the server state //@formatter:off if (this.worldObj != null && !this.worldObj.isRemote && this.numPlayersUsing != 0 && (this.ticksSinceSync + this.pos.getX() + this.pos.getY() + this.pos.getZ()) % 200 == 0) @@ -328,20 +332,23 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick new AxisAlignedBB(this.pos.getX() - f, this.pos.getY() - f, this.pos.getZ() - f, this.pos.getX() + 1 + f, this.pos.getY() + 1 + f, this.pos.getZ() + 1 + f))) //@formatter:on { - if (player.openContainer instanceof ContainerIronChest) { + if (player.openContainer instanceof ContainerIronChest) + { ++this.numPlayersUsing; } } } - if (this.worldObj != null && !this.worldObj.isRemote && this.ticksSinceSync < 0) { + if (this.worldObj != null && !this.worldObj.isRemote && this.ticksSinceSync < 0) + { this.worldObj.addBlockEvent(this.pos, IronChest.ironChestBlock, 3, ((this.numPlayersUsing << 3) & 0xF8) | (this.facing.ordinal() & 0x7)); } - if (!this.worldObj.isRemote && this.inventoryTouched) { + if (!this.worldObj.isRemote && this.inventoryTouched) + { this.inventoryTouched = false; - this.sortTopStacks(); + //this.sortTopStacks(); } this.ticksSinceSync++; @@ -350,7 +357,8 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick float angle = 0.1F; - if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F) { + if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F) + { double x = this.pos.getX() + 0.5D; double y = this.pos.getY() + 0.5D; double z = this.pos.getZ() + 0.5D; @@ -360,22 +368,28 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick //@formatter:on } - if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) { + if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) + { float currentAngle = this.lidAngle; - if (this.numPlayersUsing > 0) { + if (this.numPlayersUsing > 0) + { this.lidAngle += angle; - } else { + } + else + { this.lidAngle -= angle; } - if (this.lidAngle > 1.0F) { + if (this.lidAngle > 1.0F) + { this.lidAngle = 1.0F; } float maxAngle = 0.5F; - if (this.lidAngle < maxAngle && currentAngle >= maxAngle) { + if (this.lidAngle < maxAngle && currentAngle >= maxAngle) + { double x = this.pos.getX() + 0.5D; double y = this.pos.getY() + 0.5D; double z = this.pos.getZ() + 0.5D; @@ -385,19 +399,26 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick //@formatter:on } - if (this.lidAngle < 0.0F) { + if (this.lidAngle < 0.0F) + { this.lidAngle = 0.0F; } } } @Override - public boolean receiveClientEvent (int id, int type) { - if (id == 1) { + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { this.numPlayersUsing = type; - } else if (id == 2) { + } + else if (id == 2) + { this.facing = EnumFacing.VALUES[type]; - } else if (id == 3) { + } + else if (id == 3) + { this.facing = EnumFacing.VALUES[type & 0x7]; this.numPlayersUsing = (type & 0xF8) >> 3; } @@ -406,196 +427,220 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick } @Override - public void openInventory (EntityPlayer player) { - if (!player.isSpectator()) { - if (this.worldObj == null) { + public void openInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + if (this.worldObj == null) + { return; } - if (this.numPlayersUsing < 0) { + if (this.numPlayersUsing < 0) + { this.numPlayersUsing = 0; } ++this.numPlayersUsing; this.worldObj.addBlockEvent(this.pos, IronChest.ironChestBlock, 1, this.numPlayersUsing); - this.worldObj.notifyNeighborsOfStateChange(this.pos, IronChest.ironChestBlock); - this.worldObj.notifyNeighborsOfStateChange(this.pos.down(), IronChest.ironChestBlock); + this.worldObj.notifyNeighborsOfStateChange(this.pos, IronChest.ironChestBlock, false); + this.worldObj.notifyNeighborsOfStateChange(this.pos.down(), IronChest.ironChestBlock, false); } } @Override - public void closeInventory (EntityPlayer player) { - if (!player.isSpectator()) { - if (this.worldObj == null) { + public void closeInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + if (this.worldObj == null) + { return; } --this.numPlayersUsing; this.worldObj.addBlockEvent(this.pos, IronChest.ironChestBlock, 1, this.numPlayersUsing); - this.worldObj.notifyNeighborsOfStateChange(this.pos, IronChest.ironChestBlock); - this.worldObj.notifyNeighborsOfStateChange(this.pos.down(), IronChest.ironChestBlock); + this.worldObj.notifyNeighborsOfStateChange(this.pos, IronChest.ironChestBlock, false); + this.worldObj.notifyNeighborsOfStateChange(this.pos.down(), IronChest.ironChestBlock, false); } } - public ItemStack[] getTopItemStacks () { - return this.topStacks; - } + //public ItemStack[] getTopItemStacks() + //{ + // return this.topStacks; + //} @Override - public SPacketUpdateTileEntity getUpdatePacket () { + public SPacketUpdateTileEntity getUpdatePacket() + { NBTTagCompound compound = new NBTTagCompound(); compound.setByte("facing", (byte) this.facing.ordinal()); - ItemStack[] stacks = this.buildItemStackDataList(); - - if (stacks != null) { + /*ItemStack[] stacks = this.buildItemStackDataList(); + + if (stacks != null) + { NBTTagList itemList = new NBTTagList(); - - for (int slot = 0; slot < stacks.length; slot++) { - if (stacks[slot] != null) { + + for (int slot = 0; slot < stacks.length; slot++) + { + if (stacks[slot] != null) + { NBTTagCompound item = new NBTTagCompound(); - + item.setByte("Slot", (byte) slot); - + stacks[slot].writeToNBT(item); - + itemList.appendTag(item); } } - + compound.setTag("stacks", itemList); - } + }*/ return new SPacketUpdateTileEntity(this.pos, 0, compound); } @Override - public void onDataPacket (NetworkManager net, SPacketUpdateTileEntity pkt) { - if (pkt.getTileEntityType() == 0) { + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) + { + if (pkt.getTileEntityType() == 0) + { NBTTagCompound compound = pkt.getNbtCompound(); this.facing = EnumFacing.VALUES[compound.getByte("facing")]; - NBTTagList itemList = compound.getTagList("stacks", Constants.NBT.TAG_COMPOUND); - + /*NBTTagList itemList = compound.getTagList("stacks", Constants.NBT.TAG_COMPOUND); + ItemStack[] stacks = new ItemStack[this.topStacks.length]; - - for (int item = 0; item < stacks.length; item++) { + + for (int item = 0; item < stacks.length; item++) + { NBTTagCompound itemStack = itemList.getCompoundTagAt(item); - + int slot = itemStack.getByte("Slot") & 255; - - if (slot >= 0 && slot < stacks.length) { + + if (slot >= 0 && slot < stacks.length) + { stacks[slot] = ItemStack.loadItemStackFromNBT(itemStack); } } - - if (this.getType().isTransparent() && stacks != null) { + + if (this.getType().isTransparent() && stacks != null) + { int pos = 0; - - for (int i = 0; i < this.topStacks.length; i++) { - if (stacks[pos] != null) { + + for (int i = 0; i < this.topStacks.length; i++) + { + if (stacks[pos] != null) + { this.topStacks[i] = stacks[pos]; - } else { + } + else + { this.topStacks[i] = null; } - + pos++; } - } + }*/ } } - public ItemStack[] buildItemStackDataList () { - if (this.getType().isTransparent()) { + /*public ItemStack[] buildItemStackDataList() + { + if (this.getType().isTransparent()) + { ItemStack[] sortList = new ItemStack[this.topStacks.length]; - + int pos = 0; - - for (ItemStack is : this.topStacks) { - if (is != null) { + + for (ItemStack is : this.topStacks) + { + if (is != null) + { sortList[pos++] = is; - } else { + } + else + { sortList[pos++] = null; } } - + return sortList; } - + return null; - } + }*/ @Override - @Nullable - public ItemStack removeStackFromSlot (int index) { - this.fillWithLoot((EntityPlayer) null); - - return ItemStackHelper.getAndRemove(this.chestContents, index); - } - - @Override - public boolean isItemValidForSlot (int index, ItemStack stack) { + public boolean isItemValidForSlot(int index, ItemStack stack) + { return this.getType().acceptsStack(stack); } - public void rotateAround () { + public void rotateAround() + { this.setFacing(this.facing.rotateY()); this.worldObj.addBlockEvent(this.pos, IronChest.ironChestBlock, 2, this.facing.ordinal()); } - public void wasPlaced (EntityLivingBase entityliving, ItemStack stack) { + public void wasPlaced(EntityLivingBase entityliving, ItemStack stack) + { } - public void removeAdornments () { + public void removeAdornments() + { } @Override - public int getField (int id) { - return 0; - } - - @Override - public void setField (int id, int value) { - } - - @Override - public int getFieldCount () { - return 0; - } - - @Override - public void clear () { - this.fillWithLoot((EntityPlayer) null); - - for (int slot = 0; slot < this.chestContents.length; ++slot) { - this.chestContents[slot] = null; - } - } - - @Override - public Container createContainer (InventoryPlayer playerInventory, EntityPlayer playerIn) { + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { this.fillWithLoot((EntityPlayer) null); return new ContainerIronChest(playerInventory, this, this.chestType, this.chestType.xSize, this.chestType.ySize); } @Override - public String getGuiID () { + public String getGuiID() + { return "IronChest:" + this.getType().name(); } @Override - public boolean canRenderBreaking () { + public boolean canRenderBreaking() + { return true; } @Override - public NBTTagCompound getUpdateTag () { + public NBTTagCompound getUpdateTag() + { return this.writeToNBT(new NBTTagCompound()); } + + @Override + protected NonNullList func_190576_q() + { + return this.chestContents; + } + + @Override + public boolean func_191420_l() + { + for (ItemStack itemstack : this.chestContents) + { + if (!itemstack.func_190926_b()) + { + return false; + } + } + + return true; + } } diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 83051c1..c8335d3 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -12,31 +12,31 @@ package cpw.mods.ironchest.client; import java.util.Random; -import com.google.common.primitives.SignedBytes; - import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelChest; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.entity.RenderEntityItem; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private Random random; + private RenderEntityItem itemRenderer; + private ModelChest model; private static float[][] shifts = { { 0.3F, 0.45F, 0.3F }, { 0.7F, 0.45F, 0.3F }, { 0.3F, 0.45F, 0.7F }, { 0.7F, 0.45F, 0.7F }, { 0.3F, 0.1F, 0.3F }, { 0.7F, 0.1F, 0.3F }, { 0.3F, 0.1F, 0.7F }, { 0.7F, 0.1F, 0.7F }, { 0.5F, 0.32F, 0.5F }, }; + private static EntityItem customitem = new EntityItem(null); + private static float halfPI = (float) (Math.PI / 2D); public TileEntityIronChestRenderer() @@ -141,7 +141,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer