From 3df6d363736548093c2662d5982b12fb14d51edd Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 16 Sep 2013 13:43:32 -0400 Subject: [PATCH] New chest, with new capabilities --- .../cpw/mods/ironchest/BlockIronChest.java | 24 --------------- .../ironchest/ContainerIronChestBase.java | 17 +++++++--- .../cpw/mods/ironchest/IronChestType.java | 24 +++++++++++++++ .../mods/ironchest/TileEntityDirtChest.java | 29 ++++++++++++++++++ .../mods/ironchest/TileEntityIronChest.java | 2 +- .../cpw/mods/ironchest/ValidatingSlot.java | 21 +++++++++++++ .../cpw/mods/ironchest/client/GUIChest.java | 6 ++-- .../assets/ironchest/lang/en_US.lang | 8 +++++ .../ironchest/textures/gui/dirtcontainer.png | Bin 0 -> 3588 bytes .../ironchest/textures/model/dirtchest.png | Bin 0 -> 6110 bytes 10 files changed, 99 insertions(+), 32 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/ValidatingSlot.java create mode 100644 IronChests2/resources/assets/ironchest/textures/gui/dirtcontainer.png create mode 100644 IronChests2/resources/assets/ironchest/textures/model/dirtchest.png diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 4a8225c..9008cf6 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -83,30 +83,6 @@ public class BlockIronChest extends BlockContainer { return IronChestType.makeEntity(metadata); } -// public Icon getBlockTexture(IBlockAccess worldAccess, int i, int j, int k, int l) -// { -// int meta = worldAccess.getBlockMetadata(i, j, k); -// IronChestType type = IronChestType.values()[meta]; -// TileEntity te = worldAccess.getBlockTileEntity(i, j, k); -// TileEntityIronChest icte = null; -// if (te != null && te instanceof TileEntityIronChest) -// { -// icte = (TileEntityIronChest) te; -// } -// if (l == 0 || l == 1) -// { // Top and Bottom -// return type.getTextureRow() * 16 + 1; -// } -// else if (icte != null && l == icte.getFacing()) -// { // Front -// return type.getTextureRow() * 16 + 2; -// } -// else -// { // Back and Sides -// return type.getTextureRow() * 16; -// } -// } - @SideOnly(Side.CLIENT) @Override public Icon getIcon(int i, int j) diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 44f96f6..3228424 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -53,6 +53,10 @@ public class ContainerIronChestBase extends Container { return null; } } + else if (!type.acceptsStack(itemstack1)) + { + return null; + } else if (!mergeItemStack(itemstack1, 0, type.size, false)) { return null; @@ -78,13 +82,16 @@ public class ContainerIronChestBase extends Container { protected void layoutContainer(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) { - for (int chestRow = 0; chestRow < type.getRowCount(); chestRow++) - { - for (int chestCol = 0; chestCol < type.getRowLength(); chestCol++) + if (type == IronChestType.DIRTCHEST9000) { + addSlotToContainer(type.makeSlot(chestInventory, 0, 12 + 4 * 18, 8 + 2 * 18)); + } else { + for (int chestRow = 0; chestRow < type.getRowCount(); chestRow++) { - addSlotToContainer(new Slot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); + for (int chestCol = 0; chestCol < type.getRowLength(); chestCol++) + { + addSlotToContainer(type.makeSlot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); + } } - } int leftCol = (xSize - 162) / 2 + 1; diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index ceac5e4..7ae6bf8 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -16,6 +16,8 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Icon; @@ -32,6 +34,7 @@ public enum IronChestType { SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, Arrays.asList("ingotSilver"), TileEntitySilverChest.class, "mmmm3mmmm", "mGmG0GmGm"), CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Arrays.asList("blockGlass"), TileEntityCrystalChest.class, "GGGGPGGGG"), OBSIDIAN(108, 12, false, "Obsidian Chest", "obsidianchest.png", 6, Arrays.asList("obsidian"), TileEntityObsidianChest.class, "mmmm2mmmm"), + DIRTCHEST9000(1, 1, false, "Dirt Chest 9000", "dirtchest.png",7,Arrays.asList("dirt"), TileEntityDirtChest.class,Item.itemsList[Block.dirt.blockID],"mmmmCmmmm"), WOOD(0, 0, false, "", "", -1, Arrays.asList("plankWood"), null); int size; private int rowLength; @@ -42,9 +45,15 @@ public enum IronChestType { public Class clazz; private String[] recipes; private ArrayList matList; + private Item itemFilter; IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, List mats, Class clazz, String... recipes) + { + this(size, rowLength, tieredChest, friendlyName, modelTexture, textureRow, mats, clazz, (Item)null, recipes); + } + IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, List mats, + Class clazz, Item itemFilter, String... recipes) { this.size = size; this.rowLength = rowLength; @@ -53,6 +62,7 @@ public enum IronChestType { this.modelTexture = modelTexture; this.textureRow = textureRow; this.clazz = clazz; + this.itemFilter = itemFilter; this.recipes = recipes; this.matList = new ArrayList(); matList.addAll(mats); @@ -153,6 +163,10 @@ public enum IronChestType { { return Block.obsidian; } + else if (mat == "dirt") + { + return Block.dirt; + } return mat; } @@ -230,4 +244,14 @@ public enum IronChestType { private static String[] sideNames = { "top", "front", "side" }; private static int[] sideMapping = { 0, 0, 2, 1, 2, 2, 2 }; + + public Slot makeSlot(IInventory chestInventory, int index, int x, int y) + { + return new ValidatingSlot(chestInventory, index, x, y, this); + } + + public boolean acceptsStack(ItemStack itemstack) + { + return itemFilter == null || itemstack == null || itemstack.getItem() == itemFilter; + } } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java new file mode 100644 index 0000000..5e985b3 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java @@ -0,0 +1,29 @@ +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.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.StatCollector; + +public class TileEntityDirtChest extends TileEntityIronChest { + private static ItemStack dirtChest9000GuideBook = new ItemStack(Item.writtenBook); + static { + dirtChest9000GuideBook.setTagInfo("author", new NBTTagString("author", "cpw")); + dirtChest9000GuideBook.setTagInfo("title", new NBTTagString("title", StatCollector.translateToLocal("book.ironchest:dirtchest9000.title"))); + NBTTagList pages = new NBTTagList(); + pages.appendTag(new NBTTagString("1", StatCollector.translateToLocal("book.ironchest:dirtchest9000.page1"))); + pages.appendTag(new NBTTagString("2", StatCollector.translateToLocal("book.ironchest:dirtchest9000.page2"))); + pages.appendTag(new NBTTagString("3", StatCollector.translateToLocal("book.ironchest:dirtchest9000.page3"))); + pages.appendTag(new NBTTagString("4", StatCollector.translateToLocal("book.ironchest:dirtchest9000.page4"))); + pages.appendTag(new NBTTagString("5", StatCollector.translateToLocal("book.ironchest:dirtchest9000.page5"))); + dirtChest9000GuideBook.setTagInfo("pages", pages); + } + public TileEntityDirtChest() { + super(IronChestType.DIRTCHEST9000); + setInventorySlotContents(0, dirtChest9000GuideBook.copy()); + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 2421bf0..a844486 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -500,7 +500,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { - return true; + return type.acceptsStack(itemstack); } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/ValidatingSlot.java b/IronChests2/common/cpw/mods/ironchest/ValidatingSlot.java new file mode 100644 index 0000000..f0348c9 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ValidatingSlot.java @@ -0,0 +1,21 @@ +package cpw.mods.ironchest; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ValidatingSlot extends Slot { + private IronChestType type; + + public ValidatingSlot(IInventory par1iInventory, int par2, int par3, int par4, IronChestType type) + { + super(par1iInventory, par2, par3, par4); + this.type = type; + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return type.acceptsStack(par1ItemStack); + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/common/cpw/mods/ironchest/client/GUIChest.java index 316a146..d40a7af 100644 --- a/IronChests2/common/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/common/cpw/mods/ironchest/client/GUIChest.java @@ -27,7 +27,8 @@ public class GUIChest extends GuiContainer { COPPER(new ResourceLocation("ironchest", "textures/gui/coppercontainer.png")), SILVER(new ResourceLocation("ironchest", "textures/gui/silvercontainer.png")), GOLD(new ResourceLocation("ironchest", "textures/gui/goldcontainer.png")), - DIAMOND(new ResourceLocation("ironchest", "textures/gui/diamondcontainer.png")); + DIAMOND(new ResourceLocation("ironchest", "textures/gui/diamondcontainer.png")), + DIRT(new ResourceLocation("ironchest", "textures/gui/dirtcontainer.png")); public final ResourceLocation location; private ResourceList(ResourceLocation loc) { this.location = loc; @@ -40,7 +41,8 @@ public class GUIChest extends GuiContainer { COPPER(184, 184, ResourceList.COPPER, IronChestType.COPPER), SILVER(184, 238, ResourceList.SILVER, IronChestType.SILVER), CRYSTAL(238, 256, ResourceList.DIAMOND, IronChestType.CRYSTAL), - OBSIDIAN(238, 256, ResourceList.DIAMOND, IronChestType.OBSIDIAN); + OBSIDIAN(238, 256, ResourceList.DIAMOND, IronChestType.OBSIDIAN), + DIRTCHEST9000(184, 184, ResourceList.DIRT, IronChestType.DIRTCHEST9000); private int xSize; private int ySize; diff --git a/IronChests2/resources/assets/ironchest/lang/en_US.lang b/IronChests2/resources/assets/ironchest/lang/en_US.lang index 897a39e..c848ed8 100644 --- a/IronChests2/resources/assets/ironchest/lang/en_US.lang +++ b/IronChests2/resources/assets/ironchest/lang/en_US.lang @@ -5,6 +5,7 @@ tile.ironchest:COPPER.name=Copper Chest tile.ironchest:SILVER.name=Silver Chest tile.ironchest:CRYSTAL.name=Crystal Chest tile.ironchest:OBSIDIAN.name=Obsidian Chest +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! item.ironchest:IRONGOLD.name=Iron to Gold Chest Upgrade item.ironchest:GOLDDIAMOND.name=Gold to Diamond Chest Upgrade @@ -15,3 +16,10 @@ item.ironchest:DIAMONDCRYSTAL.name=Diamond to Crystal Chest Upgrade item.ironchest:WOODIRON.name=Wood to Iron Chest Upgrade item.ironchest:WOODCOPPER.name=Wood to Copper Chest Upgrade item.ironchest:DIAMONDOBSIDIAN.name=Diamond to Obsidian Chest Upgrade + +book.ironchest:dirtchest9000.title=How to use your DirtChest 9000! +book.ironchest:dirtchest9000.page1=Welcome to your new DirtChest 9000! We hope you will enjoy many happy years of storing your stack of dirt in our storage utility. +book.ironchest:dirtchest9000.page2=Usage: simply insert the stack of dirt of your choice into the highly receptive slot and enjoy the great convenience of having that dirt available to you, any time you pass by this chest! +book.ironchest:dirtchest9000.page3=We hope you have enjoyed reviewing this instruction manual, and hope you will consider using our products in future! Kind regards, The DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Warranty: This product has no warranty of any kind. Your dirt may not be stored, it may slowly leech into the environment, or alternatively, it may not do anything at all. +book.ironchest:dirtchest9000.page5=DirtChest 9000 is kind to the environment. Please dispose of this guide book responsibly, and do not whatever you do just chuck it into some lava. We would be very sad. diff --git a/IronChests2/resources/assets/ironchest/textures/gui/dirtcontainer.png b/IronChests2/resources/assets/ironchest/textures/gui/dirtcontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..44667e17a43026f4ea93fa2b78dedeade1690a8d GIT binary patch literal 3588 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 Hb$t3S1AP45 literal 0 HcmV?d00001 diff --git a/IronChests2/resources/assets/ironchest/textures/model/dirtchest.png b/IronChests2/resources/assets/ironchest/textures/model/dirtchest.png new file mode 100644 index 0000000000000000000000000000000000000000..168e17991ed86d4c4195d121abe0b7133f80a5d6 GIT binary patch literal 6110 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 literal 0 HcmV?d00001