From 7720a9a753cc59a5b6cb21575cc2ff5ab9e01bf8 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Thu, 27 Feb 2014 15:56:39 +0800 Subject: [PATCH] Resolved #235 - Engineering table now drops with NBT --- .../resonantinduction/archaic/Archaic.java | 3 ++- .../engineering/BlockEngineeringTable.java | 25 +++++++++++++++++-- .../engineering/TileEngineeringTable.java | 22 ++++++++-------- .../archaic/firebox/RenderHotPlate.java | 2 +- .../core/render/RenderItemOverlayTile.java | 6 ++--- 5 files changed, 41 insertions(+), 17 deletions(-) diff --git a/archaic/src/main/java/resonantinduction/archaic/Archaic.java b/archaic/src/main/java/resonantinduction/archaic/Archaic.java index 3ed16db5..cc14c849 100644 --- a/archaic/src/main/java/resonantinduction/archaic/Archaic.java +++ b/archaic/src/main/java/resonantinduction/archaic/Archaic.java @@ -33,6 +33,7 @@ import calclavia.lib.content.ContentRegistry; import calclavia.lib.network.PacketAnnotation; import calclavia.lib.network.PacketHandler; import calclavia.lib.prefab.item.ItemBlockMetadata; +import calclavia.lib.prefab.item.ItemBlockSaved; import calclavia.lib.recipe.UniversalRecipe; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -90,7 +91,7 @@ public class Archaic { Settings.load(); NetworkRegistry.instance().registerGuiHandler(this, proxy); - blockEngineeringTable = contentRegistry.createTile(BlockEngineeringTable.class, TileEngineeringTable.class); + blockEngineeringTable = contentRegistry.createBlock(BlockEngineeringTable.class, ItemBlockSaved.class, TileEngineeringTable.class); blockCrate = contentRegistry.createBlock(BlockCrate.class, ItemBlockCrate.class, TileCrate.class); blockImprinter = contentRegistry.createTile(BlockImprinter.class, TileImprinter.class); blockTurntable = contentRegistry.createBlock(BlockTurntable.class); diff --git a/archaic/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java b/archaic/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java index cac63120..a6afbe71 100644 --- a/archaic/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java +++ b/archaic/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java @@ -15,6 +15,7 @@ import net.minecraft.world.World; import universalelectricity.api.vector.Vector2; import universalelectricity.api.vector.Vector3; import calclavia.lib.prefab.block.BlockRotatable; +import calclavia.lib.prefab.item.ItemBlockSaved; import calclavia.lib.utility.WorldUtility; import calclavia.lib.utility.inventory.InventoryUtility; import codechicken.multipart.ControlKeyModifer; @@ -44,14 +45,19 @@ public class BlockEngineeringTable extends BlockRotatable @Override public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) { - if (!world.isRemote) + if (!world.isRemote && isControlDown(player)) { - dropEntireInventory(world, x, y, z, 0, 0); + dropInventory(world, x, y, z, 0, 0); } } @Override public void dropEntireInventory(World world, int x, int y, int z, int par5, int par6) + { + + } + + public void dropInventory(World world, int x, int y, int z, int par5, int par6) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); @@ -102,6 +108,8 @@ public class BlockEngineeringTable extends BlockRotatable } } } + + inventory.setInventorySlotContents(i, null); } inventory.onInventoryChanged(); @@ -257,4 +265,17 @@ public class BlockEngineeringTable extends BlockRotatable return false; } + @Override + public void breakBlock(World world, int x, int y, int z, int par5, int par6) + { + ItemBlockSaved.dropBlockWithNBT(this, world, x, y, z); + super.breakBlock(world, x, y, z, par5, par6); + } + + /** To cancel the vanilla method of dropping the itemEntity */ + @Override + protected void dropBlockAsItem_do(World world, int x, int y, int z, ItemStack stack) + { + + } } diff --git a/archaic/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java b/archaic/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java index 58bb1aa4..ae4703e1 100644 --- a/archaic/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java +++ b/archaic/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java @@ -51,12 +51,14 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive public static final int[] craftingSlots = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; /** The output inventory containing slots. */ - public ItemStack[] inventory = new ItemStack[1]; - public static int[] inventorySlots; + public ItemStack[] outputInventory = new ItemStack[1]; - /** The ability for the engineering table to serach nearby inventories. */ + /** The ability for the engineering table to search nearby inventories. */ public boolean searchInventories = true; + /** + * Temporary player inventory stored to draw the player's items. + */ private InventoryPlayer invPlayer = null; private int[] playerSlots; @@ -168,7 +170,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive } else if (slot < CRAFTING_OUTPUT_END) { - return inventory[slot - CRAFTING_MATRIX_END]; + return outputInventory[slot - CRAFTING_MATRIX_END]; } else if (slot < PLAYER_OUTPUT_END && invPlayer != null) { @@ -211,9 +213,9 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive * An external inventory is attempting to craft the item from the engineering table. */ if (itemStack == null) - onPickUpFromSlot(null, slot, this.inventory[slot - CRAFTING_MATRIX_END]); + onPickUpFromSlot(null, slot, this.outputInventory[slot - CRAFTING_MATRIX_END]); - this.inventory[slot - CRAFTING_MATRIX_END] = itemStack; + this.outputInventory[slot - CRAFTING_MATRIX_END] = itemStack; } else if (slot < PLAYER_OUTPUT_END && this.invPlayer != null) { @@ -311,7 +313,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive { if (!worldObj.isRemote) { - this.inventory[CRAFTING_OUTPUT_SLOT] = null; + this.outputInventory[CRAFTING_OUTPUT_SLOT] = null; /** Try to craft from crafting grid. If not possible, then craft from imprint. */ boolean didCraft = false; @@ -323,7 +325,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive if (matrixOutput != null && this.getCraftingManager().getIdealRecipe(matrixOutput) != null) { - this.inventory[CRAFTING_OUTPUT_SLOT] = matrixOutput; + this.outputInventory[CRAFTING_OUTPUT_SLOT] = matrixOutput; didCraft = true; } @@ -349,7 +351,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive ItemStack recipeOutput = idealRecipe.left(); if (recipeOutput != null & recipeOutput.stackSize > 0) { - this.inventory[CRAFTING_OUTPUT_SLOT] = recipeOutput; + this.outputInventory[CRAFTING_OUTPUT_SLOT] = recipeOutput; didCraft = true; break; } @@ -396,7 +398,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive NBTTagList nbtList = nbt.getTagList("Items"); this.craftingMatrix = new ItemStack[9]; - this.inventory = new ItemStack[1]; + this.outputInventory = new ItemStack[1]; for (int i = 0; i < nbtList.tagCount(); ++i) { diff --git a/archaic/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java b/archaic/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java index c752a977..a91d4a8a 100644 --- a/archaic/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java +++ b/archaic/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java @@ -18,7 +18,7 @@ public class RenderHotPlate extends RenderItemOverlayTile if (tileEntity instanceof TileHotPlate) { TileHotPlate tile = (TileHotPlate) tileEntity; - renderTopOverlay(tileEntity, tile.getInventory().getContainedItems(), ForgeDirection.EAST, 2, 2, x, y - 0.8, z); + renderTopOverlay(tileEntity, tile.getInventory().getContainedItems(), ForgeDirection.EAST, 2, 2, x, y - 0.8, z, 0.8f); } } } diff --git a/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java b/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java index d7fc4a74..a3b3dac3 100644 --- a/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java +++ b/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java @@ -41,10 +41,10 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer public void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, ForgeDirection dir, double x, double y, double z) { - renderTopOverlay(tileEntity, inventory, dir, 3, 3, x, y, z); + renderTopOverlay(tileEntity, inventory, dir, 3, 3, x, y, z, 0.7f); } - public static void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, ForgeDirection dir, int matrixX, int matrixZ, double x, double y, double z) + public static void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, ForgeDirection dir, int matrixX, int matrixZ, double x, double y, double z, float scale) { GL11.glPushMatrix(); @@ -69,7 +69,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer GL11.glTranslated(x + 0.5f, y + 0.5f, z + 0.5f); RenderUtility.rotateBlockBasedOnDirection(dir); GL11.glTranslated(translation.x, translation.y, translation.z); - GL11.glScalef(0.7f, 0.7f, 0.7f); + GL11.glScalef(scale,scale,scale); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); renderItem(tileEntity.worldObj, ForgeDirection.UP, inventory[i], new Vector3(0, 0, 0), 0, 4); GL11.glPopMatrix();