From 32c6389b4eb9750ed5dd5a645e4da496a6149ad7 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 16 Sep 2013 17:04:09 -0400 Subject: [PATCH] Fix up potential to leak lots of guide books into the world. You only get one with a new chest, not one you've already built. --- .../cpw/mods/ironchest/BlockIronChest.java | 17 ++++++++++++++++- .../cpw/mods/ironchest/IronChestType.java | 8 ++++++++ .../mods/ironchest/TileEntityDirtChest.java | 18 +++++++++++++++++- .../mods/ironchest/TileEntityIronChest.java | 10 ++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 9008cf6..586a5bb 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -13,9 +13,12 @@ package cpw.mods.ironchest; import static net.minecraftforge.common.ForgeDirection.DOWN; import static net.minecraftforge.common.ForgeDirection.UP; +import java.util.ArrayList; import java.util.List; import java.util.Random; +import com.google.common.collect.Lists; + import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; @@ -95,6 +98,15 @@ public class BlockIronChest extends BlockContainer { return null; } + @Override + public ArrayList getBlockDropped(World world, int x, int y, int z, int metadata, int fortune) + { + ArrayList items = Lists.newArrayList(); + ItemStack stack = new ItemStack(this,1,metadata); + IronChestType.values()[IronChestType.validateMeta(metadata)].adornItemDrop(stack); + items.add(stack); + return items; + } @Override public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer player, int i1, float f1, float f2, float f3) { @@ -150,7 +162,9 @@ public class BlockIronChest extends BlockContainer { TileEntity te = world.getBlockTileEntity(i, j, k); if (te != null && te instanceof TileEntityIronChest) { - ((TileEntityIronChest) te).setFacing(chestFacing); + TileEntityIronChest teic = (TileEntityIronChest) te; + teic.wasPlaced(entityliving, itemStack); + teic.setFacing(chestFacing); world.markBlockForUpdate(i, j, k); } } @@ -167,6 +181,7 @@ public class BlockIronChest extends BlockContainer { TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k); if (tileentitychest != null) { + tileentitychest.removeAdornments(); dropContent(0, tileentitychest, world, tileentitychest.xCoord, tileentitychest.yCoord, tileentitychest.zCoord); } super.breakBlock(world, i, j, k, i1, i2); diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 7ae6bf8..82a217f 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -20,6 +20,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagByte; import net.minecraft.util.Icon; import net.minecraftforge.oredict.ShapedOreRecipe; import cpw.mods.fml.common.registry.GameRegistry; @@ -254,4 +255,11 @@ public enum IronChestType { { return itemFilter == null || itemstack == null || itemstack.getItem() == itemFilter; } + public void adornItemDrop(ItemStack item) + { + if (this == DIRTCHEST9000) + { + item.setTagInfo("dirtchest", new NBTTagByte("",(byte) 1)); + } + } } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java index 5e985b3..56c0b7d 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java @@ -3,6 +3,7 @@ package cpw.mods.ironchest; import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.block.Block; import net.minecraft.client.resources.I18n; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagList; @@ -24,6 +25,21 @@ public class TileEntityDirtChest extends TileEntityIronChest { } public TileEntityDirtChest() { super(IronChestType.DIRTCHEST9000); - setInventorySlotContents(0, dirtChest9000GuideBook.copy()); + } + + @Override + public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) + { + if (!(itemStack.hasTagCompound() && itemStack.getTagCompound().getBoolean("dirtchest"))) { + setInventorySlotContents(0, dirtChest9000GuideBook.copy()); + } + } + + @Override + public void removeAdornments() + { + if (chestContents[0] != null && chestContents[0].isItemEqual(dirtChest9000GuideBook)) { + chestContents[0] = null; + } } } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index a844486..f346db3 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -15,6 +15,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -514,4 +515,13 @@ public class TileEntityIronChest extends TileEntity implements IInventory { setFacing((byte)ForgeDirection.getOrientation(facing).getRotation(axis).ordinal()); worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 2, getFacing()); } + + public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) + { + } + + public void removeAdornments() + { + + } }