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.
This commit is contained in:
Christian 2013-09-16 17:04:09 -04:00
parent 3df6d36373
commit 32c6389b4e
4 changed files with 51 additions and 2 deletions

View File

@ -13,9 +13,12 @@ package cpw.mods.ironchest;
import static net.minecraftforge.common.ForgeDirection.DOWN; import static net.minecraftforge.common.ForgeDirection.DOWN;
import static net.minecraftforge.common.ForgeDirection.UP; import static net.minecraftforge.common.ForgeDirection.UP;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.collect.Lists;
import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.client.renderer.texture.IconRegister;
@ -95,6 +98,15 @@ public class BlockIronChest extends BlockContainer {
return null; return null;
} }
@Override
public ArrayList<ItemStack> getBlockDropped(World world, int x, int y, int z, int metadata, int fortune)
{
ArrayList<ItemStack> items = Lists.newArrayList();
ItemStack stack = new ItemStack(this,1,metadata);
IronChestType.values()[IronChestType.validateMeta(metadata)].adornItemDrop(stack);
items.add(stack);
return items;
}
@Override @Override
public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer player, int i1, float f1, float f2, float f3) 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); TileEntity te = world.getBlockTileEntity(i, j, k);
if (te != null && te instanceof TileEntityIronChest) 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); world.markBlockForUpdate(i, j, k);
} }
} }
@ -167,6 +181,7 @@ public class BlockIronChest extends BlockContainer {
TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k); TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k);
if (tileentitychest != null) if (tileentitychest != null)
{ {
tileentitychest.removeAdornments();
dropContent(0, tileentitychest, world, tileentitychest.xCoord, tileentitychest.yCoord, tileentitychest.zCoord); dropContent(0, tileentitychest, world, tileentitychest.xCoord, tileentitychest.yCoord, tileentitychest.zCoord);
} }
super.breakBlock(world, i, j, k, i1, i2); super.breakBlock(world, i, j, k, i1, i2);

View File

@ -20,6 +20,7 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot; import net.minecraft.inventory.Slot;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagByte;
import net.minecraft.util.Icon; import net.minecraft.util.Icon;
import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapedOreRecipe;
import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry;
@ -254,4 +255,11 @@ public enum IronChestType {
{ {
return itemFilter == null || itemstack == null || itemstack.getItem() == itemFilter; return itemFilter == null || itemstack == null || itemstack.getItem() == itemFilter;
} }
public void adornItemDrop(ItemStack item)
{
if (this == DIRTCHEST9000)
{
item.setTagInfo("dirtchest", new NBTTagByte("",(byte) 1));
}
}
} }

View File

@ -3,6 +3,7 @@ package cpw.mods.ironchest;
import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.common.registry.LanguageRegistry;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
@ -24,6 +25,21 @@ public class TileEntityDirtChest extends TileEntityIronChest {
} }
public TileEntityDirtChest() { public TileEntityDirtChest() {
super(IronChestType.DIRTCHEST9000); 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;
}
} }
} }

View File

@ -15,6 +15,7 @@ import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -514,4 +515,13 @@ public class TileEntityIronChest extends TileEntity implements IInventory {
setFacing((byte)ForgeDirection.getOrientation(facing).getRotation(axis).ordinal()); setFacing((byte)ForgeDirection.getOrientation(facing).getRotation(axis).ordinal());
worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 2, getFacing()); worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 2, getFacing());
} }
public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack)
{
}
public void removeAdornments()
{
}
} }