From e341f4d2f3244c91f57a79be8139ca2e3bcea2d3 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 11 Feb 2012 01:55:30 -0500 Subject: [PATCH] Add more crystal chest stuff... --- .../client/TileEntityIronChestRenderer.java | 83 +++++++++++++----- .../ironchest/TileEntityCrystalChest.java | 7 ++ .../mods/ironchest/TileEntityIronChest.java | 6 ++ .../mods/ironchest/sprites/item_textures.png | Bin 0 -> 5661 bytes .../mods/ironchest/sprites/crystalchest.png | Bin 0 -> 4102 bytes 5 files changed, 75 insertions(+), 21 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/item_textures.png create mode 100644 IronChests2/resources/cpw/mods/ironchest/sprites/crystalchest.png diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 633e66c..5f34f6e 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -12,20 +12,25 @@ import static org.lwjgl.opengl.GL11.glTranslatef; import java.util.Random; import net.minecraft.src.Block; +import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.ModelChest; import net.minecraft.src.RenderBlocks; +import net.minecraft.src.RenderManager; +import net.minecraft.src.Tessellator; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; import net.minecraft.src.forge.ForgeHooksClient; +import net.minecraft.src.forge.ICustomItemRenderer; +import net.minecraft.src.forge.MinecraftForgeClient; import cpw.mods.ironchest.TileEntityIronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private Random random; private RenderBlocks renderBlocks; - private static float[][] shifts = { { 0.3F, 0.7F, 0.3F }, { 0.7F, 0.7F, 0.3F }, { 0.3F, 0.7F, 0.7F }, { 0.7F, 0.7F, 0.7F }, - { 0.3F, 0.15F, 0.3F }, { 0.7F, 0.15F, 0.3F }, { 0.3F, 0.15F, 0.7F }, { 0.7F, 0.15F, 0.7F }, { 0.5F, 0.35F, 0.5F }, }; + 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.35F, 0.5F }, }; public TileEntityIronChestRenderer() { model = new ModelChest(); @@ -81,10 +86,13 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { float shiftY; float shiftZ; int shift = 0; - float blockScale = 0.125F; + float spread = 0.1F; + float blockScale = 0.15F; + float timeD = (float) (360.0 * (double) (System.currentTimeMillis() & 0x3FFFL) / (double) 0x3FFFL); if (tile.getTopItemStacks()[1] == null) { shift = 8; - blockScale = 0.25F; + blockScale = 0.2F; + spread = 0.25F; } for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { @@ -98,33 +106,66 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shiftY = shifts[shift][1]; shiftZ = shifts[shift][2]; shift++; - if (item.itemID < Block.blocksList.length && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { - glPushMatrix(); + ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(item.itemID); + float localScale = blockScale; + if (item.itemID < Block.blocksList.length) { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); int j = Block.blocksList[item.itemID].getRenderType(); - float localScale = blockScale; if (j == 1 || j == 19 || j == 12 || j == 2) { localScale = 2 * blockScale; } - glTranslatef(shiftX, shiftY, shiftZ); - glScalef(localScale, localScale, localScale); - float timeD = (float) (360.0 * (double) (System.currentTimeMillis() & 0x3FFFL) / (double) 0x3FFFL); - for (int miniBlocks = 0; miniBlocks < (item.stackSize / 32) + 1; miniBlocks++) { - glPushMatrix(); - glRotatef(timeD, 0.0F, 1.0F, 0.0F); - if (miniBlocks > 0) { - float minishiftX = ((random.nextFloat() * 2.0F - 1.0F) * 0.1F) / localScale; - float minishiftY = ((random.nextFloat() * 2.0F - 1.0F) * 0.1F) / localScale; - float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * 0.1F) / localScale; - glTranslatef(minishiftX, minishiftY, minishiftZ); - } - renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); + } + glPushMatrix(); + glTranslatef(shiftX, shiftY, shiftZ); + glScalef(localScale, localScale, localScale); + for (int miniBlocks = 0; miniBlocks < (item.stackSize / 32) + 1; miniBlocks++) { + glPushMatrix(); + glRotatef(timeD, 0.0F, 1.0F, 0.0F); + if (miniBlocks > 0) { + float minishiftX = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; + float minishiftY = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; + float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; + glTranslatef(minishiftX, minishiftY, minishiftZ); + } - glPopMatrix(); + if (customRenderer != null) { + ForgeHooksClient.renderCustomItem(customRenderer, renderBlocks, item.itemID, item.getItemDamage(), 1.0F); + } else if (item.itemID < Block.blocksList.length && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); + } else { + int i = item.getIconIndex(); + if (item.itemID >= Block.blocksList.length) { + bindTextureByName("/gui/items.png"); + ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); + } + Tessellator tessellator = Tessellator.instance; + float f5 = (float) ((i % 16) * 16 + 0) / 256F; + float f8 = (float) ((i % 16) * 16 + 16) / 256F; + float f10 = (float) ((i / 16) * 16 + 0) / 256F; + float f12 = (float) ((i / 16) * 16 + 16) / 256F; + float f13 = 1.0F; + float f14 = 0.5F; + float f15 = 0.25F; + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + tessellator.addVertexWithUV(0.0F - f14, 0.0F - f15, 0.0D, f5, f12); + tessellator.addVertexWithUV(f13 - f14, 0.0F - f15, 0.0D, f8, f12); + tessellator.addVertexWithUV(f13 - f14, 1.0F - f15, 0.0D, f8, f10); + tessellator.addVertexWithUV(0.0F - f14, 1.0F - f15, 0.0D, f5, f10); + tessellator.draw(); + glScalef(-1.0F, 1.0F, 1.0F); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + tessellator.addVertexWithUV(0.0F - f14, 0.0F - f15, 0.0D, f5, f12); + tessellator.addVertexWithUV(f13 - f14, 0.0F - f15, 0.0D, f8, f12); + tessellator.addVertexWithUV(f13 - f14, 1.0F - f15, 0.0D, f8, f10); + tessellator.addVertexWithUV(0.0F - f14, 1.0F - f15, 0.0D, f5, f10); + tessellator.draw(); } glPopMatrix(); } + glPopMatrix(); } glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glEnable(2896 /* GL_LIGHTING */); diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java new file mode 100644 index 0000000..ac6911e --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java @@ -0,0 +1,7 @@ +package cpw.mods.ironchest; + +public class TileEntityCrystalChest extends TileEntityIronChest { + public TileEntityCrystalChest() { + super(IronChestType.CRYSTAL); + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 7b725c4..38ffc64 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -20,6 +20,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { public ItemStack[] chestContents; private ItemStack[] topStacks; private byte facing; + private boolean inventoryTouched; public TileEntityIronChest() { this(IronChestType.IRON); @@ -54,6 +55,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } @Override public ItemStack getStackInSlot(int i) { + inventoryTouched=true; return chestContents[i]; } @@ -212,6 +214,10 @@ public class TileEntityIronChest extends TileEntity implements IInventory { // Resynchronize clients with the server state if ((++ticksSinceSync % 20) * 4 == 0) { worldObj.playNoteAt(xCoord, yCoord, zCoord, 3, ( ( numUsingPlayers<<3 ) & 0xF8 ) | (facing & 0x7)); + if (inventoryTouched) { + inventoryTouched=false; + sortTopStacks(); + } } prevLidAngle = lidAngle; float f = 0.1F; diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/item_textures.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/item_textures.png new file mode 100644 index 0000000000000000000000000000000000000000..905bf49acae0341fbd5c23001ad35aeaca19eb26 GIT binary patch literal 5661 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 literal 0 HcmV?d00001 diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/crystalchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/crystalchest.png new file mode 100644 index 0000000000000000000000000000000000000000..3d17565296ee01de29c01d76a09338fd1bd78eb3 GIT binary patch literal 4102 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 Ef-L~Vg8%>k literal 0 HcmV?d00001