From c640fd5e63188078a6d1deb5f11b3e1ba0838f21 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 26 Jan 2012 17:37:39 -0500 Subject: [PATCH 001/188] Initial checkin. Build script works nicely. Some basic code in place. --- IronChests2/.classpath | 9 + IronChests2/.gitignore | 2 + IronChests2/.project | 17 ++ .../.settings/org.eclipse.jdt.core.prefs | 12 ++ IronChests2/build.xml | 121 +++++++++++ .../client/TileEntityIronChestRenderer.java | 62 ++++++ .../net/minecraft/src/mod_IronChest.java | 34 +++ .../cpw/mods/ironchest/BlockIronChest.java | 86 ++++++++ .../mods/ironchest/TileEntityIronChest.java | 203 ++++++++++++++++++ 9 files changed, 546 insertions(+) create mode 100644 IronChests2/.classpath create mode 100644 IronChests2/.gitignore create mode 100644 IronChests2/.project create mode 100644 IronChests2/.settings/org.eclipse.jdt.core.prefs create mode 100644 IronChests2/build.xml create mode 100644 IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java create mode 100644 IronChests2/client/net/minecraft/src/mod_IronChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/BlockIronChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java diff --git a/IronChests2/.classpath b/IronChests2/.classpath new file mode 100644 index 0000000..893f780 --- /dev/null +++ b/IronChests2/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/IronChests2/.gitignore b/IronChests2/.gitignore new file mode 100644 index 0000000..81886e9 --- /dev/null +++ b/IronChests2/.gitignore @@ -0,0 +1,2 @@ +/mod_ironchests-client-2.0.zip +/mod_ironchests-server-2.0.zip diff --git a/IronChests2/.project b/IronChests2/.project new file mode 100644 index 0000000..39d9b6c --- /dev/null +++ b/IronChests2/.project @@ -0,0 +1,17 @@ + + + IronChests2 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/IronChests2/.settings/org.eclipse.jdt.core.prefs b/IronChests2/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..0f258a1 --- /dev/null +++ b/IronChests2/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +#Wed Jan 25 17:13:27 EST 2012 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/IronChests2/build.xml b/IronChests2/build.xml new file mode 100644 index 0000000..91c84b4 --- /dev/null +++ b/IronChests2/build.xml @@ -0,0 +1,121 @@ + + + + + Iron Chests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java new file mode 100644 index 0000000..1acba70 --- /dev/null +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -0,0 +1,62 @@ +package cpw.mods.ironchest.client; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.ironchest.TileEntityIronChest; + +import net.minecraft.src.ModelChest; +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { + + public TileEntityIronChestRenderer() { + model = new ModelChest(); + } + + public void render(TileEntityIronChest tile, double d, double d1, double d2, float f) { + int facing = 3; + int metatype = 0; + if (tile != null && tile.worldObj != null) { + metatype = tile.getBlockMetadata(); + facing = tile.getFacing(); + } + bindTextureByName(tile.getType().getModelTexture()); + + GL11.glPushMatrix(); + GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) d, (float) d1 + 1.0F, (float) d2 + 1.0F); + GL11.glScalef(1.0F, -1F, -1F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + int k = 0; + if (facing == 2) { + k = 180; + } + if (facing == 3) { + k = 0; + } + if (facing == 4) { + k = 90; + } + if (facing == 5) { + k = -90; + } + GL11.glRotatef(k, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float f1 = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * f; + f1 = 1.0F - f1; + f1 = 1.0F - f1 * f1 * f1; + model.chestLid.rotateAngleX = -((f1 * 3.141593F) / 2.0F); + model.func_35402_a(); + GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) { + render((TileEntityIronChest) tileentity, d, d1, d2, f); + } + + private ModelChest model; +} diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java new file mode 100644 index 0000000..5c9cf1b --- /dev/null +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.io.File; + +import cpw.mods.ironchest.BlockIronChest; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.forge.Configuration; + +public class mod_IronChest extends BaseModMp { + + public static BlockIronChest ironChestBlock; + + @Override + public String getVersion() { + return "2.0"; + } + + @Override + public void load() { + Configuration cfg=new Configuration(new File(Minecraft.getMinecraftDir(),"config/IronChest.cfg")); + try { + cfg.load(); + ironChestBlock=new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("blockVeryLargeChest", 181).value)); + } catch (Exception e) { + ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); + e.printStackTrace(System.err); + throw new RuntimeException(e); + } finally { + cfg.save(); + } + } + +} diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java new file mode 100644 index 0000000..f01390c --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -0,0 +1,86 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.Material; +import net.minecraft.src.MathHelper; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraft.src.forge.ITextureProvider; + +public class BlockIronChest extends BlockContainer implements ITextureProvider { + + public BlockIronChest(int id) { + super(id, Material.iron); + setHardness(3.0F); + } + + @Override + public TileEntity getBlockEntity() { + return null; + } + + @Override + public String getTextureFile() { + return "ic2/sprites/ironchest_block_tex.png"; + } + + @Override + public TileEntity getBlockEntity(int metadata) { + return TileEntityIronChest.makeEntity(metadata); + } + + public int getBlockTexture(IBlockAccess worldAccess, int i, int j, int k, int l) { + TileEntity te = worldAccess.getBlockTileEntity(i, j, k); + if (te != null && te instanceof TileEntityIronChest) { + TileEntityIronChest icte=(TileEntityIronChest) te; + if (l==0 || l==1) { // Top and Bottom + return icte.getType().getTextureRow()*16; + } else if (l==getTextureFace(icte.getFacing())) { // Front + return icte.getType().getTextureRow()*16+1; + } else { // Back and Sides + return icte.getType().getTextureRow()*16+2; + } + } + return 0; + } + + public byte getTextureFace(byte facing) { + switch (facing) { + case 0: + return 3; + case 1: + return 4; + case 2: + return 2; + case 3: + return 5; + default: + return 0; + } + } + + @Override + public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving) { + super.onBlockPlacedBy(world, i, j, k, entityliving); + byte chestFacing = 0; + int facing = MathHelper.floor_double((double) ((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; + if (facing == 0) { + chestFacing = 2; + } + if (facing == 1) { + chestFacing = 5; + } + if (facing == 2) { + chestFacing = 3; + } + if (facing == 3) { + chestFacing = 4; + } + TileEntity te = world.getBlockTileEntity(i, j, k); + if (te != null && te instanceof TileEntityIronChest) { + ((TileEntityIronChest) te).setFacing(chestFacing); + } + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java new file mode 100644 index 0000000..c860582 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -0,0 +1,203 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.TileEntity; + +public class TileEntityIronChest extends TileEntity implements IInventory { + public enum Type { + IRON(54,"IronChest","ironchest.png",0), + GOLD(81,"GoldChest","goldchest.png",1), + DIAMOND(108,"DiamondChest","diamondchest.png",2); + private int size; + private String friendlyName; + private String modelTexture; + private int textureRow; + + Type(int size, String friendlyName, String modelTexture, int textureRow) { + this.size=size; + this.friendlyName=friendlyName; + this.modelTexture=modelTexture; + this.textureRow=textureRow; + } + + public String getModelTexture() { + return modelTexture; + } + + public int getTextureRow() { + return textureRow; + } + } + private int ticksSinceSync; + public float prevLidAngle; + public float lidAngle; + private int numUsingPlayers; + private Type type; + public ItemStack[] chestContents; + private byte facing; + + public TileEntityIronChest(Type type, byte facing) { + this.type=type; + this.facing=facing; + this.chestContents=new ItemStack[getSizeInventory()]; + } + @Override + public int getSizeInventory() { + return type.size; + } + + public byte getFacing() { + return this.facing; + } + @Override + public String getInvName() { + return type.friendlyName; + } + + public Type getType() { + return type; + } + @Override + public ItemStack getStackInSlot(int i) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemstack) { + // TODO Auto-generated method stub + + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) + { + super.readFromNBT(nbttagcompound); + NBTTagList nbttaglist = nbttagcompound.getTagList("Items"); + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < nbttaglist.tagCount(); i++) + { + NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i); + int j = nbttagcompound1.getByte("Slot") & 0xff; + if (j >= 0 && j < chestContents.length) + { + chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) + { + super.writeToNBT(nbttagcompound); + NBTTagList nbttaglist = new NBTTagList(); + for (int i = 0; i < chestContents.length; i++) + { + if (chestContents[i] != null) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte)i); + chestContents[i].writeToNBT(nbttagcompound1); + nbttaglist.setTag(nbttagcompound1); + } + } + + nbttagcompound.setTag("Items", nbttaglist); + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer entityplayer) { + if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } + return entityplayer.getDistanceSq((double) xCoord + 0.5D, (double) yCoord + 0.5D, (double) zCoord + 0.5D) <= 64D; + } + + @Override + public void updateEntity() { + super.updateEntity(); + // Resynchronize clients with the server state + if ((++ticksSinceSync % 20) * 4 == 0) { + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + } + prevLidAngle = lidAngle; + float f = 0.1F; + if (numUsingPlayers > 0 && lidAngle == 0.0F) { + double d = (double) xCoord + 0.5D; + double d1 = (double) zCoord + 0.5D; + worldObj.playSoundEffect(d, (double) yCoord + 0.5D, d1, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + if (numUsingPlayers == 0 && lidAngle > 0.0F || numUsingPlayers > 0 && lidAngle < 1.0F) { + float f1 = lidAngle; + if (numUsingPlayers > 0) { + lidAngle += f; + } else { + lidAngle -= f; + } + if (lidAngle > 1.0F) { + lidAngle = 1.0F; + } + float f2 = 0.5F; + if (lidAngle < f2 && f1 >= f2) { + double d2 = (double) xCoord + 0.5D; + double d3 = (double) zCoord + 0.5D; + worldObj.playSoundEffect(d2, (double) yCoord + 0.5D, d3, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + if (lidAngle < 0.0F) { + lidAngle = 0.0F; + } + } + } + + @Override + public void onTileEntityPowered(int i, int j) + { + if (i == 1) + { + numUsingPlayers = j; + } + } + + @Override + public void openChest() { + numUsingPlayers++; + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + } + + @Override + public void closeChest() { + numUsingPlayers--; + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + } + + protected static TileEntity makeEntity(int metadata) { + //Compatibility + int chesttype=metadata; + int facing=0; + + if (metadata>2) { + chesttype=metadata<<2; + facing=metadata&3; + } + return new TileEntityIronChest(Type.values()[chesttype],(byte)facing); + } + public void setFacing(byte chestFacing) { + this.facing=chestFacing; + } + +} From 1afe4d8e615cf0399695bc6fb676a590ee1e53d5 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 26 Jan 2012 23:50:52 -0500 Subject: [PATCH 002/188] More stuff, starting to work in a test world. Nice... --- IronChests2/build.xml | 9 +- .../net/minecraft/src/mod_IronChest.java | 22 ++++- .../cpw/mods/ironchest/BlockIronChest.java | 34 ++++--- .../cpw/mods/ironchest/IronChestType.java | 87 +++++++++++++++++ .../cpw/mods/ironchest/ItemIronChest.java | 26 ++++++ .../mods/ironchest/TileEntityGoldChest.java | 8 ++ .../mods/ironchest/TileEntityIronChest.java | 88 +++++++++--------- .../resources/ic2/sprites/ironchest.png | Bin 0 -> 4295 bytes .../ic2/sprites/ironchest_block_tex.png | Bin 0 -> 3246 bytes IronChests2/resources/texturesheet.xcf | Bin 0 -> 8180 bytes 10 files changed, 208 insertions(+), 66 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/IronChestType.java create mode 100644 IronChests2/common/cpw/mods/ironchest/ItemIronChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java create mode 100644 IronChests2/resources/ic2/sprites/ironchest.png create mode 100644 IronChests2/resources/ic2/sprites/ironchest_block_tex.png create mode 100644 IronChests2/resources/texturesheet.xcf diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 91c84b4..48c81b5 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -68,7 +68,7 @@ - + @@ -114,8 +114,9 @@ - - - + + + + diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java index 5c9cf1b..8fee928 100644 --- a/IronChests2/client/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -3,13 +3,16 @@ package net.minecraft.src; import java.io.File; import cpw.mods.ironchest.BlockIronChest; - +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.ItemIronChest; import net.minecraft.client.Minecraft; import net.minecraft.src.forge.Configuration; +import net.minecraft.src.forge.MinecraftForgeClient; public class mod_IronChest extends BaseModMp { public static BlockIronChest ironChestBlock; + public static boolean compatibilityMode; @Override public String getVersion() { @@ -18,10 +21,17 @@ public class mod_IronChest extends BaseModMp { @Override public void load() { - Configuration cfg=new Configuration(new File(Minecraft.getMinecraftDir(),"config/IronChest.cfg")); + File cfgFile = new File(Minecraft.getMinecraftDir(), "config/IronChest.cfg"); + // If our config file exists + boolean defaultCompatibility = cfgFile.exists(); + Configuration cfg = new Configuration(cfgFile); try { cfg.load(); - ironChestBlock=new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("blockVeryLargeChest", 181).value)); + // But doesn't have the compatibilityMode flag, enable compatibility + // mode + compatibilityMode = Boolean.parseBoolean(cfg.getOrCreateBooleanProperty("compatibilityMode", Configuration.GENERAL_PROPERTY, + defaultCompatibility).value); + ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("blockVeryLargeChest", 181).value)); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); e.printStackTrace(System.err); @@ -29,6 +39,12 @@ public class mod_IronChest extends BaseModMp { } finally { cfg.save(); } + + ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); + IronChestType.registerTileEntities(); + IronChestType.registerRecipes(ironChestBlock); + + MinecraftForgeClient.preloadTexture("ic2/sprites/ironchest_block_tex.png"); } } diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index f01390c..6440bb7 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -28,7 +28,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { @Override public TileEntity getBlockEntity(int metadata) { - return TileEntityIronChest.makeEntity(metadata); + return IronChestType.makeEntity(metadata); } public int getBlockTexture(IBlockAccess worldAccess, int i, int j, int k, int l) { @@ -36,34 +36,38 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { if (te != null && te instanceof TileEntityIronChest) { TileEntityIronChest icte=(TileEntityIronChest) te; if (l==0 || l==1) { // Top and Bottom - return icte.getType().getTextureRow()*16; - } else if (l==getTextureFace(icte.getFacing())) { // Front return icte.getType().getTextureRow()*16+1; - } else { // Back and Sides + } else if (l==icte.getFacing()) { // Front return icte.getType().getTextureRow()*16+2; + } else { // Back and Sides + return icte.getType().getTextureRow()*16; } } return 0; } - public byte getTextureFace(byte facing) { - switch (facing) { + @Override + public int getBlockTextureFromSideAndMetadata(int i, int j) { + IronChestType typ=IronChestType.values()[j]; + switch (i) { case 0: - return 3; case 1: - return 4; + return typ.getTextureRow()*16+1; case 2: - return 2; - case 3: - return 5; + return typ.getTextureRow()*16+2; default: - return 0; + return typ.getTextureRow()*16; } } - + + @Override + public void onBlockAdded(World world, int i, int j, int k) { + super.onBlockAdded(world, i, j, k); + world.markBlockNeedsUpdate(i, j, k); + } + @Override public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving) { - super.onBlockPlacedBy(world, i, j, k, entityliving); byte chestFacing = 0; int facing = MathHelper.floor_double((double) ((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; if (facing == 0) { @@ -78,9 +82,11 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { if (facing == 3) { chestFacing = 4; } + System.out.printf("Facing %d %d\n", facing,chestFacing); TileEntity te = world.getBlockTileEntity(i, j, k); if (te != null && te instanceof TileEntityIronChest) { ((TileEntityIronChest) te).setFacing(chestFacing); + world.markBlockNeedsUpdate(i, j, k); } } } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java new file mode 100644 index 0000000..2dcbc6f --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -0,0 +1,87 @@ +package cpw.mods.ironchest; + +import java.util.Arrays; + +import net.minecraft.src.Block; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.ModLoader; +import net.minecraft.src.TileEntity; +import net.minecraft.src.mod_IronChest; + +public enum IronChestType { + IRON(54, "IronChest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm"), + GOLD(81, "GoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm"); + // DIAMOND(108,"DiamondChest","diamondchest.png",2); + int size; + String friendlyName; + private String modelTexture; + private int textureRow; + private Class clazz; + private Item mat; + private String[] recipes; + + IronChestType(int size, String friendlyName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { + this.size = size; + this.friendlyName = friendlyName; + this.modelTexture = modelTexture; + this.textureRow = textureRow; + this.clazz = clazz; + this.mat = mat; + this.recipes=recipes; + } + + public String getModelTexture() { + return modelTexture; + } + + public int getTextureRow() { + return textureRow; + } + + public static TileEntity makeEntity(int metadata) { + //Compatibility + int chesttype=metadata; + int facing=0; + + if (metadata>2) { + chesttype=metadata<<2; + facing=metadata&3; + } + try { + TileEntityIronChest te=values()[chesttype].clazz.newInstance(); + if (mod_IronChest.compatibilityMode) { + te.setFacing((byte)facing); + } + return te; + } catch (InstantiationException e) { + // unpossible + e.printStackTrace(); + } catch (IllegalAccessException e) { + // unpossible + e.printStackTrace(); + } + return null; + } + + public static void registerTileEntities() { + for (IronChestType typ : values()) { + System.out.printf("Registering %s\n",typ.friendlyName); + ModLoader.RegisterTileEntity(typ.clazz, typ.friendlyName); + } + } + + public static void registerRecipes(BlockIronChest blockResult) { + ItemStack previous=new ItemStack(Block.chest); + for (IronChestType typ : values()) { + for (String recipe : typ.recipes) { + addRecipe(new ItemStack(blockResult, typ.ordinal()), recipe, 'm', typ.mat, 'P', previous, 'G', Block.glass, 'C', Block.chest); + } + previous=new ItemStack(blockResult,typ.ordinal()); + } + } + private static void addRecipe(ItemStack is, Object... parts) { + System.out.printf("Recipe : %s\n",Arrays.asList(parts)); + ModLoader.AddRecipe(is, parts); + } +} \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java new file mode 100644 index 0000000..5e3059d --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -0,0 +1,26 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; + +public class ItemIronChest extends ItemBlock { + + public ItemIronChest(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + } + + @Override + public int getMetadata(int i) { + if (i<=IronChestType.values().length) { + return i; + } else { + return 0; + } + } + @Override + public String getItemNameIS(ItemStack itemstack) { + return IronChestType.values()[itemstack.getItemDamage()].friendlyName; + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java new file mode 100644 index 0000000..2d195ef --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java @@ -0,0 +1,8 @@ +package cpw.mods.ironchest; + +public class TileEntityGoldChest extends TileEntityIronChest { + + public TileEntityGoldChest() { + super(IronChestType.GOLD); + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index c860582..5c54023 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -8,41 +8,21 @@ import net.minecraft.src.NBTTagList; import net.minecraft.src.TileEntity; public class TileEntityIronChest extends TileEntity implements IInventory { - public enum Type { - IRON(54,"IronChest","ironchest.png",0), - GOLD(81,"GoldChest","goldchest.png",1), - DIAMOND(108,"DiamondChest","diamondchest.png",2); - private int size; - private String friendlyName; - private String modelTexture; - private int textureRow; - - Type(int size, String friendlyName, String modelTexture, int textureRow) { - this.size=size; - this.friendlyName=friendlyName; - this.modelTexture=modelTexture; - this.textureRow=textureRow; - } - - public String getModelTexture() { - return modelTexture; - } - - public int getTextureRow() { - return textureRow; - } - } private int ticksSinceSync; public float prevLidAngle; public float lidAngle; private int numUsingPlayers; - private Type type; + private IronChestType type; public ItemStack[] chestContents; private byte facing; - public TileEntityIronChest(Type type, byte facing) { + public TileEntityIronChest() { + this(IronChestType.IRON); + } + + protected TileEntityIronChest(IronChestType type) { + super(); this.type=type; - this.facing=facing; this.chestContents=new ItemStack[getSizeInventory()]; } @Override @@ -58,25 +38,47 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return type.friendlyName; } - public Type getType() { + public IronChestType getType() { return type; } @Override public ItemStack getStackInSlot(int i) { - // TODO Auto-generated method stub - return null; + return chestContents[i]; } @Override public ItemStack decrStackSize(int i, int j) { - // TODO Auto-generated method stub - return null; + if (chestContents[i] != null) + { + if (chestContents[i].stackSize <= j) + { + ItemStack itemstack = chestContents[i]; + chestContents[i] = null; + onInventoryChanged(); + return itemstack; + } + ItemStack itemstack1 = chestContents[i].splitStack(j); + if (chestContents[i].stackSize == 0) + { + chestContents[i] = null; + } + onInventoryChanged(); + return itemstack1; + } + else + { + return null; + } } @Override public void setInventorySlotContents(int i, ItemStack itemstack) { - // TODO Auto-generated method stub - + chestContents[i] = itemstack; + if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) + { + itemstack.stackSize = getInventoryStackLimit(); + } + onInventoryChanged(); } @Override @@ -94,6 +96,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); } } + facing=nbttagcompound.getByte("facing"); } @Override @@ -113,6 +116,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } nbttagcompound.setTag("Items", nbttaglist); + nbttagcompound.setByte("facing", facing); } @Override @@ -170,6 +174,8 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (i == 1) { numUsingPlayers = j; + } else if (i == 2) { + facing = (byte)j; } } @@ -185,19 +191,11 @@ public class TileEntityIronChest extends TileEntity implements IInventory { worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); } - protected static TileEntity makeEntity(int metadata) { - //Compatibility - int chesttype=metadata; - int facing=0; - - if (metadata>2) { - chesttype=metadata<<2; - facing=metadata&3; - } - return new TileEntityIronChest(Type.values()[chesttype],(byte)facing); - } public void setFacing(byte chestFacing) { this.facing=chestFacing; + if (worldObj!=null) { + worldObj.playNoteAt(xCoord, yCoord, zCoord, 2, facing); + } } } diff --git a/IronChests2/resources/ic2/sprites/ironchest.png b/IronChests2/resources/ic2/sprites/ironchest.png new file mode 100644 index 0000000000000000000000000000000000000000..df883fff05d35b4ba2bedc18d10d047e116aa25f GIT binary patch literal 4295 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 bUl5@0bA_lnJ1M?>DS(!mo@zDB_SOFZXP5iB literal 0 HcmV?d00001 diff --git a/IronChests2/resources/ic2/sprites/ironchest_block_tex.png b/IronChests2/resources/ic2/sprites/ironchest_block_tex.png new file mode 100644 index 0000000000000000000000000000000000000000..a16321b90963d717736473665ece533113e5f209 GIT binary patch literal 3246 zcmeHJ`8yO^A0Oco*Hy12iAIH*vLr=AOqVQU8N#J(gKXtmVrsaSk+*WAG4^GUJhqCs zudzh763Q}DlemmA7-O=`OlD$?*gVJD&Y9 z_SfS80C}a|ApyXasqHvr5Kw0unHh;Ak_RP8gVvxO*I|UsHH39^WMoJb0$?2*5{L*1 z)r(+sjprv6aE&^r9L3RG1h?P^1gw(%Y8FX#L1=l>8KNZWk<5)VW@!{7-jH^!Hj zpZ6r)tJ+g?FCxZ^UF;) zv4L{gLHXJ>Y8OfgcG5u?8ygq7wS&8dx|GQF@S6nP{q@-WPp4BV=7bt4mK7KS*2ezX z^Jpts??%sCT)vx>+v#%QsVV)intbJm%2${zfUa`tNG9FdY6)A`p?eFW!BT33-xIe; zoj2Am90{y!B)5B)mp#t3!D9_o`xCi`fqjSc0Hqt=;IIT%I@+Y4Tj{&KYRK3qVsDQm zx%tg-U?X3e{pk>GdTeXMqjK62!!X*G+S_lYKT@-D9t^DW`;(0Zc1A)LVawk*&j8~> z$^KT+AezqX=mK^=ZH!d8p`nucd|ko`1c)?6uv6M8x7!(Xs_<=j3Ayv&P%|_|zzJi3 z)a3ds24rH=_kC=88LaD-PCn;ud31I%f?J3Sn-?zC3Kqvdz=9j1p5Ju@*^p?!NygC4dH(P&B z-ZW)-MiBl)>MFL5vNKDG-|LFJxAXbd+>Ka-w0Y&miwRcrmjg-_Tz}%Y&~* z3m1D4z@5ZT0XPG|g2mB9aBt^2_A|%Kl=6Jl@@j^84Z{BKf###pVW)2?M+l0Ya z1?9tBn!eL;Biok%sE8y0QV#(3%g=)6LFkUOE>9Ri<*gC}2~^OW1f!@h2n+7v;F5lP zPMA5&TlvaW9O1>5xA^4GtcAzJ7wAcq%8-drp$8pPHJj|SVzx{(&O;{hjJ+ykK7Ol^ zWY+Iu4dS$eHAR(9WU#7TRT@$FI?!xx#tLL{M3bMePN3xBDaKIJw)EVrTwer5d?rC0 z@b#ncIQcH$-spD~Yc7aOZAuU9(dI3A;KvF+b3PsD)i8d7^O;qkxS)6Iat$tY0N=@| zbeHw(2BIuy2F-hbkV$4r(radk+aJg2OAhOgv_S(Wv17g7^6!?yJl1DD1YF2&VtJ7M}YEa5M1;+5ZuZ*^=xoEA1Y9JD7mgt>TC z;VX#VMn~oP#{a?JQxQ)CToRNYTj=)UQK*TwZ-&l6h`z*_w|*h&oRh?~P#k`T9Yzhx znZz2VRa3t9P$jq0qyumUP+BsyAwR1}(d}`~iA1JbE3dVlyDVh-U;A*vawhpaITx(|jFA$8}Wilk7ttjqHN9b>MlIa%G zczu;lyOn9AGS%BiV?uhDXKDZ~$tMl>Pu!tKkqAS4($?58g{&r`3tQ>O&3a=?rb=h)LqNr#((zFDq8hP?8w+9?ir8n^FsylyIcY55(BXTb7gB`)(9Sx$0yio0R8nI>n(Rhc>$(A9{)8+yON_`xs0O%ISOS(cjN{^`oB?dW$oUutlL}*SC)B@exG0%+GT<&xLs%!z{6d2(8Je z?igCPu+=fX;t<3l>JIPK7ag(ToJhW}U9??~HCN!UQ*xM9CiUoA6Ks&>O!kcn9TX95 zsQ)ZHcM1L3A>>We?Z|qjtJ(^f{Yf@(@9z8fr0U|DM%_{_F=*)*pXi7QY_$h{zmP75 z5+5O_L)=f?grj<0i1Nm!PM|D0zj^&sz>mOmLRDvg!+(-AQ4SanUYld_m0TE{73Mml6fpbN?tH*`NUPZ4=hK{pQJrs&A(5YC74UX1ra7 z_FO;I*s#z`yr@$@$*K2Jr74p1^tQKVJmyZ{3ez0}l)4@{!Px_i?6N#4XXxj56d^!BEs1O=I zs&1jEwM3Y8KdZgDD}+S{FTbabfrV$2)b18V>E+FgqEp~Yv=AmGQ`IY6H8{ IXcdt5U)#d)7XSbN literal 0 HcmV?d00001 diff --git a/IronChests2/resources/texturesheet.xcf b/IronChests2/resources/texturesheet.xcf new file mode 100644 index 0000000000000000000000000000000000000000..0bc166c2b749354f1378e929ad22f86e559d63b4 GIT binary patch literal 8180 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 W31R<)LX$HA*7a&E4E@#lsQ&@k?c|F9 literal 0 HcmV?d00001 From 54baabba1ecb89de9c317f156c11f1702d05596b Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Fri, 27 Jan 2012 16:05:42 -0500 Subject: [PATCH 003/188] Basic chests into and out of world again --- .../net/minecraft/src/mod_IronChest.java | 7 +++- .../cpw/mods/ironchest/BlockIronChest.java | 9 ++++- .../cpw/mods/ironchest/IronChestType.java | 35 +++++++++++++----- .../cpw/mods/ironchest/ItemIronChest.java | 4 +- .../mods/ironchest/TileEntityIronChest.java | 2 +- .../resources/ic2/sprites/goldchest.png | Bin 0 -> 4284 bytes 6 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 IronChests2/resources/ic2/sprites/goldchest.png diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java index 8fee928..f597fa5 100644 --- a/IronChests2/client/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -5,6 +5,7 @@ import java.io.File; import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.ItemIronChest; +import cpw.mods.ironchest.client.TileEntityIronChestRenderer; import net.minecraft.client.Minecraft; import net.minecraft.src.forge.Configuration; import net.minecraft.src.forge.MinecraftForgeClient; @@ -41,9 +42,11 @@ public class mod_IronChest extends BaseModMp { } ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); - IronChestType.registerTileEntities(); + IronChestType.registerTranslations(); + IronChestType.registerTileEntities(TileEntityIronChestRenderer.class); IronChestType.registerRecipes(ironChestBlock); - + + System.out.printf("Item : %s\n", Item.itemsList[ironChestBlock.blockID]); MinecraftForgeClient.preloadTexture("ic2/sprites/ironchest_block_tex.png"); } diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 6440bb7..1ad6422 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -1,5 +1,7 @@ package cpw.mods.ironchest; +import java.util.Random; + import net.minecraft.src.BlockContainer; import net.minecraft.src.EntityLiving; import net.minecraft.src.IBlockAccess; @@ -13,6 +15,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { public BlockIronChest(int id) { super(id, Material.iron); + setBlockName("IronChest"); setHardness(3.0F); } @@ -53,7 +56,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { case 0: case 1: return typ.getTextureRow()*16+1; - case 2: + case 3: return typ.getTextureRow()*16+2; default: return typ.getTextureRow()*16; @@ -89,4 +92,8 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { world.markBlockNeedsUpdate(i, j, k); } } + @Override + protected int damageDropped(int i) { + return i; + } } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 2dcbc6f..699477a 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -7,11 +7,12 @@ import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.ModLoader; import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; import net.minecraft.src.mod_IronChest; public enum IronChestType { - IRON(54, "IronChest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm"), - GOLD(81, "GoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm"); + IRON(54, "Iron Chest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm"), + GOLD(81, "Gold Chest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm"); // DIAMOND(108,"DiamondChest","diamondchest.png",2); int size; String friendlyName; @@ -24,7 +25,7 @@ public enum IronChestType { IronChestType(int size, String friendlyName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { this.size = size; this.friendlyName = friendlyName; - this.modelTexture = modelTexture; + this.modelTexture = "ic2/sprites/"+modelTexture; this.textureRow = textureRow; this.clazz = clazz; this.mat = mat; @@ -64,24 +65,40 @@ public enum IronChestType { return null; } - public static void registerTileEntities() { + public static void registerTileEntities(Class renderer) { for (IronChestType typ : values()) { - System.out.printf("Registering %s\n",typ.friendlyName); - ModLoader.RegisterTileEntity(typ.clazz, typ.friendlyName); + try { + if (renderer!=null) { + ModLoader.RegisterTileEntity(typ.clazz, typ.name(),renderer.newInstance()); + } else { + ModLoader.RegisterTileEntity(typ.clazz, typ.name()); + } + } catch (InstantiationException e) { + // unpossible + e.printStackTrace(); + } catch (IllegalAccessException e) { + // unpossible + e.printStackTrace(); + } } } + public static void registerTranslations() { + for (IronChestType typ : values()) { + ModLoader.AddLocalization(typ.name()+".name", typ.friendlyName); + } + } public static void registerRecipes(BlockIronChest blockResult) { ItemStack previous=new ItemStack(Block.chest); for (IronChestType typ : values()) { for (String recipe : typ.recipes) { - addRecipe(new ItemStack(blockResult, typ.ordinal()), recipe, 'm', typ.mat, 'P', previous, 'G', Block.glass, 'C', Block.chest); + String[] recipeSplit=new String[] { recipe.substring(0,3),recipe.substring(3,6), recipe.substring(6,9) }; + addRecipe(new ItemStack(blockResult, 1, typ.ordinal()), recipeSplit, 'm', typ.mat, 'P', previous, 'G', Block.glass, 'C', Block.chest); } - previous=new ItemStack(blockResult,typ.ordinal()); + previous=new ItemStack(blockResult,1,typ.ordinal()); } } private static void addRecipe(ItemStack is, Object... parts) { - System.out.printf("Recipe : %s\n",Arrays.asList(parts)); ModLoader.AddRecipe(is, parts); } } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java index 5e3059d..7848cfb 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -13,7 +13,7 @@ public class ItemIronChest extends ItemBlock { @Override public int getMetadata(int i) { - if (i<=IronChestType.values().length) { + if (iqWJPr=eqX^1;+2}*_AyqFK6n~;G-1JCVH(_P`W*Ddl>K^H@amR9dmP=8ymAm18@h_d)tUJ zbl2UnoeQrpDT0 zb_Bpdr+@EfQ5Y%4D`s^(f+d13;%VO1wdv`&TcA zWDf;TFZn_*^@)p8EL>=y56%Fma>wx8brHiw!$spq8+gTCq(5u%D)d-*#b*c5N%dK` z)2Rp0|3krwdqumVD9N(Z?KaXVfTO7$;%czLk#;8i zb{lUDA!CZt?V(g63xV^YE@>Osnb?`l8dUM|2q`emQ(mJajkV|#5y-AGZV`UP_;-NA zRZcd+&OlOdnkk)Gnjt(9F>pKwbnJ*8#`9qR_JQg zs)QPJl|NGRd8GYm5`}%gNxwPbxkYK?t@W-UK5944=1@s~U)tLE;3&lb;l|Oqhxf%h z^G|s@Q`Bp!%ajrFM)J1JmWNL~HKFVIfyAdlW|Ui^m3fDe$xAHzVrydDFBD8VWIY^x zYjX2)?P?8bEo$|5x|Qm8E3q%Sbvx~kqv*7UjYJ$p^wH^KF6+-03QA#d(f?&TN1cE%K&_*X7H=-&Fr6Cr(yJoWom`CFgHj-r`Hh=M>f#-TQ- z80fFYD?Lp3X@PL+*FsdFa!`4zv6&qcYUNXUkM-zNy@wpvh1UIs{D#VfDTMijjZMFq z?iE^^cDxXKp=zRPGCcZW^x5cifnt%m?2O!2(N@t+(Q=#1&Cr{Y_$qw6hhfvk%@_82 z_^vx~H#j_9)^%1gR(6^A zeY;hJmwQTk-g^lPB_9+@#ER|Z?|tlli&(MPoY15$$&vA0#zmSV%%jk)TY}PV(wVk( zGYxGOAvH&+eRhpM8h1<9HP+RxEy*p}-}-Q^r|oUqh7DRdTgV63wnZ`Jv4qUd5Jr<$yWlN*dLJKHfgGfb@jYMB*&MQT&qG zfq}SbSl0Kylh&Q&q%4_$f8|S0kq!##qK()?FE)j1-fm3Tw#*6z+ znb+>x=G8}b3x}EdMmhJskM3=S`0h|!Q*FjY>@3XeI+@!^+b_4G{>5XtHCU69>sbiw zd906SMHfOhxfA@~zbROF(o$VJ(BVGrIqA9mW$9|M16^)S-j_VOJG682EwsxvExW(} z=n|y!MnwsoF?d8r`5U$NE|1E0W235?$mhsk$bU$sy~)K^)C}>?#2$Be*B^!NQv`>u zqf?D{uL;%=Ytt#uDUV~roSrr~TxH`Nt|DZ83{cS1iM4xb({;7hR{R5*zZI;@%9d)E>X_p}d(c4>VUyXm-L~+h$}PWdLEqHQvOk#* zcRuYbtnYC2?br+JZVmT5+U734Hn#Yy`@v7P^XaK#W%b4G!!ZA&!K2^HY>Sb1MNY>? zI_E+}_UgLKyKeo`+SQ&zEGA58I-D)c?k_y@=?N)4oLJC5qKJzbKg;}`PLCi@FGwGW zr;Xn!zOJFHyry~gbo-};f-olQEDIJGk~HjzJ3mUobs{l@QM#p$=6 z9nP18p}wI@uiu5r%R2wEIo|CJSqS0XFJGoN-+0LPNc7z6Z{u&PkCn&SoY~puWTg3r zCvNgr2^aGwpPPZDDF9(t0Kmim@b~-zw*d&20pObp04n(au={7-8q@=Te9KTr8yPzP zyaBUctx;9v#h9CSH>vAao(pb`37;JeOxZI&x28=bx*0-^_ z46y6hbxZ{eCXvZmO6l;>3ay@@^qT?X^d9wzqIt zBpbo4ZwJtxJM54jepdhqCFw<~ z6T@;G74g1|A6&+dB+n-necA%}GGuz@jT?eSYBBx};r1v+^Yp!H=Fn%6OTh38p^=IT@t9W2K$b^D?tZFfL7L>W3Yc zZ6_JEm`i+VDDkdqj&V3%BQz> znRgNZuzeYTrOW*l$BkReG+vlDCVmmu8Hn9f#{DPn#T`E^3QKXclCqEaO z?w3>T&5C{aXC%8T)w?lb{?mPr8G_)9A( zGj3w{xu{Wr+WqHJg^K+p3a(-{N#6T`CV$i1G?0*^Fj}>u__lAKo%i`v1_9C5J}A%B z{b9mVor>g}nm*S%az#IL-%+q!RQ<$z$P&jykEZW^kS?R9$8lZ`8_(6~=dnGr!OrjS z>Qr)o%O^W2#$1g}7Ab#kkbh~v%b%%S?-;4y5#RHX6==&mkSW!k%n;}mEk>HH<2E9Rfy(J->w6jHpQ`1Cj#LR_Pm+iIYa zFpY`Ss?q){*x-?2jiHjLYmn&a7QUuyZRZ_F>!NHU);xgxZ;3IU9ue1y%Xy&=GE)s@ zLEdu`aW{agk+M(5;Y%z&(?y8zx(bCH#SuJPS(E#+$jlKUHuz z+jZSip5|h=&^__ql9YsCW0SUl7M~=;nPtZsM#ss-yxJV1L@1N|lAKydp6g^VOLl#E zz8%}?Dg2`tiOl7i9^5{eu#>)Q>s^|Aj>?{09{E3WQSqg@6>=}ZN@vAqJ5*w zu<{VfvB2ncB@~ejMHEJTWoILup*$5_JG6$W=mNbV*vx(+Z(3@j8C0J#?`7i{MSb(S zgjt|gT&WeA3o+N=ZUEA(@lkAW Date: Fri, 27 Jan 2012 16:38:21 -0500 Subject: [PATCH 004/188] Custom renderer in and working --- .../ironchest/client/IronChestRenderHelper.java | 17 +++++++++++++++++ .../client/TileEntityIronChestRenderer.java | 2 -- .../client/net/minecraft/src/mod_IronChest.java | 3 ++- .../cpw/mods/ironchest/BlockIronChest.java | 15 +++++++++++++-- .../cpw/mods/ironchest/IronChestType.java | 4 +--- 5 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java diff --git a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java new file mode 100644 index 0000000..d8bf76f --- /dev/null +++ b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -0,0 +1,17 @@ +package cpw.mods.ironchest.client; + +import net.minecraft.src.Block; +import net.minecraft.src.ChestItemRenderHelper; +import net.minecraft.src.TileEntityRenderer; +import net.minecraft.src.mod_IronChest; + +public class IronChestRenderHelper extends ChestItemRenderHelper { + @Override + public void func_35609_a(Block block, int i, float f) { + if (block==mod_IronChest.ironChestBlock) { + TileEntityRenderer.instance.renderTileEntityAt(block.getTileEntity(i), 0.0D, 0.0D, 0.0D, 0.0F); + } else { + super.func_35609_a(block, i, f); + } + } +} diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 1acba70..df0ad25 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -16,9 +16,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { public void render(TileEntityIronChest tile, double d, double d1, double d2, float f) { int facing = 3; - int metatype = 0; if (tile != null && tile.worldObj != null) { - metatype = tile.getBlockMetadata(); facing = tile.getFacing(); } bindTextureByName(tile.getType().getModelTexture()); diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java index f597fa5..9c2fcfc 100644 --- a/IronChests2/client/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -5,6 +5,7 @@ import java.io.File; import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.ItemIronChest; +import cpw.mods.ironchest.client.IronChestRenderHelper; import cpw.mods.ironchest.client.TileEntityIronChestRenderer; import net.minecraft.client.Minecraft; import net.minecraft.src.forge.Configuration; @@ -46,7 +47,7 @@ public class mod_IronChest extends BaseModMp { IronChestType.registerTileEntities(TileEntityIronChestRenderer.class); IronChestType.registerRecipes(ironChestBlock); - System.out.printf("Item : %s\n", Item.itemsList[ironChestBlock.blockID]); + ChestItemRenderHelper.instance=new IronChestRenderHelper(); MinecraftForgeClient.preloadTexture("ic2/sprites/ironchest_block_tex.png"); } diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 1ad6422..e516a68 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -1,7 +1,5 @@ package cpw.mods.ironchest; -import java.util.Random; - import net.minecraft.src.BlockContainer; import net.minecraft.src.EntityLiving; import net.minecraft.src.IBlockAccess; @@ -29,6 +27,19 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { return "ic2/sprites/ironchest_block_tex.png"; } + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + @Override + public int getRenderType() { + return 22; + } @Override public TileEntity getBlockEntity(int metadata) { return IronChestType.makeEntity(metadata); diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 699477a..40bc2a0 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -1,7 +1,5 @@ package cpw.mods.ironchest; -import java.util.Arrays; - import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -25,7 +23,7 @@ public enum IronChestType { IronChestType(int size, String friendlyName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { this.size = size; this.friendlyName = friendlyName; - this.modelTexture = "ic2/sprites/"+modelTexture; + this.modelTexture = "/ic2/sprites/"+modelTexture; this.textureRow = textureRow; this.clazz = clazz; this.mat = mat; From cf605508ab3c086f310ef9f16b4da4719e7f5f45 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Fri, 27 Jan 2012 19:07:39 -0500 Subject: [PATCH 005/188] Working GUIs and Containers --- .../cpw/mods/ironchest/client/GUIChest.java | 77 ++++++++++++++++++ .../net/minecraft/src/mod_IronChest.java | 7 ++ .../cpw/mods/ironchest/BlockIronChest.java | 23 ++++++ .../mods/ironchest/ContainerDiamondChest.java | 46 +++++++++++ .../mods/ironchest/ContainerGoldChest.java | 50 ++++++++++++ .../mods/ironchest/IronChestContainer.java | 64 +++++++++++++++ .../cpw/mods/ironchest/IronChestType.java | 27 +++++- .../ironchest/TileEntityDiamondChest.java | 7 ++ .../resources/ic2/sprites/diamondchest.png | Bin 0 -> 4094 bytes .../ic2/sprites/diamondcontainer.png | Bin 0 -> 3826 bytes .../resources/ic2/sprites/goldcontainer.png | Bin 0 -> 4242 bytes 11 files changed, 297 insertions(+), 4 deletions(-) create mode 100644 IronChests2/client/cpw/mods/ironchest/client/GUIChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/IronChestContainer.java create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java create mode 100644 IronChests2/resources/ic2/sprites/diamondchest.png create mode 100644 IronChests2/resources/ic2/sprites/diamondcontainer.png create mode 100644 IronChests2/resources/ic2/sprites/goldcontainer.png diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java new file mode 100644 index 0000000..36a2d5b --- /dev/null +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -0,0 +1,77 @@ +package cpw.mods.ironchest.client; + +import java.lang.reflect.InvocationTargetException; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.ironchest.ContainerDiamondChest; +import cpw.mods.ironchest.ContainerGoldChest; +import cpw.mods.ironchest.IronChestContainer; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; +import net.minecraft.src.Container; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.GuiContainer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ModLoader; + +public class GUIChest extends GuiContainer { + public enum GUI { + GOLD(ContainerGoldChest.class,184,256,"/ic2/sprites/goldcontainer.png",IronChestType.GOLD), + DIAMOND(ContainerDiamondChest.class,238,256,"/ic2/sprites/diamondcontainer.png",IronChestType.DIAMOND); + + private Class clazz; + private int xSize; + private int ySize; + private String guiTexture; + private IronChestType mainType; + + private GUI(Class clazz, int xSize, int ySize, String guiTexture, IronChestType mainType) { + this.clazz=clazz; + this.xSize=xSize; + this.ySize=ySize; + this.guiTexture=guiTexture; + this.mainType=mainType; + } + + protected Container makeContainer(IInventory player, IInventory chest) { + try { + return clazz.getConstructor(IInventory.class,IInventory.class).newInstance(player,chest); + } catch (Exception e) { + // unpossible + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + public static void showGUI(TileEntityIronChest te, EntityPlayer player) { + for (GUI gui : values()) { + if (te.getType()==gui.mainType) { + ModLoader.OpenGUI(player, new GUIChest(gui,player.inventory,te)); + return; + } + } + player.displayGUIChest(te); + } + } + + private GUI type; + + private GUIChest(GUI type, IInventory player, IInventory chest) { + super(type.makeContainer(player,chest)); + this.type=type; + this.xSize=type.xSize; + this.ySize=type.ySize; + this.allowUserInput=false; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { + int tex = mc.renderEngine.getTexture(type.guiTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(tex); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java index 9c2fcfc..aba0b61 100644 --- a/IronChests2/client/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -5,6 +5,8 @@ import java.io.File; import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.ItemIronChest; +import cpw.mods.ironchest.TileEntityIronChest; +import cpw.mods.ironchest.client.GUIChest; import cpw.mods.ironchest.client.IronChestRenderHelper; import cpw.mods.ironchest.client.TileEntityIronChestRenderer; import net.minecraft.client.Minecraft; @@ -34,6 +36,7 @@ public class mod_IronChest extends BaseModMp { compatibilityMode = Boolean.parseBoolean(cfg.getOrCreateBooleanProperty("compatibilityMode", Configuration.GENERAL_PROPERTY, defaultCompatibility).value); ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("blockVeryLargeChest", 181).value)); + IronChestType.initGUIs(cfg); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); e.printStackTrace(System.err); @@ -51,4 +54,8 @@ public class mod_IronChest extends BaseModMp { MinecraftForgeClient.preloadTexture("ic2/sprites/ironchest_block_tex.png"); } + public static void openGUI(EntityPlayer player, TileEntityIronChest te) { + GUIChest.GUI.showGUI(te, player); + } + } diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index e516a68..f4de1c9 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -2,11 +2,13 @@ package cpw.mods.ironchest; import net.minecraft.src.BlockContainer; import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.IBlockAccess; import net.minecraft.src.Material; import net.minecraft.src.MathHelper; import net.minecraft.src.TileEntity; import net.minecraft.src.World; +import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.ITextureProvider; public class BlockIronChest extends BlockContainer implements ITextureProvider { @@ -73,6 +75,27 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { return typ.getTextureRow()*16; } } + @Override + public boolean blockActivated(World world, int i, int j, int k, EntityPlayer player) { + TileEntity te = world.getBlockTileEntity(i, j, k); + + if(te == null || !(te instanceof TileEntityIronChest)) + { + return true; + } + + if(world.isBlockSolidOnSide(i, j + 1, k, 0)) + { + return true; + } + + if (world.isRemote) { + return true; + } + + mod_IronChest.openGUI(player, (TileEntityIronChest)te); + return true; + } @Override public void onBlockAdded(World world, int i, int j, int k) { diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java b/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java new file mode 100644 index 0000000..dd9d8dd --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java @@ -0,0 +1,46 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.IInventory; +import net.minecraft.src.Slot; + +public class ContainerDiamondChest extends IronChestContainer { + public ContainerDiamondChest(IInventory playerInventory, IInventory chestInventory) { + super(playerInventory, chestInventory); + } + + private static final int NUM_ROWS = 9; + private static final int ROW_LENGTH = 12; + + + @Override + protected void layoutContainer(IInventory playerInventory, IInventory chestInventory) { + for(int i = 0; i < NUM_ROWS; i++) + { + for(int l = 0; l < ROW_LENGTH; l++) + { + addSlot(new Slot(chestInventory, l + i * ROW_LENGTH, 12 + l * 18, 8 + i * 18)); + } + + } + + for(int j = 0; j < 3; j++) + { + for(int i1 = 0; i1 < 9; i1++) + { + addSlot(new Slot(playerInventory, i1 + j * 9 + 9, 39 + i1 * 18, 174 + j * 18)); + } + + } + + for(int k = 0; k < 9; k++) + { + addSlot(new Slot(playerInventory, k, 39 + k * 18, 232)); + } + } + + @Override + protected int getRowLength() { + return ROW_LENGTH; + } + +} diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java b/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java new file mode 100644 index 0000000..301a547 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java @@ -0,0 +1,50 @@ +// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) braces deadcode + +package cpw.mods.ironchest; + +import net.minecraft.src.IInventory; +import net.minecraft.src.Slot; + +public class ContainerGoldChest extends IronChestContainer +{ + + private static final int NUM_ROWS = 9; + private static final int ROW_LENGTH = 9; + + public ContainerGoldChest(IInventory playerInventory, IInventory chestInventory) { + super(playerInventory,chestInventory); + } + + @Override + protected int getRowLength() { + return ROW_LENGTH; + } + + protected void layoutContainer(IInventory playerInventory, IInventory chestInventory) { + for(int i = 0; i < NUM_ROWS; i++) + { + for(int l = 0; l < NUM_ROWS; l++) + { + addSlot(new Slot(chestInventory, l + i * ROW_LENGTH, 12 + l * 18, 8 + i * 18)); + } + + } + + for(int j = 0; j < 3; j++) + { + for(int i1 = 0; i1 < 9; i1++) + { + addSlot(new Slot(playerInventory, i1 + j * 9 + 9, 12 + i1 * 18, 174 + j * 18)); + } + + } + + for(int k = 0; k < 9; k++) + { + addSlot(new Slot(playerInventory, k, 12 + k * 18, 232)); + } + } + +} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestContainer.java b/IronChests2/common/cpw/mods/ironchest/IronChestContainer.java new file mode 100644 index 0000000..7a5ab1a --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/IronChestContainer.java @@ -0,0 +1,64 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.Container; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Slot; + +public abstract class IronChestContainer extends Container { + public IronChestContainer(IInventory playerInventory, IInventory chestInventory) { + numRows = chestInventory.getSizeInventory() / getRowLength(); + chest = chestInventory; + chestInventory.openChest(); + layoutContainer(playerInventory, chestInventory); + + } + + protected abstract void layoutContainer(IInventory playerInventory, IInventory chestInventory); + protected abstract int getRowLength(); + + public boolean canInteractWith(EntityPlayer player) + { + return chest.isUseableByPlayer(player); + } + + public ItemStack transferStackInSlot(int i) + { + ItemStack itemstack = null; + Slot slot = (Slot)inventorySlots.get(i); + if(slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + if(i < numRows * getRowLength()) + { + if(!mergeItemStack(itemstack1, numRows * getRowLength(), inventorySlots.size(), true)) + { + return null; + } + } else + if(!mergeItemStack(itemstack1, 0, numRows * getRowLength(), false)) + { + return null; + } + if(itemstack1.stackSize == 0) + { + slot.putStack(null); + } else + { + slot.onSlotChanged(); + } + } + return itemstack; + } + + public void onCraftGuiClosed(EntityPlayer entityplayer) + { + super.onCraftGuiClosed(entityplayer); + chest.closeChest(); + } + + private IInventory chest; + private int numRows; +} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 40bc2a0..b13da64 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -7,22 +7,26 @@ import net.minecraft.src.ModLoader; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; import net.minecraft.src.mod_IronChest; +import net.minecraft.src.forge.Configuration; public enum IronChestType { - IRON(54, "Iron Chest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm"), - GOLD(81, "Gold Chest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm"); - // DIAMOND(108,"DiamondChest","diamondchest.png",2); + IRON(54, "Iron Chest", null, "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm"), + GOLD(81, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm"), + DIAMOND(108,"Diamond Chest","guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "mmmmPmmmm"); int size; String friendlyName; private String modelTexture; + private String guiName; private int textureRow; private Class clazz; private Item mat; private String[] recipes; + private int guiId; - IronChestType(int size, String friendlyName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { + IronChestType(int size, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { this.size = size; this.friendlyName = friendlyName; + this.guiName=guiName; this.modelTexture = "/ic2/sprites/"+modelTexture; this.textureRow = textureRow; this.clazz = clazz; @@ -99,4 +103,19 @@ public enum IronChestType { private static void addRecipe(ItemStack is, Object... parts) { ModLoader.AddRecipe(is, parts); } + + public int getGUI() { + return guiId; + } + + public static void initGUIs(Configuration cfg) { + int defGUI=51; + for (IronChestType typ : values()) { + if (typ.guiName!=null) { + typ.guiId=Integer.parseInt(cfg.getOrCreateIntProperty(typ.guiName, Configuration.GENERAL_PROPERTY, defGUI++).value); + } else { + typ.guiId=-1; + } + } + } } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java new file mode 100644 index 0000000..c75b686 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java @@ -0,0 +1,7 @@ +package cpw.mods.ironchest; + +public class TileEntityDiamondChest extends TileEntityIronChest { + public TileEntityDiamondChest() { + super(IronChestType.DIAMOND); + } +} diff --git a/IronChests2/resources/ic2/sprites/diamondchest.png b/IronChests2/resources/ic2/sprites/diamondchest.png new file mode 100644 index 0000000000000000000000000000000000000000..64020b5770d6e290ef6339a7ec4a30e46f83a0fc GIT binary patch literal 4094 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 Date: Sat, 28 Jan 2012 20:52:12 -0500 Subject: [PATCH 006/188] Renamed to ContainerIronChestBase --- IronChests2/client/cpw/mods/ironchest/client/GUIChest.java | 6 +++--- .../common/cpw/mods/ironchest/ContainerDiamondChest.java | 2 +- .../common/cpw/mods/ironchest/ContainerGoldChest.java | 2 +- ...{IronChestContainer.java => ContainerIronChestBase.java} | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) rename IronChests2/common/cpw/mods/ironchest/{IronChestContainer.java => ContainerIronChestBase.java} (92%) diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 36a2d5b..58e4225 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -6,7 +6,7 @@ import org.lwjgl.opengl.GL11; import cpw.mods.ironchest.ContainerDiamondChest; import cpw.mods.ironchest.ContainerGoldChest; -import cpw.mods.ironchest.IronChestContainer; +import cpw.mods.ironchest.ContainerIronChestBase; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; import net.minecraft.src.Container; @@ -20,13 +20,13 @@ public class GUIChest extends GuiContainer { GOLD(ContainerGoldChest.class,184,256,"/ic2/sprites/goldcontainer.png",IronChestType.GOLD), DIAMOND(ContainerDiamondChest.class,238,256,"/ic2/sprites/diamondcontainer.png",IronChestType.DIAMOND); - private Class clazz; + private Class clazz; private int xSize; private int ySize; private String guiTexture; private IronChestType mainType; - private GUI(Class clazz, int xSize, int ySize, String guiTexture, IronChestType mainType) { + private GUI(Class clazz, int xSize, int ySize, String guiTexture, IronChestType mainType) { this.clazz=clazz; this.xSize=xSize; this.ySize=ySize; diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java b/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java index dd9d8dd..9d96740 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java @@ -3,7 +3,7 @@ package cpw.mods.ironchest; import net.minecraft.src.IInventory; import net.minecraft.src.Slot; -public class ContainerDiamondChest extends IronChestContainer { +public class ContainerDiamondChest extends ContainerIronChestBase { public ContainerDiamondChest(IInventory playerInventory, IInventory chestInventory) { super(playerInventory, chestInventory); } diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java b/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java index 301a547..bc9aab0 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java @@ -7,7 +7,7 @@ package cpw.mods.ironchest; import net.minecraft.src.IInventory; import net.minecraft.src.Slot; -public class ContainerGoldChest extends IronChestContainer +public class ContainerGoldChest extends ContainerIronChestBase { private static final int NUM_ROWS = 9; diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestContainer.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java similarity index 92% rename from IronChests2/common/cpw/mods/ironchest/IronChestContainer.java rename to IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 7a5ab1a..e37ba1d 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestContainer.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -6,8 +6,8 @@ import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.Slot; -public abstract class IronChestContainer extends Container { - public IronChestContainer(IInventory playerInventory, IInventory chestInventory) { +public abstract class ContainerIronChestBase extends Container { + public ContainerIronChestBase(IInventory playerInventory, IInventory chestInventory) { numRows = chestInventory.getSizeInventory() / getRowLength(); chest = chestInventory; chestInventory.openChest(); From ac91c8319ec6e1dec990746dd04dda6da2a24bc2 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 28 Jan 2012 20:55:20 -0500 Subject: [PATCH 007/188] Drop contents when removing --- .../cpw/mods/ironchest/client/GUIChest.java | 2 - .../cpw/mods/ironchest/BlockIronChest.java | 48 ++++++++++++++++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 58e4225..8592789 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -1,7 +1,5 @@ package cpw.mods.ironchest.client; -import java.lang.reflect.InvocationTargetException; - import org.lwjgl.opengl.GL11; import cpw.mods.ironchest.ContainerDiamondChest; diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index f4de1c9..2cbb8b4 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -1,22 +1,30 @@ package cpw.mods.ironchest; +import java.util.Random; + import net.minecraft.src.BlockContainer; +import net.minecraft.src.EntityItem; import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IBlockAccess; +import net.minecraft.src.ItemStack; import net.minecraft.src.Material; import net.minecraft.src.MathHelper; +import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntityChest; import net.minecraft.src.World; import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.ITextureProvider; public class BlockIronChest extends BlockContainer implements ITextureProvider { + private Random random; public BlockIronChest(int id) { super(id, Material.iron); setBlockName("IronChest"); setHardness(3.0F); + random=new Random(); } @Override @@ -119,7 +127,6 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { if (facing == 3) { chestFacing = 4; } - System.out.printf("Facing %d %d\n", facing,chestFacing); TileEntity te = world.getBlockTileEntity(i, j, k); if (te != null && te instanceof TileEntityIronChest) { ((TileEntityIronChest) te).setFacing(chestFacing); @@ -130,4 +137,43 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { protected int damageDropped(int i) { return i; } + + public void onBlockRemoval(World world, int i, int j, int k) + { + TileEntityChest tileentitychest = (TileEntityChest)world.getBlockTileEntity(i, j, k); + if (tileentitychest != null) + { + for (int l = 0; l < tileentitychest.getSizeInventory(); l++) + { + ItemStack itemstack = tileentitychest.getStackInSlot(l); + if (itemstack == null) + { + continue; + } + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + float f2 = random.nextFloat() * 0.8F + 0.1F; + while (itemstack.stackSize > 0) + { + int i1 = random.nextInt(21) + 10; + if (i1 > itemstack.stackSize) + { + i1 = itemstack.stackSize; + } + itemstack.stackSize -= i1; + EntityItem entityitem = new EntityItem(world, (float)i + f, (float)j + f1, (float)k + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); + float f3 = 0.05F; + entityitem.motionX = (float)random.nextGaussian() * f3; + entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float)random.nextGaussian() * f3; + if (itemstack.hasTagCompound()) + { + entityitem.item.setTagCompound((NBTTagCompound)itemstack.getTagCompound().cloneTag()); + } + world.spawnEntityInWorld(entityitem); + } + } + } + super.onBlockRemoval(world, i, j, k); + } } From e29f4af7ce6c347f2032fe6d471c82b212ef6404 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 28 Jan 2012 21:48:04 -0500 Subject: [PATCH 008/188] Added new graphics for copper and silver chests --- .../resources/ic2/sprites/copperchest.png | Bin 0 -> 4073 bytes .../ic2/sprites/ironchest_block_tex.png | Bin 3246 -> 4750 bytes .../resources/ic2/sprites/silverchest.png | Bin 0 -> 3934 bytes IronChests2/resources/texturesheet.xcf | Bin 8180 -> 13445 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 IronChests2/resources/ic2/sprites/copperchest.png create mode 100644 IronChests2/resources/ic2/sprites/silverchest.png diff --git a/IronChests2/resources/ic2/sprites/copperchest.png b/IronChests2/resources/ic2/sprites/copperchest.png new file mode 100644 index 0000000000000000000000000000000000000000..a008864f07a65b0fdaf5daba198d02737bf4aa07 GIT binary patch literal 4073 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 S^pZOX)9ZgYjJ?=k=o8@fWF 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 literal 0 HcmV?d00001 diff --git a/IronChests2/resources/texturesheet.xcf b/IronChests2/resources/texturesheet.xcf index 0bc166c2b749354f1378e929ad22f86e559d63b4..13a7d264a01916a8d6dec898c7109f8b43895d54 100644 GIT binary patch delta 4974 zcmc&%eQXow8Nc@&Kum;WV`77~DqTt0sMf7rCvE@Kle&3-Oq)7Q6+x*`g_@PJu0@5# zt6J~YKPt5$g4hmRwwd}IBXB;7IVWzMIB|MSu+Ll$`<%<2KS)A}KVl{(kuR9%cza&k zq4vh6eWSWQ}3s$vHMT< zzkdH~r1|L`^`ATX;`7ZjG8^Q&gG`N#&G_$~8CTfRiC-+Taed8_O3n!7^P*seJo zZ{^lTx%8$qO6KOTUmNAJ8?(y`>EyN9nNjXW_C^+ER~FLq*XCvt3790axlB5FeRhVN z$wNF^JG#Q9GwF0HIX6os;+pvFQEqPbYCJKMKnWB_(Z9q;IaQvLG*UhyNmFPF5~OfA zbVZy*lSs&2=J`=hB*mpkaZ=#<%R=z-C^t#MRN*qefxk1#1%pB`z-xF-04_AJA%J)U zuY3RkGJyOW0|ozR-RM@s8l^V~n*@~)_&@aN4U!ZtK0`vlH$12}Oi5Gtyn^579USP_ z8^RKja-zVG4-Jxo`2oE_U#nj>2%;ba`H`Uk7mL_cm)? zo7^hvyx_2Fbw1xn@#%Ft?Pof*I?l)WMn=5u3zXg3*@My-yqoN70BcA$JNC zUCYs%;Z_t73UV&h|^Vlm# zDta4Fm3sU0Fe*QG*OdqBh0xo(AF9T77o}Fu<>!-0XztsoB*$ek(5WbmGANx(CFcP^ znOr)vu#idDq!E`}fa!${nYootrIIO*TgX5yU}SnJL!|(K1=2|XH0e8dy(}mJCD$_P z6iO|oiwkDc*<>=6PLj!``D;*+O)o5DvndeKZK#D35L68aDhq3KAg}BVbVHN91Nxf9 zVNG_aq^=oAUC4mi{+daBG&hT8Da7IHUV)QgsU_lZu8ylWU zuL={sVGLm1sd#Y^-XK(jL{Ms2400pGLqnyjfOD2LXs9#P>+%y?~7b4|G- zO0k)e(WC5QDj|+@fk+&X3a6(^{r8zUJ%z2l==6Mr)APQ8fuRqf#Y#>u`nrFA%IX{} zJG~Sfpx=C>m0ho;Phpqr%%!JCt&n^h0(M2jt+|hnyO^<9{XF=uMV}e zb(W3Z=ju58;~zBsrX7G!$>*PjAAqa@quv@9gD`IDpFVEFoYauqSYvh z<`g+1`p3!fJOHLz(=sh9G9^bMyr27E42`XRV4`{dhhyA0sC(suF|T*bM0?-wXEp3C z7g$8U%S5vmFJ9>FacCSj&f4uJx~IFR$Ixl zCwU8VHE}f&NAVR^hS2Y~Fmc#+|O4`vwZ+|_duxWzG-2)9o_io>Fsv(_H;u`b|VMsE;wLNa9HXrK$fvc zmJ|+6^2Q3XfE{Yw_%U0dB3s6Fwxlv!M%q|wEV3m_(p|EQRb&khj~VIVO0tX*}(fv)heDvd-;u*t^KCWgAYg1J2kW)G#-VG-GA(Ve4Y7T{Z?{l0jC)6s#~P zSdDeYdw4kB&fM+tFPeY5;}9x!`L1FQ7vCQJS$SNsoq4pm8hiBDIIgGjVJQM_jv|Og z${MsQl92+hNIp!{3Q}^i0!+&_GNN-TOsfj16yyjA`FEfxBpEPLUQ(z?1o9PGjsT!3 zu9t_p2#Tx~-&f_x6-ZEJ6`+C)KiP|sD|`u2qtOV~5>(T`3$_Gh`AGwDbp%oq`DMS6iCO-53#1WTpr34 zL@8_dLs?aoDaeScaR>_PG@4#iro<8wPb3tqEhuL|S0JVe^;;2j59{YEtX~oRenEnMD_MU` z9P7X6nc&OLpHTd)-P&CQ{(IxczE6ER#?Mz6zjT)<@O>&8Q+UrhQ`q;T5@w1iGWAK? Ne#!N}`@h=$-vLf)a4`S? delta 446 zcmZq8{9-@Bj*)+(eIBFYH3kM&7X}877YqzMAq))saSRN?ObiTSTnr470SpW>izYu~ z+@add009C(3WQl07?|dxiZQLvd8oo5rJS2k z#W)XbzQ*astjdWh3{uJ~iz>#eyV;TV36rW2sxU~YfEucpfZ1j*0iXkRpbCSO3ZFq0 z6TY+ggYZ)()kCPlAf;l!zykwlu!ud|{7Y;O)8qrX8I!+Bs;Kg#N`tgWDWi%>8E>|i YQfF3;MimArmCZ*Llda#}EnCS10F8k#PXGV_ From b29ca924db1179ee966567ba2163ee9d563d878a Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 28 Jan 2012 21:48:46 -0500 Subject: [PATCH 009/188] Move under a non-IC2 directory name --- .../mods/ironchests}/sprites/copperchest.png | Bin .../mods/ironchests}/sprites/diamondchest.png | Bin .../mods/ironchests}/sprites/diamondcontainer.png | Bin .../mods/ironchests}/sprites/goldchest.png | Bin .../mods/ironchests}/sprites/goldcontainer.png | Bin .../mods/ironchests}/sprites/ironchest.png | Bin .../ironchests}/sprites/ironchest_block_tex.png | Bin .../mods/ironchests}/sprites/silverchest.png | Bin 8 files changed, 0 insertions(+), 0 deletions(-) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/copperchest.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/diamondchest.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/diamondcontainer.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/goldchest.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/goldcontainer.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/ironchest.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/ironchest_block_tex.png (100%) rename IronChests2/resources/{ic2 => cpw/mods/ironchests}/sprites/silverchest.png (100%) diff --git a/IronChests2/resources/ic2/sprites/copperchest.png b/IronChests2/resources/cpw/mods/ironchests/sprites/copperchest.png similarity index 100% rename from IronChests2/resources/ic2/sprites/copperchest.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/copperchest.png diff --git a/IronChests2/resources/ic2/sprites/diamondchest.png b/IronChests2/resources/cpw/mods/ironchests/sprites/diamondchest.png similarity index 100% rename from IronChests2/resources/ic2/sprites/diamondchest.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/diamondchest.png diff --git a/IronChests2/resources/ic2/sprites/diamondcontainer.png b/IronChests2/resources/cpw/mods/ironchests/sprites/diamondcontainer.png similarity index 100% rename from IronChests2/resources/ic2/sprites/diamondcontainer.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/diamondcontainer.png diff --git a/IronChests2/resources/ic2/sprites/goldchest.png b/IronChests2/resources/cpw/mods/ironchests/sprites/goldchest.png similarity index 100% rename from IronChests2/resources/ic2/sprites/goldchest.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/goldchest.png diff --git a/IronChests2/resources/ic2/sprites/goldcontainer.png b/IronChests2/resources/cpw/mods/ironchests/sprites/goldcontainer.png similarity index 100% rename from IronChests2/resources/ic2/sprites/goldcontainer.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/goldcontainer.png diff --git a/IronChests2/resources/ic2/sprites/ironchest.png b/IronChests2/resources/cpw/mods/ironchests/sprites/ironchest.png similarity index 100% rename from IronChests2/resources/ic2/sprites/ironchest.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/ironchest.png diff --git a/IronChests2/resources/ic2/sprites/ironchest_block_tex.png b/IronChests2/resources/cpw/mods/ironchests/sprites/ironchest_block_tex.png similarity index 100% rename from IronChests2/resources/ic2/sprites/ironchest_block_tex.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/ironchest_block_tex.png diff --git a/IronChests2/resources/ic2/sprites/silverchest.png b/IronChests2/resources/cpw/mods/ironchests/sprites/silverchest.png similarity index 100% rename from IronChests2/resources/ic2/sprites/silverchest.png rename to IronChests2/resources/cpw/mods/ironchests/sprites/silverchest.png From acd20d8c57eab3afe83a47125943e9e1166d3dbf Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 28 Jan 2012 21:50:02 -0500 Subject: [PATCH 010/188] Fix rename --- .../sprites/copperchest.png | Bin .../sprites/diamondchest.png | Bin .../sprites/diamondcontainer.png | Bin .../{ironchests => ironchest}/sprites/goldchest.png | Bin .../sprites/goldcontainer.png | Bin .../{ironchests => ironchest}/sprites/ironchest.png | Bin .../sprites/ironchest_block_tex.png | Bin .../sprites/silverchest.png | Bin 8 files changed, 0 insertions(+), 0 deletions(-) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/copperchest.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/diamondchest.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/diamondcontainer.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/goldchest.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/goldcontainer.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/ironchest.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/ironchest_block_tex.png (100%) rename IronChests2/resources/cpw/mods/{ironchests => ironchest}/sprites/silverchest.png (100%) diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/copperchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/copperchest.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/copperchest.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/copperchest.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/diamondchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/diamondchest.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/diamondchest.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/diamondchest.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/diamondcontainer.png b/IronChests2/resources/cpw/mods/ironchest/sprites/diamondcontainer.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/diamondcontainer.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/diamondcontainer.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/goldchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/goldchest.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/goldchest.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/goldchest.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/goldcontainer.png b/IronChests2/resources/cpw/mods/ironchest/sprites/goldcontainer.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/goldcontainer.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/goldcontainer.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/ironchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/ironchest.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/ironchest.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/ironchest.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/ironchest_block_tex.png b/IronChests2/resources/cpw/mods/ironchest/sprites/ironchest_block_tex.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/ironchest_block_tex.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/ironchest_block_tex.png diff --git a/IronChests2/resources/cpw/mods/ironchests/sprites/silverchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/silverchest.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchests/sprites/silverchest.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/silverchest.png From f2bc9502c084753499f6373d49d4b733eabb2560 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 28 Jan 2012 21:50:58 -0500 Subject: [PATCH 011/188] Rename master texture sheet --- .../{ironchest_block_tex.png => block_textures.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename IronChests2/resources/cpw/mods/ironchest/sprites/{ironchest_block_tex.png => block_textures.png} (100%) diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/ironchest_block_tex.png b/IronChests2/resources/cpw/mods/ironchest/sprites/block_textures.png similarity index 100% rename from IronChests2/resources/cpw/mods/ironchest/sprites/ironchest_block_tex.png rename to IronChests2/resources/cpw/mods/ironchest/sprites/block_textures.png From a2d1b5c453d92d0f7430b165f61c5cc4a4c1abe6 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 29 Jan 2012 11:30:49 -0500 Subject: [PATCH 012/188] Copper and silver chests InvTweaks support --- .../cpw/mods/ironchest/client/GUIChest.java | 35 ++++--- .../net/minecraft/src/mod_IronChest.java | 28 ++++-- .../cpw/mods/ironchest/BlockIronChest.java | 5 +- .../mods/ironchest/ContainerDiamondChest.java | 46 --------- .../mods/ironchest/ContainerGoldChest.java | 50 ---------- .../ironchest/ContainerIronChestBase.java | 48 +++++++--- .../cpw/mods/ironchest/IronChestType.java | 87 +++++++++++------- .../mods/ironchest/TileEntityCopperChest.java | 8 ++ .../mods/ironchest/TileEntitySilverChest.java | 7 ++ .../ironchest/sprites/coppercontainer.png | Bin 0 -> 3677 bytes .../ironchest/sprites/silvercontainer.png | Bin 0 -> 3818 bytes 11 files changed, 139 insertions(+), 175 deletions(-) delete mode 100644 IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java delete mode 100644 IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java create mode 100644 IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java create mode 100644 IronChests2/resources/cpw/mods/ironchest/sprites/coppercontainer.png create mode 100644 IronChests2/resources/cpw/mods/ironchest/sprites/silvercontainer.png diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 8592789..fc69005 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -1,31 +1,31 @@ package cpw.mods.ironchest.client; -import org.lwjgl.opengl.GL11; - -import cpw.mods.ironchest.ContainerDiamondChest; -import cpw.mods.ironchest.ContainerGoldChest; -import cpw.mods.ironchest.ContainerIronChestBase; -import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.TileEntityIronChest; import net.minecraft.src.Container; import net.minecraft.src.EntityPlayer; import net.minecraft.src.GuiContainer; import net.minecraft.src.IInventory; import net.minecraft.src.ModLoader; +import org.lwjgl.opengl.GL11; + +import cpw.mods.ironchest.ContainerIronChestBase; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + public class GUIChest extends GuiContainer { public enum GUI { - GOLD(ContainerGoldChest.class,184,256,"/ic2/sprites/goldcontainer.png",IronChestType.GOLD), - DIAMOND(ContainerDiamondChest.class,238,256,"/ic2/sprites/diamondcontainer.png",IronChestType.DIAMOND); + IRON(184,202,"/cpw/mods/ironchest/sprites/ironcontainer.png",IronChestType.IRON), + GOLD(184,256,"/cpw/mods/ironchest/sprites/goldcontainer.png",IronChestType.GOLD), + DIAMOND(238,256,"/cpw/mods/ironchest/sprites/diamondcontainer.png",IronChestType.DIAMOND), + COPPER(184,184,"/cpw/mods/ironchest/sprites/coppercontainer.png",IronChestType.COPPER), + SILVER(184,238,"/cpw/mods/ironchest/sprites/silvercontainer.png",IronChestType.SILVER); - private Class clazz; private int xSize; private int ySize; private String guiTexture; private IronChestType mainType; - private GUI(Class clazz, int xSize, int ySize, String guiTexture, IronChestType mainType) { - this.clazz=clazz; + private GUI(int xSize, int ySize, String guiTexture, IronChestType mainType) { this.xSize=xSize; this.ySize=ySize; this.guiTexture=guiTexture; @@ -33,13 +33,7 @@ public class GUIChest extends GuiContainer { } protected Container makeContainer(IInventory player, IInventory chest) { - try { - return clazz.getConstructor(IInventory.class,IInventory.class).newInstance(player,chest); - } catch (Exception e) { - // unpossible - e.printStackTrace(); - throw new RuntimeException(e); - } + return new ContainerIronChestBase(player,chest, mainType, xSize, ySize); } public static void showGUI(TileEntityIronChest te, EntityPlayer player) { @@ -53,6 +47,9 @@ public class GUIChest extends GuiContainer { } } + public int getRowLength() { + return type.mainType.getRowLength(); + } private GUI type; private GUIChest(GUI type, IInventory player, IInventory chest) { diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java index aba0b61..90f25d0 100644 --- a/IronChests2/client/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -11,6 +11,8 @@ import cpw.mods.ironchest.client.IronChestRenderHelper; import cpw.mods.ironchest.client.TileEntityIronChestRenderer; import net.minecraft.client.Minecraft; import net.minecraft.src.forge.Configuration; +import net.minecraft.src.forge.IOreHandler; +import net.minecraft.src.forge.MinecraftForge; import net.minecraft.src.forge.MinecraftForgeClient; public class mod_IronChest extends BaseModMp { @@ -26,16 +28,10 @@ public class mod_IronChest extends BaseModMp { @Override public void load() { File cfgFile = new File(Minecraft.getMinecraftDir(), "config/IronChest.cfg"); - // If our config file exists - boolean defaultCompatibility = cfgFile.exists(); Configuration cfg = new Configuration(cfgFile); try { cfg.load(); - // But doesn't have the compatibilityMode flag, enable compatibility - // mode - compatibilityMode = Boolean.parseBoolean(cfg.getOrCreateBooleanProperty("compatibilityMode", Configuration.GENERAL_PROPERTY, - defaultCompatibility).value); - ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("blockVeryLargeChest", 181).value)); + ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value)); IronChestType.initGUIs(cfg); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); @@ -45,13 +41,27 @@ public class mod_IronChest extends BaseModMp { cfg.save(); } + MinecraftForge.registerOreHandler(new IOreHandler() { + @Override + public void registerOre(String oreClass, ItemStack ore) { + if ("ingotCopper".equals(oreClass)) { + IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore); + } + if ("ingotSilver".equals(oreClass)) { + IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore); + } + if ("ingotRefinedIron".equals(oreClass)) { + IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore); + } + } + }); ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); IronChestType.registerTranslations(); IronChestType.registerTileEntities(TileEntityIronChestRenderer.class); - IronChestType.registerRecipes(ironChestBlock); + IronChestType.generateTieredRecipies(ironChestBlock); ChestItemRenderHelper.instance=new IronChestRenderHelper(); - MinecraftForgeClient.preloadTexture("ic2/sprites/ironchest_block_tex.png"); + MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png"); } public static void openGUI(EntityPlayer player, TileEntityIronChest te) { diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 2cbb8b4..c0fec2e 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -12,7 +12,6 @@ import net.minecraft.src.Material; import net.minecraft.src.MathHelper; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntityChest; import net.minecraft.src.World; import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.ITextureProvider; @@ -34,7 +33,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { @Override public String getTextureFile() { - return "ic2/sprites/ironchest_block_tex.png"; + return "cpw/mods/ironchest/sprites/block_textures.png"; } @Override @@ -140,7 +139,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { public void onBlockRemoval(World world, int i, int j, int k) { - TileEntityChest tileentitychest = (TileEntityChest)world.getBlockTileEntity(i, j, k); + TileEntityIronChest tileentitychest = (TileEntityIronChest)world.getBlockTileEntity(i, j, k); if (tileentitychest != null) { for (int l = 0; l < tileentitychest.getSizeInventory(); l++) diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java b/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java deleted file mode 100644 index 9d96740..0000000 --- a/IronChests2/common/cpw/mods/ironchest/ContainerDiamondChest.java +++ /dev/null @@ -1,46 +0,0 @@ -package cpw.mods.ironchest; - -import net.minecraft.src.IInventory; -import net.minecraft.src.Slot; - -public class ContainerDiamondChest extends ContainerIronChestBase { - public ContainerDiamondChest(IInventory playerInventory, IInventory chestInventory) { - super(playerInventory, chestInventory); - } - - private static final int NUM_ROWS = 9; - private static final int ROW_LENGTH = 12; - - - @Override - protected void layoutContainer(IInventory playerInventory, IInventory chestInventory) { - for(int i = 0; i < NUM_ROWS; i++) - { - for(int l = 0; l < ROW_LENGTH; l++) - { - addSlot(new Slot(chestInventory, l + i * ROW_LENGTH, 12 + l * 18, 8 + i * 18)); - } - - } - - for(int j = 0; j < 3; j++) - { - for(int i1 = 0; i1 < 9; i1++) - { - addSlot(new Slot(playerInventory, i1 + j * 9 + 9, 39 + i1 * 18, 174 + j * 18)); - } - - } - - for(int k = 0; k < 9; k++) - { - addSlot(new Slot(playerInventory, k, 39 + k * 18, 232)); - } - } - - @Override - protected int getRowLength() { - return ROW_LENGTH; - } - -} diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java b/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java deleted file mode 100644 index bc9aab0..0000000 --- a/IronChests2/common/cpw/mods/ironchest/ContainerGoldChest.java +++ /dev/null @@ -1,50 +0,0 @@ -// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. -// Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) braces deadcode - -package cpw.mods.ironchest; - -import net.minecraft.src.IInventory; -import net.minecraft.src.Slot; - -public class ContainerGoldChest extends ContainerIronChestBase -{ - - private static final int NUM_ROWS = 9; - private static final int ROW_LENGTH = 9; - - public ContainerGoldChest(IInventory playerInventory, IInventory chestInventory) { - super(playerInventory,chestInventory); - } - - @Override - protected int getRowLength() { - return ROW_LENGTH; - } - - protected void layoutContainer(IInventory playerInventory, IInventory chestInventory) { - for(int i = 0; i < NUM_ROWS; i++) - { - for(int l = 0; l < NUM_ROWS; l++) - { - addSlot(new Slot(chestInventory, l + i * ROW_LENGTH, 12 + l * 18, 8 + i * 18)); - } - - } - - for(int j = 0; j < 3; j++) - { - for(int i1 = 0; i1 < 9; i1++) - { - addSlot(new Slot(playerInventory, i1 + j * 9 + 9, 12 + i1 * 18, 174 + j * 18)); - } - - } - - for(int k = 0; k < 9; k++) - { - addSlot(new Slot(playerInventory, k, 12 + k * 18, 232)); - } - } - -} diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index e37ba1d..1a03421 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -6,18 +6,15 @@ import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.Slot; -public abstract class ContainerIronChestBase extends Container { - public ContainerIronChestBase(IInventory playerInventory, IInventory chestInventory) { - numRows = chestInventory.getSizeInventory() / getRowLength(); +public class ContainerIronChestBase extends Container { + private IronChestType type; + public ContainerIronChestBase(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) { chest = chestInventory; + this.type=type; chestInventory.openChest(); - layoutContainer(playerInventory, chestInventory); - + layoutContainer(playerInventory, chestInventory, type, xSize, ySize); } - protected abstract void layoutContainer(IInventory playerInventory, IInventory chestInventory); - protected abstract int getRowLength(); - public boolean canInteractWith(EntityPlayer player) { return chest.isUseableByPlayer(player); @@ -31,14 +28,14 @@ public abstract class ContainerIronChestBase extends Container { { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); - if(i < numRows * getRowLength()) + if(i < type.size) { - if(!mergeItemStack(itemstack1, numRows * getRowLength(), inventorySlots.size(), true)) + if(!mergeItemStack(itemstack1, type.size, inventorySlots.size(), true)) { return null; } } else - if(!mergeItemStack(itemstack1, 0, numRows * getRowLength(), false)) + if(!mergeItemStack(itemstack1, 0, type.size, false)) { return null; } @@ -59,6 +56,31 @@ public abstract class ContainerIronChestBase extends Container { chest.closeChest(); } - private IInventory chest; - private int numRows; + 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++) + { + addSlot(new Slot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); + } + + } + + int leftCol=(xSize-162)/2 + 1; + for(int playerInvRow = 0; playerInvRow < 3; playerInvRow++) + { + for(int playerInvCol = 0; playerInvCol < 9; playerInvCol++) + { + addSlot(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4-playerInvRow) * 18 - 10)); + } + + } + + for(int hotbarSlot = 0; hotbarSlot < 9; hotbarSlot++) + { + addSlot(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize-24)); + } + } + + private IInventory chest; } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index b13da64..7bbeedd 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -6,15 +6,18 @@ import net.minecraft.src.ItemStack; import net.minecraft.src.ModLoader; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; -import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.Configuration; public enum IronChestType { - IRON(54, "Iron Chest", null, "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm"), - GOLD(81, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm"), - DIAMOND(108,"Diamond Chest","guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "mmmmPmmmm"); + IRON(54, 9, true, "Iron Chest", null, "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm","mGmG3GmGm"), + GOLD(81, 9, true, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm","mGmG4GmGm"), + DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), + COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), + SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"); int size; + private int rowLength; String friendlyName; + private boolean tieredChest; private String modelTexture; private String guiName; private int textureRow; @@ -23,15 +26,18 @@ public enum IronChestType { private String[] recipes; private int guiId; - IronChestType(int size, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { + IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat, + Class clazz, String... recipes) { this.size = size; + this.rowLength = rowLength; + this.tieredChest = tieredChest; this.friendlyName = friendlyName; - this.guiName=guiName; - this.modelTexture = "/ic2/sprites/"+modelTexture; + this.guiName = guiName; + this.modelTexture = "/cpw/mods/ironchest/sprites/" + modelTexture; this.textureRow = textureRow; this.clazz = clazz; this.mat = mat; - this.recipes=recipes; + this.recipes = recipes; } public String getModelTexture() { @@ -43,19 +49,10 @@ public enum IronChestType { } public static TileEntity makeEntity(int metadata) { - //Compatibility - int chesttype=metadata; - int facing=0; - - if (metadata>2) { - chesttype=metadata<<2; - facing=metadata&3; - } + // Compatibility + int chesttype = metadata; try { - TileEntityIronChest te=values()[chesttype].clazz.newInstance(); - if (mod_IronChest.compatibilityMode) { - te.setFacing((byte)facing); - } + TileEntityIronChest te = values()[chesttype].clazz.newInstance(); return te; } catch (InstantiationException e) { // unpossible @@ -70,8 +67,8 @@ public enum IronChestType { public static void registerTileEntities(Class renderer) { for (IronChestType typ : values()) { try { - if (renderer!=null) { - ModLoader.RegisterTileEntity(typ.clazz, typ.name(),renderer.newInstance()); + if (renderer != null) { + ModLoader.RegisterTileEntity(typ.clazz, typ.name(), renderer.newInstance()); } else { ModLoader.RegisterTileEntity(typ.clazz, typ.name()); } @@ -87,19 +84,29 @@ public enum IronChestType { public static void registerTranslations() { for (IronChestType typ : values()) { - ModLoader.AddLocalization(typ.name()+".name", typ.friendlyName); + ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName); } } - public static void registerRecipes(BlockIronChest blockResult) { - ItemStack previous=new ItemStack(Block.chest); + + public static void generateTieredRecipies(BlockIronChest blockResult) { + ItemStack previous = new ItemStack(Block.chest); for (IronChestType typ : values()) { - for (String recipe : typ.recipes) { - String[] recipeSplit=new String[] { recipe.substring(0,3),recipe.substring(3,6), recipe.substring(6,9) }; - addRecipe(new ItemStack(blockResult, 1, typ.ordinal()), recipeSplit, 'm', typ.mat, 'P', previous, 'G', Block.glass, 'C', Block.chest); - } - previous=new ItemStack(blockResult,1,typ.ordinal()); + if (!typ.tieredChest) + continue; + generateRecipesForType(blockResult, previous, typ, typ.mat); + previous = new ItemStack(blockResult, 1, typ.ordinal()); } } + + public static void generateRecipesForType(BlockIronChest blockResult, Object previousTier, IronChestType type, Object mat) { + for (String recipe : type.recipes) { + String[] recipeSplit = new String[] { recipe.substring(0, 3), recipe.substring(3, 6), recipe.substring(6, 9) }; + addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mat, 'P', previousTier, 'G', Block.glass, 'C', Block.chest, + '0', new ItemStack(blockResult, 1, 0)/* Iron */, '1', new ItemStack(blockResult, 1, 1)/* GOLD */, '3', new ItemStack(blockResult, + 1, 3)/* Copper */, '4', new ItemStack(blockResult,1,4)); + } + } + private static void addRecipe(ItemStack is, Object... parts) { ModLoader.AddRecipe(is, parts); } @@ -107,15 +114,25 @@ public enum IronChestType { public int getGUI() { return guiId; } - + public static void initGUIs(Configuration cfg) { - int defGUI=51; + int defGUI = 51; for (IronChestType typ : values()) { - if (typ.guiName!=null) { - typ.guiId=Integer.parseInt(cfg.getOrCreateIntProperty(typ.guiName, Configuration.GENERAL_PROPERTY, defGUI++).value); + if (typ.guiName != null) { + typ.guiId = Integer.parseInt(cfg.getOrCreateIntProperty(typ.guiName, Configuration.GENERAL_PROPERTY, defGUI++).value); } else { - typ.guiId=-1; + typ.guiId = -1; } } } + + public int getRowCount() { + return size / rowLength; + } + + public int getRowLength() { + // TODO Auto-generated method stub + return rowLength; + } + } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java new file mode 100644 index 0000000..4d04ed9 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java @@ -0,0 +1,8 @@ +package cpw.mods.ironchest; + +public class TileEntityCopperChest extends TileEntityIronChest { + public TileEntityCopperChest() { + super(IronChestType.COPPER); + } + +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java new file mode 100644 index 0000000..48f72d2 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java @@ -0,0 +1,7 @@ +package cpw.mods.ironchest; + +public class TileEntitySilverChest extends TileEntityIronChest { + public TileEntitySilverChest() { + super(IronChestType.SILVER); + } +} diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/coppercontainer.png b/IronChests2/resources/cpw/mods/ironchest/sprites/coppercontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdb824efcb80fa10626b46874f548ffd7e92fcf GIT binary patch literal 3677 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 literal 0 HcmV?d00001 diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/silvercontainer.png b/IronChests2/resources/cpw/mods/ironchest/sprites/silvercontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..65179f2a98efe9dd2ec5767084150ef3f11fc6a5 GIT binary patch literal 3818 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 literal 0 HcmV?d00001 From a0f8392c8983b102456f8e2953a49c3bd8093620 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 29 Jan 2012 11:39:54 -0500 Subject: [PATCH 013/188] V2.0.1- support InvTweaks --- IronChests2/build.xml | 2 +- .../client/net/minecraft/src/mod_IronChest.java | 2 +- .../cpw/mods/ironchest/sprites/ironcontainer.png | Bin 0 -> 3724 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 IronChests2/resources/cpw/mods/ironchest/sprites/ironcontainer.png diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 48c81b5..47c7519 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/client/net/minecraft/src/mod_IronChest.java index 90f25d0..241416a 100644 --- a/IronChests2/client/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/client/net/minecraft/src/mod_IronChest.java @@ -22,7 +22,7 @@ public class mod_IronChest extends BaseModMp { @Override public String getVersion() { - return "2.0"; + return "2.0.1"; } @Override diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/ironcontainer.png b/IronChests2/resources/cpw/mods/ironchest/sprites/ironcontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..1c48eed884beaa01c6fb6bf6b22efbddcc2efcd3 GIT binary patch literal 3724 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 Aj{pDw literal 0 HcmV?d00001 From c975ff3ab11029075698739a47f0746fde5de888 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 29 Jan 2012 12:31:18 -0500 Subject: [PATCH 014/188] Move main mod file to common --- .../{client => common}/net/minecraft/src/mod_IronChest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename IronChests2/{client => common}/net/minecraft/src/mod_IronChest.java (100%) diff --git a/IronChests2/client/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java similarity index 100% rename from IronChests2/client/net/minecraft/src/mod_IronChest.java rename to IronChests2/common/net/minecraft/src/mod_IronChest.java From 44387c03248d540a5b0bb500269d685b21ce7a9d Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 29 Jan 2012 16:12:06 -0500 Subject: [PATCH 015/188] SMP support: v2.1 --- IronChests2/build.xml | 2 +- .../mods/ironchest/client/ClientProxy.java | 82 +++++++++++++++++++ .../cpw/mods/ironchest/client/GUIChest.java | 17 ++-- .../cpw/mods/ironchest/BlockIronChest.java | 2 +- .../common/cpw/mods/ironchest/IProxy.java | 25 ++++++ .../cpw/mods/ironchest/IronChestType.java | 36 ++------ .../cpw/mods/ironchest/ServerClientProxy.java | 35 ++++++++ .../mods/ironchest/TileEntityIronChest.java | 13 ++- .../net/minecraft/src/mod_IronChest.java | 34 ++++---- .../mods/ironchest/server/ServerProxy.java | 54 ++++++++++++ 10 files changed, 242 insertions(+), 58 deletions(-) create mode 100644 IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java create mode 100644 IronChests2/common/cpw/mods/ironchest/IProxy.java create mode 100644 IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java create mode 100644 IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 47c7519..947252e 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java new file mode 100644 index 0000000..69016e7 --- /dev/null +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -0,0 +1,82 @@ +package cpw.mods.ironchest.client; + +import java.io.File; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.BaseModMp; +import net.minecraft.src.ChestItemRenderHelper; +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.GuiScreen; +import net.minecraft.src.ModLoader; +import net.minecraft.src.ModLoaderMp; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.forge.MinecraftForgeClient; +import cpw.mods.ironchest.IProxy; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + +public class ClientProxy extends BaseModMp implements IProxy { + @Override + public void registerRenderInformation() { + ChestItemRenderHelper.instance=new IronChestRenderHelper(); + MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png"); + } + + @Override + public void registerTileEntities() { + for (IronChestType typ : IronChestType.values()) { + ModLoader.RegisterTileEntity(typ.clazz, typ.name(), new TileEntityIronChestRenderer()); + } + } + + @Override + public void registerTranslations() { + for (IronChestType typ : IronChestType.values()) { + ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName); + } + } + + @Override + public void showGUI(TileEntityIronChest te, EntityPlayer player) { + GUIChest.GUI.showGUI(te, player); + + } + + @Override + public File getMinecraftDir() { + return Minecraft.getMinecraftDir(); + } + + @Override + public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { + entityitem.item.setTagCompound(data); + + } + + @Override + public void registerGUI(int guiId) { + ModLoaderMp.RegisterGUI(this, guiId); + } + + @Override + public String getVersion() { + // Do nothing, we never get loaded like that + return ""; + } + + @Override + public void load() { + // Do Nothing, we never get loaded like that + } + + @Override + public GuiScreen HandleGUI(int i) { + for (IronChestType type: IronChestType.values()) { + if (type.guiId==i) { + return GUIChest.GUI.buildGUI(type,ModLoader.getMinecraftInstance().thePlayer.inventory,IronChestType.makeEntity(type.ordinal())); + } + } + return null; + } +} diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index fc69005..3983961 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -36,14 +36,21 @@ public class GUIChest extends GuiContainer { return new ContainerIronChestBase(player,chest, mainType, xSize, ySize); } - public static void showGUI(TileEntityIronChest te, EntityPlayer player) { + public static GUIChest buildGUI(IronChestType type, IInventory playerInventory, TileEntityIronChest chestInventory) { for (GUI gui : values()) { - if (te.getType()==gui.mainType) { - ModLoader.OpenGUI(player, new GUIChest(gui,player.inventory,te)); - return; + if (chestInventory.getType()==gui.mainType) { + return new GUIChest(gui,playerInventory,chestInventory); } } - player.displayGUIChest(te); + return null; + } + public static void showGUI(TileEntityIronChest te, EntityPlayer player) { + GUIChest gui=buildGUI(te.getType(),player.inventory,te); + if (gui!=null) { + ModLoader.OpenGUI(player, gui); + } else { + player.displayGUIChest(te); + } } } diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index c0fec2e..3be0500 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -167,7 +167,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { entityitem.motionZ = (float)random.nextGaussian() * f3; if (itemstack.hasTagCompound()) { - entityitem.item.setTagCompound((NBTTagCompound)itemstack.getTagCompound().cloneTag()); + mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound)itemstack.getTagCompound().cloneTag()); } world.spawnEntityInWorld(entityitem); } diff --git a/IronChests2/common/cpw/mods/ironchest/IProxy.java b/IronChests2/common/cpw/mods/ironchest/IProxy.java new file mode 100644 index 0000000..7a55e7a --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/IProxy.java @@ -0,0 +1,25 @@ +package cpw.mods.ironchest; + +import java.io.File; + +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NBTTagCompound; + +public interface IProxy { + + public abstract void registerRenderInformation(); + + public abstract void registerTileEntities(); + + public abstract void registerTranslations(); + + public abstract void showGUI(TileEntityIronChest te, EntityPlayer player); + + public abstract File getMinecraftDir(); + + public abstract void applyExtraDataToDrops(EntityItem item, NBTTagCompound data); + + public abstract void registerGUI(int guiId); + +} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 7bbeedd..e91275f 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -4,27 +4,26 @@ import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.ModLoader; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; +import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.Configuration; public enum IronChestType { - IRON(54, 9, true, "Iron Chest", null, "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm","mGmG3GmGm"), + IRON(54, 9, true, "Iron Chest", "guiIronChest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm","mGmG3GmGm"), GOLD(81, 9, true, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm","mGmG4GmGm"), DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"); int size; private int rowLength; - String friendlyName; + public String friendlyName; private boolean tieredChest; private String modelTexture; private String guiName; private int textureRow; - private Class clazz; + public Class clazz; private Item mat; private String[] recipes; - private int guiId; + public int guiId; IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { @@ -48,7 +47,7 @@ public enum IronChestType { return textureRow; } - public static TileEntity makeEntity(int metadata) { + public static TileEntityIronChest makeEntity(int metadata) { // Compatibility int chesttype = metadata; try { @@ -64,28 +63,7 @@ public enum IronChestType { return null; } - public static void registerTileEntities(Class renderer) { - for (IronChestType typ : values()) { - try { - if (renderer != null) { - ModLoader.RegisterTileEntity(typ.clazz, typ.name(), renderer.newInstance()); - } else { - ModLoader.RegisterTileEntity(typ.clazz, typ.name()); - } - } catch (InstantiationException e) { - // unpossible - e.printStackTrace(); - } catch (IllegalAccessException e) { - // unpossible - e.printStackTrace(); - } - } - } - public static void registerTranslations() { - for (IronChestType typ : values()) { - ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName); - } } public static void generateTieredRecipies(BlockIronChest blockResult) { @@ -120,6 +98,7 @@ public enum IronChestType { for (IronChestType typ : values()) { if (typ.guiName != null) { typ.guiId = Integer.parseInt(cfg.getOrCreateIntProperty(typ.guiName, Configuration.GENERAL_PROPERTY, defGUI++).value); + mod_IronChest.proxy.registerGUI(typ.guiId); } else { typ.guiId = -1; } @@ -131,7 +110,6 @@ public enum IronChestType { } public int getRowLength() { - // TODO Auto-generated method stub return rowLength; } diff --git a/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java b/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java new file mode 100644 index 0000000..4671ee9 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java @@ -0,0 +1,35 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.ModLoader; + +public enum ServerClientProxy { + CLIENT("cpw.mods.ironchest.client.ClientProxy"), + SERVER("cpw.mods.ironchest.server.ServerProxy"); + + private String className; + private ServerClientProxy(String proxyClassName) { + className=proxyClassName; + } + + private IProxy buildProxy() { + try { + return (IProxy) Class.forName(className).newInstance(); + } catch (Exception e) { + ModLoader.getLogger().severe("A fatal error has occured initializing IronChests"); + e.printStackTrace(System.err); + throw new RuntimeException(e); + } + } + public static IProxy getProxy() { + try { + ModLoader.class.getMethod("getMinecraftInstance"); + } catch (SecurityException e) { + // UNPOSSIBLE + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + return SERVER.buildProxy(); + } + return CLIENT.buildProxy(); + } + +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 384eea0..8fb485f 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -126,6 +126,9 @@ public class TileEntityIronChest extends TileEntity implements IInventory { @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { + if (worldObj==null) { + return true; + } if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this) { return false; } @@ -137,7 +140,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { super.updateEntity(); // Resynchronize clients with the server state if ((++ticksSinceSync % 20) * 4 == 0) { - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + worldObj.playNoteAt(xCoord, yCoord, zCoord, 3, ( ( numUsingPlayers<<3 ) & 0xF8 ) | (facing & 0x7)); } prevLidAngle = lidAngle; float f = 0.1F; @@ -176,26 +179,28 @@ public class TileEntityIronChest extends TileEntity implements IInventory { numUsingPlayers = j; } else if (i == 2) { facing = (byte)j; + } else if (i == 3) { + facing = (byte)(j & 0x7); + numUsingPlayers = (j & 0xF8 )>> 3; } } @Override public void openChest() { + if (worldObj==null) return; numUsingPlayers++; worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); } @Override public void closeChest() { + if (worldObj==null) return; numUsingPlayers--; worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); } public void setFacing(byte chestFacing) { this.facing=chestFacing; - if (worldObj!=null) { - worldObj.playNoteAt(xCoord, yCoord, zCoord, 2, facing); - } } } diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 241416a..9057753 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -2,32 +2,31 @@ package net.minecraft.src; import java.io.File; -import cpw.mods.ironchest.BlockIronChest; -import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.ItemIronChest; -import cpw.mods.ironchest.TileEntityIronChest; -import cpw.mods.ironchest.client.GUIChest; -import cpw.mods.ironchest.client.IronChestRenderHelper; -import cpw.mods.ironchest.client.TileEntityIronChestRenderer; -import net.minecraft.client.Minecraft; import net.minecraft.src.forge.Configuration; import net.minecraft.src.forge.IOreHandler; import net.minecraft.src.forge.MinecraftForge; -import net.minecraft.src.forge.MinecraftForgeClient; +import cpw.mods.ironchest.BlockIronChest; +import cpw.mods.ironchest.IProxy; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.ItemIronChest; +import cpw.mods.ironchest.ServerClientProxy; +import cpw.mods.ironchest.TileEntityIronChest; public class mod_IronChest extends BaseModMp { public static BlockIronChest ironChestBlock; - public static boolean compatibilityMode; + public static IProxy proxy; @Override public String getVersion() { - return "2.0.1"; + return "2.1"; } @Override public void load() { - File cfgFile = new File(Minecraft.getMinecraftDir(), "config/IronChest.cfg"); + MinecraftForge.versionDetect("IronChest", 1, 3, 0); + proxy = ServerClientProxy.getProxy(); + File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); Configuration cfg = new Configuration(cfgFile); try { cfg.load(); @@ -56,16 +55,15 @@ public class mod_IronChest extends BaseModMp { } }); ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); - IronChestType.registerTranslations(); - IronChestType.registerTileEntities(TileEntityIronChestRenderer.class); + proxy.registerTranslations(); + proxy.registerTileEntities(); IronChestType.generateTieredRecipies(ironChestBlock); - ChestItemRenderHelper.instance=new IronChestRenderHelper(); - MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png"); + proxy.registerRenderInformation(); } + public static void openGUI(EntityPlayer player, TileEntityIronChest te) { - GUIChest.GUI.showGUI(te, player); + proxy.showGUI(te,player); } - } diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java new file mode 100644 index 0000000..5a5d01d --- /dev/null +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -0,0 +1,54 @@ +package cpw.mods.ironchest.server; + +import java.io.File; + +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ModLoader; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.mod_IronChest; +import cpw.mods.ironchest.ContainerIronChestBase; +import cpw.mods.ironchest.IProxy; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + +public class ServerProxy implements IProxy { + + @Override + public void registerRenderInformation() { + // NOOP on server + } + + @Override + public void registerTileEntities() { + for (IronChestType typ : IronChestType.values()) { + ModLoader.RegisterTileEntity(typ.clazz, typ.name()); + } + } + + @Override + public void registerTranslations() { + // NOOP on server + } + + @Override + public void showGUI(TileEntityIronChest te, EntityPlayer player) { + ModLoader.OpenGUI(player, te.getType().guiId, te, new ContainerIronChestBase(player.inventory,te, te.getType(), 1, 1)); + } + + @Override + public File getMinecraftDir() { + return new File("."); + } + + @Override + public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { + entityitem.item.setNBTData(data); + } + + @Override + public void registerGUI(int guiId) { + // NOOP on server + } + +} From ac32f200fea4609c7d90f079b57f5665b68ffa0e Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Wed, 1 Feb 2012 12:05:01 -0500 Subject: [PATCH 016/188] Add support method for Bukkit --- .../common/cpw/mods/ironchest/TileEntityIronChest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 8fb485f..09df7ec 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -25,6 +25,11 @@ public class TileEntityIronChest extends TileEntity implements IInventory { this.type=type; this.chestContents=new ItemStack[getSizeInventory()]; } + + public ItemStack[] getContents() { + return chestContents; + } + @Override public int getSizeInventory() { return type.size; From e417ebba3d4ec6747cd0eb86bf2d5e1f2bb622d7 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Wed, 1 Feb 2012 12:23:19 -0500 Subject: [PATCH 017/188] Fix up NPE issue with forge ore handler --- IronChests2/common/net/minecraft/src/mod_IronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 9057753..66e0a04 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -40,6 +40,7 @@ public class mod_IronChest extends BaseModMp { cfg.save(); } + ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); MinecraftForge.registerOreHandler(new IOreHandler() { @Override public void registerOre(String oreClass, ItemStack ore) { @@ -54,7 +55,6 @@ public class mod_IronChest extends BaseModMp { } } }); - ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); proxy.registerTranslations(); proxy.registerTileEntities(); IronChestType.generateTieredRecipies(ironChestBlock); From fae10df314ca2c69c83ba62131e5743695aa8e9d Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Wed, 1 Feb 2012 14:19:58 -0500 Subject: [PATCH 018/188] Add in faithful texture pack stuff --- .../mods/ironchest/sprites/block_textures.png | Bin 0 -> 12443 bytes .../cpw/mods/ironchest/sprites/copperchest.png | Bin 0 -> 5764 bytes .../mods/ironchest/sprites/coppercontainer.png | Bin 0 -> 5346 bytes .../cpw/mods/ironchest/sprites/diamondchest.png | Bin 0 -> 6344 bytes .../mods/ironchest/sprites/diamondcontainer.png | Bin 0 -> 5966 bytes .../cpw/mods/ironchest/sprites/goldchest.png | Bin 0 -> 6654 bytes .../mods/ironchest/sprites/goldcontainer.png | Bin 0 -> 8176 bytes .../cpw/mods/ironchest/sprites/ironchest.png | Bin 0 -> 5553 bytes .../mods/ironchest/sprites/ironcontainer.png | Bin 0 -> 5461 bytes .../cpw/mods/ironchest/sprites/silverchest.png | Bin 0 -> 5224 bytes .../mods/ironchest/sprites/silvercontainer.png | Bin 0 -> 5691 bytes .../faithful_texturesheet.xcf | Bin 0 -> 37255 bytes 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/block_textures.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/copperchest.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/coppercontainer.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/diamondchest.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/diamondcontainer.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/goldchest.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/goldcontainer.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/ironchest.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/ironcontainer.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/silverchest.png create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/silvercontainer.png create mode 100644 IronChests2/faithful_texturepack/faithful_texturesheet.xcf diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/block_textures.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/block_textures.png new file mode 100644 index 0000000000000000000000000000000000000000..0332d4aa2b4d6fb03a93f965350b8b8b96527e10 GIT binary patch literal 12443 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 literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/copperchest.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/copperchest.png new file mode 100644 index 0000000000000000000000000000000000000000..67e1c26ae3d461986a80b226c3a928b305beb349 GIT binary patch literal 5764 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 l3!ExGkpBNC>`Z2d{}08D^j!b| literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/coppercontainer.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/coppercontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbc003a330f7b4c00a3e4cd4798e82ada9d211b GIT binary patch literal 5346 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 literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/diamondchest.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/diamondchest.png new file mode 100644 index 0000000000000000000000000000000000000000..355213a83ad98cdf2c4c090c0f2fa1ecf7d29f32 GIT binary patch literal 6344 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 Ml(ZF#AyyCm0dceYCIA2c literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/goldchest.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/goldchest.png new file mode 100644 index 0000000000000000000000000000000000000000..49b47b23546e98930814e78e19a2fc25acd726e4 GIT binary patch literal 6654 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 literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/goldcontainer.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/goldcontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..5338e50c2af1dad790d1d2f3da5075f1bc23a4fe GIT binary patch literal 8176 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 K)W}u0x%fZ+XGSjo literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/ironchest.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/ironchest.png new file mode 100644 index 0000000000000000000000000000000000000000..1c79945b1417a4441f39a502bd848342b1085c6d GIT binary patch literal 5553 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 Z2hJHmTp78YuD2c-&`{A;u7KIS`yY(qjl=)| literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/ironcontainer.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/ironcontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc067aa8fedd3bb23009057e1104f360283b486 GIT binary patch literal 5461 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 Qhn+a6rLM15qH25lFDqaP2LJ#7 literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/silverchest.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/silverchest.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ffcdc80c7de5036a1354f2c8d108e407dd981b GIT binary patch literal 5224 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

KJ2~|` zn_<9ryHmxf4S%1H4ZIP4bKq>Z1VJUV1-XeZS2z_Vxu%mz!=4CRXLY=##o(E_5+PKS zsh(Sf#&wP@Zc`+EgYOu=|Q>1Jg`m#=r;U$mJY4KoMDJFNrnrcnH}?&S=znQdUUhc@!I>s)Aiv)6kLT&`?(;>IczF}EO2@a zej}g+L4l$8j5}#v@Z-ZK{2fT#w>!Otc?WR8>y++J=1Oz5BT|?!4wL{{GKDp|M?$Ar&oz_2%<-cV`XL zqw#|5Z^EvDz@p+^w6D^DjJ+GiXZK>gz$K_(+Lfjud%=E(?W5G2)0Mm9)eqQyXYU)G zE<4>gg4}IwdD>YG?UWA{bN;Mna=>@0HfXG<6n%wz`b%?BvY)R1PmL2R^L9q+Q7V_# zvU6B5t#P6oJsHwPYgo2RbF|6T4SfzL=GMpr>5?&$QJ$HE#u|+tAJ#VNz zNr;SlK9GAgFc$@XXh$EMw5)ji@5tKiix@TD(^-!cbBYF-Wb0f+?hwKPwjv;+pCgBV zUt2Fy4Sq2j^qw*sBgU|$Yrn;)SuNQe%Hg2bKI2dURrZ!&MDtqnywQL zTj>3_omOskNb0fwyeDzkI(h_eZ;4Lrj#Kj$7vZPF09XOw|2NpF|55hw+l$y(s-^sQ PxB)sEhU!&dyRiQOd7QJD literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/silvercontainer.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/silvercontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..99724fdd68af868f43428953b4323d34c3a585f5 GIT binary patch literal 5691 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 literal 0 HcmV?d00001 diff --git a/IronChests2/faithful_texturepack/faithful_texturesheet.xcf b/IronChests2/faithful_texturepack/faithful_texturesheet.xcf new file mode 100644 index 0000000000000000000000000000000000000000..f72f6d5863d7225c5401d1431f5b49f4390d732d GIT binary patch literal 37255 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 Date: Wed, 1 Feb 2012 23:24:31 -0500 Subject: [PATCH 019/188] Add chest upgrading item --- IronChests2/build.xml | 2 +- .../mods/ironchest/client/ClientProxy.java | 5 ++ .../cpw/mods/ironchest/BlockIronChest.java | 64 +++++++++-------- .../cpw/mods/ironchest/ChestChangerType.java | 70 +++++++++++++++++++ .../cpw/mods/ironchest/IronChestType.java | 20 +++++- .../cpw/mods/ironchest/ItemChestChanger.java | 54 ++++++++++++++ .../mods/ironchest/TileEntityIronChest.java | 18 +++++ .../net/minecraft/src/mod_IronChest.java | 17 +++++ 8 files changed, 217 insertions(+), 33 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/ChestChangerType.java create mode 100644 IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 947252e..6c0a867 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 69016e7..fddfe04 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -12,6 +12,7 @@ import net.minecraft.src.ModLoader; import net.minecraft.src.ModLoaderMp; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.forge.MinecraftForgeClient; +import cpw.mods.ironchest.ChestChangerType; import cpw.mods.ironchest.IProxy; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; @@ -21,6 +22,7 @@ public class ClientProxy extends BaseModMp implements IProxy { public void registerRenderInformation() { ChestItemRenderHelper.instance=new IronChestRenderHelper(); MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png"); + MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/item_textures.png"); } @Override @@ -35,6 +37,9 @@ public class ClientProxy extends BaseModMp implements IProxy { for (IronChestType typ : IronChestType.values()) { ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName); } + for (ChestChangerType typ : ChestChangerType.values()) { + ModLoader.AddLocalization("item."+typ.itemName+".name", typ.descriptiveName); + } } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 3be0500..2ce8262 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -142,37 +142,41 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { TileEntityIronChest tileentitychest = (TileEntityIronChest)world.getBlockTileEntity(i, j, k); if (tileentitychest != null) { - for (int l = 0; l < tileentitychest.getSizeInventory(); l++) - { - ItemStack itemstack = tileentitychest.getStackInSlot(l); - if (itemstack == null) - { - continue; - } - float f = random.nextFloat() * 0.8F + 0.1F; - float f1 = random.nextFloat() * 0.8F + 0.1F; - float f2 = random.nextFloat() * 0.8F + 0.1F; - while (itemstack.stackSize > 0) - { - int i1 = random.nextInt(21) + 10; - if (i1 > itemstack.stackSize) - { - i1 = itemstack.stackSize; - } - itemstack.stackSize -= i1; - EntityItem entityitem = new EntityItem(world, (float)i + f, (float)j + f1, (float)k + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); - float f3 = 0.05F; - entityitem.motionX = (float)random.nextGaussian() * f3; - entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)random.nextGaussian() * f3; - if (itemstack.hasTagCompound()) - { - mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound)itemstack.getTagCompound().cloneTag()); - } - world.spawnEntityInWorld(entityitem); - } - } + dropContent(0, tileentitychest, world); } super.onBlockRemoval(world, i, j, k); } + + public void dropContent(int newSize, TileEntityIronChest chest, World world) { + for (int l = newSize; l < chest.getSizeInventory(); l++) + { + ItemStack itemstack = chest.getStackInSlot(l); + if (itemstack == null) + { + continue; + } + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + float f2 = random.nextFloat() * 0.8F + 0.1F; + while (itemstack.stackSize > 0) + { + int i1 = random.nextInt(21) + 10; + if (i1 > itemstack.stackSize) + { + i1 = itemstack.stackSize; + } + itemstack.stackSize -= i1; + EntityItem entityitem = new EntityItem(world, (float)chest.xCoord + f, (float)chest.yCoord + (newSize>0 ? 1 : 0) + f1, (float)chest.zCoord + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); + float f3 = 0.05F; + entityitem.motionX = (float)random.nextGaussian() * f3; + entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float)random.nextGaussian() * f3; + if (itemstack.hasTagCompound()) + { + mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound)itemstack.getTagCompound().cloneTag()); + } + world.spawnEntityInWorld(entityitem); + } + } + } } diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java new file mode 100644 index 0000000..10fbd99 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -0,0 +1,70 @@ +package cpw.mods.ironchest; + +import static cpw.mods.ironchest.IronChestType.COPPER; +import static cpw.mods.ironchest.IronChestType.DIAMOND; +import static cpw.mods.ironchest.IronChestType.GOLD; +import static cpw.mods.ironchest.IronChestType.IRON; +import static cpw.mods.ironchest.IronChestType.SILVER; + +import net.minecraft.src.Block; +import net.minecraft.src.ItemStack; +import net.minecraft.src.forge.Configuration; +import net.minecraft.src.forge.MinecraftForge; +public enum ChestChangerType { + IRONGOLD(IRON,GOLD,"ironGoldUpgrade","Iron to Gold Chest Upgrade","mmm","msm","mmm"), + GOLDDIAMOND(GOLD,DIAMOND,"goldDiamondUpgrade","Gold to Diamond Chest Upgrade","GGG","msm","GGG"), + COPPERSILVER(COPPER,SILVER,"copperSilverUpgrade","Copper to Silver Chest Upgrade","mmm","msm","mmm"), + SILVERGOLD(SILVER,GOLD,"silverGoldUpgrade","Silver to Gold Chest Upgrade","mGm","GsG","mGm"); + + private IronChestType source; + private IronChestType target; + public String itemName; + public String descriptiveName; + private ItemChestChanger item; + private String[] recipe; + + private ChestChangerType(IronChestType source, IronChestType target, String itemName, String descriptiveName, String... recipe) { + this.source=source; + this.target=target; + this.itemName=itemName; + this.descriptiveName=descriptiveName; + this.recipe=recipe; + } + + public boolean canUpgrade(IronChestType from) { + return from==this.source; + } + + public int getTarget() { + return this.target.ordinal(); + } + + public ItemChestChanger buildItem(Configuration cfg, int id) { + int itemId=Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.ITEM_PROPERTY, id).value); + item=new ItemChestChanger(itemId,this); + return item; + } + + public void addRecipe() { + IronChestType.addRecipe(new ItemStack(item), recipe, 'm', target.mat,'s',source.mat,'G',Block.glass); + } + + public static void buildItems(Configuration cfg, int defaultId) { + for (ChestChangerType type: values()) { + type.buildItem(cfg, defaultId++); + } + } + + public static void generateRecipe(IronChestType type) { + for (ChestChangerType item: values()) { + if (item.source==type || item.target==type) { + for (Object[] recipe : MinecraftForge.generateRecipes(item.recipe[0],item.recipe[1],item.recipe[2],'s',item.source.getMatList(),'m',item.target.getMatList(),'G',Block.glass)) { + if (recipe[4]==null || recipe[6]==null) { + continue; + } + IronChestType.addRecipe(new ItemStack(item.item), recipe); + } + } + } + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index e91275f..49d75f1 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -1,5 +1,8 @@ package cpw.mods.ironchest; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -21,9 +24,10 @@ public enum IronChestType { private String guiName; private int textureRow; public Class clazz; - private Item mat; + Item mat; private String[] recipes; public int guiId; + private ArrayList matList; IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat, Class clazz, String... recipes) { @@ -37,6 +41,10 @@ public enum IronChestType { this.clazz = clazz; this.mat = mat; this.recipes = recipes; + this.matList=new ArrayList(); + if (mat!=null) { + matList.add(new ItemStack(mat)); + } } public String getModelTexture() { @@ -85,7 +93,7 @@ public enum IronChestType { } } - private static void addRecipe(ItemStack is, Object... parts) { + public static void addRecipe(ItemStack is, Object... parts) { ModLoader.AddRecipe(is, parts); } @@ -113,4 +121,12 @@ public enum IronChestType { return rowLength; } + public void addMat(ItemStack ore) { + this.matList.add(ore); + } + + public List getMatList() { + return matList; + } + } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java new file mode 100644 index 0000000..ce92656 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -0,0 +1,54 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraft.src.forge.ITextureProvider; + +public class ItemChestChanger extends Item implements ITextureProvider { + + private ChestChangerType type; + + public ItemChestChanger(int id, ChestChangerType type) { + super(id); + setMaxStackSize(1); + setIconIndex(0); + this.type=type; + setItemName(type.itemName); + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side) { + TileEntity te=world.getBlockTileEntity(X,Y,Z); + if (te!=null && te instanceof TileEntityIronChest) { + TileEntityIronChest ironchest=(TileEntityIronChest)te; + TileEntityIronChest newchest=ironchest.applyUpgradeItem(this); + if (newchest==null) { + return false; + } + world.setBlockTileEntity(X, Y, Z, newchest); + world.setBlockMetadata(X, Y, Z, newchest.getType().ordinal()); + world.markBlockNeedsUpdate(X, Y, Z); + world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); + stack.stackSize=0; + return true; + } else { + return false; + } + } + + @Override + public String getTextureFile() { + return "cpw/mods/ironchest/sprites/item_textures.png"; + } + + public int getTargetChestOrdinal(int sourceOrdinal) { + return type.getTarget(); + } + + public ChestChangerType getType() { + return type; + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 09df7ec..932dca1 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -1,11 +1,13 @@ package cpw.mods.ironchest; +import net.minecraft.src.Block; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NBTTagList; import net.minecraft.src.TileEntity; +import net.minecraft.src.mod_IronChest; public class TileEntityIronChest extends TileEntity implements IInventory { private int ticksSinceSync; @@ -208,4 +210,20 @@ public class TileEntityIronChest extends TileEntity implements IInventory { this.facing=chestFacing; } + public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) { + if (numUsingPlayers>0) { + return null; + } + if (!itemChestChanger.getType().canUpgrade(this.getType())) { + return null; + } + TileEntityIronChest newEntity=IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); + int newSize=newEntity.chestContents.length; + System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize,chestContents.length)); + BlockIronChest block=mod_IronChest.ironChestBlock; + block.dropContent(newSize,this,this.worldObj); + newEntity.setFacing(facing); + return newEntity; + } + } diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 66e0a04..f269d6d 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -6,8 +6,10 @@ import net.minecraft.src.forge.Configuration; import net.minecraft.src.forge.IOreHandler; import net.minecraft.src.forge.MinecraftForge; import cpw.mods.ironchest.BlockIronChest; +import cpw.mods.ironchest.ChestChangerType; import cpw.mods.ironchest.IProxy; import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.ItemChestChanger; import cpw.mods.ironchest.ItemIronChest; import cpw.mods.ironchest.ServerClientProxy; import cpw.mods.ironchest.TileEntityIronChest; @@ -15,6 +17,7 @@ import cpw.mods.ironchest.TileEntityIronChest; public class mod_IronChest extends BaseModMp { public static BlockIronChest ironChestBlock; + public static ItemChestChanger itemChestChanger; public static IProxy proxy; @Override @@ -31,6 +34,7 @@ public class mod_IronChest extends BaseModMp { try { cfg.load(); ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value)); + ChestChangerType.buildItems(cfg, 19501); IronChestType.initGUIs(cfg); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); @@ -45,24 +49,37 @@ public class mod_IronChest extends BaseModMp { @Override public void registerOre(String oreClass, ItemStack ore) { if ("ingotCopper".equals(oreClass)) { + IronChestType.COPPER.addMat(ore); IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore); + ChestChangerType.generateRecipe(IronChestType.COPPER); } if ("ingotSilver".equals(oreClass)) { + IronChestType.SILVER.addMat(ore); IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore); + ChestChangerType.generateRecipe(IronChestType.SILVER); } if ("ingotRefinedIron".equals(oreClass)) { + IronChestType.IRON.addMat(ore); IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore); + ChestChangerType.generateRecipe(IronChestType.IRON); } } }); proxy.registerTranslations(); proxy.registerTileEntities(); + ChestChangerType.generateRecipe(IronChestType.IRON); + ChestChangerType.generateRecipe(IronChestType.GOLD); IronChestType.generateTieredRecipies(ironChestBlock); proxy.registerRenderInformation(); } + @Override + public void ModsLoaded() { + + } + public static void openGUI(EntityPlayer player, TileEntityIronChest te) { proxy.showGUI(te,player); } From 0d01efecc496272d753cf36eeae8f4706f401f57 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Wed, 1 Feb 2012 23:26:07 -0500 Subject: [PATCH 020/188] Organize imports --- IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 932dca1..53ee324 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -1,6 +1,5 @@ package cpw.mods.ironchest; -import net.minecraft.src.Block; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; From 180a5acebadfcd13ca70cb5f4f64fc383f96c030 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 2 Feb 2012 00:35:13 -0500 Subject: [PATCH 021/188] New Icons for the upgrade item. Really crappy but whatever. --- .../cpw/mods/ironchest/ItemChestChanger.java | 2 +- .../mods/ironchest/sprites/item_textures.png | Bin 0 -> 5444 bytes IronChests2/resources/itemsheet.xcf | Bin 0 -> 10371 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png create mode 100644 IronChests2/resources/itemsheet.xcf diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index ce92656..dd2c59e 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -14,8 +14,8 @@ public class ItemChestChanger extends Item implements ITextureProvider { public ItemChestChanger(int id, ChestChangerType type) { super(id); setMaxStackSize(1); - setIconIndex(0); this.type=type; + setIconIndex(type.ordinal()); setItemName(type.itemName); } diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png b/IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png new file mode 100644 index 0000000000000000000000000000000000000000..65baf437a26ac8971a964e7301c3c35aef6d04ca GIT binary patch literal 5444 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 literal 0 HcmV?d00001 From e6ca22662cb8dc5a83147ebf0a9653e4567ef7ce Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 2 Feb 2012 19:19:34 -0500 Subject: [PATCH 022/188] Fix version --- IronChests2/common/net/minecraft/src/mod_IronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index f269d6d..5c57566 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -22,7 +22,7 @@ public class mod_IronChest extends BaseModMp { @Override public String getVersion() { - return "2.1"; + return "2.2"; } @Override From f4db68b7316539881542c089d1305cabd42668b7 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Mon, 6 Feb 2012 08:43:43 -0500 Subject: [PATCH 023/188] Add equivalent exchange support New, much better sprites for the chest upgraders --- IronChests2/build.xml | 18 +++++++++++++++--- .../cpw/mods/ironchest/ChestChangerType.java | 3 ++- .../net/minecraft/src/mod_IronChest.java | 17 +++++++++++++++-- .../mods/ironchest/sprites/item_textures.png | Bin 5444 -> 2724 bytes IronChests2/resources/itemsheet.xcf | Bin 10371 -> 11427 bytes 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 6c0a867..58713d0 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + @@ -33,6 +33,12 @@ + + + + + + @@ -66,9 +72,15 @@ - + - + + + + + + + diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index 10fbd99..2c6ba11 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -14,7 +14,8 @@ public enum ChestChangerType { IRONGOLD(IRON,GOLD,"ironGoldUpgrade","Iron to Gold Chest Upgrade","mmm","msm","mmm"), GOLDDIAMOND(GOLD,DIAMOND,"goldDiamondUpgrade","Gold to Diamond Chest Upgrade","GGG","msm","GGG"), COPPERSILVER(COPPER,SILVER,"copperSilverUpgrade","Copper to Silver Chest Upgrade","mmm","msm","mmm"), - SILVERGOLD(SILVER,GOLD,"silverGoldUpgrade","Silver to Gold Chest Upgrade","mGm","GsG","mGm"); + SILVERGOLD(SILVER,GOLD,"silverGoldUpgrade","Silver to Gold Chest Upgrade","mGm","GsG","mGm"), + COPPERIRON(COPPER,IRON,"copperIronUpgrade","Copper to Iron Chest Upgrade","mGm","GsG","mGm"); private IronChestType source; private IronChestType target; diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 5c57566..e83dfe8 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -1,6 +1,7 @@ package net.minecraft.src; import java.io.File; +import java.lang.reflect.Method; import net.minecraft.src.forge.Configuration; import net.minecraft.src.forge.IOreHandler; @@ -22,7 +23,7 @@ public class mod_IronChest extends BaseModMp { @Override public String getVersion() { - return "2.2"; + return "2.3"; } @Override @@ -77,7 +78,19 @@ public class mod_IronChest extends BaseModMp { @Override public void ModsLoaded() { - + try { + Class equivexmaps=Class.forName("ee.EEMaps"); + Method addEMC=equivexmaps.getMethod("addEMC",int.class,int.class,int.class); + Method addMeta=equivexmaps.getMethod("addMeta",int.class,int.class); + int[] chestEMCValues=new int[] { 8*8+256*8, 8*8+256*8+2048*8, 2*8192+8*8+256*8+2048*8+6, 85*8+8*8, 85*8+8*8+512*8 }; + for (IronChestType icType : IronChestType.values()) { + addEMC.invoke(null,ironChestBlock.blockID,icType.ordinal(),chestEMCValues[icType.ordinal()]); + } + addMeta.invoke(null,ironChestBlock.blockID,IronChestType.values().length-1); + ModLoader.getLogger().fine("mod_IronChest registered chests with Equivalent Exchange"); + } catch (Exception ex) { + ModLoader.getLogger().fine("mod_IronChest unable to load Equivalent Exchange integration"); + } } public static void openGUI(EntityPlayer player, TileEntityIronChest te) { diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png b/IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png index 65baf437a26ac8971a964e7301c3c35aef6d04ca..fb279efe61b8f951096bd3f74bcd29d283f6bdc3 100644 GIT binary patch literal 2724 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 dfnSHCheup5KnCWY z$gqr=vK=28!(aqr!t4mUhIG^x{8%WYE3RW@mUbEVEp@cu(CQJL4s9?w;TK z-1|Jgym{Zx-yc=?z9Bg}_2wzbOJRg^b`i=ujF7YfA=xp6UeF;_WJjoY9HEjqgj5lP zUQV)$5@%^U`uBNOc)>V;5Y{JV*cdmACGpZBF^1IKD`J-GV;SW;R}W6%r8D9g$j%Fj zS>9bPoM*(@Drslw9q|;TOMe$LX_`w*Yw+juEA1S0EL$f?|kskc2uUjFib}Y@#S3PEtn3{-vX$*+elWvvOuG!a-1V_|;z=L_)9j)ofiDG*#*3NFm_=%C7{os-uW z1A)caF-twf8nXL4-<;1g-lf%mRK2$2!lj{ZtF|7bG(;n**EMLsNt1OV1ScXz>U50+ z0ZxR@++pu#OpOFMF@%;Ga(TaZo^KI=uzaKS>%~YS7WT2mdgzBB9scOX#`@Zdt6d8Y zC!4+vCDyPtKDOY{XMu6*c6MK4fj-#W)Ct|l?7V+LvcS)~?F6K#Po3pFUd+p1n_%jo z$|sf)&h7EICtn%RRRd6KT8EvJ&WV0&ts1PVPZ>_1MVTYOqpQ*VNV3Rv*oDX!fJSu=0VUuD#4->@lCd*HbD0KIa2=BEPuu?O*mXc!uX6jJ_(+9Z7}r;eI-k zN&mg=D1v%NY%71I(&^M6*Q=g^7%w>+y8qz*z4_A$9O~!3*vuZ1RQ zR;UuQ!q+%i!6RHH7cPFDG+91U|^bnD#o;6^8%)?%&OB+g+WT$R-uZq?V3Da-D@)o`$lGs zZKzTpZGR9FHmvQmb5yDyH1LdA|BrW;OLHRB@16^*&TF L^?8$bX}<&j<|sa# From 6fd96b8e0d5a7ac24fbfe727fcd24b211320b07d Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Mon, 6 Feb 2012 21:29:48 -0500 Subject: [PATCH 024/188] Fix texture path issue --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 2 +- IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 2ce8262..0c6c10d 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -33,7 +33,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { @Override public String getTextureFile() { - return "cpw/mods/ironchest/sprites/block_textures.png"; + return "/cpw/mods/ironchest/sprites/block_textures.png"; } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index dd2c59e..357c108 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -41,7 +41,7 @@ public class ItemChestChanger extends Item implements ITextureProvider { @Override public String getTextureFile() { - return "cpw/mods/ironchest/sprites/item_textures.png"; + return "/cpw/mods/ironchest/sprites/item_textures.png"; } public int getTargetChestOrdinal(int sourceOrdinal) { From b43d4abdd5052c0b2b0e5e6e33cc7add13d86809 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 11 Feb 2012 00:45:56 -0500 Subject: [PATCH 025/188] Adding a crystal chest --- IronChests2/build.xml | 2 +- .../cpw/mods/ironchest/client/GUIChest.java | 3 +- .../client/TileEntityIronChestRenderer.java | 121 +++++++++++++++--- .../cpw/mods/ironchest/BlockIronChest.java | 10 +- .../cpw/mods/ironchest/IronChestType.java | 7 +- .../mods/ironchest/TileEntityIronChest.java | 68 ++++++++++ .../net/minecraft/src/mod_IronChest.java | 2 +- .../mods/ironchest/sprites/block_textures.png | Bin 4750 -> 4915 bytes IronChests2/resources/texturesheet.xcf | Bin 13445 -> 16149 bytes 9 files changed, 187 insertions(+), 26 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 58713d0..610d139 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 3983961..1e2170b 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -18,7 +18,8 @@ public class GUIChest extends GuiContainer { GOLD(184,256,"/cpw/mods/ironchest/sprites/goldcontainer.png",IronChestType.GOLD), DIAMOND(238,256,"/cpw/mods/ironchest/sprites/diamondcontainer.png",IronChestType.DIAMOND), COPPER(184,184,"/cpw/mods/ironchest/sprites/coppercontainer.png",IronChestType.COPPER), - SILVER(184,238,"/cpw/mods/ironchest/sprites/silvercontainer.png",IronChestType.SILVER); + SILVER(184,238,"/cpw/mods/ironchest/sprites/silvercontainer.png",IronChestType.SILVER), + CRYSTAL(184,238,"/cpw/mods/ironchest/sprites/silvercontainer.png",IronChestType.CRYSTAL); private int xSize; private int ySize; diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index df0ad25..633e66c 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -1,32 +1,51 @@ package cpw.mods.ironchest.client; -import org.lwjgl.opengl.GL11; +import static org.lwjgl.opengl.GL11.glColor4f; +import static org.lwjgl.opengl.GL11.glDisable; +import static org.lwjgl.opengl.GL11.glEnable; +import static org.lwjgl.opengl.GL11.glPopMatrix; +import static org.lwjgl.opengl.GL11.glPushMatrix; +import static org.lwjgl.opengl.GL11.glRotatef; +import static org.lwjgl.opengl.GL11.glScalef; +import static org.lwjgl.opengl.GL11.glTranslatef; -import cpw.mods.ironchest.TileEntityIronChest; +import java.util.Random; +import net.minecraft.src.Block; +import net.minecraft.src.ItemStack; import net.minecraft.src.ModelChest; +import net.minecraft.src.RenderBlocks; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; +import net.minecraft.src.forge.ForgeHooksClient; +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 }, }; public TileEntityIronChestRenderer() { model = new ModelChest(); + random = new Random(); + renderBlocks = new RenderBlocks(); } - public void render(TileEntityIronChest tile, double d, double d1, double d2, float f) { + public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { int facing = 3; if (tile != null && tile.worldObj != null) { facing = tile.getFacing(); } bindTextureByName(tile.getType().getModelTexture()); - GL11.glPushMatrix(); - GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glTranslatef((float) d, (float) d1 + 1.0F, (float) d2 + 1.0F); - GL11.glScalef(1.0F, -1F, -1F); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); + glPushMatrix(); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + glScalef(1.0F, -1F, -1F); + glTranslatef(0.5F, 0.5F, 0.5F); int k = 0; if (facing == 2) { k = 180; @@ -40,20 +59,82 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { if (facing == 5) { k = -90; } - GL11.glRotatef(k, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - float f1 = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * f; - f1 = 1.0F - f1; - f1 = 1.0F - f1 * f1 * f1; - model.chestLid.rotateAngleX = -((f1 * 3.141593F) / 2.0F); + glRotatef(k, 0.0F, 1.0F, 0.0F); + glTranslatef(-0.5F, -0.5F, -0.5F); + float lidangle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * partialTick; + lidangle = 1.0F - lidangle; + lidangle = 1.0F - lidangle * lidangle * lidangle; + model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); + // Render the chest itself model.func_35402_a(); - GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); - GL11.glPopMatrix(); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + glPopMatrix(); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (tile.getType().isTransparent()) { + random.setSeed(254L); + glPushMatrix(); + glDisable(2896 /* GL_LIGHTING */); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + glTranslatef((float) x, (float) y, (float) z); + float shiftX; + float shiftY; + float shiftZ; + int shift = 0; + float blockScale = 0.125F; + if (tile.getTopItemStacks()[1] == null) { + shift = 8; + blockScale = 0.25F; + } + for (ItemStack item : tile.getTopItemStacks()) { + if (shift > shifts.length) { + break; + } + if (item == null) { + shift++; + continue; + } + shiftX = shifts[shift][0]; + shiftY = shifts[shift][1]; + shiftZ = shifts[shift][2]; + shift++; + if (item.itemID < Block.blocksList.length && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + glPushMatrix(); + 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); + + glPopMatrix(); + } + glPopMatrix(); + } + } + glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + glEnable(2896 /* GL_LIGHTING */); + glPopMatrix(); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } } - public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) { - render((TileEntityIronChest) tileentity, d, d1, d2, f); + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick) { + render((TileEntityIronChest) tileentity, x, y, z, partialTick); } private ModelChest model; diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 0c6c10d..316c162 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -14,9 +14,10 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraft.src.mod_IronChest; +import net.minecraft.src.forge.IMultipassRender; import net.minecraft.src.forge.ITextureProvider; -public class BlockIronChest extends BlockContainer implements ITextureProvider { +public class BlockIronChest extends BlockContainer implements ITextureProvider, IMultipassRender { private Random random; public BlockIronChest(int id) { @@ -179,4 +180,9 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } } } -} + + @Override + public boolean canRenderInPass(int n) { + return n==0; + } +} \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 49d75f1..fc53f30 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -15,7 +15,8 @@ public enum IronChestType { GOLD(81, 9, true, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm","mGmG4GmGm"), DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), - SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"); + SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"), + CRYSTAL(72, 9, true, "Crystal Chest", "guiSilverChest", "crystalchest.png", 5, null, TileEntityCrystalChest.class, "GGGGCGGGG"); int size; private int rowLength; public String friendlyName; @@ -129,4 +130,8 @@ public enum IronChestType { return matList; } + public boolean isTransparent() { + return this==CRYSTAL; + } + } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 53ee324..7b725c4 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -1,5 +1,8 @@ package cpw.mods.ironchest; +import java.util.Arrays; +import java.util.Comparator; + import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; @@ -15,6 +18,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { private int numUsingPlayers; private IronChestType type; public ItemStack[] chestContents; + private ItemStack[] topStacks; private byte facing; public TileEntityIronChest() { @@ -25,6 +29,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { super(); this.type=type; this.chestContents=new ItemStack[getSizeInventory()]; + this.topStacks = new ItemStack[8]; } public ItemStack[] getContents() { @@ -52,6 +57,65 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return chestContents[i]; } + @Override + public void onInventoryChanged() { + super.onInventoryChanged(); + sortTopStacks(); + } + + protected void sortTopStacks() { + if (!type.isTransparent()) { + return; + } + ItemStack[] tempCopy=new ItemStack[getSizeInventory()]; + boolean hasStuff=false; + int compressedIdx=0; + mainLoop: + for (int i=0; i() { + @Override + public int compare(ItemStack o1, ItemStack o2) { + if (o1==null) { + return 1; + } else if (o2==null) { + return -1; + } else { + return o2.stackSize-o1.stackSize; + } + } + }); + int p=0; + for (int i=0; i0) { + topStacks[p++]=tempCopy[i]; + if (p==topStacks.length) { + break; + } + } + } + for (int i=p; iPBy7@0Gf4i2%l#T+t>bi7H*VRD#5P8lZT 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 H>(T!Q>Md^$ delta 4408 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 Q7dCqoUxf5XC>h z#Z?b$(50K;Qs*KlS|`Cl1ec=bY8BsuET8wyamnH4?!tavik%LvO8u_@t*i&V*DQzrPN z;$7etvq;q%Huas?)n~%0m_-`${%K>HpBnn)3%Nz&tcOdi3$H}3Ww2?({Go4+IF}KZ zE#Z~Oqg&Xbd;BPBQFet{qzp`lcGgMQ38~-|Y_)w3M|P1H?G?(NFpKk2AK21 Date: Sat, 11 Feb 2012 01:55:30 -0500 Subject: [PATCH 026/188] 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 zcmeHLSzJ@s_CA1$6CkzDKq3w}KnA9eFa%|iQqU?EZ~zekM94rA$iNVALR%FTl~yLL zRoa4}LXDzHR7Aw6a6v$(gi*#2rVv7ga}QQ)AKLrx|32M^=4G$5_qV>a*0{nGo<$7}izYDO2MLixva`AD zfzTXI40kpUu=7RvQr!qq#BCfJVHd~GKa3L{h7C8zyTF}TIEa8mV1&Y1q!=4&%%Nzs@Ce*ach3*8peJYZCCW2{$pwJ?bXe<_sL|G%P zt*s!06`f6HgtDy2^fezD+zIqB8j;E%QpoTb#?XV5IEJ%1l<99Jkf^@CzY~+`AB2J= zL$X4tNHhY4B#~z7dXJ_vb`n0N@uz6IKbuNG?j+DDakMaKKO)wAbcVG1&w*xuP&T;j zG$OPqp)u~1us9Nd%gpYBFP}~o` znE&XDbE6SL85Ej7g%b0z19n7F7!-OGg$j4uWrsk+1Bm2s3X?vwJ-=1!PM{Iv3E`eJ z3JLyRUmWpI;-l9tG!zq?sle(_9$`5s5tWy{v8^2;jR!NB!<8~pq z7zRE)-+-5D!0W}yB+EgtE+MBzQFSCbW~%$|z@lXvAW3W_#mR;aqK3b;x;WncsTl?ER(g=v8yN4o?i zI)G&w5H-g;ceijzNFT?PQqhO-!<2&Cz#)ign>lHEZ4;8~9xB*Trd^ zod%PGW=Ym+sYh=njL8W-YZ0P8JuYgwyshueYSh?|n|b-ouL}dKr96pQy!Q2L@s(Gd zkC0@^eR^bU3+Zap#_T9U?e27g6$~T#;Pa@x= z?q}zH@AO7gNu6U}&2b|uhTB3b&zSNb(XM+J=aFRBN)b zr>BuoNuA{))kqeCG}QxA-v#5HWI8XHvUpw4XR^(@fZsU4>dsOemj}ckxVM?#cGT{R z%pqfA#-Q#SBs(5$5K`!4&xaGd%ydIow2-NnWg*-BK9?xm(L)KDohR_mw#1zj4YZW( zK&W1p@z!$pCrW=B6b=qQC~qLO{IUh6pN#D*tEcN;wgG}#Ej&!Z+ooOG!Ur2jRc%a( z-Pm+KAMAol%H($r<*@m~9N2}HHrTA5IKC!xKh!~fUBKLB{ND5Nef8z*Wd2@>uZX>c z+J{b?$Y-{FOBjvrDyj2Y;gYv!yg+)kdW=>BOV4XOB3P+r-?p5X4P_SM*tux_-n%jV zrc#B`1Ba1<4vD2~((edH)YW*VY^G&=ko?lO4e$B{xGrP2{FbBJ7Uq$8vRcnA>OIB) zD#?cfOL1WR64F5&4cVZLE>d0Zfo_w8QW7wbZ#1q^Bfcbm)wAurX{s7 zeEh#2-H9~gI6d9PKhjnFYed&EA{g605Jy?j6X{p1xmd3kt<3DrH5z4bR~jMfY7BoU z#kD@1d{t046}xzDg~n?Sc-&ys3%&Mt8^DD0MC8-D)}A{xW?gBe(|!9_*&#kMko@O?(vcy$R9>tR zljOalH=}q%E7fNtQ(25HgW!|GY9pAHR@uI|hpw|n`DlYvZlrw0U9rJMNP<#$wjiNOVJ zT7wdo^cEqd%OYcwE8t*N4X7U%;rC5oSfj`EycMs_frv7GouI1FD;sLGWt|F_q|qN5 zx$Ul)`yF1RY#nxO!jQ8WC2i7wYEUuP8X`;}}Hq+T*D7xmgOm5(3l7v-$|09Q_ZZCQHBzsNG z7<}S$x6q2ZZ(CB9Aiv&goR%2X@O?meKK8AP3pKvI8~;e8&n^2&4s)bAd5isx9<8pn zE<7G4YdUG6N!B+KltN1`jC<;au4d4uS=+eYTfWG3Ig55BQmvEisdLM}{;PLG`HyzP zB5mXwM;J7{j=-hc$MfYuDUZM6{(#k6)Lhw9X|-zkSbcL=-j9iM;r^;MIW;cdO={C4 zT{+x6xSMH08vqbl0F!O>1a{JE$7Guz`Hhg3Cayi|!Bty{jwYAyFZVQ=kCELkdMJpf zJAEV)u{Bum8MQr*DF<9G?Z%wyI!0BP;ENxM;~R{6&3f|3^FsUL9i^K;_f)UY%K8uS zDZxx}E5MpP30B?3Pnf0r#CtOjNU>>O=t`fDBf*Z5*Sp5e$N66F>hzAvo#ik!pqO0f zdif zxYQ`!*tb}3yRM0Lv6?E=%}t@k$IVi!QwMI3xgqm5)ca6>gg1-k? zm5z;h)4PG_hD!mIoA{*uW1ZU=Tn_X3+D2^h#FM0B?3o?tJ`Hc64LTSkOp8#`JAjiFn6N@cC%>4(F5>xshOz z(Ak+grVT8Km;M|wd*s<}y}Y7*_wR@+ugSpcWKf$5e31}&Fk1(3(0dJZ2gxm`QcFhU zg(tZ;;%l!RST9geqKsU!)(pS9Yr9ae^}vupXoSA&M6(@#vga&PTnloWfq_2U6eesIwdHwITG)LnpY${bksdL~j*;n^BFVmNX^kuyCgnH;|g$E$Y0%2TLAu zES`;7y1Gm(IR`xaqHuYOF)QCuwvMBaG2dCPQURN8MDqmU^6PuIw;p2G?sfTD=etaa zaQR*K*M^#ikxX7i-AL@Bv??bPlvEQ!-fO&?%|FeK;=xh~iF4Y&Z0u(om)P5s4Dlo| zJzWPqJ$Q?H=%I*mUmB8u)KtMTEe`XBF1LF3smfsAGnGQH@>*3TcxbHHW3MVBp?80B z6e#X4$A~eba=aP&GEF==r0sbk-UnldYa7c^~C48dzH1~Ha{y_0};h(hoN1%`L z|Alt{2=tFY@9&#`j@bWk>;CTxw6qVLy&UieHfDJI@*4VM2>`r3{M?JS9yt7O^_vnS 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 zcmV+h5c%(kP)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGi!vFvd!vV){sAK>D00(qQO+^RX0tyu_5U>cnBLDyeI7vi7 zRCwC$n!j%xMHI(BZ+7p_b^>uwAQDKVL87Fh0nr2r2~i+A3Pcx5{viGeibzP2XrQE` zj6{J8qBxF!V8?g+Yu=-n+4J7n`0my@=PufjtXr@Bot^pYdv9jHdjjy$;}`aLXT*p1 zHhH`=BKzWPVOINT$GF}m{BUn!k=fGON`+ym{PFOaMI8(3mPR$rpA0#=J0O2D1eiFU)$VL2+~_$QJCkP_Qa?FwOy?4ykg< zl_urK55za`=mKINC*y>0=Yd{Kg?ivUi4(r)8UlC)6-cA7io#UFd6o^}3ay@e0+c=s zycA)>1t4do7>dS;q>eq65CvF-;Gj;a3NV|{EiDCF0}x0==m8r^xLaHCc9&|X8eSn& zqtHp+IL!M=T|hz_losg4w27s&o=-Kwa>*Q^9LU=R)Ds8z+TL=;#ZQ)VU&nAve+x z0cu!bkoyVU>eYalK)IeRSCxj}y@fP*mMbqxW0d=II!cW+V%4k+tHLM81!SK6%&#s0 zOvv@Dve)&jP-E!fxKxIf;nheJnb1+xo1mEY3RY+cnPC+^l}X*I0ocnty+lx8%Lye$ zsbO9tZyaQb_eSN7qOqXwWuDJJ*|z`FJ#XlaPnR13?eV@Q4@2?_CUULK9=tCzQ{emW z-jhnhK4khcSIE3^>WzQPurc}b;jT4x2<#VT2ZeGt@~FU#)bVCtNJV7mFV?la-lDp> zYQP{l+r3p9irQ&uoK(hX6*|nlQBI}gAi<6*lY>I}d%xi1phPQUa5LrBcFN6x!-184 zGTp9ly;i!J0P0SQxO^1~FT8P-D`nioI3StY*yoC59`;9`be?mNd&ZA39f$?Shan?r(fS?kO(~|xZ2ukZ2Mi~(KxS+-+z93B`a+? z09vfAaUa0#LBhlB-duO){`1_fYNfRr>jPWvDm!nbVMdY&nK!nQ z=z^&Q&rpQYR@@R>q`lR!w%S^0D+i#zKm|FPvc%e0X)9}q&C?D>{>oO`>ZQN}`I$^v zVy&#SRReHX8ebk3rWW1{6lQ3g*w7pM(b_7!angu@wpLnaiFKCPk}R=rzI|8fNb?r* z@ma3qm62CQr8a(LXTZ*{;Y$_kqMHfeuM~ zLWfA~uQDu#len-y7dZ>BbXS4orwdRqG$@JPK4IF=w<^b6pLn_mKrEaAbHM@ zZh&1E-An*lG>FyVH4djh8H-y6-YJ;4q@2cQGc z0q6j906G92fDS+hpaakW=m2y8IshGj4nPN>1F&}OKThhbJ|FE&{{R3007*qoM6N<$ Ef-L~Vg8%>k literal 0 HcmV?d00001 From 879fa2a97a510910c567ca1f28736e3ad52d87f0 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 11 Feb 2012 10:11:54 -0500 Subject: [PATCH 027/188] Working crystal chests --- .../cpw/mods/ironchest/client/GUIChest.java | 2 +- .../client/TileEntityIronChestRenderer.java | 24 ++++++++++-------- .../cpw/mods/ironchest/ChestChangerType.java | 8 +++--- .../cpw/mods/ironchest/IronChestType.java | 2 +- .../mods/ironchest/sprites/block_textures.png | Bin 12443 -> 12813 bytes .../mods/ironchest/sprites/item_textures.png | Bin 5661 -> 3653 bytes .../faithful_texturesheet.xcf | Bin 37255 -> 44751 bytes .../mods/ironchest/sprites/block_textures.png | Bin 4915 -> 4849 bytes .../mods/ironchest/sprites/crystalchest.png | Bin 4102 -> 4096 bytes .../mods/ironchest/sprites/item_textures.png | Bin 2724 -> 1672 bytes IronChests2/resources/texturesheet.xcf | Bin 16149 -> 16141 bytes 11 files changed, 21 insertions(+), 15 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 1e2170b..c19c1ea 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -19,7 +19,7 @@ public class GUIChest extends GuiContainer { DIAMOND(238,256,"/cpw/mods/ironchest/sprites/diamondcontainer.png",IronChestType.DIAMOND), COPPER(184,184,"/cpw/mods/ironchest/sprites/coppercontainer.png",IronChestType.COPPER), SILVER(184,238,"/cpw/mods/ironchest/sprites/silvercontainer.png",IronChestType.SILVER), - CRYSTAL(184,238,"/cpw/mods/ironchest/sprites/silvercontainer.png",IronChestType.CRYSTAL); + CRYSTAL(238,256,"/cpw/mods/ironchest/sprites/diamondcontainer.png",IronChestType.CRYSTAL); private int xSize; private int ySize; diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 5f34f6e..4008ba0 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -16,7 +16,6 @@ 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; @@ -30,7 +29,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private RenderBlocks renderBlocks; 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 }, }; + { 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.32F, 0.5F }, }; public TileEntityIronChestRenderer() { model = new ModelChest(); @@ -78,10 +77,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { if (tile.getType().isTransparent()) { random.setSeed(254L); - glPushMatrix(); - glDisable(2896 /* GL_LIGHTING */); - glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); - glTranslatef((float) x, (float) y, (float) z); float shiftX; float shiftY; float shiftZ; @@ -92,8 +87,12 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { if (tile.getTopItemStacks()[1] == null) { shift = 8; blockScale = 0.2F; - spread = 0.25F; + spread = 0.22F; } + glPushMatrix(); + glDisable(2896 /* GL_LIGHTING */); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + glTranslatef((float) x, (float) y, (float) z); for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { break; @@ -109,8 +108,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { 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(); if (j == 1 || j == 19 || j == 12 || j == 2) { localScale = 2 * blockScale; @@ -124,20 +121,27 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { 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 minishiftY = ((random.nextFloat() * 2.0F - 1.0F) * spread * 0.9F) / localScale; float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; glTranslatef(minishiftX, minishiftY, minishiftZ); } if (customRenderer != null) { + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(item.getItem()); ForgeHooksClient.renderCustomItem(customRenderer, renderBlocks, item.itemID, item.getItemDamage(), 1.0F); } else if (item.itemID < Block.blocksList.length && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); 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]); + } else { + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); } Tessellator tessellator = Tessellator.instance; float f5 = (float) ((i % 16) * 16 + 0) / 256F; diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index 2c6ba11..9a4c8ec 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -5,6 +5,7 @@ import static cpw.mods.ironchest.IronChestType.DIAMOND; import static cpw.mods.ironchest.IronChestType.GOLD; import static cpw.mods.ironchest.IronChestType.IRON; import static cpw.mods.ironchest.IronChestType.SILVER; +import static cpw.mods.ironchest.IronChestType.CRYSTAL; import net.minecraft.src.Block; import net.minecraft.src.ItemStack; @@ -15,7 +16,8 @@ public enum ChestChangerType { GOLDDIAMOND(GOLD,DIAMOND,"goldDiamondUpgrade","Gold to Diamond Chest Upgrade","GGG","msm","GGG"), COPPERSILVER(COPPER,SILVER,"copperSilverUpgrade","Copper to Silver Chest Upgrade","mmm","msm","mmm"), SILVERGOLD(SILVER,GOLD,"silverGoldUpgrade","Silver to Gold Chest Upgrade","mGm","GsG","mGm"), - COPPERIRON(COPPER,IRON,"copperIronUpgrade","Copper to Iron Chest Upgrade","mGm","GsG","mGm"); + COPPERIRON(COPPER,IRON,"copperIronUpgrade","Copper to Iron Chest Upgrade","mGm","GsG","mGm"), + DIAMONDCRYSTAL(DIAMOND,CRYSTAL,"diamondCrystalUpgrade", "Diamond to Crystal Chest Upgrade","GGG","GOG","GGG"); private IronChestType source; private IronChestType target; @@ -47,7 +49,7 @@ public enum ChestChangerType { } public void addRecipe() { - IronChestType.addRecipe(new ItemStack(item), recipe, 'm', target.mat,'s',source.mat,'G',Block.glass); + IronChestType.addRecipe(new ItemStack(item), recipe, 'm', target.mat,'s',source.mat,'G',Block.glass,'O',Block.obsidian); } public static void buildItems(Configuration cfg, int defaultId) { @@ -59,7 +61,7 @@ public enum ChestChangerType { public static void generateRecipe(IronChestType type) { for (ChestChangerType item: values()) { if (item.source==type || item.target==type) { - for (Object[] recipe : MinecraftForge.generateRecipes(item.recipe[0],item.recipe[1],item.recipe[2],'s',item.source.getMatList(),'m',item.target.getMatList(),'G',Block.glass)) { + for (Object[] recipe : MinecraftForge.generateRecipes(item.recipe[0],item.recipe[1],item.recipe[2],'s',item.source.getMatList(),'m',item.target.getMatList(),'G',Block.glass,'O',Block.obsidian)) { if (recipe[4]==null || recipe[6]==null) { continue; } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index fc53f30..81de178 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -16,7 +16,7 @@ public enum IronChestType { DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"), - CRYSTAL(72, 9, true, "Crystal Chest", "guiSilverChest", "crystalchest.png", 5, null, TileEntityCrystalChest.class, "GGGGCGGGG"); + CRYSTAL(108, 12, true, "Crystal Chest", "guiDiamondChest", "crystalchest.png", 5, null, TileEntityCrystalChest.class, "GGGGPGGGG"); int size; private int rowLength; public String friendlyName; diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/block_textures.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/block_textures.png index 0332d4aa2b4d6fb03a93f965350b8b8b96527e10..c500c4f306c6f8cbdd082e1982413ba33dcfb2e6 100644 GIT binary patch literal 12813 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 o{NJDdwZQ*c;QvDl45icg?%tHE{1or^p1FL3nR literal 12443 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 diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/item_textures.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/item_textures.png index 905bf49acae0341fbd5c23001ad35aeaca19eb26..b710f59e1b8cfd029e51bd9258bb021c3d36c12e 100644 GIT binary patch literal 3653 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 T?a!Y7_I7udQ}BA{^MCvUcl3@h literal 5661 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 diff --git a/IronChests2/faithful_texturepack/faithful_texturesheet.xcf b/IronChests2/faithful_texturepack/faithful_texturesheet.xcf index f72f6d5863d7225c5401d1431f5b49f4390d732d..b9918d0586ff914a8b8850e3e27a868100027158 100644 GIT binary patch delta 1394 zcmbu7-%FEG7{{NzW_!0rwK9X0dZLbr-Y9K%ksC{VqaTDLv=qv4+Mq_JFvAOXWvw7; zuifNL5Sd=afv}{TZiAxRK>Y_osC!-CXXl_aYF+e!&-H+`n7{1Y&@+u2AvG&GU@O{rK?1-=UeXIZ6;?6H09(=8?nwaH*xs+b_O~Im zM>4=xw8oD~0N5Bm=`V1-$p9M#dpxU29PD=@AiTD?V7fsNif zz380_x1@JU2-u3=^dSiV8`EumG%=wcr@LH*-K)U3ifA9eZdYJj;h^Kka((*j;73Sv4BbbN9%s7^@^*oyYTB?$l<3)gjj;k&DFJ}WS;B3g?>r~(^{V>(+r>^5yD6u`K7 zJUg68-Mu$HF?7rCjNGY5Mlbv!?_lRX85&9{J78214=DAa3T!NmVlzJkv&nK3)zvUn zW3JYH)pJSzYfnRPd+8Gav+Vt{Cc|9P4j5I$vgac{`@?__y< z4HO{%Vz0aPGSU2GeFD?wg&Huj%(vPBql$Q;`Kog=f8L({VzBC^!c<=lV{dBL)L-Xo P@9Q5v$gZt}kSzZKaHI8R delta 756 zcmZXRK`3ld7{|XE&1}fL-J9O#xjQ<_ z0-N`u6iKIei&wASjs;?;q%16C!-BGq@0)W|mtXzP>Hfd}Ik)aTzVQD1?Oo{f1a{+J zJ+W&5vl^gs0HFR1;PWg%TR%WN2GD&9kmv$P)&NY80c27DbB_Sue*nxc${Wugu>u;T zjV%W7?$FMl*85LJf>WxsXv-&#I497N>gE*(1ZvHD^<)Nof<^_9R+gTFRkSmx4YsIA zaKbO;pnI`8yfwhg>wQOsUGU!fIw}iPYs3ke4>am0v)Lu{m21< z+Gw*1M-Tksjxz!sscMyQK%myDRJGQO;j!gn&xgPoPYBfZY^%wYC7!b+Xo)Rev|^QhDB8A-^Pl3Ho0JkXDwCCF%bbKw8Py2DbH@UNPo9akk8lu7-b2aJ>oaz``lSRrBeA@L-e|1uG-`7%+9EcU1z)ibS`Tp diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/block_textures.png b/IronChests2/resources/cpw/mods/ironchest/sprites/block_textures.png index 7804276a3ee1252272509c65803b863b8f5a3c7c..00f4e8357f080245f156954ddda47098abab49ea 100644 GIT binary patch literal 4849 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 delta 4572 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 YbmRUgQ=cWTfi@oa1^e?<{9 diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/crystalchest.png b/IronChests2/resources/cpw/mods/ironchest/sprites/crystalchest.png index 3d17565296ee01de29c01d76a09338fd1bd78eb3..a455ce86e30a74a6a6b352d3d78b4ad8e624cd1f 100644 GIT binary patch delta 648 zcmV;30(bp}Ab=pSt_lnb4hJfljnIw&00lC$x(dPqf5t(f9F9CHa3giR*%wj~hW=t* z+v_c=o2v#4lC#}grJ<;umc~hCoK~U3+#BUoN)8e@s>0;|-Y+;gDACFo+)TN(opN*F zaB!in?e*H|W&)@?E#mT3D7^5-QLdD66XSqnYGWVB!~V!~{Jfy}X9T6y<7Cb`{N?UPDY?1a>!`f_=;>@Wx3a0@_+>oh8;;VoS2bzWMfDsUyu> zf5^vYxsq2#UKy3z_?4XjJHLi6Rji9{CV;jN zH~|YCBC)^9uozC_!v0+3EWFl5HxqzqP#{=$CJt2)ESh;*YM?BE zfwf_K5*{MAE0o3>a0000U=LW?x7}Waux} zwY}b=y18n=AUWH;RT_%gX=$8P#%UEg%)L=grQ{&Njw+LbLiu~Y;N+l0D`Rjo<<@q} z&4I&#m3}hau5i6px|sm#PK&sF6$&rBag-}%+{8E_ncCRriew)4N1o&71;sxjC>4LZ zkH{v;e|E}d-^sMD?e*H~x*Bjv1hicVu74F+wSB;+U*Bbr2t6mb+S+Pt`(5MFIIoP~ ze|~x;D{VOdTCA;cAHeNF!o%&}TzBUF^W3g#rL`LC16%In@ca)>a;cS;h@3M_lIya> zu0!l!f|a&%07{#Gbj?uq4eQU_Dm!nb zVMdY&nK!nQ=z^&Q&rpQYR@@R>q`lR!w%S^0D+i#zKm|FPvc%e0X)9}q&C?D>{>oO` z>ZQN}`I$^vVy&#SRReHX8ebk3rWW1{6lQ3g*w7pM(b_7!angu@wpLnaiFKCPk}R=r zf4+TJ>PYhz^6^=&WoN+7ui;A->!O~x!z(R*e?5{E`hLgCkKNmR*Q?GT=%>-Z?2-cm61Dm2~3aCzm*1G6s11J=W zW}cQBC`%xD&W~<@T^HR<09rJN)!{V`r$8BtUuI}@ye_(#0Q}Re)n;g2beHY~&0gz` o;Bq~|lgJMr96$%41F&}OKThhbJ|FE&{{R3007*qoM6N<$f_O(q@Bjb+ diff --git a/IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png b/IronChests2/resources/cpw/mods/ironchest/sprites/item_textures.png index fb279efe61b8f951096bd3f74bcd29d283f6bdc3..81403d09de3515a2fe35de54cc7dc577358d8926 100644 GIT binary patch literal 1672 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 From 1d5097e7c969cbbd85c9a88bdc6f215010a2e92d Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 11 Feb 2012 11:37:44 -0500 Subject: [PATCH 028/188] Fix EMC for crystal chest --- .../common/net/minecraft/src/mod_IronChest.java | 2 +- .../cpw/mods/ironchest/sprites/crystalchest.png | Bin 0 -> 6295 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/crystalchest.png diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index ceabec6..8c226d8 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -82,7 +82,7 @@ public class mod_IronChest extends BaseModMp { Class equivexmaps=Class.forName("ee.EEMaps"); Method addEMC=equivexmaps.getMethod("addEMC",int.class,int.class,int.class); Method addMeta=equivexmaps.getMethod("addMeta",int.class,int.class); - int[] chestEMCValues=new int[] { 8*8+256*8, 8*8+256*8+2048*8, 2*8192+8*8+256*8+2048*8+6, 85*8+8*8, 85*8+8*8+512*8 }; + int[] chestEMCValues=new int[] { 8*8+256*8, 8*8+256*8+2048*8, 2*8192+8*8+256*8+2048*8+6, 85*8+8*8, 85*8+8*8+512*8, 2*8192+8*8+256*8+2048*8+6+8 }; for (IronChestType icType : IronChestType.values()) { addEMC.invoke(null,ironChestBlock.blockID,icType.ordinal(),chestEMCValues[icType.ordinal()]); } diff --git a/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/crystalchest.png b/IronChests2/faithful_texturepack/cpw/mods/ironchest/sprites/crystalchest.png new file mode 100644 index 0000000000000000000000000000000000000000..97e8692f8659244389fd49873a2d2d8a9f88ecec GIT binary patch literal 6295 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 literal 0 HcmV?d00001 From 2b87f68da56c8b57651b656049a812f35779e036 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 11 Feb 2012 12:09:48 -0500 Subject: [PATCH 029/188] Fix crystal upgrader --- IronChests2/common/cpw/mods/ironchest/IronChestType.java | 2 +- IronChests2/common/net/minecraft/src/mod_IronChest.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 81de178..0edc143 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -16,7 +16,7 @@ public enum IronChestType { DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"), - CRYSTAL(108, 12, true, "Crystal Chest", "guiDiamondChest", "crystalchest.png", 5, null, TileEntityCrystalChest.class, "GGGGPGGGG"); + CRYSTAL(108, 12, true, "Crystal Chest", "guiDiamondChest", "crystalchest.png", 5, Item.itemsList[Block.glass.blockID], TileEntityCrystalChest.class, "GGGGPGGGG"); int size; private int rowLength; public String friendlyName; diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 8c226d8..03e652e 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -70,6 +70,7 @@ public class mod_IronChest extends BaseModMp { proxy.registerTileEntities(); ChestChangerType.generateRecipe(IronChestType.IRON); ChestChangerType.generateRecipe(IronChestType.GOLD); + ChestChangerType.generateRecipe(IronChestType.DIAMOND); IronChestType.generateTieredRecipies(ironChestBlock); proxy.registerRenderInformation(); From 0c3e0e7a0b59acccbcacc53f3e9e7edb79bf0693 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Fri, 17 Feb 2012 14:09:06 -0500 Subject: [PATCH 030/188] Version 2.4.1 build with forge 1.3.3.12 --- IronChests2/build.xml | 4 ++-- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 2 +- .../common/cpw/mods/ironchest/TileEntityIronChest.java | 2 +- IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 610d139..d94599d 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 316c162..234b228 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -174,7 +174,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider, entityitem.motionZ = (float)random.nextGaussian() * f3; if (itemstack.hasTagCompound()) { - mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound)itemstack.getTagCompound().cloneTag()); + mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound)itemstack.getTagCompound().copy()); } world.spawnEntityInWorld(entityitem); } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 38ffc64..62b7cb4 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -184,7 +184,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte)i); chestContents[i].writeToNBT(nbttagcompound1); - nbttaglist.setTag(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); } } diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index 5a5d01d..21c539b 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -43,7 +43,7 @@ public class ServerProxy implements IProxy { @Override public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { - entityitem.item.setNBTData(data); + entityitem.item.setTagCompound(data); } @Override From 5ec981acb8763807a0d09af62cd362e41a3d4349 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 18 Feb 2012 10:05:28 -0500 Subject: [PATCH 031/188] Fix SMP display of chest types and upgrader effects --- .../client/TileEntityIronChestRenderer.java | 12 ++++++-- .../cpw/mods/ironchest/BlockIronChest.java | 28 ++++++++++--------- .../cpw/mods/ironchest/ItemChestChanger.java | 3 +- .../mods/ironchest/TileEntityIronChest.java | 10 +++++++ 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 4008ba0..7877923 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -22,6 +22,7 @@ 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.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { @@ -38,11 +39,18 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { + if (tile==null) { + return; + } int facing = 3; + IronChestType type=tile.getType(); if (tile != null && tile.worldObj != null) { facing = tile.getFacing(); + type=tile.getType(); + int typ=tile.worldObj.getBlockMetadata(tile.xCoord,tile.yCoord,tile.zCoord); + type=IronChestType.values()[typ]; } - bindTextureByName(tile.getType().getModelTexture()); + bindTextureByName(type.getModelTexture()); glPushMatrix(); glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); @@ -75,7 +83,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if (tile.getType().isTransparent()) { + if (type.isTransparent()) { random.setSeed(254L); float shiftX; float shiftY; diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 234b228..23165b0 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -17,13 +17,14 @@ import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.IMultipassRender; import net.minecraft.src.forge.ITextureProvider; -public class BlockIronChest extends BlockContainer implements ITextureProvider, IMultipassRender { +public class BlockIronChest extends BlockContainer implements ITextureProvider { private Random random; public BlockIronChest(int id) { super(id, Material.iron); setBlockName("IronChest"); setHardness(3.0F); + setRequiresSelfNotify(); random=new Random(); } @@ -56,18 +57,19 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider, } public int getBlockTexture(IBlockAccess worldAccess, int i, int j, int k, int l) { + IronChestType type=IronChestType.values()[l]; TileEntity te = worldAccess.getBlockTileEntity(i, j, k); - if (te != null && te instanceof TileEntityIronChest) { - TileEntityIronChest icte=(TileEntityIronChest) te; - if (l==0 || l==1) { // Top and Bottom - return icte.getType().getTextureRow()*16+1; - } else if (l==icte.getFacing()) { // Front - return icte.getType().getTextureRow()*16+2; - } else { // Back and Sides - return icte.getType().getTextureRow()*16; - } + 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; } - return 0; } @Override @@ -181,8 +183,8 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider, } } - @Override +/* @Override public boolean canRenderInPass(int n) { return n==0; - } + }*/ } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 357c108..e0d9ffc 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -29,8 +29,7 @@ public class ItemChestChanger extends Item implements ITextureProvider { return false; } world.setBlockTileEntity(X, Y, Z, newchest); - world.setBlockMetadata(X, Y, Z, newchest.getType().ordinal()); - world.markBlockNeedsUpdate(X, Y, Z); + world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal()); world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); stack.stackSize=0; return true; diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 62b7cb4..e61484d 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -299,4 +299,14 @@ public class TileEntityIronChest extends TileEntity implements IInventory { public ItemStack[] getTopItemStacks() { return topStacks; } + + public TileEntityIronChest updateFromMetadata(int l) { + if (worldObj!=null && worldObj.isRemote) { + if (l!=type.ordinal()) { + worldObj.setBlockTileEntity(xCoord, yCoord, zCoord, IronChestType.makeEntity(l)); + return (TileEntityIronChest)worldObj.getBlockTileEntity(xCoord, yCoord, zCoord); + } + } + return this; + } } From 6d505961a3fb8bb9c55fba496a46f78fdbcee085 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Wed, 22 Feb 2012 13:55:47 -0500 Subject: [PATCH 032/188] Version 2.5 - fix IC display on SMP, fix crystal chests on SMP --- IronChests2/build.xml | 2 +- .../mods/ironchest/client/ClientProxy.java | 31 +++++++++- .../cpw/mods/ironchest/BlockIronChest.java | 6 -- .../common/cpw/mods/ironchest/IProxy.java | 8 +++ .../cpw/mods/ironchest/ItemChestChanger.java | 2 + .../mods/ironchest/TileEntityIronChest.java | 58 ++++++++++++++++++- .../net/minecraft/src/mod_IronChest.java | 8 ++- .../mods/ironchest/server/ServerProxy.java | 23 ++++++++ 8 files changed, 124 insertions(+), 14 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index d94599d..55d1585 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index fddfe04..913fdd9 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -11,6 +11,8 @@ import net.minecraft.src.GuiScreen; import net.minecraft.src.ModLoader; import net.minecraft.src.ModLoaderMp; import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet; +import net.minecraft.src.TileEntity; import net.minecraft.src.forge.MinecraftForgeClient; import cpw.mods.ironchest.ChestChangerType; import cpw.mods.ironchest.IProxy; @@ -21,8 +23,8 @@ public class ClientProxy extends BaseModMp implements IProxy { @Override public void registerRenderInformation() { ChestItemRenderHelper.instance=new IronChestRenderHelper(); - MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png"); - MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/item_textures.png"); + MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/block_textures.png"); + MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/item_textures.png"); } @Override @@ -84,4 +86,29 @@ public class ClientProxy extends BaseModMp implements IProxy { } return null; } + + @Override + public void handleTileEntityPacket(int x, int y, int z, int type, int[] intData, float[] floatData, String[] stringData) { + TileEntity te=ModLoader.getMinecraftInstance().theWorld.getBlockTileEntity(x, y, z); + if (te!=null && te instanceof TileEntityIronChest) { + TileEntityIronChest icte=(TileEntityIronChest)te; + icte.handlePacketData(type,intData,floatData,stringData); + } + } + + @Override + public Packet getDescriptionPacket(TileEntityIronChest tile) { + // NOOP on client + return null; + } + + @Override + public void sendTileEntityUpdate(TileEntityIronChest tile) { + // NOOP on client + } + + @Override + public boolean isRemote() { + return ModLoader.getMinecraftInstance().theWorld.isRemote; + } } diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 23165b0..acc099e 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -14,7 +14,6 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraft.src.mod_IronChest; -import net.minecraft.src.forge.IMultipassRender; import net.minecraft.src.forge.ITextureProvider; public class BlockIronChest extends BlockContainer implements ITextureProvider { @@ -182,9 +181,4 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } } } - -/* @Override - public boolean canRenderInPass(int n) { - return n==0; - }*/ } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/IProxy.java b/IronChests2/common/cpw/mods/ironchest/IProxy.java index 7a55e7a..909abca 100644 --- a/IronChests2/common/cpw/mods/ironchest/IProxy.java +++ b/IronChests2/common/cpw/mods/ironchest/IProxy.java @@ -5,6 +5,7 @@ import java.io.File; import net.minecraft.src.EntityItem; import net.minecraft.src.EntityPlayer; import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet; public interface IProxy { @@ -22,4 +23,11 @@ public interface IProxy { public abstract void registerGUI(int guiId); + public abstract void handleTileEntityPacket(int x, int y, int z, int type, int[] intData, float[] floatData, String[] stringData); + + public abstract Packet getDescriptionPacket(TileEntityIronChest tile); + + public abstract void sendTileEntityUpdate(TileEntityIronChest tile); + + public abstract boolean isRemote(); } diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index e0d9ffc..5cb8a99 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -5,6 +5,7 @@ import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.TileEntity; import net.minecraft.src.World; +import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.ITextureProvider; public class ItemChestChanger extends Item implements ITextureProvider { @@ -32,6 +33,7 @@ public class ItemChestChanger extends Item implements ITextureProvider { world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal()); world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); stack.stackSize=0; + mod_IronChest.proxy.sendTileEntityUpdate(newchest); return true; } else { return false; diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index e61484d..6fed2d8 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -8,6 +8,7 @@ import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NBTTagList; +import net.minecraft.src.Packet; import net.minecraft.src.TileEntity; import net.minecraft.src.mod_IronChest; @@ -21,6 +22,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { private ItemStack[] topStacks; private byte facing; private boolean inventoryTouched; + private boolean hadStuff; public TileEntityIronChest() { this(IronChestType.IRON); @@ -66,7 +68,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } protected void sortTopStacks() { - if (!type.isTransparent()) { + if (!type.isTransparent() || mod_IronChest.proxy.isRemote()) { return; } ItemStack[] tempCopy=new ItemStack[getSizeInventory()]; @@ -85,12 +87,15 @@ public class TileEntityIronChest extends TileEntity implements IInventory { hasStuff=true; } } - if (!hasStuff) { + if (!hasStuff && hadStuff) { + hadStuff=false; for (int i=0; i() { @Override public int compare(ItemStack o1, ItemStack o2) { @@ -115,7 +120,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { for (int i=p; i Date: Thu, 1 Mar 2012 21:29:08 -0500 Subject: [PATCH 033/188] Fix texture display (not actually important since renderer works) --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index acc099e..74e3d6e 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -56,7 +56,8 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } public int getBlockTexture(IBlockAccess worldAccess, int i, int j, int k, int l) { - IronChestType type=IronChestType.values()[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) { From 2ec8e30faafa20b6a4d06fb3931190d73215cd92 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 6 Mar 2012 14:57:28 -0500 Subject: [PATCH 034/188] update gitignore properly --- IronChests2/.gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/IronChests2/.gitignore b/IronChests2/.gitignore index 81886e9..da21bb7 100644 --- a/IronChests2/.gitignore +++ b/IronChests2/.gitignore @@ -1,2 +1,3 @@ -/mod_ironchests-client-2.0.zip -/mod_ironchests-server-2.0.zip +*.zip +/*.jpage +bin/ \ No newline at end of file From 7ad52f475aa6398ec0912dd77cadc69b408c4728 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 6 Mar 2012 15:38:21 -0500 Subject: [PATCH 035/188] Initial fixup for 1.2.3 and forge 1.3.4.33 - no custom handling code yet --- IronChests2/.classpath | 2 +- IronChests2/build.xml | 8 +++++--- .../cpw/mods/ironchest/client/ClientProxy.java | 6 +++--- .../client/cpw/mods/ironchest/client/GUIChest.java | 2 +- .../client/TileEntityIronChestRenderer.java | 8 ++++---- .../common/cpw/mods/ironchest/IronChestType.java | 2 +- .../cpw/mods/ironchest/TileEntityIronChest.java | 14 ++++++++++++++ .../common/net/minecraft/src/mod_IronChest.java | 2 +- .../cpw/mods/ironchest/server/ServerProxy.java | 4 ++-- 9 files changed, 32 insertions(+), 16 deletions(-) diff --git a/IronChests2/.classpath b/IronChests2/.classpath index 893f780..838ad7a 100644 --- a/IronChests2/.classpath +++ b/IronChests2/.classpath @@ -4,6 +4,6 @@ - + diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 55d1585..6604c08 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,8 +13,8 @@ - - + + @@ -54,7 +54,9 @@ - + + + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 913fdd9..92938f4 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -30,17 +30,17 @@ public class ClientProxy extends BaseModMp implements IProxy { @Override public void registerTileEntities() { for (IronChestType typ : IronChestType.values()) { - ModLoader.RegisterTileEntity(typ.clazz, typ.name(), new TileEntityIronChestRenderer()); + ModLoader.registerTileEntity(typ.clazz, typ.name(), new TileEntityIronChestRenderer()); } } @Override public void registerTranslations() { for (IronChestType typ : IronChestType.values()) { - ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName); + ModLoader.addLocalization(typ.name() + ".name", typ.friendlyName); } for (ChestChangerType typ : ChestChangerType.values()) { - ModLoader.AddLocalization("item."+typ.itemName+".name", typ.descriptiveName); + ModLoader.addLocalization("item."+typ.itemName+".name", typ.descriptiveName); } } diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index c19c1ea..05bd1e7 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -48,7 +48,7 @@ public class GUIChest extends GuiContainer { public static void showGUI(TileEntityIronChest te, EntityPlayer player) { GUIChest gui=buildGUI(te.getType(),player.inventory,te); if (gui!=null) { - ModLoader.OpenGUI(player, gui); + ModLoader.openGUI(player, gui); } else { player.displayGUIChest(te); } diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 7877923..55421e5 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -78,7 +78,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { lidangle = 1.0F - lidangle * lidangle * lidangle; model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); // Render the chest itself - model.func_35402_a(); + model.renderAll(); glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -115,7 +115,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shift++; ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(item.itemID); float localScale = blockScale; - if (item.itemID < Block.blocksList.length) { + if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null) { int j = Block.blocksList[item.itemID].getRenderType(); if (j == 1 || j == 19 || j == 12 || j == 2) { localScale = 2 * blockScale; @@ -138,13 +138,13 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(item.getItem()); ForgeHooksClient.renderCustomItem(customRenderer, renderBlocks, item.itemID, item.getItemDamage(), 1.0F); - } else if (item.itemID < Block.blocksList.length && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); } else { int i = item.getIconIndex(); - if (item.itemID >= Block.blocksList.length) { + if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID]==null) { bindTextureByName("/gui/items.png"); ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); } else { diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 0edc143..718f178 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -95,7 +95,7 @@ public enum IronChestType { } public static void addRecipe(ItemStack is, Object... parts) { - ModLoader.AddRecipe(is, parts); + ModLoader.addRecipe(is, parts); } public int getGUI() { diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 6fed2d8..2c5d323 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -361,4 +361,18 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } return null; } + + public ItemStack func_48081_b(int par1) + { + if (this.chestContents[par1] != null) + { + ItemStack var2 = this.chestContents[par1]; + this.chestContents[par1] = null; + return var2; + } + else + { + return null; + } + } } diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 7ce20fb..61fc114 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -45,7 +45,7 @@ public class mod_IronChest extends BaseModMp { cfg.save(); } - ModLoader.RegisterBlock(ironChestBlock, ItemIronChest.class); + ModLoader.registerBlock(ironChestBlock, ItemIronChest.class); MinecraftForge.registerOreHandler(new IOreHandler() { @Override public void registerOre(String oreClass, ItemStack ore) { diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index 633a1d4..27acd21 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -61,12 +61,12 @@ public class ServerProxy implements IProxy { @Override public Packet getDescriptionPacket(TileEntityIronChest tile) { - return ModLoaderMp.GetTileEntityPacket(ModLoaderMp.GetModInstance(mod_IronChest.class), tile.xCoord, tile.yCoord, tile.zCoord, tile.getType().ordinal(), tile.buildIntDataList(),null,null); + return ModLoaderMp.getTileEntityPacket(ModLoaderMp.GetModInstance(mod_IronChest.class), tile.xCoord, tile.yCoord, tile.zCoord, tile.getType().ordinal(), tile.buildIntDataList(),null,null); } @Override public void sendTileEntityUpdate(TileEntityIronChest tile) { - ModLoaderMp.SendTileEntityPacket(tile); + ModLoaderMp.sendTileEntityPacket(tile); } @Override From 25cc47ab2a29c4e6b734f616bebb80c4323d93ad Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 6 Mar 2012 16:05:32 -0500 Subject: [PATCH 036/188] Add in creative blocks --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 74e3d6e..6ea178c 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -1,5 +1,6 @@ package cpw.mods.ironchest; +import java.util.ArrayList; import java.util.Random; import net.minecraft.src.BlockContainer; @@ -182,4 +183,11 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } } } + + @Override + public void addCreativeItems(ArrayList itemList) { + for (IronChestType type : IronChestType.values()) { + itemList.add(new ItemStack(this,1,type.ordinal())); + } + } } \ No newline at end of file From 787d00217c5a1b1b9e2ecb9aee1fca94d235167b Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 6 Mar 2012 16:17:25 -0500 Subject: [PATCH 037/188] Creative item cleanup --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 1 + IronChests2/common/cpw/mods/ironchest/ItemIronChest.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 6ea178c..c35d2b2 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -184,6 +184,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } } + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void addCreativeItems(ArrayList itemList) { for (IronChestType type : IronChestType.values()) { diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java index 7848cfb..da8e6a5 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -1,5 +1,7 @@ package cpw.mods.ironchest; +import java.util.ArrayList; + import net.minecraft.src.ItemBlock; import net.minecraft.src.ItemStack; @@ -23,4 +25,8 @@ public class ItemIronChest extends ItemBlock { public String getItemNameIS(ItemStack itemstack) { return IronChestType.values()[itemstack.getItemDamage()].name(); } + + @Override + public void addCreativeItems(@SuppressWarnings("rawtypes") ArrayList itemList) { + } } From dd542c0c489bf7f883b84d828bee2ffbb3c80be9 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 8 Mar 2012 23:06:46 -0500 Subject: [PATCH 038/188] Upgrade to 1.2 minecraft --- IronChests2/.classpath | 2 +- IronChests2/build.xml | 2 +- .../client/cpw/mods/ironchest/client/ClientProxy.java | 4 ++-- IronChests2/common/cpw/mods/ironchest/IronChestType.java | 2 +- .../common/cpw/mods/ironchest/TileEntityIronChest.java | 2 +- IronChests2/common/net/minecraft/src/mod_IronChest.java | 6 +++--- .../server/cpw/mods/ironchest/server/ServerProxy.java | 6 +++--- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/IronChests2/.classpath b/IronChests2/.classpath index 838ad7a..205dfb9 100644 --- a/IronChests2/.classpath +++ b/IronChests2/.classpath @@ -4,6 +4,6 @@ - + diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 6604c08..501d8b1 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 92938f4..04557e8 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -63,7 +63,7 @@ public class ClientProxy extends BaseModMp implements IProxy { @Override public void registerGUI(int guiId) { - ModLoaderMp.RegisterGUI(this, guiId); + ModLoaderMp.registerGUI(this, guiId); } @Override @@ -78,7 +78,7 @@ public class ClientProxy extends BaseModMp implements IProxy { } @Override - public GuiScreen HandleGUI(int i) { + public GuiScreen handleGUI(int i) { for (IronChestType type: IronChestType.values()) { if (type.guiId==i) { return GUIChest.GUI.buildGUI(type,ModLoader.getMinecraftInstance().thePlayer.inventory,IronChestType.makeEntity(type.ordinal())); diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 718f178..e1a2afc 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -15,7 +15,7 @@ public enum IronChestType { GOLD(81, 9, true, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm","mGmG4GmGm"), DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), - SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mmmm3mmmm"), + SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), CRYSTAL(108, 12, true, "Crystal Chest", "guiDiamondChest", "crystalchest.png", 5, Item.itemsList[Block.glass.blockID], TileEntityCrystalChest.class, "GGGGPGGGG"); int size; private int rowLength; diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 2c5d323..d86b7d9 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -362,7 +362,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return null; } - public ItemStack func_48081_b(int par1) + public ItemStack getStackInSlotOnClosing(int par1) { if (this.chestContents[par1] != null) { diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 61fc114..4ae098d 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -23,12 +23,12 @@ public class mod_IronChest extends BaseModMp { @Override public String getVersion() { - return "2.5"; + return "3.0"; } @Override public void load() { - MinecraftForge.versionDetect("IronChest", 1, 3, 3); + MinecraftForge.versionDetect("IronChest", 1, 3, 4); proxy = ServerClientProxy.getProxy(); File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); Configuration cfg = new Configuration(cfgFile); @@ -78,7 +78,7 @@ public class mod_IronChest extends BaseModMp { @Override - public void ModsLoaded() { + public void modsLoaded() { try { Class equivexmaps=Class.forName("ee.EEMaps"); Method addEMC=equivexmaps.getMethod("addEMC",int.class,int.class,int.class); diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index 27acd21..a46eb32 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -25,7 +25,7 @@ public class ServerProxy implements IProxy { @Override public void registerTileEntities() { for (IronChestType typ : IronChestType.values()) { - ModLoader.RegisterTileEntity(typ.clazz, typ.name()); + ModLoader.registerTileEntity(typ.clazz, typ.name()); } } @@ -36,7 +36,7 @@ public class ServerProxy implements IProxy { @Override public void showGUI(TileEntityIronChest te, EntityPlayer player) { - ModLoader.OpenGUI(player, te.getType().guiId, te, new ContainerIronChestBase(player.inventory,te, te.getType(), 1, 1)); + ModLoader.openGUI(player, te.getType().guiId, te, new ContainerIronChestBase(player.inventory,te, te.getType(), 1, 1)); } @Override @@ -61,7 +61,7 @@ public class ServerProxy implements IProxy { @Override public Packet getDescriptionPacket(TileEntityIronChest tile) { - return ModLoaderMp.getTileEntityPacket(ModLoaderMp.GetModInstance(mod_IronChest.class), tile.xCoord, tile.yCoord, tile.zCoord, tile.getType().ordinal(), tile.buildIntDataList(),null,null); + return ModLoaderMp.getTileEntityPacket(ModLoaderMp.getModInstance(mod_IronChest.class), tile.xCoord, tile.yCoord, tile.zCoord, tile.getType().ordinal(), tile.buildIntDataList(),null,null); } @Override From 9aa53eec377470b0778e320152c3077627dd2939 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 8 Mar 2012 23:59:01 -0500 Subject: [PATCH 039/188] Fix up method override. --- .../mods/ironchest/TileEntityIronChest.java | 327 +++++++++--------- .../net/minecraft/src/mod_IronChest.java | 2 +- 2 files changed, 166 insertions(+), 163 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index d86b7d9..6240dc8 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -27,18 +27,18 @@ public class TileEntityIronChest extends TileEntity implements IInventory { public TileEntityIronChest() { this(IronChestType.IRON); } - + protected TileEntityIronChest(IronChestType type) { super(); - this.type=type; - this.chestContents=new ItemStack[getSizeInventory()]; + this.type = type; + this.chestContents = new ItemStack[getSizeInventory()]; this.topStacks = new ItemStack[8]; } - + public ItemStack[] getContents() { return chestContents; } - + @Override public int getSizeInventory() { return type.size; @@ -47,6 +47,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { public byte getFacing() { return this.facing; } + @Override public String getInvName() { return type.name(); @@ -55,10 +56,11 @@ public class TileEntityIronChest extends TileEntity implements IInventory { public IronChestType getType() { return type; } + @Override public ItemStack getStackInSlot(int i) { - inventoryTouched=true; - return chestContents[i]; + inventoryTouched = true; + return chestContents[i]; } @Override @@ -71,131 +73,130 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (!type.isTransparent() || mod_IronChest.proxy.isRemote()) { return; } - ItemStack[] tempCopy=new ItemStack[getSizeInventory()]; - boolean hasStuff=false; - int compressedIdx=0; - mainLoop: - for (int i=0; i() { + hadStuff = true; + Arrays.sort(tempCopy, new Comparator() { @Override public int compare(ItemStack o1, ItemStack o2) { - if (o1==null) { + if (o1 == null) { return 1; - } else if (o2==null) { + } else if (o2 == null) { return -1; } else { - return o2.stackSize-o1.stackSize; + return o2.stackSize - o1.stackSize; } } }); - int p=0; - for (int i=0; i0) { - topStacks[p++]=tempCopy[i]; - if (p==topStacks.length) { + int p = 0; + for (int i = 0; i < tempCopy.length; i++) { + if (tempCopy[i] != null && tempCopy[i].stackSize > 0) { + topStacks[p++] = tempCopy[i]; + if (p == topStacks.length) { break; } } } - for (int i=p; i getInventoryStackLimit()) - { - itemstack.stackSize = getInventoryStackLimit(); - } - onInventoryChanged(); + chestContents[i] = itemstack; + if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) + { + itemstack.stackSize = getInventoryStackLimit(); + } + onInventoryChanged(); } - @Override + @Override public void readFromNBT(NBTTagCompound nbttagcompound) - { - super.readFromNBT(nbttagcompound); - NBTTagList nbttaglist = nbttagcompound.getTagList("Items"); - chestContents = new ItemStack[getSizeInventory()]; - for (int i = 0; i < nbttaglist.tagCount(); i++) - { - NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i); - int j = nbttagcompound1.getByte("Slot") & 0xff; - if (j >= 0 && j < chestContents.length) - { - chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); - } - } - facing=nbttagcompound.getByte("facing"); - sortTopStacks(); - } + { + super.readFromNBT(nbttagcompound); + NBTTagList nbttaglist = nbttagcompound.getTagList("Items"); + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < nbttaglist.tagCount(); i++) + { + NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.tagAt(i); + int j = nbttagcompound1.getByte("Slot") & 0xff; + if (j >= 0 && j < chestContents.length) + { + chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } + } + facing = nbttagcompound.getByte("facing"); + sortTopStacks(); + } - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) - { - super.writeToNBT(nbttagcompound); - NBTTagList nbttaglist = new NBTTagList(); - for (int i = 0; i < chestContents.length; i++) - { - if (chestContents[i] != null) - { - NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound1.setByte("Slot", (byte)i); - chestContents[i].writeToNBT(nbttagcompound1); - nbttaglist.appendTag(nbttagcompound1); - } - } + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) + { + super.writeToNBT(nbttagcompound); + NBTTagList nbttaglist = new NBTTagList(); + for (int i = 0; i < chestContents.length; i++) + { + if (chestContents[i] != null) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) i); + chestContents[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + } - nbttagcompound.setTag("Items", nbttaglist); - nbttagcompound.setByte("facing", facing); - } + nbttagcompound.setTag("Items", nbttaglist); + nbttagcompound.setByte("facing", facing); + } @Override public int getInventoryStackLimit() { @@ -204,7 +205,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { - if (worldObj==null) { + if (worldObj == null) { return true; } if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this) { @@ -218,9 +219,9 @@ public class TileEntityIronChest extends TileEntity implements IInventory { super.updateEntity(); // Resynchronize clients with the server state if ((++ticksSinceSync % 20) * 4 == 0) { - worldObj.playNoteAt(xCoord, yCoord, zCoord, 3, ( ( numUsingPlayers<<3 ) & 0xF8 ) | (facing & 0x7)); + worldObj.playNoteAt(xCoord, yCoord, zCoord, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); if (inventoryTouched) { - inventoryTouched=false; + inventoryTouched = false; sortTopStacks(); } } @@ -254,49 +255,51 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } @Override - public void onTileEntityPowered(int i, int j) - { - if (i == 1) - { - numUsingPlayers = j; - } else if (i == 2) { - facing = (byte)j; - } else if (i == 3) { - facing = (byte)(j & 0x7); - numUsingPlayers = (j & 0xF8 )>> 3; - } - } + public void onTileEntityPowered(int i, int j) + { + if (i == 1) + { + numUsingPlayers = j; + } else if (i == 2) { + facing = (byte) j; + } else if (i == 3) { + facing = (byte) (j & 0x7); + numUsingPlayers = (j & 0xF8) >> 3; + } + } @Override public void openChest() { - if (worldObj==null) return; - numUsingPlayers++; - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + if (worldObj == null) + return; + numUsingPlayers++; + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); } @Override public void closeChest() { - if (worldObj==null) return; - numUsingPlayers--; - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + if (worldObj == null) + return; + numUsingPlayers--; + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); } public void setFacing(byte chestFacing) { - this.facing=chestFacing; + this.facing = chestFacing; } public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) { - if (numUsingPlayers>0) { + if (numUsingPlayers > 0) { return null; } if (!itemChestChanger.getType().canUpgrade(this.getType())) { return null; } - TileEntityIronChest newEntity=IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); - int newSize=newEntity.chestContents.length; - System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize,chestContents.length)); - BlockIronChest block=mod_IronChest.ironChestBlock; - block.dropContent(newSize,this,this.worldObj); + TileEntityIronChest newEntity = IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); + int newSize = newEntity.chestContents.length; + System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); + BlockIronChest block = mod_IronChest.ironChestBlock; + block.dropContent(newSize, this, this.worldObj); newEntity.setFacing(facing); newEntity.sortTopStacks(); return newEntity; @@ -307,72 +310,72 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } public TileEntityIronChest updateFromMetadata(int l) { - if (worldObj!=null && worldObj.isRemote) { - if (l!=type.ordinal()) { + if (worldObj != null && worldObj.isRemote) { + if (l != type.ordinal()) { worldObj.setBlockTileEntity(xCoord, yCoord, zCoord, IronChestType.makeEntity(l)); - return (TileEntityIronChest)worldObj.getBlockTileEntity(xCoord, yCoord, zCoord); + return (TileEntityIronChest) worldObj.getBlockTileEntity(xCoord, yCoord, zCoord); } } return this; } - + public Packet getDescriptionPacket() { return mod_IronChest.proxy.getDescriptionPacket(this); } public void handlePacketData(int typeData, int[] intData, float[] floatData, String[] stringData) { - TileEntityIronChest chest=this; - if (this.type.ordinal()!=typeData) { - chest=updateFromMetadata(typeData); + TileEntityIronChest chest = this; + if (this.type.ordinal() != typeData) { + chest = updateFromMetadata(typeData); } - if (IronChestType.values()[typeData].isTransparent() && intData!=null) { - int pos=0; - if (intData.length Date: Sun, 11 Mar 2012 16:34:17 -0400 Subject: [PATCH 040/188] 3.0.1 - fix block id > 256 (throw error) --- IronChests2/build.xml | 2 +- .../common/cpw/mods/ironchest/BlockIronChest.java | 3 +++ .../common/net/minecraft/src/mod_IronChest.java | 10 +++++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 501d8b1..7b42132 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,7 +13,7 @@ - + diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index c35d2b2..4acf6dc 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -25,6 +25,9 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { setBlockName("IronChest"); setHardness(3.0F); setRequiresSelfNotify(); + if (id>=256) { + disableStats(); + } random=new Random(); } diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index dcbab5b..05d6762 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -23,18 +23,22 @@ public class mod_IronChest extends BaseModMp { @Override public String getVersion() { - return "3.0"; + return "3.0.1"; } @Override public void load() { - MinecraftForge.versionDetect("IronChest", 1, 3, 4); + MinecraftForge.versionDetect("IronChest", 1, 4, 0); proxy = ServerClientProxy.getProxy(); File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); Configuration cfg = new Configuration(cfgFile); try { cfg.load(); - ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value)); + int bId=Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value); + if (bId>=256) { + throw new RuntimeException(String.format("IronChest detected an invalid block id %s\n",bId)); + } + ironChestBlock = new BlockIronChest(bId); ChestChangerType.buildItems(cfg, 19501); IronChestType.initGUIs(cfg); } catch (Exception e) { From 785aef9551ed91862589f6eaf2640415ddc325ed Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 20 Mar 2012 22:21:21 -0400 Subject: [PATCH 041/188] Fix versions --- IronChests2/build.xml | 4 ++-- .../common/cpw/mods/ironchest/ContainerIronChestBase.java | 1 + IronChests2/common/net/minecraft/src/mod_IronChest.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 7b42132..1b9fdf0 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 1a03421..0f37009 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -3,6 +3,7 @@ package cpw.mods.ironchest; import net.minecraft.src.Container; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; +import net.minecraft.src.InventoryPlayer; import net.minecraft.src.ItemStack; import net.minecraft.src.Slot; diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 05d6762..d322745 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -23,7 +23,7 @@ public class mod_IronChest extends BaseModMp { @Override public String getVersion() { - return "3.0.1"; + return "3.1"; } @Override From e4d36feb31a58f511bc4070663fb85b197823918 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 00:31:46 -0400 Subject: [PATCH 042/188] Update to 1.2.4, no modloadermp anymore --- IronChests2/.classpath | 3 +- IronChests2/build.xml | 29 +- .../mods/ironchest/client/ClientProxy.java | 137 ++-- .../cpw/mods/ironchest/client/GUIChest.java | 15 +- .../client/TileEntityIronChestRenderer.java | 12 +- .../cpw/mods/ironchest/BlockIronChest.java | 338 ++++----- .../cpw/mods/ironchest/ChestChangerType.java | 2 +- .../ironchest/ContainerIronChestBase.java | 1 - .../common/cpw/mods/ironchest/IProxy.java | 18 +- .../cpw/mods/ironchest/IronChestType.java | 201 +++--- .../cpw/mods/ironchest/ItemChestChanger.java | 3 +- .../cpw/mods/ironchest/PacketHandler.java | 96 +++ .../cpw/mods/ironchest/ServerClientProxy.java | 14 +- .../mods/ironchest/TileEntityIronChest.java | 676 +++++++++--------- .../common/cpw/mods/ironchest/Version.java | 17 + .../net/minecraft/src/mod_IronChest.java | 175 ++--- .../mods/ironchest/server/ServerProxy.java | 51 +- 17 files changed, 921 insertions(+), 867 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/PacketHandler.java create mode 100644 IronChests2/common/cpw/mods/ironchest/Version.java diff --git a/IronChests2/.classpath b/IronChests2/.classpath index 205dfb9..597b9fe 100644 --- a/IronChests2/.classpath +++ b/IronChests2/.classpath @@ -2,8 +2,7 @@ - - + diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 1b9fdf0..d8efd84 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -7,14 +7,20 @@ cpw ====================================================================== --> - + Iron Chests - - + + + + + + + + @@ -74,7 +80,8 @@ - + + @@ -82,11 +89,13 @@ - - + + + + @@ -108,6 +117,14 @@ + + + + + + + + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 04557e8..6487c01 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -3,112 +3,73 @@ package cpw.mods.ironchest.client; import java.io.File; import net.minecraft.client.Minecraft; -import net.minecraft.src.BaseModMp; import net.minecraft.src.ChestItemRenderHelper; import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayer; +import net.minecraft.src.EntityPlayerSP; import net.minecraft.src.GuiScreen; import net.minecraft.src.ModLoader; -import net.minecraft.src.ModLoaderMp; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet; import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import net.minecraft.src.forge.MinecraftForgeClient; import cpw.mods.ironchest.ChestChangerType; import cpw.mods.ironchest.IProxy; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -public class ClientProxy extends BaseModMp implements IProxy { - @Override - public void registerRenderInformation() { - ChestItemRenderHelper.instance=new IronChestRenderHelper(); - MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/block_textures.png"); - MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/item_textures.png"); - } +public class ClientProxy implements IProxy { + @Override + public void registerRenderInformation() { + ChestItemRenderHelper.instance = new IronChestRenderHelper(); + MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/block_textures.png"); + MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/item_textures.png"); + } - @Override - public void registerTileEntities() { - for (IronChestType typ : IronChestType.values()) { - ModLoader.registerTileEntity(typ.clazz, typ.name(), new TileEntityIronChestRenderer()); - } - } + @Override + public void registerTileEntities() { + for (IronChestType typ : IronChestType.values()) { + ModLoader.registerTileEntity(typ.clazz, typ.name(), new TileEntityIronChestRenderer()); + } + } - @Override - public void registerTranslations() { - for (IronChestType typ : IronChestType.values()) { - ModLoader.addLocalization(typ.name() + ".name", typ.friendlyName); - } - for (ChestChangerType typ : ChestChangerType.values()) { - ModLoader.addLocalization("item."+typ.itemName+".name", typ.descriptiveName); - } - } + @Override + public void registerTranslations() { + for (IronChestType typ : IronChestType.values()) { + ModLoader.addLocalization(typ.name() + ".name", typ.friendlyName); + } + for (ChestChangerType typ : ChestChangerType.values()) { + ModLoader.addLocalization("item." + typ.itemName + ".name", typ.descriptiveName); + } + } - @Override - public void showGUI(TileEntityIronChest te, EntityPlayer player) { - GUIChest.GUI.showGUI(te, player); - - } + @Override + public File getMinecraftDir() { + return Minecraft.getMinecraftDir(); + } - @Override - public File getMinecraftDir() { - return Minecraft.getMinecraftDir(); - } + @Override + public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { + entityitem.item.setTagCompound(data); - @Override - public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { - entityitem.item.setTagCompound(data); - - } + } - @Override - public void registerGUI(int guiId) { - ModLoaderMp.registerGUI(this, guiId); - } + @Override + public boolean isRemote() { + return ModLoader.getMinecraftInstance().theWorld.isRemote; + } - @Override - public String getVersion() { - // Do nothing, we never get loaded like that - return ""; - } + @Override + public GuiScreen getGuiScreen(int ID, EntityPlayerSP player, World world, int X, int Y, int Z) { + TileEntity te = world.getBlockTileEntity(X, Y, Z); + if (te != null && te instanceof TileEntityIronChest) { + return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); + } else { + return null; + } + } - @Override - public void load() { - // Do Nothing, we never get loaded like that - } - - @Override - public GuiScreen handleGUI(int i) { - for (IronChestType type: IronChestType.values()) { - if (type.guiId==i) { - return GUIChest.GUI.buildGUI(type,ModLoader.getMinecraftInstance().thePlayer.inventory,IronChestType.makeEntity(type.ordinal())); - } - } - return null; - } - - @Override - public void handleTileEntityPacket(int x, int y, int z, int type, int[] intData, float[] floatData, String[] stringData) { - TileEntity te=ModLoader.getMinecraftInstance().theWorld.getBlockTileEntity(x, y, z); - if (te!=null && te instanceof TileEntityIronChest) { - TileEntityIronChest icte=(TileEntityIronChest)te; - icte.handlePacketData(type,intData,floatData,stringData); - } - } - - @Override - public Packet getDescriptionPacket(TileEntityIronChest tile) { - // NOOP on client - return null; - } - - @Override - public void sendTileEntityUpdate(TileEntityIronChest tile) { - // NOOP on client - } - - @Override - public boolean isRemote() { - return ModLoader.getMinecraftInstance().theWorld.isRemote; - } + @Override + public World getCurrentWorld() { + return ModLoader.getMinecraftInstance().theWorld; + } } diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 05bd1e7..612b754 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -38,20 +38,7 @@ public class GUIChest extends GuiContainer { } public static GUIChest buildGUI(IronChestType type, IInventory playerInventory, TileEntityIronChest chestInventory) { - for (GUI gui : values()) { - if (chestInventory.getType()==gui.mainType) { - return new GUIChest(gui,playerInventory,chestInventory); - } - } - return null; - } - public static void showGUI(TileEntityIronChest te, EntityPlayer player) { - GUIChest gui=buildGUI(te.getType(),player.inventory,te); - if (gui!=null) { - ModLoader.openGUI(player, gui); - } else { - player.displayGUIChest(te); - } + return new GUIChest(values()[chestInventory.getType().ordinal()],playerInventory,chestInventory); } } diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 55421e5..7603f88 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -12,6 +12,7 @@ import static org.lwjgl.opengl.GL11.glTranslatef; import java.util.Random; import net.minecraft.src.Block; +import net.minecraft.src.EntityItem; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.ModelChest; @@ -20,7 +21,8 @@ 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.IItemRenderer; +import net.minecraft.src.forge.ItemRenderType; import net.minecraft.src.forge.MinecraftForgeClient; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; @@ -101,6 +103,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glDisable(2896 /* GL_LIGHTING */); glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); glTranslatef((float) x, (float) y, (float) z); + EntityItem customitem=new EntityItem(tileEntityRenderer.worldObj); for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { break; @@ -113,7 +116,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shiftY = shifts[shift][1]; shiftZ = shifts[shift][2]; shift++; - ICustomItemRenderer customRenderer = MinecraftForgeClient.getCustomItemRenderer(item.itemID); + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item,ItemRenderType.ENTITY); float localScale = blockScale; if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null) { int j = Block.blocksList[item.itemID].getRenderType(); @@ -135,9 +138,10 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } if (customRenderer != null) { + customitem.item=item; bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(item.getItem()); - ForgeHooksClient.renderCustomItem(customRenderer, renderBlocks, item.itemID, item.getItemDamage(), 1.0F); + ForgeHooksClient.overrideTexture(item.getItem()); + ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, customitem); } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 4acf6dc..15a9729 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -19,179 +19,185 @@ import net.minecraft.src.forge.ITextureProvider; public class BlockIronChest extends BlockContainer implements ITextureProvider { - private Random random; - public BlockIronChest(int id) { - super(id, Material.iron); - setBlockName("IronChest"); - setHardness(3.0F); - setRequiresSelfNotify(); - if (id>=256) { - disableStats(); - } - random=new Random(); - } + private Random random; - @Override - public TileEntity getBlockEntity() { - return null; - } + public BlockIronChest(int id) { + super(id, Material.iron); + setBlockName("IronChest"); + setHardness(3.0F); + setRequiresSelfNotify(); + if (id >= 256) { + disableStats(); + } + random = new Random(); + } - @Override - public String getTextureFile() { - return "/cpw/mods/ironchest/sprites/block_textures.png"; - } + @Override + public TileEntity getBlockEntity() { + return null; + } - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - @Override - public int getRenderType() { - return 22; - } - @Override - public TileEntity getBlockEntity(int metadata) { - return IronChestType.makeEntity(metadata); - } + @Override + public String getTextureFile() { + return "/cpw/mods/ironchest/sprites/block_textures.png"; + } - public int 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; - } - } + @Override + public boolean isOpaqueCube() { + return false; + } - @Override - public int getBlockTextureFromSideAndMetadata(int i, int j) { - IronChestType typ=IronChestType.values()[j]; - switch (i) { - case 0: - case 1: - return typ.getTextureRow()*16+1; - case 3: - return typ.getTextureRow()*16+2; - default: - return typ.getTextureRow()*16; - } - } - @Override - public boolean blockActivated(World world, int i, int j, int k, EntityPlayer player) { - TileEntity te = world.getBlockTileEntity(i, j, k); - - if(te == null || !(te instanceof TileEntityIronChest)) + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return 22; + } + + @Override + public TileEntity getBlockEntity(int metadata) { + return IronChestType.makeEntity(metadata); + } + + public int 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; + } + } + + @Override + public int getBlockTextureFromSideAndMetadata(int i, int j) { + IronChestType typ = IronChestType.values()[j]; + switch (i) { + case 0: + case 1: + return typ.getTextureRow() * 16 + 1; + case 3: + return typ.getTextureRow() * 16 + 2; + default: + return typ.getTextureRow() * 16; + } + } + + @Override + public boolean blockActivated(World world, int i, int j, int k, EntityPlayer player) { + TileEntity te = world.getBlockTileEntity(i, j, k); + + if (te == null || !(te instanceof TileEntityIronChest)) + { + return true; + } + + if (world.isBlockSolidOnSide(i, j + 1, k, 0)) + { + return true; + } + + if (world.isRemote) { + return true; + } + + player.openGui(mod_IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, i, j, k); + return true; + } + + @Override + public void onBlockAdded(World world, int i, int j, int k) { + super.onBlockAdded(world, i, j, k); + world.markBlockNeedsUpdate(i, j, k); + } + + @Override + public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving) { + byte chestFacing = 0; + int facing = MathHelper.floor_double((double) ((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; + if (facing == 0) { + chestFacing = 2; + } + if (facing == 1) { + chestFacing = 5; + } + if (facing == 2) { + chestFacing = 3; + } + if (facing == 3) { + chestFacing = 4; + } + TileEntity te = world.getBlockTileEntity(i, j, k); + if (te != null && te instanceof TileEntityIronChest) { + ((TileEntityIronChest) te).setFacing(chestFacing); + world.markBlockNeedsUpdate(i, j, k); + } + } + + @Override + protected int damageDropped(int i) { + return i; + } + + public void onBlockRemoval(World world, int i, int j, int k) + { + TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k); + if (tileentitychest != null) + { + dropContent(0, tileentitychest, world); + } + super.onBlockRemoval(world, i, j, k); + } + + public void dropContent(int newSize, TileEntityIronChest chest, World world) { + for (int l = newSize; l < chest.getSizeInventory(); l++) + { + ItemStack itemstack = chest.getStackInSlot(l); + if (itemstack == null) + { + continue; + } + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + float f2 = random.nextFloat() * 0.8F + 0.1F; + while (itemstack.stackSize > 0) + { + int i1 = random.nextInt(21) + 10; + if (i1 > itemstack.stackSize) { - return true; + i1 = itemstack.stackSize; } - - if(world.isBlockSolidOnSide(i, j + 1, k, 0)) + itemstack.stackSize -= i1; + EntityItem entityitem = new EntityItem(world, (float) chest.xCoord + f, (float) chest.yCoord + (newSize > 0 ? 1 : 0) + f1, (float) chest.zCoord + f2, + new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); + float f3 = 0.05F; + entityitem.motionX = (float) random.nextGaussian() * f3; + entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) random.nextGaussian() * f3; + if (itemstack.hasTagCompound()) { - return true; + mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound) itemstack.getTagCompound().copy()); } - - if (world.isRemote) { - return true; - } - - mod_IronChest.openGUI(player, (TileEntityIronChest)te); - return true; - } - - @Override - public void onBlockAdded(World world, int i, int j, int k) { - super.onBlockAdded(world, i, j, k); - world.markBlockNeedsUpdate(i, j, k); - } - - @Override - public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving) { - byte chestFacing = 0; - int facing = MathHelper.floor_double((double) ((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; - if (facing == 0) { - chestFacing = 2; - } - if (facing == 1) { - chestFacing = 5; - } - if (facing == 2) { - chestFacing = 3; - } - if (facing == 3) { - chestFacing = 4; - } - TileEntity te = world.getBlockTileEntity(i, j, k); - if (te != null && te instanceof TileEntityIronChest) { - ((TileEntityIronChest) te).setFacing(chestFacing); - world.markBlockNeedsUpdate(i, j, k); - } - } - @Override - protected int damageDropped(int i) { - return i; - } + world.spawnEntityInWorld(entityitem); + } + } + } - public void onBlockRemoval(World world, int i, int j, int k) - { - TileEntityIronChest tileentitychest = (TileEntityIronChest)world.getBlockTileEntity(i, j, k); - if (tileentitychest != null) - { - dropContent(0, tileentitychest, world); - } - super.onBlockRemoval(world, i, j, k); - } - - public void dropContent(int newSize, TileEntityIronChest chest, World world) { - for (int l = newSize; l < chest.getSizeInventory(); l++) - { - ItemStack itemstack = chest.getStackInSlot(l); - if (itemstack == null) - { - continue; - } - float f = random.nextFloat() * 0.8F + 0.1F; - float f1 = random.nextFloat() * 0.8F + 0.1F; - float f2 = random.nextFloat() * 0.8F + 0.1F; - while (itemstack.stackSize > 0) - { - int i1 = random.nextInt(21) + 10; - if (i1 > itemstack.stackSize) - { - i1 = itemstack.stackSize; - } - itemstack.stackSize -= i1; - EntityItem entityitem = new EntityItem(world, (float)chest.xCoord + f, (float)chest.yCoord + (newSize>0 ? 1 : 0) + f1, (float)chest.zCoord + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); - float f3 = 0.05F; - entityitem.motionX = (float)random.nextGaussian() * f3; - entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)random.nextGaussian() * f3; - if (itemstack.hasTagCompound()) - { - mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound)itemstack.getTagCompound().copy()); - } - world.spawnEntityInWorld(entityitem); - } - } - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public void addCreativeItems(ArrayList itemList) { - for (IronChestType type : IronChestType.values()) { - itemList.add(new ItemStack(this,1,type.ordinal())); - } - } -} \ No newline at end of file + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override + public void addCreativeItems(ArrayList itemList) { + for (IronChestType type : IronChestType.values()) { + itemList.add(new ItemStack(this, 1, type.ordinal())); + } + } +} \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index 9a4c8ec..6dd350c 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -43,7 +43,7 @@ public enum ChestChangerType { } public ItemChestChanger buildItem(Configuration cfg, int id) { - int itemId=Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.ITEM_PROPERTY, id).value); + int itemId=Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.CATEGORY_ITEM, id).value); item=new ItemChestChanger(itemId,this); return item; } diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 0f37009..1a03421 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -3,7 +3,6 @@ package cpw.mods.ironchest; import net.minecraft.src.Container; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; -import net.minecraft.src.InventoryPlayer; import net.minecraft.src.ItemStack; import net.minecraft.src.Slot; diff --git a/IronChests2/common/cpw/mods/ironchest/IProxy.java b/IronChests2/common/cpw/mods/ironchest/IProxy.java index 909abca..e5fffcb 100644 --- a/IronChests2/common/cpw/mods/ironchest/IProxy.java +++ b/IronChests2/common/cpw/mods/ironchest/IProxy.java @@ -3,11 +3,11 @@ package cpw.mods.ironchest; import java.io.File; import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayer; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet; +import net.minecraft.src.World; +import net.minecraft.src.forge.IGuiHandler; -public interface IProxy { +public interface IProxy extends IGuiHandler { public abstract void registerRenderInformation(); @@ -15,19 +15,11 @@ public interface IProxy { public abstract void registerTranslations(); - public abstract void showGUI(TileEntityIronChest te, EntityPlayer player); - public abstract File getMinecraftDir(); public abstract void applyExtraDataToDrops(EntityItem item, NBTTagCompound data); - public abstract void registerGUI(int guiId); - - public abstract void handleTileEntityPacket(int x, int y, int z, int type, int[] intData, float[] floatData, String[] stringData); - - public abstract Packet getDescriptionPacket(TileEntityIronChest tile); - - public abstract void sendTileEntityUpdate(TileEntityIronChest tile); - public abstract boolean isRemote(); + + public abstract World getCurrentWorld(); } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index e1a2afc..2aafe14 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -7,131 +7,110 @@ import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.ModLoader; -import net.minecraft.src.mod_IronChest; -import net.minecraft.src.forge.Configuration; public enum IronChestType { - IRON(54, 9, true, "Iron Chest", "guiIronChest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm","mGmG3GmGm"), - GOLD(81, 9, true, "Gold Chest", "guiGoldChest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm","mGmG4GmGm"), - DIAMOND(108, 12, true, "Diamond Chest", "guiDiamondChest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), - COPPER(45, 9, false, "Copper Chest", "guiCopperChest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), - SILVER(72, 9, false, "Silver Chest", "guiSilverChest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), - CRYSTAL(108, 12, true, "Crystal Chest", "guiDiamondChest", "crystalchest.png", 5, Item.itemsList[Block.glass.blockID], TileEntityCrystalChest.class, "GGGGPGGGG"); - int size; - private int rowLength; - public String friendlyName; - private boolean tieredChest; - private String modelTexture; - private String guiName; - private int textureRow; - public Class clazz; - Item mat; - private String[] recipes; - public int guiId; - private ArrayList matList; + IRON(54, 9, true, "Iron Chest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm", "mGmG3GmGm"), + GOLD(81, 9, true, "Gold Chest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm", "mGmG4GmGm"), + DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), + COPPER(45, 9, false, "Copper Chest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), + SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), + CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Item.itemsList[Block.glass.blockID], TileEntityCrystalChest.class, "GGGGPGGGG"); + int size; + private int rowLength; + public String friendlyName; + private boolean tieredChest; + private String modelTexture; + private int textureRow; + public Class clazz; + Item mat; + private String[] recipes; + private ArrayList matList; - IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat, - Class clazz, String... recipes) { - this.size = size; - this.rowLength = rowLength; - this.tieredChest = tieredChest; - this.friendlyName = friendlyName; - this.guiName = guiName; - this.modelTexture = "/cpw/mods/ironchest/sprites/" + modelTexture; - this.textureRow = textureRow; - this.clazz = clazz; - this.mat = mat; - this.recipes = recipes; - this.matList=new ArrayList(); - if (mat!=null) { - matList.add(new ItemStack(mat)); - } - } + IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, Item mat, + Class clazz, String... recipes) { + this.size = size; + this.rowLength = rowLength; + this.tieredChest = tieredChest; + this.friendlyName = friendlyName; + this.modelTexture = "/cpw/mods/ironchest/sprites/" + modelTexture; + this.textureRow = textureRow; + this.clazz = clazz; + this.mat = mat; + this.recipes = recipes; + this.matList = new ArrayList(); + if (mat != null) { + matList.add(new ItemStack(mat)); + } + } - public String getModelTexture() { - return modelTexture; - } + public String getModelTexture() { + return modelTexture; + } - public int getTextureRow() { - return textureRow; - } + public int getTextureRow() { + return textureRow; + } - public static TileEntityIronChest makeEntity(int metadata) { - // Compatibility - int chesttype = metadata; - try { - TileEntityIronChest te = values()[chesttype].clazz.newInstance(); - return te; - } catch (InstantiationException e) { - // unpossible - e.printStackTrace(); - } catch (IllegalAccessException e) { - // unpossible - e.printStackTrace(); - } - return null; - } + public static TileEntityIronChest makeEntity(int metadata) { + // Compatibility + int chesttype = metadata; + try { + TileEntityIronChest te = values()[chesttype].clazz.newInstance(); + return te; + } catch (InstantiationException e) { + // unpossible + e.printStackTrace(); + } catch (IllegalAccessException e) { + // unpossible + e.printStackTrace(); + } + return null; + } - public static void registerTranslations() { - } + public static void registerTranslations() { + } - public static void generateTieredRecipies(BlockIronChest blockResult) { - ItemStack previous = new ItemStack(Block.chest); - for (IronChestType typ : values()) { - if (!typ.tieredChest) - continue; - generateRecipesForType(blockResult, previous, typ, typ.mat); - previous = new ItemStack(blockResult, 1, typ.ordinal()); - } - } + public static void generateTieredRecipies(BlockIronChest blockResult) { + ItemStack previous = new ItemStack(Block.chest); + for (IronChestType typ : values()) { + if (!typ.tieredChest) + continue; + generateRecipesForType(blockResult, previous, typ, typ.mat); + previous = new ItemStack(blockResult, 1, typ.ordinal()); + } + } - public static void generateRecipesForType(BlockIronChest blockResult, Object previousTier, IronChestType type, Object mat) { - for (String recipe : type.recipes) { - String[] recipeSplit = new String[] { recipe.substring(0, 3), recipe.substring(3, 6), recipe.substring(6, 9) }; - addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mat, 'P', previousTier, 'G', Block.glass, 'C', Block.chest, - '0', new ItemStack(blockResult, 1, 0)/* Iron */, '1', new ItemStack(blockResult, 1, 1)/* GOLD */, '3', new ItemStack(blockResult, - 1, 3)/* Copper */, '4', new ItemStack(blockResult,1,4)); - } - } + public static void generateRecipesForType(BlockIronChest blockResult, Object previousTier, IronChestType type, Object mat) { + for (String recipe : type.recipes) { + String[] recipeSplit = new String[] { recipe.substring(0, 3), recipe.substring(3, 6), recipe.substring(6, 9) }; + addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mat, 'P', previousTier, 'G', Block.glass, 'C', Block.chest, + '0', new ItemStack(blockResult, 1, 0)/* Iron */, '1', new ItemStack(blockResult, 1, 1)/* GOLD */, '3', new ItemStack(blockResult, + 1, 3)/* Copper */, '4', new ItemStack(blockResult, 1, 4)); + } + } - public static void addRecipe(ItemStack is, Object... parts) { - ModLoader.addRecipe(is, parts); - } + public static void addRecipe(ItemStack is, Object... parts) { + ModLoader.addRecipe(is, parts); + } - public int getGUI() { - return guiId; - } + public int getRowCount() { + return size / rowLength; + } - public static void initGUIs(Configuration cfg) { - int defGUI = 51; - for (IronChestType typ : values()) { - if (typ.guiName != null) { - typ.guiId = Integer.parseInt(cfg.getOrCreateIntProperty(typ.guiName, Configuration.GENERAL_PROPERTY, defGUI++).value); - mod_IronChest.proxy.registerGUI(typ.guiId); - } else { - typ.guiId = -1; - } - } - } + public int getRowLength() { + return rowLength; + } - public int getRowCount() { - return size / rowLength; - } + public void addMat(ItemStack ore) { + this.matList.add(ore); + } - public int getRowLength() { - return rowLength; - } + public List getMatList() { + return matList; + } - public void addMat(ItemStack ore) { - this.matList.add(ore); - } - - public List getMatList() { - return matList; - } - - public boolean isTransparent() { - return this==CRYSTAL; - } + public boolean isTransparent() { + return this == CRYSTAL; + } } \ No newline at end of file diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 5cb8a99..3e04576 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -5,7 +5,6 @@ import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.ITextureProvider; public class ItemChestChanger extends Item implements ITextureProvider { @@ -32,8 +31,8 @@ public class ItemChestChanger extends Item implements ITextureProvider { world.setBlockTileEntity(X, Y, Z, newchest); world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal()); world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); + world.markBlockNeedsUpdate(X, Y, Z); stack.stackSize=0; - mod_IronChest.proxy.sendTileEntityUpdate(newchest); return true; } else { return false; diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java new file mode 100644 index 0000000..b2338b5 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -0,0 +1,96 @@ +package cpw.mods.ironchest; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet; +import net.minecraft.src.Packet1Login; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraft.src.mod_IronChest; +import net.minecraft.src.forge.IConnectionHandler; +import net.minecraft.src.forge.IPacketHandler; +import net.minecraft.src.forge.MessageManager; + +public class PacketHandler implements IPacketHandler, IConnectionHandler { + @Override + public void onConnect(NetworkManager network) { + } + + @Override + public void onLogin(NetworkManager network, Packet1Login login) { + MessageManager.getInstance().registerChannel(network, this, "IronChest"); + } + + @Override + public void onDisconnect(NetworkManager network, String message, Object[] args) { + MessageManager.getInstance().removeConnection(network); + } + + @Override + public void onPacketData(NetworkManager network, String channel, byte[] data) { + DataInputStream dis=new DataInputStream(new ByteArrayInputStream(data)); + int x; + int y; + int z; + int typ; + boolean hasStacks; + int[] items=null; + try { + x = dis.readInt(); + y = dis.readInt(); + z = dis.readInt(); + typ=dis.readByte(); + hasStacks=dis.readByte()!=0; + if (hasStacks) { + items = new int[24]; + for (int i=0; i() { - @Override - public int compare(ItemStack o1, ItemStack o2) { - if (o1 == null) { - return 1; - } else if (o2 == null) { - return -1; - } else { - return o2.stackSize - o1.stackSize; - } - } - }); - int p = 0; - for (int i = 0; i < tempCopy.length; i++) { - if (tempCopy[i] != null && tempCopy[i].stackSize > 0) { - topStacks[p++] = tempCopy[i]; - if (p == topStacks.length) { - break; - } - } - } - for (int i = p; i < topStacks.length; i++) { - topStacks[i] = null; - } - mod_IronChest.proxy.sendTileEntityUpdate(this); - } + protected void sortTopStacks() { + if (!type.isTransparent() || mod_IronChest.proxy.isRemote()) { + return; + } + ItemStack[] tempCopy = new ItemStack[getSizeInventory()]; + boolean hasStuff = false; + int compressedIdx = 0; + mainLoop: for (int i = 0; i < getSizeInventory(); i++) { + if (chestContents[i] != null) { + for (int j = 0; j < compressedIdx; j++) { + if (tempCopy[j].isItemEqual(chestContents[i])) { + tempCopy[j].stackSize += chestContents[i].stackSize; + continue mainLoop; + } + } + tempCopy[compressedIdx++] = chestContents[i].copy(); + hasStuff = true; + } + } + if (!hasStuff && hadStuff) { + hadStuff = false; + for (int i = 0; i < topStacks.length; i++) { + topStacks[i] = null; + } + if (worldObj!=null) { + worldObj.markBlockNeedsUpdate(xCoord, yCoord, zCoord); + } + return; + } + hadStuff = true; + Arrays.sort(tempCopy, new Comparator() { + @Override + public int compare(ItemStack o1, ItemStack o2) { + if (o1 == null) { + return 1; + } else if (o2 == null) { + return -1; + } else { + return o2.stackSize - o1.stackSize; + } + } + }); + int p = 0; + for (int i = 0; i < tempCopy.length; i++) { + if (tempCopy[i] != null && tempCopy[i].stackSize > 0) { + topStacks[p++] = tempCopy[i]; + if (p == topStacks.length) { + break; + } + } + } + for (int i = p; i < topStacks.length; i++) { + topStacks[i] = null; + } + if (worldObj!=null) { + worldObj.markBlockNeedsUpdate(xCoord, yCoord, zCoord); + } + } - @Override - public ItemStack decrStackSize(int i, int j) { - if (chestContents[i] != null) - { - if (chestContents[i].stackSize <= j) - { - ItemStack itemstack = chestContents[i]; - chestContents[i] = null; - onInventoryChanged(); - return itemstack; - } - ItemStack itemstack1 = chestContents[i].splitStack(j); - if (chestContents[i].stackSize == 0) - { - chestContents[i] = null; - } - onInventoryChanged(); - return itemstack1; - } - else - { - return null; - } - } + @Override + public ItemStack decrStackSize(int i, int j) { + if (chestContents[i] != null) + { + if (chestContents[i].stackSize <= j) + { + ItemStack itemstack = chestContents[i]; + chestContents[i] = null; + onInventoryChanged(); + return itemstack; + } + ItemStack itemstack1 = chestContents[i].splitStack(j); + if (chestContents[i].stackSize == 0) + { + chestContents[i] = null; + } + onInventoryChanged(); + return itemstack1; + } + else + { + return null; + } + } - @Override - public void setInventorySlotContents(int i, ItemStack itemstack) { - chestContents[i] = itemstack; - if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) - { - itemstack.stackSize = getInventoryStackLimit(); - } - onInventoryChanged(); - } + @Override + public void setInventorySlotContents(int i, ItemStack itemstack) { + chestContents[i] = itemstack; + if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) + { + itemstack.stackSize = getInventoryStackLimit(); + } + onInventoryChanged(); + } - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) - { - super.readFromNBT(nbttagcompound); - NBTTagList nbttaglist = nbttagcompound.getTagList("Items"); - chestContents = new ItemStack[getSizeInventory()]; - for (int i = 0; i < nbttaglist.tagCount(); i++) - { - NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.tagAt(i); - int j = nbttagcompound1.getByte("Slot") & 0xff; - if (j >= 0 && j < chestContents.length) - { - chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); - } - } - facing = nbttagcompound.getByte("facing"); - sortTopStacks(); - } + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) + { + super.readFromNBT(nbttagcompound); + NBTTagList nbttaglist = nbttagcompound.getTagList("Items"); + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < nbttaglist.tagCount(); i++) + { + NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.tagAt(i); + int j = nbttagcompound1.getByte("Slot") & 0xff; + if (j >= 0 && j < chestContents.length) + { + chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } + } + facing = nbttagcompound.getByte("facing"); + sortTopStacks(); + } - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) - { - super.writeToNBT(nbttagcompound); - NBTTagList nbttaglist = new NBTTagList(); - for (int i = 0; i < chestContents.length; i++) - { - if (chestContents[i] != null) - { - NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound1.setByte("Slot", (byte) i); - chestContents[i].writeToNBT(nbttagcompound1); - nbttaglist.appendTag(nbttagcompound1); - } - } + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) + { + super.writeToNBT(nbttagcompound); + NBTTagList nbttaglist = new NBTTagList(); + for (int i = 0; i < chestContents.length; i++) + { + if (chestContents[i] != null) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) i); + chestContents[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + } - nbttagcompound.setTag("Items", nbttaglist); - nbttagcompound.setByte("facing", facing); - } + nbttagcompound.setTag("Items", nbttaglist); + nbttagcompound.setByte("facing", facing); + } - @Override - public int getInventoryStackLimit() { - return 64; - } + @Override + public int getInventoryStackLimit() { + return 64; + } - @Override - public boolean isUseableByPlayer(EntityPlayer entityplayer) { - if (worldObj == null) { - return true; - } - if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this) { - return false; - } - return entityplayer.getDistanceSq((double) xCoord + 0.5D, (double) yCoord + 0.5D, (double) zCoord + 0.5D) <= 64D; - } + @Override + public boolean isUseableByPlayer(EntityPlayer entityplayer) { + if (worldObj == null) { + return true; + } + if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } + return entityplayer.getDistanceSq((double) xCoord + 0.5D, (double) yCoord + 0.5D, (double) zCoord + 0.5D) <= 64D; + } - @Override - public void updateEntity() { - super.updateEntity(); - // 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; - if (numUsingPlayers > 0 && lidAngle == 0.0F) { - double d = (double) xCoord + 0.5D; - double d1 = (double) zCoord + 0.5D; - worldObj.playSoundEffect(d, (double) yCoord + 0.5D, d1, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); - } - if (numUsingPlayers == 0 && lidAngle > 0.0F || numUsingPlayers > 0 && lidAngle < 1.0F) { - float f1 = lidAngle; - if (numUsingPlayers > 0) { - lidAngle += f; - } else { - lidAngle -= f; - } - if (lidAngle > 1.0F) { - lidAngle = 1.0F; - } - float f2 = 0.5F; - if (lidAngle < f2 && f1 >= f2) { - double d2 = (double) xCoord + 0.5D; - double d3 = (double) zCoord + 0.5D; - worldObj.playSoundEffect(d2, (double) yCoord + 0.5D, d3, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); - } - if (lidAngle < 0.0F) { - lidAngle = 0.0F; - } - } - } + @Override + public void updateEntity() { + super.updateEntity(); + // 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; + if (numUsingPlayers > 0 && lidAngle == 0.0F) { + double d = (double) xCoord + 0.5D; + double d1 = (double) zCoord + 0.5D; + worldObj.playSoundEffect(d, (double) yCoord + 0.5D, d1, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + if (numUsingPlayers == 0 && lidAngle > 0.0F || numUsingPlayers > 0 && lidAngle < 1.0F) { + float f1 = lidAngle; + if (numUsingPlayers > 0) { + lidAngle += f; + } else { + lidAngle -= f; + } + if (lidAngle > 1.0F) { + lidAngle = 1.0F; + } + float f2 = 0.5F; + if (lidAngle < f2 && f1 >= f2) { + double d2 = (double) xCoord + 0.5D; + double d3 = (double) zCoord + 0.5D; + worldObj.playSoundEffect(d2, (double) yCoord + 0.5D, d3, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + if (lidAngle < 0.0F) { + lidAngle = 0.0F; + } + } + } - @Override - public void onTileEntityPowered(int i, int j) - { - if (i == 1) - { - numUsingPlayers = j; - } else if (i == 2) { - facing = (byte) j; - } else if (i == 3) { - facing = (byte) (j & 0x7); - numUsingPlayers = (j & 0xF8) >> 3; - } - } + @Override + public void onTileEntityPowered(int i, int j) + { + if (i == 1) + { + numUsingPlayers = j; + } else if (i == 2) { + facing = (byte) j; + } else if (i == 3) { + facing = (byte) (j & 0x7); + numUsingPlayers = (j & 0xF8) >> 3; + } + } - @Override - public void openChest() { - if (worldObj == null) - return; - numUsingPlayers++; - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); - } + @Override + public void openChest() { + if (worldObj == null) + return; + numUsingPlayers++; + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + } - @Override - public void closeChest() { - if (worldObj == null) - return; - numUsingPlayers--; - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); - } + @Override + public void closeChest() { + if (worldObj == null) + return; + numUsingPlayers--; + worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + } - public void setFacing(byte chestFacing) { - this.facing = chestFacing; - } + public void setFacing(byte chestFacing) { + this.facing = chestFacing; + } - public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) { - if (numUsingPlayers > 0) { - return null; - } - if (!itemChestChanger.getType().canUpgrade(this.getType())) { - return null; - } - TileEntityIronChest newEntity = IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); - int newSize = newEntity.chestContents.length; - System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); - BlockIronChest block = mod_IronChest.ironChestBlock; - block.dropContent(newSize, this, this.worldObj); - newEntity.setFacing(facing); - newEntity.sortTopStacks(); - return newEntity; - } + public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) { + if (numUsingPlayers > 0) { + return null; + } + if (!itemChestChanger.getType().canUpgrade(this.getType())) { + return null; + } + TileEntityIronChest newEntity = IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); + int newSize = newEntity.chestContents.length; + System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); + BlockIronChest block = mod_IronChest.ironChestBlock; + block.dropContent(newSize, this, this.worldObj); + newEntity.setFacing(facing); + newEntity.sortTopStacks(); + return newEntity; + } - public ItemStack[] getTopItemStacks() { - return topStacks; - } + public ItemStack[] getTopItemStacks() { + return topStacks; + } - public TileEntityIronChest updateFromMetadata(int l) { - if (worldObj != null && worldObj.isRemote) { - if (l != type.ordinal()) { - worldObj.setBlockTileEntity(xCoord, yCoord, zCoord, IronChestType.makeEntity(l)); - return (TileEntityIronChest) worldObj.getBlockTileEntity(xCoord, yCoord, zCoord); - } - } - return this; - } + public TileEntityIronChest updateFromMetadata(int l) { + if (worldObj != null && worldObj.isRemote) { + if (l != type.ordinal()) { + worldObj.setBlockTileEntity(xCoord, yCoord, zCoord, IronChestType.makeEntity(l)); + return (TileEntityIronChest) worldObj.getBlockTileEntity(xCoord, yCoord, zCoord); + } + } + return this; + } - public Packet getDescriptionPacket() { - return mod_IronChest.proxy.getDescriptionPacket(this); - } + public Packet getDescriptionPacket() { + return PacketHandler.getPacket(this); + } - public void handlePacketData(int typeData, int[] intData, float[] floatData, String[] stringData) { - TileEntityIronChest chest = this; - if (this.type.ordinal() != typeData) { - chest = updateFromMetadata(typeData); - } - if (IronChestType.values()[typeData].isTransparent() && intData != null) { - int pos = 0; - if (intData.length < chest.topStacks.length * 3) { - return; - } - for (int i = 0; i < chest.topStacks.length; i++) { - if (intData[pos + 2] != 0) { - ItemStack is = new ItemStack(intData[pos], intData[pos + 2], intData[pos + 1]); - chest.topStacks[i] = is; - } else { - chest.topStacks[i] = null; - } - pos += 3; - } - } - } + public void handlePacketData(int typeData, int[] intData) { + TileEntityIronChest chest = this; + if (this.type.ordinal() != typeData) { + chest = updateFromMetadata(typeData); + } + if (IronChestType.values()[typeData].isTransparent() && intData != null) { + int pos = 0; + if (intData.length < chest.topStacks.length * 3) { + return; + } + for (int i = 0; i < chest.topStacks.length; i++) { + if (intData[pos + 2] != 0) { + ItemStack is = new ItemStack(intData[pos], intData[pos + 2], intData[pos + 1]); + chest.topStacks[i] = is; + } else { + chest.topStacks[i] = null; + } + pos += 3; + } + } + } - public int[] buildIntDataList() { - if (type.isTransparent()) { - int[] sortList = new int[topStacks.length * 3]; - int pos = 0; - for (ItemStack is : topStacks) { - if (is != null) { - sortList[pos++] = is.itemID; - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; - } else { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; - } - } - return sortList; - } - return null; - } + public int[] buildIntDataList() { + if (type.isTransparent()) { + int[] sortList = new int[topStacks.length * 3]; + int pos = 0; + for (ItemStack is : topStacks) { + if (is != null) { + sortList[pos++] = is.itemID; + sortList[pos++] = is.getItemDamage(); + sortList[pos++] = is.stackSize; + } else { + sortList[pos++] = 0; + sortList[pos++] = 0; + sortList[pos++] = 0; + } + } + return sortList; + } + return null; + } - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.chestContents[par1] != null) - { - ItemStack var2 = this.chestContents[par1]; - this.chestContents[par1] = null; - return var2; - } - else - { - return null; - } - } + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.chestContents[par1] != null) + { + ItemStack var2 = this.chestContents[par1]; + this.chestContents[par1] = null; + return var2; + } + else + { + return null; + } + } } diff --git a/IronChests2/common/cpw/mods/ironchest/Version.java b/IronChests2/common/cpw/mods/ironchest/Version.java new file mode 100644 index 0000000..32f1a80 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/Version.java @@ -0,0 +1,17 @@ +package cpw.mods.ironchest; + + +public class Version { + public static final String MAJOR="@MAJOR@"; + public static final String MINOR="@MINOR@"; + public static final String REV="@REV@"; + public static final String BUILD="@BUILD@"; + + public static final String version() { + return MAJOR+"."+MINOR; + } + + public static final String name() { + return "Iron Chest ("+MAJOR+"."+MINOR+") rev "+REV+" build "+BUILD; + } +} diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index d322745..db7781a 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -6,103 +6,110 @@ import java.lang.reflect.Method; import net.minecraft.src.forge.Configuration; import net.minecraft.src.forge.IOreHandler; import net.minecraft.src.forge.MinecraftForge; +import net.minecraft.src.forge.NetworkMod; import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.ChestChangerType; import cpw.mods.ironchest.IProxy; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.ItemChestChanger; import cpw.mods.ironchest.ItemIronChest; +import cpw.mods.ironchest.PacketHandler; import cpw.mods.ironchest.ServerClientProxy; -import cpw.mods.ironchest.TileEntityIronChest; +import cpw.mods.ironchest.Version; -public class mod_IronChest extends BaseModMp { +public class mod_IronChest extends NetworkMod { - public static BlockIronChest ironChestBlock; - public static ItemChestChanger itemChestChanger; - public static IProxy proxy; + public static BlockIronChest ironChestBlock; + public static ItemChestChanger itemChestChanger; + public static IProxy proxy; + public static mod_IronChest instance; - @Override - public String getVersion() { - return "3.1"; - } + @Override + public String getVersion() { + return Version.version(); + } - @Override - public void load() { - MinecraftForge.versionDetect("IronChest", 1, 4, 0); - proxy = ServerClientProxy.getProxy(); - File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); - Configuration cfg = new Configuration(cfgFile); - try { - cfg.load(); - int bId=Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value); - if (bId>=256) { - throw new RuntimeException(String.format("IronChest detected an invalid block id %s\n",bId)); - } - ironChestBlock = new BlockIronChest(bId); - ChestChangerType.buildItems(cfg, 19501); - IronChestType.initGUIs(cfg); - } catch (Exception e) { - ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); - e.printStackTrace(System.err); - throw new RuntimeException(e); - } finally { - cfg.save(); - } + @Override + public void load() { + MinecraftForge.versionDetect("IronChest", 2, 0, 0); + instance = this; + proxy = ServerClientProxy.getProxy(); + File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); + Configuration cfg = new Configuration(cfgFile); + try { + cfg.load(); + int bId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); + if (bId >= 256) { + throw new RuntimeException(String.format("IronChest detected an invalid block id %s\n", bId)); + } + ironChestBlock = new BlockIronChest(bId); + ChestChangerType.buildItems(cfg, 19501); + } catch (Exception e) { + ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); + e.printStackTrace(System.err); + throw new RuntimeException(e); + } finally { + cfg.save(); + } - ModLoader.registerBlock(ironChestBlock, ItemIronChest.class); - MinecraftForge.registerOreHandler(new IOreHandler() { - @Override - public void registerOre(String oreClass, ItemStack ore) { - if ("ingotCopper".equals(oreClass)) { - IronChestType.COPPER.addMat(ore); - IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore); - ChestChangerType.generateRecipe(IronChestType.COPPER); - } - if ("ingotSilver".equals(oreClass)) { - IronChestType.SILVER.addMat(ore); - IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore); - ChestChangerType.generateRecipe(IronChestType.SILVER); - } - if ("ingotRefinedIron".equals(oreClass)) { - IronChestType.IRON.addMat(ore); - IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore); - ChestChangerType.generateRecipe(IronChestType.IRON); - } - } - }); - proxy.registerTranslations(); - proxy.registerTileEntities(); - ChestChangerType.generateRecipe(IronChestType.IRON); - ChestChangerType.generateRecipe(IronChestType.GOLD); - ChestChangerType.generateRecipe(IronChestType.DIAMOND); - IronChestType.generateTieredRecipies(ironChestBlock); + ModLoader.registerBlock(ironChestBlock, ItemIronChest.class); + MinecraftForge.registerOreHandler(new IOreHandler() { + @Override + public void registerOre(String oreClass, ItemStack ore) { + if ("ingotCopper".equals(oreClass)) { + IronChestType.COPPER.addMat(ore); + IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore); + ChestChangerType.generateRecipe(IronChestType.COPPER); + } + if ("ingotSilver".equals(oreClass)) { + IronChestType.SILVER.addMat(ore); + IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore); + ChestChangerType.generateRecipe(IronChestType.SILVER); + } + if ("ingotRefinedIron".equals(oreClass)) { + IronChestType.IRON.addMat(ore); + IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore); + ChestChangerType.generateRecipe(IronChestType.IRON); + } + } + }); + proxy.registerTranslations(); + proxy.registerTileEntities(); + ChestChangerType.generateRecipe(IronChestType.IRON); + ChestChangerType.generateRecipe(IronChestType.GOLD); + ChestChangerType.generateRecipe(IronChestType.DIAMOND); + IronChestType.generateTieredRecipies(ironChestBlock); - proxy.registerRenderInformation(); - } + MinecraftForge.setGuiHandler(this, proxy); + MinecraftForge.registerConnectionHandler(new PacketHandler()); + proxy.registerRenderInformation(); + } + @Override + public void modsLoaded() { + try { + Class equivexmaps = Class.forName("ee.EEMaps"); + Method addEMC = equivexmaps.getMethod("addEMC", int.class, int.class, int.class); + Method addMeta = equivexmaps.getMethod("addMeta", int.class, int.class); + int[] chestEMCValues = new int[] { 8 * 8 + 256 * 8, 8 * 8 + 256 * 8 + 2048 * 8, 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6, 85 * 8 + 8 * 8, + 85 * 8 + 8 * 8 + 512 * 8, 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 }; + for (IronChestType icType : IronChestType.values()) { + addEMC.invoke(null, ironChestBlock.blockID, icType.ordinal(), chestEMCValues[icType.ordinal()]); + } + addMeta.invoke(null, ironChestBlock.blockID, IronChestType.values().length - 1); + ModLoader.getLogger().fine("mod_IronChest registered chests with Equivalent Exchange"); + } catch (Exception ex) { + ModLoader.getLogger().fine("mod_IronChest unable to load Equivalent Exchange integration"); + } + } - @Override - public void modsLoaded() { - try { - Class equivexmaps=Class.forName("ee.EEMaps"); - Method addEMC=equivexmaps.getMethod("addEMC",int.class,int.class,int.class); - Method addMeta=equivexmaps.getMethod("addMeta",int.class,int.class); - int[] chestEMCValues=new int[] { 8*8+256*8, 8*8+256*8+2048*8, 2*8192+8*8+256*8+2048*8+6, 85*8+8*8, 85*8+8*8+512*8, 2*8192+8*8+256*8+2048*8+6+8 }; - for (IronChestType icType : IronChestType.values()) { - addEMC.invoke(null,ironChestBlock.blockID,icType.ordinal(),chestEMCValues[icType.ordinal()]); - } - addMeta.invoke(null,ironChestBlock.blockID,IronChestType.values().length-1); - ModLoader.getLogger().fine("mod_IronChest registered chests with Equivalent Exchange"); - } catch (Exception ex) { - ModLoader.getLogger().fine("mod_IronChest unable to load Equivalent Exchange integration"); - } - } - - public static void openGUI(EntityPlayer player, TileEntityIronChest te) { - proxy.showGUI(te,player); - } - - public void handleTileEntityPacket(int x, int y, int z, int type, int[] intData, float[] floatData, String[] stringData) { - proxy.handleTileEntityPacket(x,y,z,type,intData,floatData,stringData); - } + @Override + public boolean clientSideRequired() { + return true; + } + + @Override + public boolean serverSideRequired() { + return true; + } } diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index a46eb32..03db7c3 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -2,14 +2,13 @@ package cpw.mods.ironchest.server; import java.io.File; -import net.minecraft.src.BaseModMp; +import net.minecraft.src.Container; import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayer; +import net.minecraft.src.EntityPlayerMP; import net.minecraft.src.ModLoader; -import net.minecraft.src.ModLoaderMp; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet; -import net.minecraft.src.mod_IronChest; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import cpw.mods.ironchest.ContainerIronChestBase; import cpw.mods.ironchest.IProxy; import cpw.mods.ironchest.IronChestType; @@ -34,11 +33,6 @@ public class ServerProxy implements IProxy { // NOOP on server } - @Override - public void showGUI(TileEntityIronChest te, EntityPlayer player) { - ModLoader.openGUI(player, te.getType().guiId, te, new ContainerIronChestBase(player.inventory,te, te.getType(), 1, 1)); - } - @Override public File getMinecraftDir() { return new File("."); @@ -49,29 +43,26 @@ public class ServerProxy implements IProxy { entityitem.item.setTagCompound(data); } - @Override - public void registerGUI(int guiId) { - // NOOP on server - } - - @Override - public void handleTileEntityPacket(int x, int y, int z, int type, int[] intData, float[] floatData, String[] stringData) { - // NOOP on server - } - - @Override - public Packet getDescriptionPacket(TileEntityIronChest tile) { - return ModLoaderMp.getTileEntityPacket(ModLoaderMp.getModInstance(mod_IronChest.class), tile.xCoord, tile.yCoord, tile.zCoord, tile.getType().ordinal(), tile.buildIntDataList(),null,null); - } - - @Override - public void sendTileEntityUpdate(TileEntityIronChest tile) { - ModLoaderMp.sendTileEntityPacket(tile); - } - @Override public boolean isRemote() { return false; } + @Override + public Container getGuiContainer(int ID, EntityPlayerMP player, World world, int X, int Y, int Z) { + TileEntity te=world.getBlockTileEntity(X, Y, Z); + if (te!=null && te instanceof TileEntityIronChest) { + TileEntityIronChest icte=(TileEntityIronChest) te; + return new ContainerIronChestBase(player.inventory, icte, icte.getType(), 0, 0); + } else { + return null; + } + } + + @Override + public World getCurrentWorld() { + // NOOP on server: there's lots + return null; + } + } From 735659022a1f96606f900e6cb7e439fcf3bad7fc Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 01:51:21 -0400 Subject: [PATCH 043/188] Fix build script for jenkins --- IronChests2/build.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index d8efd84..234411a 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -17,10 +17,10 @@ - + - - + + From 1574da4102676d9efaa373f8a8aac504db6f627e Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 02:18:58 -0400 Subject: [PATCH 044/188] Fix build for jenkins? --- IronChests2/build.xml | 105 ++++++++++++++++++++++-------------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 234411a..b60786f 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -11,47 +11,52 @@ Iron Chests - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +66,7 @@ - + @@ -78,14 +83,14 @@ - + - - + + - + @@ -93,13 +98,13 @@ - + - + - - + + @@ -111,18 +116,18 @@ - - + + - - - - + + + + From 67c3a8e35c1da5dbb2a026c25ab838f7deb71bcb Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 02:23:49 -0400 Subject: [PATCH 045/188] Fix build number --- IronChests2/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index b60786f..1247e44 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -36,7 +36,7 @@ - + From b0e6ba37ebdf2a13cc1c2e172c540e18c528aa22 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 02:41:47 -0400 Subject: [PATCH 046/188] Tweak build script --- IronChests2/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 1247e44..7e4f66f 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -37,7 +37,7 @@ - + From dcb1036c33d3b5fd544c2feb1e4642bfcfbcfc7f Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 02:44:46 -0400 Subject: [PATCH 047/188] Tweak build --- IronChests2/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 7e4f66f..b894291 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -7,7 +7,7 @@ cpw ====================================================================== --> - + Iron Chests From 3b252473255f84f8aef6fe5649534b73931c6eae Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 29 Mar 2012 02:51:30 -0400 Subject: [PATCH 048/188] Prettify build file --- IronChests2/build.xml | 266 +++++++++++++++++++++--------------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index b894291..2285c6e 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -8,151 +8,151 @@ cpw ====================================================================== --> - + Iron Chests - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + From ff40b9b27ac82f733e680cc914563c78442fda94 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 7 Apr 2012 14:31:24 -0400 Subject: [PATCH 049/188] Update to forge 70/1.2.5 --- IronChests2/build.xml | 22 ++++++++++++++++--- .../mods/ironchest/client/ClientProxy.java | 17 +++++++------- .../cpw/mods/ironchest/client/GUIChest.java | 2 -- .../mods/ironchest/server/ServerProxy.java | 5 ++--- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 2285c6e..7cffae9 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -32,9 +32,8 @@ - - + @@ -43,7 +42,7 @@ - + @@ -57,6 +56,7 @@ + @@ -95,8 +95,24 @@ + + + + + + + + + + + + + + + + diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 6487c01..18cf76f 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -5,8 +5,7 @@ import java.io.File; import net.minecraft.client.Minecraft; import net.minecraft.src.ChestItemRenderHelper; import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayerSP; -import net.minecraft.src.GuiScreen; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.ModLoader; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; @@ -59,17 +58,17 @@ public class ClientProxy implements IProxy { } @Override - public GuiScreen getGuiScreen(int ID, EntityPlayerSP player, World world, int X, int Y, int Z) { - TileEntity te = world.getBlockTileEntity(X, Y, Z); + public World getCurrentWorld() { + return ModLoader.getMinecraftInstance().theWorld; + } + + @Override + public Object getGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + TileEntity te = world.getBlockTileEntity(x, y, z); if (te != null && te instanceof TileEntityIronChest) { return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); } else { return null; } } - - @Override - public World getCurrentWorld() { - return ModLoader.getMinecraftInstance().theWorld; - } } diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index 612b754..afadf05 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -1,10 +1,8 @@ package cpw.mods.ironchest.client; import net.minecraft.src.Container; -import net.minecraft.src.EntityPlayer; import net.minecraft.src.GuiContainer; import net.minecraft.src.IInventory; -import net.minecraft.src.ModLoader; import org.lwjgl.opengl.GL11; diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index 03db7c3..fb91db9 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -2,9 +2,8 @@ package cpw.mods.ironchest.server; import java.io.File; -import net.minecraft.src.Container; import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayerMP; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.ModLoader; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; @@ -49,7 +48,7 @@ public class ServerProxy implements IProxy { } @Override - public Container getGuiContainer(int ID, EntityPlayerMP player, World world, int X, int Y, int Z) { + public Object getGuiElement(int ID, EntityPlayer player, World world, int X, int Y, int Z) { TileEntity te=world.getBlockTileEntity(X, Y, Z); if (te!=null && te instanceof TileEntityIronChest) { TileEntityIronChest icte=(TileEntityIronChest) te; From 5749eea9234af4745ebee4bb7870d6a5fdc73ca3 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 7 Apr 2012 14:42:39 -0400 Subject: [PATCH 050/188] Fix build uploader --- IronChests2/build.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 7cffae9..1cbd4cc 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -103,6 +103,7 @@ + From 46668a7705786e6f7a69a23e0b744b33f7a6c9ec Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 8 Apr 2012 10:23:56 -0400 Subject: [PATCH 051/188] Fix forge version check --- IronChests2/common/net/minecraft/src/mod_IronChest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index db7781a..83fdf4c 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -31,7 +31,7 @@ public class mod_IronChest extends NetworkMod { @Override public void load() { - MinecraftForge.versionDetect("IronChest", 2, 0, 0); + MinecraftForge.versionDetect("IronChest", 3, 0, 0); instance = this; proxy = ServerClientProxy.getProxy(); File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); @@ -110,6 +110,6 @@ public class mod_IronChest extends NetworkMod { @Override public boolean serverSideRequired() { - return true; + return false; } } From d9a038980646193dffee1ae95c8df9dc96b02d1c Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 8 Apr 2012 10:56:18 -0400 Subject: [PATCH 052/188] Register channel in onconnect --- IronChests2/common/cpw/mods/ironchest/PacketHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index b2338b5..b089aa3 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -20,11 +20,11 @@ import net.minecraft.src.forge.MessageManager; public class PacketHandler implements IPacketHandler, IConnectionHandler { @Override public void onConnect(NetworkManager network) { + MessageManager.getInstance().registerChannel(network, this, "IronChest"); } @Override public void onLogin(NetworkManager network, Packet1Login login) { - MessageManager.getInstance().registerChannel(network, this, "IronChest"); } @Override From c5876823234245a034970d2a050b6e411bccc929 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 8 Apr 2012 11:09:23 -0400 Subject: [PATCH 053/188] Debug --- IronChests2/common/cpw/mods/ironchest/PacketHandler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index b089aa3..fee7c13 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -34,6 +34,7 @@ public class PacketHandler implements IPacketHandler, IConnectionHandler { @Override public void onPacketData(NetworkManager network, String channel, byte[] data) { + System.out.println("Got packet"); DataInputStream dis=new DataInputStream(new ByteArrayInputStream(data)); int x; int y; @@ -91,6 +92,7 @@ public class PacketHandler implements IPacketHandler, IConnectionHandler { pkt.channel="IronChest"; pkt.data=bos.toByteArray(); pkt.length=bos.size(); + System.out.println("Sent packet"); return pkt; } } \ No newline at end of file From 7872e634dd6ac3b0bb93e4fb3cc4d5a6a3ce5997 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 8 Apr 2012 11:29:31 -0400 Subject: [PATCH 054/188] Fix TE packet arriving before TE itself --- IronChests2/common/cpw/mods/ironchest/PacketHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index fee7c13..bf86b38 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -34,7 +34,6 @@ public class PacketHandler implements IPacketHandler, IConnectionHandler { @Override public void onPacketData(NetworkManager network, String channel, byte[] data) { - System.out.println("Got packet"); DataInputStream dis=new DataInputStream(new ByteArrayInputStream(data)); int x; int y; @@ -92,7 +91,7 @@ public class PacketHandler implements IPacketHandler, IConnectionHandler { pkt.channel="IronChest"; pkt.data=bos.toByteArray(); pkt.length=bos.size(); - System.out.println("Sent packet"); + pkt.isChunkDataPacket=true; return pkt; } } \ No newline at end of file From f12f8b1c312ba72acd233a002978470e3c3fc96c Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 12 Apr 2012 15:46:38 -0400 Subject: [PATCH 055/188] Fix forge renderer issue. Require forge 3.0.1. --- IronChests2/build.xml | 2 +- .../ironchest/client/TileEntityIronChestRenderer.java | 8 ++++---- IronChests2/common/net/minecraft/src/mod_IronChest.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 1cbd4cc..39b11c7 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -34,7 +34,7 @@ - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 7603f88..9c2d089 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -116,7 +116,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shiftY = shifts[shift][1]; shiftZ = shifts[shift][2]; shift++; - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item,ItemRenderType.ENTITY); + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item,IItemRenderer.ItemRenderType.ENTITY); float localScale = blockScale; if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null) { int j = Block.blocksList[item.itemID].getRenderType(); @@ -138,10 +138,10 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } if (customRenderer != null) { - customitem.item=item; + customitem.item=item; bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(item.getItem()); - ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, customitem); + ForgeHooksClient.overrideTexture(item.getItem()); + customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 83fdf4c..96c00ca 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -31,7 +31,7 @@ public class mod_IronChest extends NetworkMod { @Override public void load() { - MinecraftForge.versionDetect("IronChest", 3, 0, 0); + MinecraftForge.versionDetect("IronChest", 3, 0, 1); instance = this; proxy = ServerClientProxy.getProxy(); File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); From 554d6c70052bec6b7ca05cbd8c67dc7542b78779 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 15 Apr 2012 18:30:49 -0400 Subject: [PATCH 056/188] Add in code to support the bukkit fun --- .../ironchest/ContainerIronChestBase.java | 139 ++++++++++-------- .../mods/ironchest/TileEntityIronChest.java | 3 + 2 files changed, 77 insertions(+), 65 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 1a03421..db88931 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -3,84 +3,93 @@ package cpw.mods.ironchest; import net.minecraft.src.Container; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; +import net.minecraft.src.InventoryPlayer; import net.minecraft.src.ItemStack; import net.minecraft.src.Slot; public class ContainerIronChestBase extends Container { - private IronChestType type; - public ContainerIronChestBase(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) { - chest = chestInventory; - this.type=type; - chestInventory.openChest(); - layoutContainer(playerInventory, chestInventory, type, xSize, ySize); - } + private IronChestType type; + private EntityPlayer player; + private IInventory chest; - public boolean canInteractWith(EntityPlayer player) - { - return chest.isUseableByPlayer(player); - } + public ContainerIronChestBase(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) { + chest = chestInventory; + player = ((InventoryPlayer) playerInventory).player; + this.type = type; + chestInventory.openChest(); + layoutContainer(playerInventory, chestInventory, type, xSize, ySize); + } - public ItemStack transferStackInSlot(int i) + public boolean canInteractWith(EntityPlayer player) + { + return chest.isUseableByPlayer(player); + } + + public ItemStack transferStackInSlot(int i) + { + ItemStack itemstack = null; + Slot slot = (Slot) inventorySlots.get(i); + if (slot != null && slot.getHasStack()) { - ItemStack itemstack = null; - Slot slot = (Slot)inventorySlots.get(i); - if(slot != null && slot.getHasStack()) + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + if (i < type.size) + { + if (!mergeItemStack(itemstack1, type.size, inventorySlots.size(), true)) { - ItemStack itemstack1 = slot.getStack(); - itemstack = itemstack1.copy(); - if(i < type.size) - { - if(!mergeItemStack(itemstack1, type.size, inventorySlots.size(), true)) - { - return null; - } - } else - if(!mergeItemStack(itemstack1, 0, type.size, false)) - { - return null; - } - if(itemstack1.stackSize == 0) - { - slot.putStack(null); - } else - { - slot.onSlotChanged(); - } + return null; } - return itemstack; + } else if (!mergeItemStack(itemstack1, 0, type.size, false)) + { + return null; + } + if (itemstack1.stackSize == 0) + { + slot.putStack(null); + } else + { + slot.onSlotChanged(); + } } + return itemstack; + } - public void onCraftGuiClosed(EntityPlayer entityplayer) + public void onCraftGuiClosed(EntityPlayer entityplayer) + { + super.onCraftGuiClosed(entityplayer); + chest.closeChest(); + } + + protected void layoutContainer(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) { + for (int chestRow = 0; chestRow < type.getRowCount(); chestRow++) { - super.onCraftGuiClosed(entityplayer); - chest.closeChest(); + for (int chestCol = 0; chestCol < type.getRowLength(); chestCol++) + { + addSlot(new Slot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); + } + } - 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++) - { - addSlot(new Slot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); - } - - } - - int leftCol=(xSize-162)/2 + 1; - for(int playerInvRow = 0; playerInvRow < 3; playerInvRow++) - { - for(int playerInvCol = 0; playerInvCol < 9; playerInvCol++) - { - addSlot(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4-playerInvRow) * 18 - 10)); - } - - } - - for(int hotbarSlot = 0; hotbarSlot < 9; hotbarSlot++) - { - addSlot(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize-24)); - } - } + int leftCol = (xSize - 162) / 2 + 1; + for (int playerInvRow = 0; playerInvRow < 3; playerInvRow++) + { + for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++) + { + addSlot(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10)); + } - private IInventory chest; + } + + for (int hotbarSlot = 0; hotbarSlot < 9; hotbarSlot++) + { + addSlot(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize - 24)); + } + } + public EntityPlayer getPlayer() { + return player; + } + + public IInventory getInventory() { + return chest; + } } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index f011303..f4e8d29 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -382,4 +382,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return null; } } + public void setMaxStackSize(int size) { + + } } From f1cc63fadeab23a34d4e9fcb424a988a8aca0ec8 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 24 Apr 2012 21:02:18 -0400 Subject: [PATCH 057/188] update ignore for target dir --- IronChests2/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IronChests2/.gitignore b/IronChests2/.gitignore index da21bb7..bef1158 100644 --- a/IronChests2/.gitignore +++ b/IronChests2/.gitignore @@ -1,3 +1,4 @@ *.zip /*.jpage -bin/ \ No newline at end of file +bin/ +/target From 77b63323872b310bbfd35e3cc9d817b61d67ccfb Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Tue, 24 Apr 2012 21:17:23 -0400 Subject: [PATCH 058/188] Add a licence file and headers to all elements in Iron Chest --- .../mods/ironchest/client/ClientProxy.java | 10 + .../cpw/mods/ironchest/client/GUIChest.java | 10 + .../client/IronChestRenderHelper.java | 10 + .../client/TileEntityIronChestRenderer.java | 405 +++++++++--------- .../cpw/mods/ironchest/BlockIronChest.java | 12 +- .../cpw/mods/ironchest/ChestChangerType.java | 10 + .../ironchest/ContainerIronChestBase.java | 10 + .../common/cpw/mods/ironchest/IProxy.java | 10 + .../cpw/mods/ironchest/IronChestType.java | 12 +- .../cpw/mods/ironchest/ItemChestChanger.java | 10 + .../cpw/mods/ironchest/ItemIronChest.java | 10 + .../cpw/mods/ironchest/PacketHandler.java | 12 +- .../cpw/mods/ironchest/ServerClientProxy.java | 10 + .../mods/ironchest/TileEntityCopperChest.java | 10 + .../ironchest/TileEntityCrystalChest.java | 10 + .../ironchest/TileEntityDiamondChest.java | 10 + .../mods/ironchest/TileEntityGoldChest.java | 10 + .../mods/ironchest/TileEntityIronChest.java | 10 + .../mods/ironchest/TileEntitySilverChest.java | 10 + .../common/cpw/mods/ironchest/Version.java | 10 + .../net/minecraft/src/mod_IronChest.java | 10 + .../mods/ironchest/server/ServerProxy.java | 10 + 22 files changed, 420 insertions(+), 201 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 18cf76f..ee289b0 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.client; import java.io.File; diff --git a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java index afadf05..2c2411e 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java +++ b/IronChests2/client/cpw/mods/ironchest/client/GUIChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.client; import net.minecraft.src.Container; diff --git a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java index d8bf76f..94418f3 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.client; import net.minecraft.src.Block; diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 9c2d089..55ae443 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -1,198 +1,207 @@ -package cpw.mods.ironchest.client; - -import static org.lwjgl.opengl.GL11.glColor4f; -import static org.lwjgl.opengl.GL11.glDisable; -import static org.lwjgl.opengl.GL11.glEnable; -import static org.lwjgl.opengl.GL11.glPopMatrix; -import static org.lwjgl.opengl.GL11.glPushMatrix; -import static org.lwjgl.opengl.GL11.glRotatef; -import static org.lwjgl.opengl.GL11.glScalef; -import static org.lwjgl.opengl.GL11.glTranslatef; - -import java.util.Random; - -import net.minecraft.src.Block; -import net.minecraft.src.EntityItem; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.ModelChest; -import net.minecraft.src.RenderBlocks; -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.IItemRenderer; -import net.minecraft.src.forge.ItemRenderType; -import net.minecraft.src.forge.MinecraftForgeClient; -import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.TileEntityIronChest; - -public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { - private Random random; - private RenderBlocks renderBlocks; - - 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.32F, 0.5F }, }; - - public TileEntityIronChestRenderer() { - model = new ModelChest(); - random = new Random(); - renderBlocks = new RenderBlocks(); - } - - public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { - if (tile==null) { - return; - } - int facing = 3; - IronChestType type=tile.getType(); - if (tile != null && tile.worldObj != null) { - facing = tile.getFacing(); - type=tile.getType(); - int typ=tile.worldObj.getBlockMetadata(tile.xCoord,tile.yCoord,tile.zCoord); - type=IronChestType.values()[typ]; - } - bindTextureByName(type.getModelTexture()); - - glPushMatrix(); - glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); - glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); - glScalef(1.0F, -1F, -1F); - glTranslatef(0.5F, 0.5F, 0.5F); - int k = 0; - if (facing == 2) { - k = 180; - } - if (facing == 3) { - k = 0; - } - if (facing == 4) { - k = 90; - } - if (facing == 5) { - k = -90; - } - glRotatef(k, 0.0F, 1.0F, 0.0F); - glTranslatef(-0.5F, -0.5F, -0.5F); - float lidangle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * partialTick; - lidangle = 1.0F - lidangle; - lidangle = 1.0F - lidangle * lidangle * lidangle; - model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); - // Render the chest itself - model.renderAll(); - glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); - glPopMatrix(); - glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - - if (type.isTransparent()) { - random.setSeed(254L); - float shiftX; - float shiftY; - float shiftZ; - int shift = 0; - 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.2F; - spread = 0.22F; - } - glPushMatrix(); - glDisable(2896 /* GL_LIGHTING */); - glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); - glTranslatef((float) x, (float) y, (float) z); - EntityItem customitem=new EntityItem(tileEntityRenderer.worldObj); - for (ItemStack item : tile.getTopItemStacks()) { - if (shift > shifts.length) { - break; - } - if (item == null) { - shift++; - continue; - } - shiftX = shifts[shift][0]; - shiftY = shifts[shift][1]; - shiftZ = shifts[shift][2]; - shift++; - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item,IItemRenderer.ItemRenderType.ENTITY); - float localScale = blockScale; - if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null) { - int j = Block.blocksList[item.itemID].getRenderType(); - if (j == 1 || j == 19 || j == 12 || j == 2) { - localScale = 2 * blockScale; - } - } - 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 * 0.9F) / localScale; - float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; - glTranslatef(minishiftX, minishiftY, minishiftZ); - } - - if (customRenderer != null) { - customitem.item=item; - bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(item.getItem()); - customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); - } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { - bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); - renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); - } else { - int i = item.getIconIndex(); - if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID]==null) { - bindTextureByName("/gui/items.png"); - ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); - } else { - bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(Block.blocksList[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 */); - glPopMatrix(); - glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - } - } - - public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick) { - render((TileEntityIronChest) tileentity, x, y, z, partialTick); - } - - private ModelChest model; -} +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.client; + +import static org.lwjgl.opengl.GL11.glColor4f; +import static org.lwjgl.opengl.GL11.glDisable; +import static org.lwjgl.opengl.GL11.glEnable; +import static org.lwjgl.opengl.GL11.glPopMatrix; +import static org.lwjgl.opengl.GL11.glPushMatrix; +import static org.lwjgl.opengl.GL11.glRotatef; +import static org.lwjgl.opengl.GL11.glScalef; +import static org.lwjgl.opengl.GL11.glTranslatef; + +import java.util.Random; + +import net.minecraft.src.Block; +import net.minecraft.src.EntityItem; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.ModelChest; +import net.minecraft.src.RenderBlocks; +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.IItemRenderer; +import net.minecraft.src.forge.MinecraftForgeClient; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + +public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { + private Random random; + private RenderBlocks renderBlocks; + + 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.32F, 0.5F }, }; + + public TileEntityIronChestRenderer() { + model = new ModelChest(); + random = new Random(); + renderBlocks = new RenderBlocks(); + } + + public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { + if (tile==null) { + return; + } + int facing = 3; + IronChestType type=tile.getType(); + if (tile != null && tile.worldObj != null) { + facing = tile.getFacing(); + type=tile.getType(); + int typ=tile.worldObj.getBlockMetadata(tile.xCoord,tile.yCoord,tile.zCoord); + type=IronChestType.values()[typ]; + } + bindTextureByName(type.getModelTexture()); + + glPushMatrix(); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + glScalef(1.0F, -1F, -1F); + glTranslatef(0.5F, 0.5F, 0.5F); + int k = 0; + if (facing == 2) { + k = 180; + } + if (facing == 3) { + k = 0; + } + if (facing == 4) { + k = 90; + } + if (facing == 5) { + k = -90; + } + glRotatef(k, 0.0F, 1.0F, 0.0F); + glTranslatef(-0.5F, -0.5F, -0.5F); + float lidangle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * partialTick; + lidangle = 1.0F - lidangle; + lidangle = 1.0F - lidangle * lidangle * lidangle; + model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); + // Render the chest itself + model.renderAll(); + glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + glPopMatrix(); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (type.isTransparent()) { + random.setSeed(254L); + float shiftX; + float shiftY; + float shiftZ; + int shift = 0; + 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.2F; + spread = 0.22F; + } + glPushMatrix(); + glDisable(2896 /* GL_LIGHTING */); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + glTranslatef((float) x, (float) y, (float) z); + EntityItem customitem=new EntityItem(tileEntityRenderer.worldObj); + for (ItemStack item : tile.getTopItemStacks()) { + if (shift > shifts.length) { + break; + } + if (item == null) { + shift++; + continue; + } + shiftX = shifts[shift][0]; + shiftY = shifts[shift][1]; + shiftZ = shifts[shift][2]; + shift++; + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item,IItemRenderer.ItemRenderType.ENTITY); + float localScale = blockScale; + if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null) { + int j = Block.blocksList[item.itemID].getRenderType(); + if (j == 1 || j == 19 || j == 12 || j == 2) { + localScale = 2 * blockScale; + } + } + 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 * 0.9F) / localScale; + float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; + glTranslatef(minishiftX, minishiftY, minishiftZ); + } + + if (customRenderer != null) { + customitem.item=item; + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(item.getItem()); + customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); + } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); + renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); + } else { + int i = item.getIconIndex(); + if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID]==null) { + bindTextureByName("/gui/items.png"); + ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); + } else { + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(Block.blocksList[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 */); + glPopMatrix(); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick) { + render((TileEntityIronChest) tileentity, x, y, z, partialTick); + } + + private ModelChest model; +} diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 15a9729..7909c96 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import java.util.ArrayList; @@ -200,4 +210,4 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { itemList.add(new ItemStack(this, 1, type.ordinal())); } } -} \ No newline at end of file +} diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index 6dd350c..f38cbf0 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import static cpw.mods.ironchest.IronChestType.COPPER; diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index db88931..3e4d623 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import net.minecraft.src.Container; diff --git a/IronChests2/common/cpw/mods/ironchest/IProxy.java b/IronChests2/common/cpw/mods/ironchest/IProxy.java index e5fffcb..04555cc 100644 --- a/IronChests2/common/cpw/mods/ironchest/IProxy.java +++ b/IronChests2/common/cpw/mods/ironchest/IProxy.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import java.io.File; diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 2aafe14..afe894f 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import java.util.ArrayList; @@ -113,4 +123,4 @@ public enum IronChestType { return this == CRYSTAL; } -} \ No newline at end of file +} diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 3e04576..e771bd7 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import net.minecraft.src.EntityPlayer; diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java index da8e6a5..aaaa28c 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import java.util.ArrayList; diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index bf86b38..e9ed0e9 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import java.io.ByteArrayInputStream; @@ -94,4 +104,4 @@ public class PacketHandler implements IPacketHandler, IConnectionHandler { pkt.isChunkDataPacket=true; return pkt; } -} \ No newline at end of file +} diff --git a/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java b/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java index 0eebf21..6bd1065 100644 --- a/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java +++ b/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import net.minecraft.src.ModLoader; diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java index 4d04ed9..67a8497 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; public class TileEntityCopperChest extends TileEntityIronChest { diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java index ac6911e..4832d53 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; public class TileEntityCrystalChest extends TileEntityIronChest { diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java index c75b686..0439e43 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; public class TileEntityDiamondChest extends TileEntityIronChest { diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java index 2d195ef..3ae98bd 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; public class TileEntityGoldChest extends TileEntityIronChest { diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index f4e8d29..710f5b4 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; import java.util.Arrays; diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java index 48f72d2..7dbad65 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; public class TileEntitySilverChest extends TileEntityIronChest { diff --git a/IronChests2/common/cpw/mods/ironchest/Version.java b/IronChests2/common/cpw/mods/ironchest/Version.java index 32f1a80..5d8e96c 100644 --- a/IronChests2/common/cpw/mods/ironchest/Version.java +++ b/IronChests2/common/cpw/mods/ironchest/Version.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest; diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 96c00ca..6a921d5 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package net.minecraft.src; import java.io.File; diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index fb91db9..e25380e 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.server; import java.io.File; From 1286f2807e433413017714cdd3eb659f145bf014 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 3 Jun 2012 00:21:20 -0400 Subject: [PATCH 059/188] Update for FML- add in an info file, and change build process --- IronChests2/.gitignore | 2 + IronChests2/build.xml | 184 ++++++++++++------ .../cpw/mods/ironchest/ServerClientProxy.java | 41 ---- .../mods/ironchest/TileEntityIronChest.java | 9 +- .../common/cpw/mods/ironchest/Version.java | 60 ++++-- .../net/minecraft/src/mod_IronChest.java | 5 +- IronChests2/getversion.py | 46 +++++ IronChests2/mcmod.info | 22 +++ 8 files changed, 242 insertions(+), 127 deletions(-) delete mode 100644 IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java create mode 100644 IronChests2/getversion.py create mode 100644 IronChests2/mcmod.info diff --git a/IronChests2/.gitignore b/IronChests2/.gitignore index bef1158..a5b72b5 100644 --- a/IronChests2/.gitignore +++ b/IronChests2/.gitignore @@ -2,3 +2,5 @@ /*.jpage bin/ /target +/build.properties +/build diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 39b11c7..8226542 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -7,10 +7,8 @@ cpw ====================================================================== --> - - - Iron Chests - + + Iron Chest @@ -23,53 +21,120 @@ + + + + + + + + + + + - + + + - - - - - - - - + - + + + + + + + + + - + + - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -88,6 +153,18 @@ + + + + + + + + + + + + @@ -98,22 +175,6 @@ - - - - - - - - - - - - - - - - @@ -132,41 +193,44 @@ - - - - - - - - - - - - - - - - - - - + + - + + + + + + - - - - + + - - - + + + + + + + + + + + + + + + + + + + + diff --git a/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java b/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java deleted file mode 100644 index 6bd1065..0000000 --- a/IronChests2/common/cpw/mods/ironchest/ServerClientProxy.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest; - -import net.minecraft.src.ModLoader; -import net.minecraft.src.forge.MinecraftForge; - -public enum ServerClientProxy { - CLIENT("cpw.mods.ironchest.client.ClientProxy"), - SERVER("cpw.mods.ironchest.server.ServerProxy"); - - private String className; - private ServerClientProxy(String proxyClassName) { - className=proxyClassName; - } - - private IProxy buildProxy() { - try { - return (IProxy) Class.forName(className).newInstance(); - } catch (Exception e) { - ModLoader.getLogger().severe("A fatal error has occured initializing IronChests"); - e.printStackTrace(System.err); - throw new RuntimeException(e); - } - } - public static IProxy getProxy() { - if (MinecraftForge.isClient()) { - return CLIENT.buildProxy(); - } else { - return SERVER.buildProxy(); - } - } -} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 710f5b4..2b3d7b4 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -233,7 +233,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { super.updateEntity(); // Resynchronize clients with the server state if ((++ticksSinceSync % 20) * 4 == 0) { - worldObj.playNoteAt(xCoord, yCoord, zCoord, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); + worldObj.sendClientEvent(xCoord, yCoord, zCoord, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); if (inventoryTouched) { inventoryTouched = false; sortTopStacks(); @@ -268,8 +268,9 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } } + @Override - public void onTileEntityPowered(int i, int j) + public void receiveClientEvent(int i, int j) { if (i == 1) { @@ -287,7 +288,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (worldObj == null) return; numUsingPlayers++; - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + worldObj.sendClientEvent(xCoord, yCoord, zCoord, 1, numUsingPlayers); } @Override @@ -295,7 +296,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (worldObj == null) return; numUsingPlayers--; - worldObj.playNoteAt(xCoord, yCoord, zCoord, 1, numUsingPlayers); + worldObj.sendClientEvent(xCoord, yCoord, zCoord, 1, numUsingPlayers); } public void setFacing(byte chestFacing) { diff --git a/IronChests2/common/cpw/mods/ironchest/Version.java b/IronChests2/common/cpw/mods/ironchest/Version.java index 5d8e96c..0884f5c 100644 --- a/IronChests2/common/cpw/mods/ironchest/Version.java +++ b/IronChests2/common/cpw/mods/ironchest/Version.java @@ -1,27 +1,49 @@ /******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html + * Copyright (c) 2012 cpw. All rights reserved. This program and the accompanying materials are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at http://www.gnu.org/licenses/gpl.html * - * Contributors: - * cpw - initial API and implementation + * Contributors: cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.logging.Level; + +import cpw.mods.fml.common.FMLCommonHandler; public class Version { - public static final String MAJOR="@MAJOR@"; - public static final String MINOR="@MINOR@"; - public static final String REV="@REV@"; - public static final String BUILD="@BUILD@"; - - public static final String version() { - return MAJOR+"."+MINOR; - } - - public static final String name() { - return "Iron Chest ("+MAJOR+"."+MINOR+") rev "+REV+" build "+BUILD; - } + private static String major; + private static String minor; + private static String rev; + private static String build; + private static String mcversion; + private static boolean loaded; + + private static void init() { + InputStream stream = Version.class.getClassLoader().getResourceAsStream("ironchestversion.properties"); + Properties properties = new Properties(); + + if (stream != null) { + try { + properties.load(stream); + major = properties.getProperty("ironchest.build.major.number"); + minor = properties.getProperty("ironchest.build.minor.number"); + rev = properties.getProperty("ironchest.build.revision.number"); + build = properties.getProperty("ironchest.build.build.number"); + mcversion = properties.getProperty("ironchest.build.mcversion"); + } catch (IOException ex) { + FMLCommonHandler.instance().getFMLLogger().log(Level.SEVERE, "Could not get IronChest version information - corrupted installation detected!", ex); + throw new RuntimeException(ex); + } + } + loaded = true; + } + public static final String version() { + if (!loaded) { + init(); + } + return major+"."+minor+"."+rev; + } } diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/net/minecraft/src/mod_IronChest.java index 6a921d5..ba5d61a 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/net/minecraft/src/mod_IronChest.java @@ -24,13 +24,13 @@ import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.ItemChestChanger; import cpw.mods.ironchest.ItemIronChest; import cpw.mods.ironchest.PacketHandler; -import cpw.mods.ironchest.ServerClientProxy; import cpw.mods.ironchest.Version; public class mod_IronChest extends NetworkMod { public static BlockIronChest ironChestBlock; public static ItemChestChanger itemChestChanger; + @SidedProxy(clientSide="cpw.mods.ironchest.client.ClientProxy", serverSide="cpw.mods.ironchest.server.ServerProxy") public static IProxy proxy; public static mod_IronChest instance; @@ -41,9 +41,8 @@ public class mod_IronChest extends NetworkMod { @Override public void load() { - MinecraftForge.versionDetect("IronChest", 3, 0, 1); + MinecraftForge.versionDetect("IronChest", 3, 2, 4); instance = this; - proxy = ServerClientProxy.getProxy(); File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); Configuration cfg = new Configuration(cfgFile); try { diff --git a/IronChests2/getversion.py b/IronChests2/getversion.py new file mode 100644 index 0000000..5b10b65 --- /dev/null +++ b/IronChests2/getversion.py @@ -0,0 +1,46 @@ +import sys +import os +import commands +import fnmatch +import re +import subprocess, shlex + +def cmdsplit(args): + if os.sep == '\\': + args = args.replace('\\', '\\\\') + return shlex.split(args) + +def cleanDirs(path): + if not os.path.isdir(path): + return + + files = os.listdir(path) + if len(files): + for f in files: + fullpath = os.path.join(path, f) + if os.path.isdir(fullpath): + cleanDirs(fullpath) + + files = os.listdir(path) + if len(files) == 0: + os.rmdir(path) + +def main(): + print("Obtaining version information from git") + cmd = "git describe --long --match='[^(jenkins)]*'" + try: + process = subprocess.Popen(cmdsplit(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1) + vers, _ = process.communicate() + except OSError: + print("Git not found") + vers="v1.0-0-deadbeef" + (major,minor,rev,githash)=re.match("v(\d+).(\d+)-(\d+)-(.*)",vers).groups() + with open("ironchestversion.properties","w") as f: + f.write("%s=%s\n" %("ironchest.build.major.number",major)) + f.write("%s=%s\n" %("ironchest.build.minor.number",minor)) + f.write("%s=%s\n" %("ironchest.build.revision.number",rev)) + f.write("%s=%s\n" %("ironchest.build.githash",githash)) + f.write("%s=%s\n" %("ironchest.build.mcversion","1.2.5")) + +if __name__ == '__main__': + main() diff --git a/IronChests2/mcmod.info b/IronChests2/mcmod.info new file mode 100644 index 0000000..fa25c38 --- /dev/null +++ b/IronChests2/mcmod.info @@ -0,0 +1,22 @@ +[ +{ + "modid": "mod_IronChest", + "name": "Iron Chest", + "description": "New chests with larger sizes, with in-place upgrade items. + The feature chest is the crystal chest, which is transparent - some inventory contents are visible without opening the chest", + "version": "@VERSION@", + "mcversion": "1.2.5", + "url": "http://www.minecraftforum.net/topic/981855-", + "updateUrl": "", + "authors": [ + "cpw" + ], + "credits": "By cpw, based on an original idea by Lishid", + "logo": "", + "screenshots": [ + ], + "parent":"", + "dependencies": [ + ] +} +] \ No newline at end of file From 6acb0e2ef2a37bec25d610130c4dcf1babc96d2d Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 3 Jun 2012 00:41:48 -0400 Subject: [PATCH 060/188] logoFile not logo --- IronChests2/mcmod.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/mcmod.info b/IronChests2/mcmod.info index fa25c38..0ddf6f9 100644 --- a/IronChests2/mcmod.info +++ b/IronChests2/mcmod.info @@ -12,7 +12,7 @@ "cpw" ], "credits": "By cpw, based on an original idea by Lishid", - "logo": "", + "logoFile": "", "screenshots": [ ], "parent":"", From 0af6bda54066869abe0a0375631a3b916bc7b6ae Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sun, 3 Jun 2012 01:37:04 -0400 Subject: [PATCH 061/188] Fix build script to read correct version information --- IronChests2/build.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 8226542..0182a03 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -41,7 +41,6 @@ - From a3e2e6bb7104cc100c3b435d700e651484143502 Mon Sep 17 00:00:00 2001 From: Brian Wiegand Date: Mon, 25 Jun 2012 12:11:13 -0700 Subject: [PATCH 062/188] Update to use Display lists, significantly less calls to OpenGL. Cache rendering. --- .../client/TileEntityIronChestRenderer.java | 96 +++++++++++-------- 1 file changed, 56 insertions(+), 40 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 55ae443..e4a8d41 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -10,9 +10,14 @@ ******************************************************************************/ package cpw.mods.ironchest.client; +import static org.lwjgl.opengl.GL11.GL_COMPILE; import static org.lwjgl.opengl.GL11.glColor4f; import static org.lwjgl.opengl.GL11.glDisable; import static org.lwjgl.opengl.GL11.glEnable; +import static org.lwjgl.opengl.GL11.glEndList; +import static org.lwjgl.opengl.GL11.glGenLists; +import static org.lwjgl.opengl.GL11.glCallList; +import static org.lwjgl.opengl.GL11.glNewList; import static org.lwjgl.opengl.GL11.glPopMatrix; import static org.lwjgl.opengl.GL11.glPushMatrix; import static org.lwjgl.opengl.GL11.glRotatef; @@ -20,6 +25,8 @@ import static org.lwjgl.opengl.GL11.glScalef; import static org.lwjgl.opengl.GL11.glTranslatef; import java.util.Random; +import java.util.Map; +import java.util.HashMap; import net.minecraft.src.Block; import net.minecraft.src.EntityItem; @@ -37,11 +44,12 @@ import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { + private static Map renderList = new HashMap(); private Random random; private RenderBlocks renderBlocks; 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.32F, 0.5F }, }; + { 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.32F, 0.5F }, }; public TileEntityIronChestRenderer() { model = new ModelChest(); @@ -112,7 +120,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glDisable(2896 /* GL_LIGHTING */); glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); glTranslatef((float) x, (float) y, (float) z); - EntityItem customitem=new EntityItem(tileEntityRenderer.worldObj); + EntityItem customitem=new EntityItem(tileEntityRenderer.worldObj); for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { break; @@ -146,48 +154,56 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glTranslatef(minishiftX, minishiftY, minishiftZ); } - if (customRenderer != null) { - customitem.item=item; - bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(item.getItem()); - customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); - } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { - bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); - renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); - } else { - int i = item.getIconIndex(); - if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID]==null) { - bindTextureByName("/gui/items.png"); - ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); - } else { + if (renderList.get(item) == null) { + int render = glGenLists(1); + renderList.put(item, render); + glNewList(render, GL_COMPILE); + if (customRenderer != null) { + customitem.item=item; + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(item.getItem()); + customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); + } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); + renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); + } else { + int i = item.getIconIndex(); + if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID]==null) { + bindTextureByName("/gui/items.png"); + ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); + } else { + bindTextureByName("/terrain.png"); + ForgeHooksClient.overrideTexture(Block.blocksList[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(); } - 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(); + } else { + glCallList(renderList.get(item)); } + glEndList(); glPopMatrix(); } glPopMatrix(); From 6cbc22127118e6e9ec76e10b4959c691c6aa0a75 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 25 Jun 2012 15:42:05 -0400 Subject: [PATCH 063/188] Update for mcp changes --- .../cpw/mods/ironchest/client/IronChestRenderHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java index 94418f3..e8369d0 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -17,11 +17,11 @@ import net.minecraft.src.mod_IronChest; public class IronChestRenderHelper extends ChestItemRenderHelper { @Override - public void func_35609_a(Block block, int i, float f) { + public void renderChest(Block block, int i, float f) { if (block==mod_IronChest.ironChestBlock) { TileEntityRenderer.instance.renderTileEntityAt(block.getTileEntity(i), 0.0D, 0.0D, 0.0D, 0.0F); } else { - super.func_35609_a(block, i, f); + super.renderChest(block, i, f); } } } From 3290802a7d21d4ff4dfd7f658b465b9d5cd17d58 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 26 Jun 2012 16:12:36 -0400 Subject: [PATCH 064/188] Move mod to my own package, update for new forge ore dictionary recipes --- .../client/IronChestRenderHelper.java | 2 +- .../cpw/mods/ironchest/BlockIronChest.java | 1 - .../cpw/mods/ironchest/ChestChangerType.java | 119 +++++++++--------- .../cpw/mods/ironchest/IronChestType.java | 88 ++++++++----- .../cpw/mods/ironchest/PacketHandler.java | 1 - .../mods/ironchest/TileEntityIronChest.java | 1 - .../common/cpw/mods/ironchest/Version.java | 9 +- .../mods/ironchest}/mod_IronChest.java | 57 +++------ 8 files changed, 134 insertions(+), 144 deletions(-) rename IronChests2/common/{net/minecraft/src => cpw/mods/ironchest}/mod_IronChest.java (59%) diff --git a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java index e8369d0..1fbcfb6 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -10,10 +10,10 @@ ******************************************************************************/ package cpw.mods.ironchest.client; +import cpw.mods.ironchest.mod_IronChest; import net.minecraft.src.Block; import net.minecraft.src.ChestItemRenderHelper; import net.minecraft.src.TileEntityRenderer; -import net.minecraft.src.mod_IronChest; public class IronChestRenderHelper extends ChestItemRenderHelper { @Override diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 7909c96..5219ac7 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -24,7 +24,6 @@ import net.minecraft.src.MathHelper; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.ITextureProvider; public class BlockIronChest extends BlockContainer implements ITextureProvider { diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index f38cbf0..0704455 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -1,12 +1,8 @@ /******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation + * Copyright (c) 2012 cpw. All rights reserved. This program and the accompanying materials are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at http://www.gnu.org/licenses/gpl.html + * + * Contributors: cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest; @@ -20,64 +16,63 @@ import static cpw.mods.ironchest.IronChestType.CRYSTAL; import net.minecraft.src.Block; import net.minecraft.src.ItemStack; import net.minecraft.src.forge.Configuration; -import net.minecraft.src.forge.MinecraftForge; + public enum ChestChangerType { - IRONGOLD(IRON,GOLD,"ironGoldUpgrade","Iron to Gold Chest Upgrade","mmm","msm","mmm"), - GOLDDIAMOND(GOLD,DIAMOND,"goldDiamondUpgrade","Gold to Diamond Chest Upgrade","GGG","msm","GGG"), - COPPERSILVER(COPPER,SILVER,"copperSilverUpgrade","Copper to Silver Chest Upgrade","mmm","msm","mmm"), - SILVERGOLD(SILVER,GOLD,"silverGoldUpgrade","Silver to Gold Chest Upgrade","mGm","GsG","mGm"), - COPPERIRON(COPPER,IRON,"copperIronUpgrade","Copper to Iron Chest Upgrade","mGm","GsG","mGm"), - DIAMONDCRYSTAL(DIAMOND,CRYSTAL,"diamondCrystalUpgrade", "Diamond to Crystal Chest Upgrade","GGG","GOG","GGG"); + IRONGOLD(IRON, GOLD, "ironGoldUpgrade", "Iron to Gold Chest Upgrade", "mmm", "msm", "mmm"), + GOLDDIAMOND(GOLD, DIAMOND, "goldDiamondUpgrade", "Gold to Diamond Chest Upgrade", "GGG", "msm", "GGG"), + COPPERSILVER(COPPER, SILVER, "copperSilverUpgrade", "Copper to Silver Chest Upgrade", "mmm", "msm", "mmm"), + SILVERGOLD(SILVER, GOLD, "silverGoldUpgrade", "Silver to Gold Chest Upgrade", "mGm", "GsG", "mGm"), + COPPERIRON(COPPER, IRON, "copperIronUpgrade", "Copper to Iron Chest Upgrade", "mGm", "GsG", "mGm"), + DIAMONDCRYSTAL(DIAMOND, CRYSTAL, "diamondCrystalUpgrade", "Diamond to Crystal Chest Upgrade", "GGG", "GOG", "GGG"); - private IronChestType source; - private IronChestType target; - public String itemName; - public String descriptiveName; - private ItemChestChanger item; - private String[] recipe; + private IronChestType source; + private IronChestType target; + public String itemName; + public String descriptiveName; + private ItemChestChanger item; + private String[] recipe; - private ChestChangerType(IronChestType source, IronChestType target, String itemName, String descriptiveName, String... recipe) { - this.source=source; - this.target=target; - this.itemName=itemName; - this.descriptiveName=descriptiveName; - this.recipe=recipe; - } - - public boolean canUpgrade(IronChestType from) { - return from==this.source; - } - - public int getTarget() { - return this.target.ordinal(); - } + private ChestChangerType(IronChestType source, IronChestType target, String itemName, String descriptiveName, String... recipe) { + this.source = source; + this.target = target; + this.itemName = itemName; + this.descriptiveName = descriptiveName; + this.recipe = recipe; + } - public ItemChestChanger buildItem(Configuration cfg, int id) { - int itemId=Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.CATEGORY_ITEM, id).value); - item=new ItemChestChanger(itemId,this); - return item; - } + public boolean canUpgrade(IronChestType from) { + return from == this.source; + } - public void addRecipe() { - IronChestType.addRecipe(new ItemStack(item), recipe, 'm', target.mat,'s',source.mat,'G',Block.glass,'O',Block.obsidian); - } - - public static void buildItems(Configuration cfg, int defaultId) { - for (ChestChangerType type: values()) { - type.buildItem(cfg, defaultId++); - } - } + public int getTarget() { + return this.target.ordinal(); + } - public static void generateRecipe(IronChestType type) { - for (ChestChangerType item: values()) { - if (item.source==type || item.target==type) { - for (Object[] recipe : MinecraftForge.generateRecipes(item.recipe[0],item.recipe[1],item.recipe[2],'s',item.source.getMatList(),'m',item.target.getMatList(),'G',Block.glass,'O',Block.obsidian)) { - if (recipe[4]==null || recipe[6]==null) { - continue; - } - IronChestType.addRecipe(new ItemStack(item.item), recipe); - } - } - } - } + public ItemChestChanger buildItem(Configuration cfg, int id) { + int itemId = Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.CATEGORY_ITEM, id).value); + item = new ItemChestChanger(itemId, this); + return item; + } + + public void addRecipes() { + for (String sourceMat : source.getMatList()) { + for (String targetMat : target.getMatList()) { + Object targetMaterial = IronChestType.translateOreName(targetMat); + Object sourceMaterial = IronChestType.translateOreName(sourceMat); + IronChestType.addRecipe(new ItemStack(item), recipe, 'm', targetMaterial, 's', sourceMaterial, 'G', Block.glass, 'O', Block.obsidian); + } + } + } + + public static void buildItems(Configuration cfg, int defaultId) { + for (ChestChangerType type : values()) { + type.buildItem(cfg, defaultId++); + } + } + + public static void generateRecipes() { + for (ChestChangerType item : values()) { + item.addRecipes(); + } + } } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index afe894f..c065c6f 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -4,27 +4,29 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest; +import java.util.Arrays; import java.util.ArrayList; import java.util.List; import net.minecraft.src.Block; +import net.minecraft.src.CraftingManager; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; -import net.minecraft.src.ModLoader; +import net.minecraft.src.forge.oredict.ShapedOreRecipe; public enum IronChestType { - IRON(54, 9, true, "Iron Chest", "ironchest.png", 0, Item.ingotIron, TileEntityIronChest.class, "mmmmPmmmm", "mGmG3GmGm"), - GOLD(81, 9, true, "Gold Chest", "goldchest.png", 1, Item.ingotGold, TileEntityGoldChest.class, "mmmmPmmmm", "mGmG4GmGm"), - DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Item.diamond, TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), - COPPER(45, 9, false, "Copper Chest", "copperchest.png", 3, null, TileEntityCopperChest.class, "mmmmCmmmm"), - SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, null, TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), - CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Item.itemsList[Block.glass.blockID], TileEntityCrystalChest.class, "GGGGPGGGG"); + IRON(54, 9, true, "Iron Chest", "ironchest.png", 0, Arrays.asList("ingotIron","ingotRefinedIron"), TileEntityIronChest.class, "mmmmPmmmm", "mGmG3GmGm"), + GOLD(81, 9, true, "Gold Chest", "goldchest.png", 1, Arrays.asList("ingotGold"), TileEntityGoldChest.class, "mmmmPmmmm", "mGmG4GmGm"), + DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Arrays.asList("gemDiamond"), TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), + COPPER(45, 9, false, "Copper Chest", "copperchest.png", 3, Arrays.asList("ingotCopper"), TileEntityCopperChest.class, "mmmmCmmmm"), + SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, Arrays.asList("ingotSilver"), TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), + CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Arrays.asList("blockGlass"), TileEntityCrystalChest.class, "GGGGPGGGG"); int size; private int rowLength; public String friendlyName; @@ -32,11 +34,10 @@ public enum IronChestType { private String modelTexture; private int textureRow; public Class clazz; - Item mat; private String[] recipes; - private ArrayList matList; + private ArrayList matList; - IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, Item mat, + IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, List mats, Class clazz, String... recipes) { this.size = size; this.rowLength = rowLength; @@ -45,12 +46,9 @@ public enum IronChestType { this.modelTexture = "/cpw/mods/ironchest/sprites/" + modelTexture; this.textureRow = textureRow; this.clazz = clazz; - this.mat = mat; this.recipes = recipes; - this.matList = new ArrayList(); - if (mat != null) { - matList.add(new ItemStack(mat)); - } + this.matList = new ArrayList(); + matList.addAll(mats); } public String getModelTexture() { @@ -80,27 +78,53 @@ public enum IronChestType { public static void registerTranslations() { } - public static void generateTieredRecipies(BlockIronChest blockResult) { + public static void generateTieredRecipes(BlockIronChest blockResult) { ItemStack previous = new ItemStack(Block.chest); for (IronChestType typ : values()) { - if (!typ.tieredChest) - continue; - generateRecipesForType(blockResult, previous, typ, typ.mat); - previous = new ItemStack(blockResult, 1, typ.ordinal()); + generateRecipesForType(blockResult, previous, typ); + if (typ.tieredChest) + previous = new ItemStack(blockResult, 1, typ.ordinal()); } } - public static void generateRecipesForType(BlockIronChest blockResult, Object previousTier, IronChestType type, Object mat) { + public static void generateRecipesForType(BlockIronChest blockResult, Object previousTier, IronChestType type) { for (String recipe : type.recipes) { String[] recipeSplit = new String[] { recipe.substring(0, 3), recipe.substring(3, 6), recipe.substring(6, 9) }; - addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mat, 'P', previousTier, 'G', Block.glass, 'C', Block.chest, - '0', new ItemStack(blockResult, 1, 0)/* Iron */, '1', new ItemStack(blockResult, 1, 1)/* GOLD */, '3', new ItemStack(blockResult, - 1, 3)/* Copper */, '4', new ItemStack(blockResult, 1, 4)); + Object mainMaterial = null; + for (String mat : type.matList) { + mainMaterial = translateOreName(mat); + addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, + 'm', mainMaterial, + 'P', previousTier, /* previous tier of chest */ + 'G', Block.glass, + 'C', Block.chest, + '0', new ItemStack(blockResult, 1, 0), /* Iron Chest*/ + '1', new ItemStack(blockResult, 1, 1), /* Gold Chest*/ + '2', new ItemStack(blockResult, 1, 1), /* Diamond Chest*/ + '3', new ItemStack(blockResult, 1, 3), /* Copper Chest */ + '4', new ItemStack(blockResult, 1, 4)/* Silver Chest */ + ); + } } } + public static Object translateOreName(String mat) { + if (mat == "ingotIron" ) { + return Item.ingotIron; + } else if (mat == "ingotGold") { + return Item.ingotGold; + } else if (mat == "gemDiamond") { + return Item.diamond; + } else if (mat == "blockGlass") { + return Block.glass; + } + return mat; + } + + @SuppressWarnings("unchecked") public static void addRecipe(ItemStack is, Object... parts) { - ModLoader.addRecipe(is, parts); + ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts); + CraftingManager.getInstance().getRecipeList().add(oreRecipe); } public int getRowCount() { @@ -111,16 +135,12 @@ public enum IronChestType { return rowLength; } - public void addMat(ItemStack ore) { - this.matList.add(ore); - } - - public List getMatList() { - return matList; - } - public boolean isTransparent() { return this == CRYSTAL; } + public List getMatList() { + return matList; + } + } diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index e9ed0e9..1042d7d 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -22,7 +22,6 @@ import net.minecraft.src.Packet1Login; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.mod_IronChest; import net.minecraft.src.forge.IConnectionHandler; import net.minecraft.src.forge.IPacketHandler; import net.minecraft.src.forge.MessageManager; diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 2b3d7b4..0ef4f7c 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -20,7 +20,6 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NBTTagList; import net.minecraft.src.Packet; import net.minecraft.src.TileEntity; -import net.minecraft.src.mod_IronChest; public class TileEntityIronChest extends TileEntity implements IInventory { private int ticksSinceSync; diff --git a/IronChests2/common/cpw/mods/ironchest/Version.java b/IronChests2/common/cpw/mods/ironchest/Version.java index 0884f5c..48a03c2 100644 --- a/IronChests2/common/cpw/mods/ironchest/Version.java +++ b/IronChests2/common/cpw/mods/ironchest/Version.java @@ -1,7 +1,7 @@ /******************************************************************************* * Copyright (c) 2012 cpw. All rights reserved. This program and the accompanying materials are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/gpl.html - * + * * Contributors: cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest; @@ -16,15 +16,18 @@ import cpw.mods.fml.common.FMLCommonHandler; public class Version { private static String major; private static String minor; + @SuppressWarnings("unused") private static String rev; + @SuppressWarnings("unused") private static String build; + @SuppressWarnings("unused") private static String mcversion; private static boolean loaded; private static void init() { InputStream stream = Version.class.getClassLoader().getResourceAsStream("ironchestversion.properties"); Properties properties = new Properties(); - + if (stream != null) { try { properties.load(stream); @@ -44,6 +47,6 @@ public class Version { if (!loaded) { init(); } - return major+"."+minor+"."+rev; + return major+"."+minor; } } diff --git a/IronChests2/common/net/minecraft/src/mod_IronChest.java b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java similarity index 59% rename from IronChests2/common/net/minecraft/src/mod_IronChest.java rename to IronChests2/common/cpw/mods/ironchest/mod_IronChest.java index ba5d61a..065fe64 100644 --- a/IronChests2/common/net/minecraft/src/mod_IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java @@ -4,27 +4,20 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ -package net.minecraft.src; +package cpw.mods.ironchest; import java.io.File; import java.lang.reflect.Method; +import net.minecraft.src.ModLoader; +import net.minecraft.src.SidedProxy; import net.minecraft.src.forge.Configuration; -import net.minecraft.src.forge.IOreHandler; import net.minecraft.src.forge.MinecraftForge; import net.minecraft.src.forge.NetworkMod; -import cpw.mods.ironchest.BlockIronChest; -import cpw.mods.ironchest.ChestChangerType; -import cpw.mods.ironchest.IProxy; -import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.ItemChestChanger; -import cpw.mods.ironchest.ItemIronChest; -import cpw.mods.ironchest.PacketHandler; -import cpw.mods.ironchest.Version; public class mod_IronChest extends NetworkMod { @@ -41,16 +34,13 @@ public class mod_IronChest extends NetworkMod { @Override public void load() { - MinecraftForge.versionDetect("IronChest", 3, 2, 4); + MinecraftForge.versionDetect("IronChest", 3, 3, 7); instance = this; File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); Configuration cfg = new Configuration(cfgFile); try { cfg.load(); int bId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); - if (bId >= 256) { - throw new RuntimeException(String.format("IronChest detected an invalid block id %s\n", bId)); - } ironChestBlock = new BlockIronChest(bId); ChestChangerType.buildItems(cfg, 19501); } catch (Exception e) { @@ -62,32 +52,10 @@ public class mod_IronChest extends NetworkMod { } ModLoader.registerBlock(ironChestBlock, ItemIronChest.class); - MinecraftForge.registerOreHandler(new IOreHandler() { - @Override - public void registerOre(String oreClass, ItemStack ore) { - if ("ingotCopper".equals(oreClass)) { - IronChestType.COPPER.addMat(ore); - IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore); - ChestChangerType.generateRecipe(IronChestType.COPPER); - } - if ("ingotSilver".equals(oreClass)) { - IronChestType.SILVER.addMat(ore); - IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore); - ChestChangerType.generateRecipe(IronChestType.SILVER); - } - if ("ingotRefinedIron".equals(oreClass)) { - IronChestType.IRON.addMat(ore); - IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore); - ChestChangerType.generateRecipe(IronChestType.IRON); - } - } - }); proxy.registerTranslations(); proxy.registerTileEntities(); - ChestChangerType.generateRecipe(IronChestType.IRON); - ChestChangerType.generateRecipe(IronChestType.GOLD); - ChestChangerType.generateRecipe(IronChestType.DIAMOND); - IronChestType.generateTieredRecipies(ironChestBlock); + IronChestType.generateTieredRecipes(ironChestBlock); + ChestChangerType.generateRecipes(); MinecraftForge.setGuiHandler(this, proxy); MinecraftForge.registerConnectionHandler(new PacketHandler()); @@ -100,8 +68,15 @@ public class mod_IronChest extends NetworkMod { Class equivexmaps = Class.forName("ee.EEMaps"); Method addEMC = equivexmaps.getMethod("addEMC", int.class, int.class, int.class); Method addMeta = equivexmaps.getMethod("addMeta", int.class, int.class); - int[] chestEMCValues = new int[] { 8 * 8 + 256 * 8, 8 * 8 + 256 * 8 + 2048 * 8, 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6, 85 * 8 + 8 * 8, - 85 * 8 + 8 * 8 + 512 * 8, 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 }; + int[] chestEMCValues = new int[] + { + 8 * 8 + 256 * 8, /* iron chest */ + 8 * 8 + 256 * 8 + 2048 * 8, /* gold chest */ + 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6, /* diamond chest */ + 85 * 8 + 8 * 8, /* copper chest */ + 85 * 8 + 8 * 8 + 512 * 8, /* silver chest */ + 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 /* crystal chest */ + }; for (IronChestType icType : IronChestType.values()) { addEMC.invoke(null, ironChestBlock.blockID, icType.ordinal(), chestEMCValues[icType.ordinal()]); } From 811443a1de9d80339a5c9fdab72909e0a2fa2243 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 26 Jun 2012 16:27:50 -0400 Subject: [PATCH 065/188] Set the version into the fml metadata --- IronChests2/common/cpw/mods/ironchest/Version.java | 9 ++++++--- IronChests2/common/cpw/mods/ironchest/mod_IronChest.java | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/Version.java b/IronChests2/common/cpw/mods/ironchest/Version.java index 48a03c2..d6bc9ae 100644 --- a/IronChests2/common/cpw/mods/ironchest/Version.java +++ b/IronChests2/common/cpw/mods/ironchest/Version.java @@ -16,11 +16,8 @@ import cpw.mods.fml.common.FMLCommonHandler; public class Version { private static String major; private static String minor; - @SuppressWarnings("unused") private static String rev; - @SuppressWarnings("unused") private static String build; - @SuppressWarnings("unused") private static String mcversion; private static boolean loaded; @@ -49,4 +46,10 @@ public class Version { } return major+"."+minor; } + public static String fullVersionString() { + if (!loaded) { + init(); + } + return String.format("%s.%s.%s build %s for %s", major,minor,rev, build, mcversion); + } } diff --git a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java index 065fe64..d88f3af 100644 --- a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java @@ -13,6 +13,9 @@ package cpw.mods.ironchest; import java.io.File; import java.lang.reflect.Method; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.modloader.ModLoaderModContainer; + import net.minecraft.src.ModLoader; import net.minecraft.src.SidedProxy; import net.minecraft.src.forge.Configuration; @@ -35,6 +38,10 @@ public class mod_IronChest extends NetworkMod { @Override public void load() { MinecraftForge.versionDetect("IronChest", 3, 3, 7); + ModContainer fml=ModLoaderModContainer.findContainerFor(this); + if (fml.getMetadata()!=null) { + fml.getMetadata().version=Version.fullVersionString(); + } instance = this; File cfgFile = new File(proxy.getMinecraftDir(), "config/IronChest.cfg"); Configuration cfg = new Configuration(cfgFile); From fcc7f72a6b8a6fee4bf779d79169b0392c20ef7e Mon Sep 17 00:00:00 2001 From: Christian Date: Fri, 29 Jun 2012 12:47:09 -0400 Subject: [PATCH 066/188] Support vanilla to ironchest upgrades. Hi florastar and faunastar! --- .../cpw/mods/ironchest/BlockIronChest.java | 13 +++--- .../cpw/mods/ironchest/ChestChangerType.java | 5 ++- .../cpw/mods/ironchest/IronChestType.java | 39 ++++++++++++----- .../cpw/mods/ironchest/ItemChestChanger.java | 40 ++++++++++++++---- .../cpw/mods/ironchest/ItemIronChest.java | 10 ++--- .../mods/ironchest/TileEntityIronChest.java | 8 ++-- .../cpw/mods/ironchest/mod_IronChest.java | 2 +- .../mods/ironchest/sprites/item_textures.png | Bin 1672 -> 1892 bytes 8 files changed, 80 insertions(+), 37 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 5219ac7..6547030 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -4,7 +4,7 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ @@ -18,6 +18,7 @@ import net.minecraft.src.EntityItem; import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IBlockAccess; +import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.Material; import net.minecraft.src.MathHelper; @@ -163,12 +164,12 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k); if (tileentitychest != null) { - dropContent(0, tileentitychest, world); + dropContent(0, tileentitychest, world, tileentitychest.xCoord, tileentitychest.yCoord, tileentitychest.zCoord); } super.onBlockRemoval(world, i, j, k); } - public void dropContent(int newSize, TileEntityIronChest chest, World world) { + public void dropContent(int newSize, IInventory chest, World world, int xCoord, int yCoord, int zCoord) { for (int l = newSize; l < chest.getSizeInventory(); l++) { ItemStack itemstack = chest.getStackInSlot(l); @@ -187,7 +188,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { i1 = itemstack.stackSize; } itemstack.stackSize -= i1; - EntityItem entityitem = new EntityItem(world, (float) chest.xCoord + f, (float) chest.yCoord + (newSize > 0 ? 1 : 0) + f1, (float) chest.zCoord + f2, + EntityItem entityitem = new EntityItem(world, (float) xCoord + f, (float) yCoord + (newSize > 0 ? 1 : 0) + f1, (float) zCoord + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); float f3 = 0.05F; entityitem.motionX = (float) random.nextGaussian() * f3; @@ -206,7 +207,9 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { @Override public void addCreativeItems(ArrayList itemList) { for (IronChestType type : IronChestType.values()) { - itemList.add(new ItemStack(this, 1, type.ordinal())); + if (type.isValidForCreativeMode()) { + itemList.add(new ItemStack(this, 1, type.ordinal())); + } } } } diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index 0704455..cfc24bf 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -12,6 +12,7 @@ import static cpw.mods.ironchest.IronChestType.GOLD; import static cpw.mods.ironchest.IronChestType.IRON; import static cpw.mods.ironchest.IronChestType.SILVER; import static cpw.mods.ironchest.IronChestType.CRYSTAL; +import static cpw.mods.ironchest.IronChestType.WOOD; import net.minecraft.src.Block; import net.minecraft.src.ItemStack; @@ -23,7 +24,9 @@ public enum ChestChangerType { COPPERSILVER(COPPER, SILVER, "copperSilverUpgrade", "Copper to Silver Chest Upgrade", "mmm", "msm", "mmm"), SILVERGOLD(SILVER, GOLD, "silverGoldUpgrade", "Silver to Gold Chest Upgrade", "mGm", "GsG", "mGm"), COPPERIRON(COPPER, IRON, "copperIronUpgrade", "Copper to Iron Chest Upgrade", "mGm", "GsG", "mGm"), - DIAMONDCRYSTAL(DIAMOND, CRYSTAL, "diamondCrystalUpgrade", "Diamond to Crystal Chest Upgrade", "GGG", "GOG", "GGG"); + DIAMONDCRYSTAL(DIAMOND, CRYSTAL, "diamondCrystalUpgrade", "Diamond to Crystal Chest Upgrade", "GGG", "GOG", "GGG"), + WOODIRON(WOOD, IRON, "woodIronUpgrade", "Normal chest to Iron Chest Upgrade", "mmm", "msm", "mmm"), + WOODCOPPER(WOOD, COPPER, "woodCopperUpgrade", "Normal chest to Copper Chest Upgrade", "mmm", "msm", "mmm"); private IronChestType source; private IronChestType target; diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index c065c6f..417fa73 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -26,7 +26,8 @@ public enum IronChestType { DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Arrays.asList("gemDiamond"), TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "copperchest.png", 3, Arrays.asList("ingotCopper"), TileEntityCopperChest.class, "mmmmCmmmm"), SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, Arrays.asList("ingotSilver"), TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), - CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Arrays.asList("blockGlass"), TileEntityCrystalChest.class, "GGGGPGGGG"); + CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Arrays.asList("blockGlass"), TileEntityCrystalChest.class, "GGGGPGGGG"), + WOOD(0,0,false,"","",-1,Arrays.asList("blockPlanks"),null); int size; private int rowLength; public String friendlyName; @@ -61,16 +62,18 @@ public enum IronChestType { public static TileEntityIronChest makeEntity(int metadata) { // Compatibility - int chesttype = metadata; - try { - TileEntityIronChest te = values()[chesttype].clazz.newInstance(); - return te; - } catch (InstantiationException e) { - // unpossible - e.printStackTrace(); - } catch (IllegalAccessException e) { - // unpossible - e.printStackTrace(); + int chesttype = validateMeta(metadata); + if (chesttype == metadata) { + try { + TileEntityIronChest te = values()[chesttype].clazz.newInstance(); + return te; + } catch (InstantiationException e) { + // unpossible + e.printStackTrace(); + } catch (IllegalAccessException e) { + // unpossible + e.printStackTrace(); + } } return null; } @@ -117,6 +120,8 @@ public enum IronChestType { return Item.diamond; } else if (mat == "blockGlass") { return Block.glass; + } else if (mat == "blockPlanks") { + return Block.planks; } return mat; } @@ -143,4 +148,16 @@ public enum IronChestType { return matList; } + public static int validateMeta(int i) { + if (i < values().length && values()[i].size>0) { + return i; + } else { + return 0; + } + } + + public boolean isValidForCreativeMode() { + return validateMeta(ordinal())==ordinal(); + } + } diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index e771bd7..279c6d4 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -4,16 +4,18 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest; +import cpw.mods.fml.common.ReflectionHelper; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntityChest; import net.minecraft.src.World; import net.minecraft.src.forge.ITextureProvider; @@ -32,21 +34,43 @@ public class ItemChestChanger extends Item implements ITextureProvider { @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side) { TileEntity te=world.getBlockTileEntity(X,Y,Z); + TileEntityIronChest newchest; if (te!=null && te instanceof TileEntityIronChest) { TileEntityIronChest ironchest=(TileEntityIronChest)te; - TileEntityIronChest newchest=ironchest.applyUpgradeItem(this); + newchest=ironchest.applyUpgradeItem(this); if (newchest==null) { return false; } - world.setBlockTileEntity(X, Y, Z, newchest); - world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal()); - world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); - world.markBlockNeedsUpdate(X, Y, Z); - stack.stackSize=0; - return true; + } else if (te!=null && te instanceof TileEntityChest) { + TileEntityChest tec = (TileEntityChest) te; + if (tec.numUsingPlayers > 0) { + return false; + } + if (!getType().canUpgrade(IronChestType.WOOD)) { + return false; + } + newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); + int newSize = newchest.chestContents.length; + ItemStack[] chestContents = ReflectionHelper.getPrivateValue(TileEntityChest.class, tec, "chestContents"); + System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); + BlockIronChest block = mod_IronChest.ironChestBlock; + block.dropContent(newSize, tec, world, tec.xCoord, tec.yCoord, tec.zCoord); + newchest.setFacing((byte)tec.getBlockMetadata()); + newchest.sortTopStacks(); + for (int i = 0; i< Math.min(newSize, chestContents.length); i++) + { + chestContents[i]=null; + } + world.setBlock(X, Y, Z, block.blockID); } else { return false; } + world.setBlockTileEntity(X, Y, Z, newchest); + world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal()); + world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); + world.markBlockNeedsUpdate(X, Y, Z); + stack.stackSize=0; + return true; } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java index aaaa28c..e8aad0d 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -4,7 +4,7 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ @@ -25,17 +25,13 @@ public class ItemIronChest extends ItemBlock { @Override public int getMetadata(int i) { - if (iZ@Rd*Qx@aMu{Feoo8 z6F0{PXcZO)(M~f4$sEpP%MwktjE_2uOZbLwF-AVkFJ{qu`E z#Xr>d)zR(As*9-pf6%ey55=UkRoes_cQq#M=h{nKwM`)F_;)t#PL6b3EN#^`fsc!S zqT@8hd-mMf(pGH|XN~9oTW+f2X?W)G$mJrE$i+zMBysrd1F`9wlgEBs{6Bnnb<7?; z9v=Pq^M4(WQ(s(@OH=%tH*bzyZse^=GV@pxu%18Ck8$-1v> zh$I)0OOnyICXqxgauLzC@8G0GRDbALvUTl9@ehyldef1~n?U2P#$@BhjgiacN`-f; zmX?-Dn?Tm_fA4JCJ!SsMn!wh!u5(T6YFDIb4igpcrpGo-n7{e`=1GeM67=7^QBgCyyc&%FWz+Ictk`z{m{)-z}}CtQU5|MAYscbJ5;2@a%pQ#zJM+Kyqc2y+pZs0)5 zC`6JZr7!W=ng6w2uU5pj4n$nPc0C@ycgK|DA2!`H@;Qz zVs}?(486BK2Koz;+*(27cS_=i2i_fAQOn{!|~t;-!yNj=yi@_tszN|HR|* z2oQzq*KdA#54;^q);=1uBchluj66Y4@%Q6dr*7`Q+4`M$V$~}VcSRHmg;ay-@3~Ui zKTud1>xV8x+?PJSr{`*E|H7#=QS+%~5xMl^A2rzxrjJ>wmnuw#9+QK@>ldpbTn7a@*S54 zBkoUEKxa;$DnGGsWn8|}ow@;hboz9~xhq$$MAW7m|AhHdj{nU|m9y;0{+kWqrBgle zQvKoyk?n=*b?U0vAD?853pHo$Q&7zvJ zu4`D>9jay%La88y15N1gWZ(&a%~0$@7zDem{;A+C>srH@3MvN z=*D296vnWluqwD2yfAJobH=JQ5^8iw)FdY7hqjkl%bPe_ftVE}eMVb~4ruSP! zO=r8)_ljwHzfGX6y)FId#z*P>Hi3HcZ_OP|KNuKH@3#rGbPcAO04uimOCw*OetoUx zB5FF@o&I4wEx&4Q0&VSWX-{uY`BiIw6R0=;*4)wbeBX`otJWs)aq-W04ofLntazHg z@oXeXL>fs)8~`Ze}De3i*fmjyOJ!$f8fA@NRp|K zrs-7eoIH6l4!v?H$x{6FU$~fmIliN#BO)T2o14q4aA#*{=J-i;R<4##-DFtvT2p2o9R&fouRj_2wVyJBQC;F+C{NSfIS2xBz4ckpUmemfR ze}$oaKuP|WXgZO@q03k|K1lKt-98eFU4>B#>_HS#v?#sbaZC&o_aSn z?|wQ~MZ|c%F!cnz$oJQuxIA@8i7cr<(b z(9oUo@%77BW8){cMkLwupL6{6*~jm?J2CVB-yDmlH$7;Eu`(Kez=f`VR=kl!#Iz{~tEL#Cxy>hwo!iMe9f9rPU2JqpPD^=HS-MSUgkS+gt z$IqDm+c&FM`b%Ro4dKrf-bwosrkB?V8L(gS#8}lM|)71}T-6Hh!t|_v=4aYy+5o+;^>f{Lb+|#xK5ixTYVk zoG!gsKK|36yW*9fL{0IH{eLST5BFV(=ilt8DgNK-FU!XRw+G_K-#t=O{NBF5)HQzd z!)waNKkfcc+<30hkAGMh4PbLaL&f<+8#dH*^Q~JdZ@+PUZOLuku(sknS+}~T_>B*5 ztT@k4RmJ)Gb?eMHmS+RV{pQzo-RPay|6W&o-}y6j#b5gHgC!mRxz2vG k36o(4>l*+70I13T0C0`F5sn@Px&QzG07*qoM6N<$f>%%B{{R30 From 00d070116662d16984ea35a57466bf67a8a14875 Mon Sep 17 00:00:00 2001 From: Christian Date: Fri, 29 Jun 2012 13:11:20 -0400 Subject: [PATCH 067/188] Fix reflection --- IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 279c6d4..73ff892 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ReflectionHelper; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; @@ -51,7 +52,7 @@ public class ItemChestChanger extends Item implements ITextureProvider { } newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); int newSize = newchest.chestContents.length; - ItemStack[] chestContents = ReflectionHelper.getPrivateValue(TileEntityChest.class, tec, "chestContents"); + ItemStack[] chestContents = ReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); BlockIronChest block = mod_IronChest.ironChestBlock; block.dropContent(newSize, tec, world, tec.xCoord, tec.yCoord, tec.zCoord); From af36bb2bc0a5606a92d88725511c08630e1d3fe1 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 7 Jul 2012 12:21:22 -0400 Subject: [PATCH 068/188] Fix recipe problem, set up bukkit autobuilding. Fails at the minute for a bukkit mcp update --- IronChests2/.gitignore | 2 + IronChests2/build.xml | 71 +++++++------------ .../cpw/mods/ironchest/ChestChangerType.java | 2 +- .../cpw/mods/ironchest/IronChestType.java | 2 +- .../cpw/mods/ironchest/ItemChestChanger.java | 1 - .../cpw/mods/ironchest/mod_IronChest.java | 6 +- IronChests2/getversion.py | 18 ++++- 7 files changed, 49 insertions(+), 53 deletions(-) diff --git a/IronChests2/.gitignore b/IronChests2/.gitignore index a5b72b5..2dbd679 100644 --- a/IronChests2/.gitignore +++ b/IronChests2/.gitignore @@ -4,3 +4,5 @@ bin/ /target /build.properties /build +/ironchestversion.properties +/tmpbukkit diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 0182a03..8bb149c 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -1,11 +1,11 @@ - Iron Chest @@ -29,9 +29,10 @@ + - + @@ -51,10 +52,10 @@ - + - + @@ -65,14 +66,9 @@ - + - - - - - @@ -88,7 +84,7 @@ - + @@ -172,7 +168,7 @@ - + @@ -192,44 +188,27 @@ - - + + + - - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + + + + - - diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index cfc24bf..a92c5f8 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -52,7 +52,7 @@ public enum ChestChangerType { } public ItemChestChanger buildItem(Configuration cfg, int id) { - int itemId = Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.CATEGORY_ITEM, id).value); + int itemId = cfg.getOrCreateIntProperty(itemName, Configuration.CATEGORY_ITEM, id).getInt(id); item = new ItemChestChanger(itemId, this); return item; } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 417fa73..347b73e 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -25,7 +25,7 @@ public enum IronChestType { GOLD(81, 9, true, "Gold Chest", "goldchest.png", 1, Arrays.asList("ingotGold"), TileEntityGoldChest.class, "mmmmPmmmm", "mGmG4GmGm"), DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Arrays.asList("gemDiamond"), TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), COPPER(45, 9, false, "Copper Chest", "copperchest.png", 3, Arrays.asList("ingotCopper"), TileEntityCopperChest.class, "mmmmCmmmm"), - SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, Arrays.asList("ingotSilver"), TileEntitySilverChest.class, "mmmm0mmmm", "mGmG3GmGm"), + 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"), WOOD(0,0,false,"","",-1,Arrays.asList("blockPlanks"),null); int size; diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 73ff892..0cb7e4a 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -10,7 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ReflectionHelper; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; diff --git a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java index 38557e9..6055d11 100644 --- a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java @@ -37,7 +37,7 @@ public class mod_IronChest extends NetworkMod { @Override public void load() { - MinecraftForge.versionDetect("IronChest", 3, 3, 7); + MinecraftForge.versionDetect("IronChest", 3, 3, 8); ModContainer fml=ModLoaderModContainer.findContainerFor(this); if (fml.getMetadata()!=null) { fml.getMetadata().version=Version.fullVersionString(); @@ -47,9 +47,9 @@ public class mod_IronChest extends NetworkMod { Configuration cfg = new Configuration(cfgFile); try { cfg.load(); - int bId = cfg.getOrCreateBlockIdProperty("ironChests", 502).getInt(502); + int bId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); ironChestBlock = new BlockIronChest(bId); - ChestChangerType.buildItems(cfg, 19501); + ChestChangerType.buildItems(cfg, 29501); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); e.printStackTrace(System.err); diff --git a/IronChests2/getversion.py b/IronChests2/getversion.py index 5b10b65..664fdee 100644 --- a/IronChests2/getversion.py +++ b/IronChests2/getversion.py @@ -5,6 +5,15 @@ import fnmatch import re import subprocess, shlex +mcp_home = sys.argv[1] +mcp_dir = os.path.abspath(mcp_home) + +print(mcp_dir) +sys.path.append(mcp_dir) + +from runtime.commands import Commands +Commands._version_config = os.path.join(mcp_dir,Commands._version_config) + def cmdsplit(args): if os.sep == '\\': args = args.replace('\\', '\\\\') @@ -35,12 +44,19 @@ def main(): print("Git not found") vers="v1.0-0-deadbeef" (major,minor,rev,githash)=re.match("v(\d+).(\d+)-(\d+)-(.*)",vers).groups() + + (mcpversion,mcclientversion,mcserverversion) = re.match("[.\w]+ \(data: ([.\w]+), client: ([.\w.]+), server: ([.\w.]+)\)",Commands.fullversion()).groups() + with open("ironchestversion.properties","w") as f: f.write("%s=%s\n" %("ironchest.build.major.number",major)) f.write("%s=%s\n" %("ironchest.build.minor.number",minor)) f.write("%s=%s\n" %("ironchest.build.revision.number",rev)) f.write("%s=%s\n" %("ironchest.build.githash",githash)) - f.write("%s=%s\n" %("ironchest.build.mcversion","1.2.5")) + f.write("%s=%s\n" %("ironchest.build.mcpversion",mcpversion)) + f.write("%s=%s\n" %("ironchest.build.mcclientversion",mcclientversion)) + f.write("%s=%s\n" %("ironchest.build.mcserverversion",mcserverversion)) + + print("Version information: IronChest %s.%s.%s using MCP %s for c:%s, s:%s" % (major, minor, rev, mcpversion, mcclientversion, mcserverversion)) if __name__ == '__main__': main() From 682d65b829e421f131ad5f425c355ce034b457c5 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 7 Jul 2012 12:22:18 -0400 Subject: [PATCH 069/188] Disable bukkit build until mcp fix happens --- IronChests2/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 8bb149c..8c51b2e 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -168,7 +168,7 @@ - + From 4012b39b16f5d7a21f414649a5350be059035723 Mon Sep 17 00:00:00 2001 From: Brian Wiegand Date: Sat, 7 Jul 2012 23:24:48 -0700 Subject: [PATCH 070/188] Update to fix issues with lag, MUCH faster now. --- .../client/TileEntityIronChestRenderer.java | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index e4a8d41..9bca0e9 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -6,11 +6,11 @@ * http://www.gnu.org/licenses/gpl.html * * Contributors: - * cpw - initial API and implementation + * cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest.client; -import static org.lwjgl.opengl.GL11.GL_COMPILE; +import static org.lwjgl.opengl.GL11.GL_COMPILE_AND_EXECUTE; import static org.lwjgl.opengl.GL11.glColor4f; import static org.lwjgl.opengl.GL11.glDisable; import static org.lwjgl.opengl.GL11.glEnable; @@ -45,11 +45,14 @@ import cpw.mods.ironchest.TileEntityIronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private static Map renderList = new HashMap(); + private Random random; + private RenderBlocks renderBlocks; - 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.32F, 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.32F, 0.5F }, }; + + public static boolean CACHE_RENDER = true; public TileEntityIronChestRenderer() { model = new ModelChest(); @@ -58,19 +61,18 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { - if (tile==null) { + if (tile == null) { return; } int facing = 3; - IronChestType type=tile.getType(); + IronChestType type = tile.getType(); if (tile != null && tile.worldObj != null) { facing = tile.getFacing(); - type=tile.getType(); - int typ=tile.worldObj.getBlockMetadata(tile.xCoord,tile.yCoord,tile.zCoord); - type=IronChestType.values()[typ]; + type = tile.getType(); + int typ = tile.worldObj.getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); + type = IronChestType.values()[typ]; } bindTextureByName(type.getModelTexture()); - glPushMatrix(); glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -101,7 +103,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if (type.isTransparent()) { random.setSeed(254L); float shiftX; @@ -120,7 +121,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glDisable(2896 /* GL_LIGHTING */); glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); glTranslatef((float) x, (float) y, (float) z); - EntityItem customitem=new EntityItem(tileEntityRenderer.worldObj); + EntityItem customitem = new EntityItem(tileEntityRenderer.worldObj); for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { break; @@ -133,9 +134,9 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shiftY = shifts[shift][1]; shiftZ = shifts[shift][2]; shift++; - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item,IItemRenderer.ItemRenderType.ENTITY); + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, IItemRenderer.ItemRenderType.ENTITY); float localScale = blockScale; - if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null) { + if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null) { int j = Block.blocksList[item.itemID].getRenderType(); if (j == 1 || j == 19 || j == 12 || j == 2) { localScale = 2 * blockScale; @@ -153,23 +154,24 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; glTranslatef(minishiftX, minishiftY, minishiftZ); } - - if (renderList.get(item) == null) { - int render = glGenLists(1); - renderList.put(item, render); - glNewList(render, GL_COMPILE); + if (renderList.get(item) == null || !CACHE_RENDER) { // Added support for using only old system. + if (CACHE_RENDER) { + int render = glGenLists(1); + renderList.put(item, render); + glNewList(render, GL_COMPILE_AND_EXECUTE); + } if (customRenderer != null) { - customitem.item=item; + customitem.item = item; bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(item.getItem()); customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); - } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID]!=null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); } else { int i = item.getIconIndex(); - if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID]==null) { + if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID] == null) { bindTextureByName("/gui/items.png"); ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); } else { @@ -200,10 +202,13 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { tessellator.addVertexWithUV(0.0F - f14, 1.0F - f15, 0.0D, f5, f10); tessellator.draw(); } + if (CACHE_RENDER) + glEndList(); } else { - glCallList(renderList.get(item)); + Integer integer = renderList.get(item); + if (integer != null) // Added null check for auto-unboxing JUST in case. + glCallList(integer.intValue()); } - glEndList(); glPopMatrix(); } glPopMatrix(); From 500a7aa21233f887092202f195949f76733ad474 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 8 Jul 2012 14:28:25 -0400 Subject: [PATCH 071/188] Tweak the caching patch to remember items properly, so it doesn't regenerate for every item stack that comes in --- .../client/TileEntityIronChestRenderer.java | 39 ++++++++++++------- .../ironchest/MappableItemStackWrapper.java | 26 +++++++++++++ .../cpw/mods/ironchest/mod_IronChest.java | 5 ++- 3 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 9bca0e9..7164ab6 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -4,7 +4,7 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ @@ -41,18 +41,28 @@ import net.minecraft.src.forge.ForgeHooksClient; import net.minecraft.src.forge.IItemRenderer; import net.minecraft.src.forge.MinecraftForgeClient; import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; +import cpw.mods.ironchest.mod_IronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { - private static Map renderList = new HashMap(); + private static Map renderList = new HashMap(); private Random random; private RenderBlocks renderBlocks; - 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.32F, 0.5F }, }; - - public static boolean CACHE_RENDER = true; + 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.32F, 0.5F }, + }; public TileEntityIronChestRenderer() { model = new ModelChest(); @@ -134,7 +144,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shiftY = shifts[shift][1]; shiftZ = shifts[shift][2]; shift++; - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, IItemRenderer.ItemRenderType.ENTITY); float localScale = blockScale; if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null) { int j = Block.blocksList[item.itemID].getRenderType(); @@ -154,12 +163,14 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { float minishiftZ = ((random.nextFloat() * 2.0F - 1.0F) * spread) / localScale; glTranslatef(minishiftX, minishiftY, minishiftZ); } - if (renderList.get(item) == null || !CACHE_RENDER) { // Added support for using only old system. - if (CACHE_RENDER) { + MappableItemStackWrapper mis = new MappableItemStackWrapper(item); + if (!mod_IronChest.CACHE_RENDER || !renderList.containsKey(mis)) { // Added support for using only old system. + if (mod_IronChest.CACHE_RENDER) { int render = glGenLists(1); - renderList.put(item, render); + renderList.put(mis, render); glNewList(render, GL_COMPILE_AND_EXECUTE); } + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, IItemRenderer.ItemRenderType.ENTITY); if (customRenderer != null) { customitem.item = item; bindTextureByName("/terrain.png"); @@ -202,12 +213,14 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { tessellator.addVertexWithUV(0.0F - f14, 1.0F - f15, 0.0D, f5, f10); tessellator.draw(); } - if (CACHE_RENDER) - glEndList(); + if (mod_IronChest.CACHE_RENDER) { + glEndList(); + } } else { - Integer integer = renderList.get(item); - if (integer != null) // Added null check for auto-unboxing JUST in case. + Integer integer = renderList.get(mis); + if (integer != null) { // Added null check for auto-unboxing JUST in case. glCallList(integer.intValue()); + } } glPopMatrix(); } diff --git a/IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java b/IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java new file mode 100644 index 0000000..7dbd810 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java @@ -0,0 +1,26 @@ +package cpw.mods.ironchest; + +import net.minecraft.src.ItemStack; + +public class MappableItemStackWrapper { + private ItemStack wrap; + + public MappableItemStackWrapper(ItemStack toWrap) { + wrap=toWrap; + } + @Override + public boolean equals(Object obj) { + if (!(obj instanceof MappableItemStackWrapper)) return false; + MappableItemStackWrapper isw = (MappableItemStackWrapper) obj; + if (wrap.getHasSubtypes()) { + return isw.wrap.isItemEqual(wrap); + } else { + return isw.wrap.itemID == wrap.itemID; + } + } + + @Override + public int hashCode() { + return wrap.itemID; + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java index 6055d11..f46ed78 100644 --- a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java @@ -25,10 +25,10 @@ import net.minecraft.src.forge.NetworkMod; public class mod_IronChest extends NetworkMod { public static BlockIronChest ironChestBlock; - public static ItemChestChanger itemChestChanger; @SidedProxy(clientSide="cpw.mods.ironchest.client.ClientProxy", serverSide="cpw.mods.ironchest.server.ServerProxy") public static IProxy proxy; public static mod_IronChest instance; + public static boolean CACHE_RENDER = true; @Override public String getVersion() { @@ -50,6 +50,7 @@ public class mod_IronChest extends NetworkMod { int bId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); ironChestBlock = new BlockIronChest(bId); ChestChangerType.buildItems(cfg, 29501); + CACHE_RENDER = cfg.getOrCreateBooleanProperty("cacheRenderingInformation", Configuration.CATEGORY_GENERAL, true).getBoolean(true); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); e.printStackTrace(System.err); @@ -85,6 +86,8 @@ public class mod_IronChest extends NetworkMod { 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 /* crystal chest */ }; for (IronChestType icType : IronChestType.values()) { + if (icType.ordinal()>=chestEMCValues.length) + break; addEMC.invoke(null, ironChestBlock.blockID, icType.ordinal(), chestEMCValues[icType.ordinal()]); } addMeta.invoke(null, ironChestBlock.blockID, IronChestType.values().length - 1); From 33cb3c31f22f07e619b129d8dbb1ec8484d56335 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 10 Jul 2012 15:02:09 -0400 Subject: [PATCH 072/188] Fix up a possible problem when upgrading vanilla chests (hopefully) --- .../common/cpw/mods/ironchest/ItemChestChanger.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 0cb7e4a..a5f3919 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -49,6 +49,8 @@ public class ItemChestChanger extends Item implements ITextureProvider { if (!getType().canUpgrade(IronChestType.WOOD)) { return false; } + org.lwjgl.input.Mouse.setGrabbed(false); + // Force old TE out of the world so that adjacent chests can update newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); int newSize = newchest.chestContents.length; ItemStack[] chestContents = ReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); @@ -61,6 +63,13 @@ public class ItemChestChanger extends Item implements ITextureProvider { { chestContents[i]=null; } + // Clear the old block out + world.setBlock(X, Y, Z, 0); + // Force the Chest TE to reset it's knowledge of neighbouring blocks + tec.updateContainingBlockInfo(); + // Force the Chest TE to update any neighbours so they update next tick + tec.checkForAdjacentChests(); + // And put in our block instead world.setBlock(X, Y, Z, block.blockID); } else { return false; From d93b93335062eda96e60b8a8d550283d17d382fc Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 10 Jul 2012 17:11:10 -0400 Subject: [PATCH 073/188] Remove debugging code --- IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java | 1 - 1 file changed, 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index a5f3919..9cce995 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -49,7 +49,6 @@ public class ItemChestChanger extends Item implements ITextureProvider { if (!getType().canUpgrade(IronChestType.WOOD)) { return false; } - org.lwjgl.input.Mouse.setGrabbed(false); // Force old TE out of the world so that adjacent chests can update newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); int newSize = newchest.chestContents.length; From 5b9778de030c7ffa9b1c65cdd94a91eced4a1bc7 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 11 Jul 2012 23:38:59 -0400 Subject: [PATCH 074/188] Change the bounding box. Thanks for the suggestion guys! --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 6547030..9ecdcc8 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -39,6 +39,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { if (id >= 256) { disableStats(); } + setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); random = new Random(); } From b9c4ecbbecce5efe392c280a3a6875c40498e1aa Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 12 Jul 2012 01:54:11 -0400 Subject: [PATCH 075/188] Cats sitting on chests, initial commit --- .../mods/ironchest/IronChestAIOcelotSit.java | 138 ++++++++++++++++++ .../ironchest/OcelotsSitOnChestsHandler.java | 28 ++++ .../cpw/mods/ironchest/mod_IronChest.java | 4 + 3 files changed, 170 insertions(+) create mode 100644 IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java create mode 100644 IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java b/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java new file mode 100644 index 0000000..167f894 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java @@ -0,0 +1,138 @@ +package cpw.mods.ironchest; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import net.minecraft.src.Block; +import net.minecraft.src.BlockBed; +import net.minecraft.src.EntityAIBase; +import net.minecraft.src.EntityAIOcelotSit; +import net.minecraft.src.EntityOcelot; +import net.minecraft.src.TileEntityChest; +import net.minecraft.src.World; + +public class IronChestAIOcelotSit extends EntityAIBase { + private EntityOcelot ocelot; + private final float speed; + private int ticksRun = 0; + private int tryTicks = 0; + private int maxTicks = 0; + private int targetX = 0; + private int targetY = 0; + private int targetZ = 0; + private EntityAIOcelotSit sitAI; + private Method isTargetBlockMethod; + private boolean grabbedMethod; + + public IronChestAIOcelotSit(EntityOcelot par1EntityOcelot, float par2, EntityAIOcelotSit sitAI) { + this.ocelot = par1EntityOcelot; + this.speed = par2; + this.sitAI = sitAI; + this.setMutexBits(5); + if (!grabbedMethod) { + try { + isTargetBlockMethod = EntityAIOcelotSit.class.getDeclaredMethod("a", World.class, int.class, int.class, int.class); + } catch (Exception e) { + // Can't find it + try { + isTargetBlockMethod = EntityAIOcelotSit.class.getDeclaredMethod("func_50078_a", World.class, int.class, int.class, int.class); + } catch (Exception e1) { + } + } + isTargetBlockMethod.setAccessible(true); + grabbedMethod = true; + } + } + + public boolean shouldExecute() + { + return ocelot.isTamed() && !ocelot.isSitting() && ocelot.getRNG().nextDouble() <= 0.0065D && thereIsChestNearby(); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean continueExecuting() + { + return this.ticksRun <= this.maxTicks && this.tryTicks <= 60 && isBlockAChestBlock(ocelot.worldObj, this.targetX, this.targetY, this.targetZ); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.ocelot.getNavigator().tryMoveToXYZ((double) ((float) this.targetX) + 0.5D, (double) (this.targetY + 1), (double) ((float) this.targetZ) + 0.5D, + this.speed); + this.ticksRun = 0; + this.tryTicks = 0; + this.maxTicks = this.ocelot.getRNG().nextInt(this.ocelot.getRNG().nextInt(1200) + 1200) + 1200; + this.ocelot.func_50008_ai().setIsSitting(false); + } + + /** + * Resets the task + */ + public void resetTask() + { + this.ocelot.setSitting(false); + } + + /** + * Updates the task + */ + public void updateTask() + { + ++this.ticksRun; + this.ocelot.func_50008_ai().setIsSitting(false); + + if (this.ocelot.getDistanceSq((double) this.targetX, (double) (this.targetY + 1), (double) this.targetZ) > 1.0D) + { + this.ocelot.setSitting(false); + this.ocelot.getNavigator().tryMoveToXYZ((double) ((float) this.targetX) + 0.5D, (double) (this.targetY + 1), (double) ((float) this.targetZ) + 0.5D, + this.speed); + ++this.tryTicks; + } + else if (!this.ocelot.isSitting()) + { + this.ocelot.setSitting(true); + } + else + { + --this.tryTicks; + } + } + + private boolean thereIsChestNearby() { + int searchY = (int) this.ocelot.posY; + double closestChestDistance = Integer.MAX_VALUE; + + for (int searchX = (int) this.ocelot.posX - 8; searchX < this.ocelot.posX + 8; searchX++) { + for (int searchZ = (int) this.ocelot.posZ - 8; searchZ < this.ocelot.posZ + 8; searchZ++) { + if (this.isBlockAChestBlock(this.ocelot.worldObj, searchX, searchY, searchZ) && this.ocelot.worldObj.isAirBlock(searchX, searchY + 1, searchZ)) { + double chestDistance = this.ocelot.getDistanceSq((double) searchX, (double) searchY, (double) searchZ); + + if (chestDistance < closestChestDistance) { + this.targetX = searchX; + this.targetY = searchY; + this.targetZ = searchZ; + closestChestDistance = chestDistance; + } + } + } + } + + return closestChestDistance < Integer.MAX_VALUE; + } + + private boolean isBlockAChestBlock(World world, int x, int y, int z) { + if (world.getBlockId(x, y, z)==mod_IronChest.ironChestBlock.blockID) { + return true; + } + try { + return (Boolean) isTargetBlockMethod.invoke(sitAI, world, x, y, z); + } catch (Exception e) { + } + return false; + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java new file mode 100644 index 0000000..99cfd07 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -0,0 +1,28 @@ +package cpw.mods.ironchest; + +import java.util.List; + +import cpw.mods.fml.common.ReflectionHelper; +import net.minecraft.src.EntityAIBase; +import net.minecraft.src.EntityAIOcelotSit; +import net.minecraft.src.EntityAITasks; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityOcelot; +import net.minecraft.src.World; +import net.minecraft.src.forge.IEntityLivingHandler; +import net.minecraft.src.forge.adaptors.EntityLivingHandlerAdaptor; + +public class OcelotsSitOnChestsHandler extends EntityLivingHandlerAdaptor { + private static EntityAIOcelotSit aiTask = new EntityAIOcelotSit(null, 0); + @Override + public boolean onEntityLivingUpdate(EntityLiving entity) { + if (entity.ticksExisted<2 && entity instanceof EntityOcelot) { + EntityOcelot ocelot = (EntityOcelot) entity; + EntityAITasks ocelotTasks = ReflectionHelper.getPrivateValue(EntityLiving.class, ocelot, "tasks"); + List taskList = ReflectionHelper.getPrivateValue(EntityAITasks.class, ocelotTasks, "tasksToDo"); + taskList.remove(5); + ocelotTasks.addTask(6, new IronChestAIOcelotSit(ocelot, 0.4F, aiTask)); + } + return false; + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java index f46ed78..fefe4f7 100644 --- a/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/mod_IronChest.java @@ -21,6 +21,7 @@ import net.minecraft.src.SidedProxy; import net.minecraft.src.forge.Configuration; import net.minecraft.src.forge.MinecraftForge; import net.minecraft.src.forge.NetworkMod; +import net.minecraft.src.forge.adaptors.EntityLivingHandlerAdaptor; public class mod_IronChest extends NetworkMod { @@ -29,6 +30,7 @@ public class mod_IronChest extends NetworkMod { public static IProxy proxy; public static mod_IronChest instance; public static boolean CACHE_RENDER = true; + public static boolean OCELOTS_SITONCHESTS = true; @Override public String getVersion() { @@ -51,6 +53,7 @@ public class mod_IronChest extends NetworkMod { ironChestBlock = new BlockIronChest(bId); ChestChangerType.buildItems(cfg, 29501); CACHE_RENDER = cfg.getOrCreateBooleanProperty("cacheRenderingInformation", Configuration.CATEGORY_GENERAL, true).getBoolean(true); + OCELOTS_SITONCHESTS = cfg.getOrCreateBooleanProperty("ocelotsSitOnChests", Configuration.CATEGORY_GENERAL, true).getBoolean(true); } catch (Exception e) { ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully"); e.printStackTrace(System.err); @@ -68,6 +71,7 @@ public class mod_IronChest extends NetworkMod { MinecraftForge.setGuiHandler(this, proxy); MinecraftForge.registerConnectionHandler(new PacketHandler()); proxy.registerRenderInformation(); + MinecraftForge.registerEntityLivingHandler(new OcelotsSitOnChestsHandler()); } @Override From 49ebd84b8f9ca90c557b3a179bf1be4ba638fc53 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 11 Aug 2012 01:46:49 -0400 Subject: [PATCH 076/188] Update to forge 4.0 --- .../mods/ironchest/client/ClientProxy.java | 88 ++++--------- .../client/IronChestRenderHelper.java | 8 +- .../client/TileEntityIronChestRenderer.java | 22 ++-- .../cpw/mods/ironchest/BlockIronChest.java | 21 +-- .../cpw/mods/ironchest/ChestChangerType.java | 2 +- .../cpw/mods/ironchest/CommonProxy.java | 61 +++++++++ .../ironchest/ContainerIronChestBase.java | 12 +- .../common/cpw/mods/ironchest/IProxy.java | 35 ----- .../common/cpw/mods/ironchest/IronChest.java | 103 +++++++++++++++ .../mods/ironchest/IronChestAIOcelotSit.java | 2 +- .../cpw/mods/ironchest/IronChestType.java | 2 +- .../cpw/mods/ironchest/ItemChestChanger.java | 9 +- .../cpw/mods/ironchest/ItemIronChest.java | 4 - .../cpw/mods/ironchest/PacketHandler.java | 120 ++++++++---------- .../mods/ironchest/TileEntityIronChest.java | 10 +- .../cpw/mods/ironchest/mod_IronChest.java | 113 ----------------- .../mods/ironchest/server/ServerProxy.java | 13 +- 17 files changed, 284 insertions(+), 341 deletions(-) create mode 100644 IronChests2/common/cpw/mods/ironchest/CommonProxy.java delete mode 100644 IronChests2/common/cpw/mods/ironchest/IProxy.java create mode 100644 IronChests2/common/cpw/mods/ironchest/IronChest.java delete mode 100644 IronChests2/common/cpw/mods/ironchest/mod_IronChest.java diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index ee289b0..205156c 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -4,81 +4,47 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest.client; -import java.io.File; - -import net.minecraft.client.Minecraft; import net.minecraft.src.ChestItemRenderHelper; -import net.minecraft.src.EntityItem; import net.minecraft.src.EntityPlayer; import net.minecraft.src.ModLoader; -import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.forge.MinecraftForgeClient; -import cpw.mods.ironchest.ChestChangerType; -import cpw.mods.ironchest.IProxy; +import net.minecraftforge.client.MinecraftForgeClient; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.ironchest.ContainerIronChestBase; +import cpw.mods.ironchest.CommonProxy; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -public class ClientProxy implements IProxy { - @Override - public void registerRenderInformation() { - ChestItemRenderHelper.instance = new IronChestRenderHelper(); - MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/block_textures.png"); - MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/item_textures.png"); - } +public class ClientProxy extends CommonProxy { + @Override + public void registerRenderInformation() { + ChestItemRenderHelper.instance = new IronChestRenderHelper(); + MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/block_textures.png"); + MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/item_textures.png"); + } - @Override - public void registerTileEntities() { - for (IronChestType typ : IronChestType.values()) { - ModLoader.registerTileEntity(typ.clazz, typ.name(), new TileEntityIronChestRenderer()); - } - } + @Override + public boolean isRemote() { + return ModLoader.getMinecraftInstance().theWorld.isRemote; + } - @Override - public void registerTranslations() { - for (IronChestType typ : IronChestType.values()) { - ModLoader.addLocalization(typ.name() + ".name", typ.friendlyName); - } - for (ChestChangerType typ : ChestChangerType.values()) { - ModLoader.addLocalization("item." + typ.itemName + ".name", typ.descriptiveName); - } - } + @Override + public void registerTileEntitySpecialRenderer(IronChestType typ) { + ClientRegistry.bindTileEntitySpecialRenderer(typ.clazz, new TileEntityIronChestRenderer()); + } - @Override - public File getMinecraftDir() { - return Minecraft.getMinecraftDir(); - } - - @Override - public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { - entityitem.item.setTagCompound(data); - - } - - @Override - public boolean isRemote() { - return ModLoader.getMinecraftInstance().theWorld.isRemote; - } - - @Override - public World getCurrentWorld() { - return ModLoader.getMinecraftInstance().theWorld; - } - - @Override - public Object getGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - TileEntity te = world.getBlockTileEntity(x, y, z); - if (te != null && te instanceof TileEntityIronChest) { - return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); - } else { - return null; - } - } + @Override + public World getClientWorld() { + return FMLClientHandler.instance().getClient().theWorld; + } } diff --git a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java index 1fbcfb6..fcadba1 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -4,13 +4,13 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ package cpw.mods.ironchest.client; -import cpw.mods.ironchest.mod_IronChest; +import cpw.mods.ironchest.IronChest; import net.minecraft.src.Block; import net.minecraft.src.ChestItemRenderHelper; import net.minecraft.src.TileEntityRenderer; @@ -18,8 +18,8 @@ import net.minecraft.src.TileEntityRenderer; public class IronChestRenderHelper extends ChestItemRenderHelper { @Override public void renderChest(Block block, int i, float f) { - if (block==mod_IronChest.ironChestBlock) { - TileEntityRenderer.instance.renderTileEntityAt(block.getTileEntity(i), 0.0D, 0.0D, 0.0D, 0.0F); + if (block==IronChest.ironChestBlock) { + TileEntityRenderer.instance.renderTileEntityAt(block.createTileEntity(null,i), 0.0D, 0.0D, 0.0D, 0.0F); } else { super.renderChest(block, i, f); } diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 7164ab6..fcec8e9 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -37,13 +37,13 @@ import net.minecraft.src.RenderBlocks; 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.IItemRenderer; -import net.minecraft.src.forge.MinecraftForgeClient; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; -import cpw.mods.ironchest.mod_IronChest; +import cpw.mods.ironchest.IronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private static Map renderList = new HashMap(); @@ -76,10 +76,10 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } int facing = 3; IronChestType type = tile.getType(); - if (tile != null && tile.worldObj != null) { + if (tile != null && tile.func_70314_l() != null) { facing = tile.getFacing(); type = tile.getType(); - int typ = tile.worldObj.getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); + int typ = tile.func_70314_l().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); type = IronChestType.values()[typ]; } bindTextureByName(type.getModelTexture()); @@ -154,7 +154,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glPushMatrix(); glTranslatef(shiftX, shiftY, shiftZ); glScalef(localScale, localScale, localScale); - for (int miniBlocks = 0; miniBlocks < (item.stackSize / 32) + 1; miniBlocks++) { +/* for (int miniBlocks = 0; miniBlocks < (item.stackSize / 32) + 1; miniBlocks++) { glPushMatrix(); glRotatef(timeD, 0.0F, 1.0F, 0.0F); if (miniBlocks > 0) { @@ -164,8 +164,8 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glTranslatef(minishiftX, minishiftY, minishiftZ); } MappableItemStackWrapper mis = new MappableItemStackWrapper(item); - if (!mod_IronChest.CACHE_RENDER || !renderList.containsKey(mis)) { // Added support for using only old system. - if (mod_IronChest.CACHE_RENDER) { + if (!IronChest.CACHE_RENDER || !renderList.containsKey(mis)) { // Added support for using only old system. + if (IronChest.CACHE_RENDER) { int render = glGenLists(1); renderList.put(mis, render); glNewList(render, GL_COMPILE_AND_EXECUTE); @@ -213,7 +213,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { tessellator.addVertexWithUV(0.0F - f14, 1.0F - f15, 0.0D, f5, f10); tessellator.draw(); } - if (mod_IronChest.CACHE_RENDER) { + if (IronChest.CACHE_RENDER) { glEndList(); } } else { @@ -224,7 +224,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } glPopMatrix(); } - glPopMatrix(); +*/ glPopMatrix(); } glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glEnable(2896 /* GL_LIGHTING */); diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 9ecdcc8..049e1ec 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -25,9 +25,9 @@ import net.minecraft.src.MathHelper; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.forge.ITextureProvider; +import net.minecraftforge.common.Orientation; -public class BlockIronChest extends BlockContainer implements ITextureProvider { +public class BlockIronChest extends BlockContainer { private Random random; @@ -44,7 +44,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } @Override - public TileEntity getBlockEntity() { + public TileEntity createNewTileEntity(World w) { return null; } @@ -69,7 +69,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } @Override - public TileEntity getBlockEntity(int metadata) { + public TileEntity createNewTileEntity(World world, int metadata) { return IronChestType.makeEntity(metadata); } @@ -105,7 +105,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { } @Override - public boolean blockActivated(World world, int i, int j, int k, EntityPlayer player) { + public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer player, int i1, float f1, float f2, float f3) { TileEntity te = world.getBlockTileEntity(i, j, k); if (te == null || !(te instanceof TileEntityIronChest)) @@ -113,7 +113,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { return true; } - if (world.isBlockSolidOnSide(i, j + 1, k, 0)) + if (world.isBlockSolidOnSide(i, j + 1, k, Orientation.DOWN)) { return true; } @@ -122,7 +122,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { return true; } - player.openGui(mod_IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, i, j, k); + player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, i, j, k); return true; } @@ -160,14 +160,15 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { return i; } - public void onBlockRemoval(World world, int i, int j, int k) + @Override + public void breakBlock(World world, int i, int j, int k, int i1, int i2) { TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k); if (tileentitychest != null) { dropContent(0, tileentitychest, world, tileentitychest.xCoord, tileentitychest.yCoord, tileentitychest.zCoord); } - super.onBlockRemoval(world, i, j, k); + super.breakBlock(world, i, j, k, i1, i2); } public void dropContent(int newSize, IInventory chest, World world, int xCoord, int yCoord, int zCoord) { @@ -197,7 +198,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider { entityitem.motionZ = (float) random.nextGaussian() * f3; if (itemstack.hasTagCompound()) { - mod_IronChest.proxy.applyExtraDataToDrops(entityitem, (NBTTagCompound) itemstack.getTagCompound().copy()); + entityitem.item.setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); } world.spawnEntityInWorld(entityitem); } diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index a92c5f8..62e7fe8 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -16,7 +16,7 @@ import static cpw.mods.ironchest.IronChestType.WOOD; import net.minecraft.src.Block; import net.minecraft.src.ItemStack; -import net.minecraft.src.forge.Configuration; +import net.minecraftforge.common.Configuration; public enum ChestChangerType { IRONGOLD(IRON, GOLD, "ironGoldUpgrade", "Iron to Gold Chest Upgrade", "mmm", "msm", "mmm"), diff --git a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java b/IronChests2/common/cpw/mods/ironchest/CommonProxy.java new file mode 100644 index 0000000..b53c52c --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/CommonProxy.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.ironchest.client.GUIChest; + + +public class CommonProxy implements IGuiHandler { + public void registerRenderInformation() + { + + } + + public boolean isRemote() + { + return true; + } + + public void registerTileEntitySpecialRenderer(IronChestType typ) + { + + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + TileEntity te = world.getBlockTileEntity(x, y, z); + if (te != null && te instanceof TileEntityIronChest) { + return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); + } else { + return null; + } + } + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int X, int Y, int Z) { + TileEntity te = world.getBlockTileEntity(X, Y, Z); + if (te != null && te instanceof TileEntityIronChest) { + TileEntityIronChest icte = (TileEntityIronChest) te; + return new ContainerIronChestBase(player.inventory, icte, icte.getType(), 0, 0); + } else { + return null; + } + } + + public World getClientWorld() { + return null; + } + +} diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 3e4d623..0f17f21 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -4,7 +4,7 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ @@ -75,7 +75,7 @@ public class ContainerIronChestBase extends Container { { for (int chestCol = 0; chestCol < type.getRowLength(); chestCol++) { - addSlot(new Slot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); + addSlotToContainer(new Slot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); } } @@ -85,21 +85,17 @@ public class ContainerIronChestBase extends Container { { for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++) { - addSlot(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10)); + addSlotToContainer(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10)); } } for (int hotbarSlot = 0; hotbarSlot < 9; hotbarSlot++) { - addSlot(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize - 24)); + addSlotToContainer(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize - 24)); } } public EntityPlayer getPlayer() { return player; } - - public IInventory getInventory() { - return chest; - } } diff --git a/IronChests2/common/cpw/mods/ironchest/IProxy.java b/IronChests2/common/cpw/mods/ironchest/IProxy.java deleted file mode 100644 index 04555cc..0000000 --- a/IronChests2/common/cpw/mods/ironchest/IProxy.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest; - -import java.io.File; - -import net.minecraft.src.EntityItem; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.World; -import net.minecraft.src.forge.IGuiHandler; - -public interface IProxy extends IGuiHandler { - - public abstract void registerRenderInformation(); - - public abstract void registerTileEntities(); - - public abstract void registerTranslations(); - - public abstract File getMinecraftDir(); - - public abstract void applyExtraDataToDrops(EntityItem item, NBTTagCompound data); - - public abstract boolean isRemote(); - - public abstract World getCurrentWorld(); -} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java new file mode 100644 index 0000000..4c8fb48 --- /dev/null +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -0,0 +1,103 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.lang.reflect.Method; +import java.util.logging.Level; + +import net.minecraftforge.common.Configuration; +import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.Init; +import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.Mod.PostInit; +import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.network.NetworkMod; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; + +@Mod(modid = "IronChest", name = "Iron Chests", version = "4.0") +@NetworkMod(channels = { "IronChest" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) +public class IronChest { + + public static BlockIronChest ironChestBlock; + @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.common.CommonProxy") + public static CommonProxy proxy; + @Instance + public static IronChest instance; + public static boolean CACHE_RENDER = true; + public static boolean OCELOTS_SITONCHESTS = true; + + @PreInit + public void preInit(FMLPreInitializationEvent event) { + Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); + event.getModMetadata().version = Version.fullVersionString(); + try { + cfg.load(); + int bId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); + ironChestBlock = new BlockIronChest(bId); + ChestChangerType.buildItems(cfg, 29501); + CACHE_RENDER = cfg.getOrCreateBooleanProperty("cacheRenderingInformation", Configuration.CATEGORY_GENERAL, true).getBoolean(true); + OCELOTS_SITONCHESTS = cfg.getOrCreateBooleanProperty("ocelotsSitOnChests", Configuration.CATEGORY_GENERAL, true).getBoolean(true); + } catch (Exception e) { + FMLLog.log(Level.SEVERE, e, "IronChest has a problem loading it's configuration"); + } finally { + cfg.save(); + } + } + + @Init + public void load(FMLInitializationEvent evt) { + GameRegistry.registerBlock(ironChestBlock); + for (IronChestType typ : IronChestType.values()) { + GameRegistry.registerTileEntity(typ.clazz, typ.name()); + LanguageRegistry.instance().addStringLocalization(typ.name() + ".name", "en_US", typ.friendlyName); + proxy.registerTileEntitySpecialRenderer(typ); + } + for (ChestChangerType typ : ChestChangerType.values()) { + LanguageRegistry.instance().addStringLocalization("item." + typ.itemName + ".name", "en_US", typ.descriptiveName); + } + IronChestType.generateTieredRecipes(ironChestBlock); + ChestChangerType.generateRecipes(); + NetworkRegistry.instance().registerGuiHandler(instance, proxy); + proxy.registerRenderInformation(); + } + + @PostInit + public void modsLoaded(FMLPostInitializationEvent evt) { + try { + Class equivexmaps = Class.forName("ee.EEMaps"); + Method addEMC = equivexmaps.getMethod("addEMC", int.class, int.class, int.class); + Method addMeta = equivexmaps.getMethod("addMeta", int.class, int.class); + int[] chestEMCValues = new int[] { 8 * 8 + 256 * 8, /* iron chest */ + 8 * 8 + 256 * 8 + 2048 * 8, /* gold chest */ + 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6, /* diamond chest */ + 85 * 8 + 8 * 8, /* copper chest */ + 85 * 8 + 8 * 8 + 512 * 8, /* silver chest */ + 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 /* crystal chest */ + }; + for (IronChestType icType : IronChestType.values()) { + if (icType.ordinal() >= chestEMCValues.length) + break; + addEMC.invoke(null, ironChestBlock.blockID, icType.ordinal(), chestEMCValues[icType.ordinal()]); + } + addMeta.invoke(null, ironChestBlock.blockID, IronChestType.values().length - 1); + FMLLog.fine("mod_IronChest registered chests with Equivalent Exchange"); + } catch (Exception ex) { + FMLLog.fine("mod_IronChest unable to load Equivalent Exchange integration"); + } + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java b/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java index 167f894..4104b36 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java @@ -126,7 +126,7 @@ public class IronChestAIOcelotSit extends EntityAIBase { } private boolean isBlockAChestBlock(World world, int x, int y, int z) { - if (world.getBlockId(x, y, z)==mod_IronChest.ironChestBlock.blockID) { + if (world.getBlockId(x, y, z)==IronChest.ironChestBlock.blockID) { return true; } try { diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/IronChests2/common/cpw/mods/ironchest/IronChestType.java index 347b73e..8a2ca52 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestType.java @@ -18,7 +18,7 @@ import net.minecraft.src.Block; import net.minecraft.src.CraftingManager; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; -import net.minecraft.src.forge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapedOreRecipe; public enum IronChestType { IRON(54, 9, true, "Iron Chest", "ironchest.png", 0, Arrays.asList("ingotIron","ingotRefinedIron"), TileEntityIronChest.class, "mmmmPmmmm", "mGmG3GmGm"), diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 9cce995..7f386fc 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -10,16 +10,15 @@ ******************************************************************************/ package cpw.mods.ironchest; -import cpw.mods.fml.common.ReflectionHelper; +import cpw.mods.fml.common.ObfuscationReflectionHelper; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntityChest; import net.minecraft.src.World; -import net.minecraft.src.forge.ITextureProvider; -public class ItemChestChanger extends Item implements ITextureProvider { +public class ItemChestChanger extends Item { private ChestChangerType type; @@ -52,9 +51,9 @@ public class ItemChestChanger extends Item implements ITextureProvider { // Force old TE out of the world so that adjacent chests can update newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); int newSize = newchest.chestContents.length; - ItemStack[] chestContents = ReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); + ItemStack[] chestContents = ObfuscationReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); - BlockIronChest block = mod_IronChest.ironChestBlock; + BlockIronChest block = IronChest.ironChestBlock; block.dropContent(newSize, tec, world, tec.xCoord, tec.yCoord, tec.zCoord); newchest.setFacing((byte)tec.getBlockMetadata()); newchest.sortTopStacks(); diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java index e8aad0d..53812a2 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -31,8 +31,4 @@ public class ItemIronChest extends ItemBlock { public String getItemNameIS(ItemStack itemstack) { return IronChestType.values()[itemstack.getItemDamage()].name(); } - - @Override - public void addCreativeItems(@SuppressWarnings("rawtypes") ArrayList itemList) { - } } diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index 1042d7d..29639e3 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -4,7 +4,7 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ @@ -16,91 +16,71 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; + +import cpw.mods.fml.common.network.IPacketHandler; +import cpw.mods.fml.common.network.Player; + import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet; import net.minecraft.src.Packet1Login; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.forge.IConnectionHandler; -import net.minecraft.src.forge.IPacketHandler; -import net.minecraft.src.forge.MessageManager; -public class PacketHandler implements IPacketHandler, IConnectionHandler { +public class PacketHandler implements IPacketHandler { @Override - public void onConnect(NetworkManager network) { - MessageManager.getInstance().registerChannel(network, this, "IronChest"); - } - - @Override - public void onLogin(NetworkManager network, Packet1Login login) { - } - - @Override - public void onDisconnect(NetworkManager network, String message, Object[] args) { - MessageManager.getInstance().removeConnection(network); - } - - @Override - public void onPacketData(NetworkManager network, String channel, byte[] data) { - DataInputStream dis=new DataInputStream(new ByteArrayInputStream(data)); - int x; - int y; - int z; - int typ; - boolean hasStacks; - int[] items=null; - try { - x = dis.readInt(); - y = dis.readInt(); - z = dis.readInt(); - typ=dis.readByte(); - hasStacks=dis.readByte()!=0; - if (hasStacks) { - items = new int[24]; - for (int i=0; i equivexmaps = Class.forName("ee.EEMaps"); - Method addEMC = equivexmaps.getMethod("addEMC", int.class, int.class, int.class); - Method addMeta = equivexmaps.getMethod("addMeta", int.class, int.class); - int[] chestEMCValues = new int[] - { - 8 * 8 + 256 * 8, /* iron chest */ - 8 * 8 + 256 * 8 + 2048 * 8, /* gold chest */ - 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6, /* diamond chest */ - 85 * 8 + 8 * 8, /* copper chest */ - 85 * 8 + 8 * 8 + 512 * 8, /* silver chest */ - 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 /* crystal chest */ - }; - for (IronChestType icType : IronChestType.values()) { - if (icType.ordinal()>=chestEMCValues.length) - break; - addEMC.invoke(null, ironChestBlock.blockID, icType.ordinal(), chestEMCValues[icType.ordinal()]); - } - addMeta.invoke(null, ironChestBlock.blockID, IronChestType.values().length - 1); - ModLoader.getLogger().fine("mod_IronChest registered chests with Equivalent Exchange"); - } catch (Exception ex) { - ModLoader.getLogger().fine("mod_IronChest unable to load Equivalent Exchange integration"); - } - } - - @Override - public boolean clientSideRequired() { - return true; - } - - @Override - public boolean serverSideRequired() { - return false; - } -} diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java index e25380e..9958121 100644 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java @@ -4,7 +4,7 @@ * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html - * + * * Contributors: * cpw - initial API and implementation ******************************************************************************/ @@ -57,17 +57,6 @@ public class ServerProxy implements IProxy { return false; } - @Override - public Object getGuiElement(int ID, EntityPlayer player, World world, int X, int Y, int Z) { - TileEntity te=world.getBlockTileEntity(X, Y, Z); - if (te!=null && te instanceof TileEntityIronChest) { - TileEntityIronChest icte=(TileEntityIronChest) te; - return new ContainerIronChestBase(player.inventory, icte, icte.getType(), 0, 0); - } else { - return null; - } - } - @Override public World getCurrentWorld() { // NOOP on server: there's lots From 958f8466d4f0ecec6b5a3bf92a243038db1d4bd0 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 12 Aug 2012 00:38:28 -0400 Subject: [PATCH 077/188] More changes for 1.3 --- IronChests2/.project | 12 +++++++++ .../client/IronChestRenderHelper.java | 16 ++++++++++- .../client/TileEntityIronChestRenderer.java | 27 ++++++++++++++----- .../common/cpw/mods/ironchest/IronChest.java | 2 +- .../cpw/mods/ironchest/ItemChestChanger.java | 3 +++ .../mods/ironchest/TileEntityIronChest.java | 8 ++++-- 6 files changed, 58 insertions(+), 10 deletions(-) diff --git a/IronChests2/.project b/IronChests2/.project index 39d9b6c..d59bcf7 100644 --- a/IronChests2/.project +++ b/IronChests2/.project @@ -14,4 +14,16 @@ org.eclipse.jdt.core.javanature + + + common/ironchestversion.properties + 1 + PROJECT_LOC/ironchestversion.properties + + + common/mcmod.info + 1 + PROJECT_LOC/mcmod.info + + diff --git a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java index fcadba1..596be83 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/IronChests2/client/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -10,16 +10,30 @@ ******************************************************************************/ package cpw.mods.ironchest.client; +import java.util.Map; + +import com.google.common.collect.Maps; + import cpw.mods.ironchest.IronChest; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; import net.minecraft.src.Block; import net.minecraft.src.ChestItemRenderHelper; import net.minecraft.src.TileEntityRenderer; public class IronChestRenderHelper extends ChestItemRenderHelper { + private Map itemRenders = Maps.newHashMap(); + + public IronChestRenderHelper() { + for (IronChestType typ : IronChestType.values()) + { + itemRenders.put(typ.ordinal(), (TileEntityIronChest) IronChest.ironChestBlock.createTileEntity(null, typ.ordinal())); + } + } @Override public void renderChest(Block block, int i, float f) { if (block==IronChest.ironChestBlock) { - TileEntityRenderer.instance.renderTileEntityAt(block.createTileEntity(null,i), 0.0D, 0.0D, 0.0D, 0.0F); + TileEntityRenderer.instance.renderTileEntityAt(itemRenders.get(i), 0.0D, 0.0D, 0.0D, 0.0F); } else { super.renderChest(block, i, f); } diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index fcec8e9..eee28c3 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -28,6 +28,8 @@ import java.util.Random; import java.util.Map; import java.util.HashMap; +import org.lwjgl.opengl.GL11; + import net.minecraft.src.Block; import net.minecraft.src.EntityItem; import net.minecraft.src.Item; @@ -40,6 +42,7 @@ import net.minecraft.src.TileEntitySpecialRenderer; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.MinecraftForgeClient; +import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; @@ -70,6 +73,18 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { renderBlocks = new RenderBlocks(); } + private void overrideTexture(Object obj) + { + if (obj instanceof Item) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(((Item)obj).getTextureFile())); + } + else if (obj instanceof Block) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(((Block)obj).getTextureFile())); + } + } + public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { if (tile == null) { return; @@ -154,7 +169,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glPushMatrix(); glTranslatef(shiftX, shiftY, shiftZ); glScalef(localScale, localScale, localScale); -/* for (int miniBlocks = 0; miniBlocks < (item.stackSize / 32) + 1; miniBlocks++) { + for (int miniBlocks = 0; miniBlocks < (item.stackSize / 32) + 1; miniBlocks++) { glPushMatrix(); glRotatef(timeD, 0.0F, 1.0F, 0.0F); if (miniBlocks > 0) { @@ -174,20 +189,20 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { if (customRenderer != null) { customitem.item = item; bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(item.getItem()); + overrideTexture(item.getItem()); customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); + overrideTexture(Block.blocksList[item.itemID]); renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); } else { int i = item.getIconIndex(); if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID] == null) { bindTextureByName("/gui/items.png"); - ForgeHooksClient.overrideTexture(Item.itemsList[item.itemID]); + overrideTexture(Item.itemsList[item.itemID]); } else { bindTextureByName("/terrain.png"); - ForgeHooksClient.overrideTexture(Block.blocksList[item.itemID]); + overrideTexture(Block.blocksList[item.itemID]); } Tessellator tessellator = Tessellator.instance; float f5 = (float) ((i % 16) * 16 + 0) / 256F; @@ -224,7 +239,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } glPopMatrix(); } -*/ glPopMatrix(); + glPopMatrix(); } glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glEnable(2896 /* GL_LIGHTING */); diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index 4c8fb48..153e150 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -61,7 +61,7 @@ public class IronChest { @Init public void load(FMLInitializationEvent evt) { - GameRegistry.registerBlock(ironChestBlock); + GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class); for (IronChestType typ : IronChestType.values()) { GameRegistry.registerTileEntity(typ.clazz, typ.name()); LanguageRegistry.instance().addStringLocalization(typ.name() + ".name", "en_US", typ.friendlyName); diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 7f386fc..2cd4d9b 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -32,6 +32,8 @@ public class ItemChestChanger extends Item { @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side) { + if (world.isRemote) + return false; TileEntity te=world.getBlockTileEntity(X,Y,Z); TileEntityIronChest newchest; if (te!=null && te instanceof TileEntityIronChest) { @@ -76,6 +78,7 @@ public class ItemChestChanger extends Item { world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal()); world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z)); world.markBlockNeedsUpdate(X, Y, Z); + world.markBlocksDirty(X, Y, Z, X, Y, Z); stack.stackSize=0; return true; } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index 2817c21..940e813 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -13,6 +13,8 @@ package cpw.mods.ironchest; import java.util.Arrays; import java.util.Comparator; +import org.lwjgl.input.Mouse; + import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; @@ -79,7 +81,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } protected void sortTopStacks() { - if (!type.isTransparent() || IronChest.proxy.isRemote()) { + if (!type.isTransparent() || (worldObj != null && worldObj.isRemote)) { return; } ItemStack[] tempCopy = new ItemStack[getSizeInventory()]; @@ -303,6 +305,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) { + Mouse.setGrabbed(false); if (numUsingPlayers > 0) { return null; } @@ -333,7 +336,8 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return this; } - public Packet getDescriptionPacket() { + @Override + public Packet getAuxillaryInfoPacket() { return PacketHandler.getPacket(this); } From 8d2a21f08238a2009a93fd4574266ab35449ad52 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 13 Aug 2012 01:24:25 -0400 Subject: [PATCH 078/188] Ocelots on chests time --- .../mods/ironchest/client/ClientProxy.java | 12 -- .../client/TileEntityIronChestRenderer.java | 14 +- .../cpw/mods/ironchest/CommonProxy.java | 5 - .../common/cpw/mods/ironchest/IronChest.java | 5 + .../mods/ironchest/IronChestAIOcelotSit.java | 141 ++---------------- .../cpw/mods/ironchest/ItemIronChest.java | 2 - .../ironchest/OcelotsSitOnChestsHandler.java | 44 +++--- .../cpw/mods/ironchest/PacketHandler.java | 15 +- 8 files changed, 52 insertions(+), 186 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index 205156c..e044796 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -11,19 +11,12 @@ package cpw.mods.ironchest.client; import net.minecraft.src.ChestItemRenderHelper; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ModLoader; -import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.ironchest.ContainerIronChestBase; import cpw.mods.ironchest.CommonProxy; import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.TileEntityIronChest; public class ClientProxy extends CommonProxy { @Override @@ -33,11 +26,6 @@ public class ClientProxy extends CommonProxy { MinecraftForgeClient.preloadTexture("/cpw/mods/ironchest/sprites/item_textures.png"); } - @Override - public boolean isRemote() { - return ModLoader.getMinecraftInstance().theWorld.isRemote; - } - @Override public void registerTileEntitySpecialRenderer(IronChestType typ) { ClientRegistry.bindTileEntitySpecialRenderer(typ.clazz, new TileEntityIronChestRenderer()); diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index eee28c3..d4cd0e7 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -11,12 +11,12 @@ package cpw.mods.ironchest.client; import static org.lwjgl.opengl.GL11.GL_COMPILE_AND_EXECUTE; +import static org.lwjgl.opengl.GL11.glCallList; import static org.lwjgl.opengl.GL11.glColor4f; import static org.lwjgl.opengl.GL11.glDisable; import static org.lwjgl.opengl.GL11.glEnable; import static org.lwjgl.opengl.GL11.glEndList; import static org.lwjgl.opengl.GL11.glGenLists; -import static org.lwjgl.opengl.GL11.glCallList; import static org.lwjgl.opengl.GL11.glNewList; import static org.lwjgl.opengl.GL11.glPopMatrix; import static org.lwjgl.opengl.GL11.glPushMatrix; @@ -24,11 +24,9 @@ import static org.lwjgl.opengl.GL11.glRotatef; import static org.lwjgl.opengl.GL11.glScalef; import static org.lwjgl.opengl.GL11.glTranslatef; -import java.util.Random; -import java.util.Map; import java.util.HashMap; - -import org.lwjgl.opengl.GL11; +import java.util.Map; +import java.util.Random; import net.minecraft.src.Block; import net.minecraft.src.EntityItem; @@ -39,14 +37,16 @@ import net.minecraft.src.RenderBlocks; import net.minecraft.src.Tessellator; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; -import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.MinecraftForgeClient; + +import org.lwjgl.opengl.GL11; + import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; -import cpw.mods.ironchest.IronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private static Map renderList = new HashMap(); diff --git a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java b/IronChests2/common/cpw/mods/ironchest/CommonProxy.java index b53c52c..f6d48b8 100644 --- a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java +++ b/IronChests2/common/cpw/mods/ironchest/CommonProxy.java @@ -23,11 +23,6 @@ public class CommonProxy implements IGuiHandler { } - public boolean isRemote() - { - return true; - } - public void registerTileEntitySpecialRenderer(IronChestType typ) { diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index 153e150..22df701 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -14,6 +14,7 @@ import java.lang.reflect.Method; import java.util.logging.Level; import net.minecraftforge.common.Configuration; +import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -74,6 +75,10 @@ public class IronChest { ChestChangerType.generateRecipes(); NetworkRegistry.instance().registerGuiHandler(instance, proxy); proxy.registerRenderInformation(); + if (OCELOTS_SITONCHESTS) + { + MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); + } } @PostInit diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java b/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java index 4104b36..49d682b 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java @@ -1,138 +1,19 @@ package cpw.mods.ironchest; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import net.minecraft.src.Block; -import net.minecraft.src.BlockBed; -import net.minecraft.src.EntityAIBase; import net.minecraft.src.EntityAIOcelotSit; import net.minecraft.src.EntityOcelot; -import net.minecraft.src.TileEntityChest; import net.minecraft.src.World; -public class IronChestAIOcelotSit extends EntityAIBase { - private EntityOcelot ocelot; - private final float speed; - private int ticksRun = 0; - private int tryTicks = 0; - private int maxTicks = 0; - private int targetX = 0; - private int targetY = 0; - private int targetZ = 0; - private EntityAIOcelotSit sitAI; - private Method isTargetBlockMethod; - private boolean grabbedMethod; +public class IronChestAIOcelotSit extends EntityAIOcelotSit { + public IronChestAIOcelotSit(EntityOcelot par1EntityOcelot, float par2) { + super(par1EntityOcelot, par2); + } - public IronChestAIOcelotSit(EntityOcelot par1EntityOcelot, float par2, EntityAIOcelotSit sitAI) { - this.ocelot = par1EntityOcelot; - this.speed = par2; - this.sitAI = sitAI; - this.setMutexBits(5); - if (!grabbedMethod) { - try { - isTargetBlockMethod = EntityAIOcelotSit.class.getDeclaredMethod("a", World.class, int.class, int.class, int.class); - } catch (Exception e) { - // Can't find it - try { - isTargetBlockMethod = EntityAIOcelotSit.class.getDeclaredMethod("func_50078_a", World.class, int.class, int.class, int.class); - } catch (Exception e1) { - } - } - isTargetBlockMethod.setAccessible(true); - grabbedMethod = true; - } - } - - public boolean shouldExecute() - { - return ocelot.isTamed() && !ocelot.isSitting() && ocelot.getRNG().nextDouble() <= 0.0065D && thereIsChestNearby(); - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() - { - return this.ticksRun <= this.maxTicks && this.tryTicks <= 60 && isBlockAChestBlock(ocelot.worldObj, this.targetX, this.targetY, this.targetZ); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() - { - this.ocelot.getNavigator().tryMoveToXYZ((double) ((float) this.targetX) + 0.5D, (double) (this.targetY + 1), (double) ((float) this.targetZ) + 0.5D, - this.speed); - this.ticksRun = 0; - this.tryTicks = 0; - this.maxTicks = this.ocelot.getRNG().nextInt(this.ocelot.getRNG().nextInt(1200) + 1200) + 1200; - this.ocelot.func_50008_ai().setIsSitting(false); - } - - /** - * Resets the task - */ - public void resetTask() - { - this.ocelot.setSitting(false); - } - - /** - * Updates the task - */ - public void updateTask() - { - ++this.ticksRun; - this.ocelot.func_50008_ai().setIsSitting(false); - - if (this.ocelot.getDistanceSq((double) this.targetX, (double) (this.targetY + 1), (double) this.targetZ) > 1.0D) - { - this.ocelot.setSitting(false); - this.ocelot.getNavigator().tryMoveToXYZ((double) ((float) this.targetX) + 0.5D, (double) (this.targetY + 1), (double) ((float) this.targetZ) + 0.5D, - this.speed); - ++this.tryTicks; - } - else if (!this.ocelot.isSitting()) - { - this.ocelot.setSitting(true); - } - else - { - --this.tryTicks; - } - } - - private boolean thereIsChestNearby() { - int searchY = (int) this.ocelot.posY; - double closestChestDistance = Integer.MAX_VALUE; - - for (int searchX = (int) this.ocelot.posX - 8; searchX < this.ocelot.posX + 8; searchX++) { - for (int searchZ = (int) this.ocelot.posZ - 8; searchZ < this.ocelot.posZ + 8; searchZ++) { - if (this.isBlockAChestBlock(this.ocelot.worldObj, searchX, searchY, searchZ) && this.ocelot.worldObj.isAirBlock(searchX, searchY + 1, searchZ)) { - double chestDistance = this.ocelot.getDistanceSq((double) searchX, (double) searchY, (double) searchZ); - - if (chestDistance < closestChestDistance) { - this.targetX = searchX; - this.targetY = searchY; - this.targetZ = searchZ; - closestChestDistance = chestDistance; - } - } - } - } - - return closestChestDistance < Integer.MAX_VALUE; - } - - private boolean isBlockAChestBlock(World world, int x, int y, int z) { - if (world.getBlockId(x, y, z)==IronChest.ironChestBlock.blockID) { - return true; - } - try { - return (Boolean) isTargetBlockMethod.invoke(sitAI, world, x, y, z); - } catch (Exception e) { - } - return false; - } + @Override + protected boolean isSittableBlock(World world, int x, int y, int z) { + if (world.getBlockId(x, y, z) == IronChest.ironChestBlock.blockID) { + return true; + } + return super.isSittableBlock(world, x, y, z); + } } diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java index 53812a2..132887b 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java @@ -10,8 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.ArrayList; - import net.minecraft.src.ItemBlock; import net.minecraft.src.ItemStack; diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 99cfd07..683a345 100644 --- a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -2,27 +2,29 @@ package cpw.mods.ironchest; import java.util.List; -import cpw.mods.fml.common.ReflectionHelper; -import net.minecraft.src.EntityAIBase; -import net.minecraft.src.EntityAIOcelotSit; -import net.minecraft.src.EntityAITasks; -import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityAITaskEntry; import net.minecraft.src.EntityOcelot; -import net.minecraft.src.World; -import net.minecraft.src.forge.IEntityLivingHandler; -import net.minecraft.src.forge.adaptors.EntityLivingHandlerAdaptor; +import net.minecraftforge.event.ForgeSubscribe; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingSpecialSpawnEvent; -public class OcelotsSitOnChestsHandler extends EntityLivingHandlerAdaptor { - private static EntityAIOcelotSit aiTask = new EntityAIOcelotSit(null, 0); - @Override - public boolean onEntityLivingUpdate(EntityLiving entity) { - if (entity.ticksExisted<2 && entity instanceof EntityOcelot) { - EntityOcelot ocelot = (EntityOcelot) entity; - EntityAITasks ocelotTasks = ReflectionHelper.getPrivateValue(EntityLiving.class, ocelot, "tasks"); - List taskList = ReflectionHelper.getPrivateValue(EntityAITasks.class, ocelotTasks, "tasksToDo"); - taskList.remove(5); - ocelotTasks.addTask(6, new IronChestAIOcelotSit(ocelot, 0.4F, aiTask)); - } - return false; - } +public class OcelotsSitOnChestsHandler { + @ForgeSubscribe + public void changeSittingTaskForOcelots(LivingEvent.LivingUpdateEvent evt) { + if (evt.entityLiving instanceof EntityOcelot && evt.entityLiving.ticksExisted < 5) + { + EntityOcelot ocelot = (EntityOcelot) evt.entityLiving; + @SuppressWarnings("unchecked") + List tasks = ocelot.tasks.field_75782_a; + + for (int i=0; i Date: Tue, 14 Aug 2012 09:40:04 -0400 Subject: [PATCH 079/188] Fix up stuff- cats are buggy, but i'm working on it. --- IronChests2/build.xml | 14 +--- .../common/cpw/mods/ironchest/IronChest.java | 9 +-- .../ironchest/OcelotsSitOnChestsHandler.java | 3 +- .../mods/ironchest/TileEntityIronChest.java | 3 - .../mods/ironchest/server/ServerProxy.java | 66 ------------------- 5 files changed, 8 insertions(+), 87 deletions(-) delete mode 100644 IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 8c51b2e..6eeb372 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -114,12 +114,6 @@ - - - - - - @@ -136,12 +130,6 @@ - - - - - - @@ -168,7 +156,7 @@ - + diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index 22df701..d7d2176 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -35,21 +35,21 @@ import cpw.mods.fml.common.registry.LanguageRegistry; public class IronChest { public static BlockIronChest ironChestBlock; - @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.common.CommonProxy") + @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") public static CommonProxy proxy; @Instance public static IronChest instance; public static boolean CACHE_RENDER = true; public static boolean OCELOTS_SITONCHESTS = true; + private int blockId; @PreInit public void preInit(FMLPreInitializationEvent event) { - Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); event.getModMetadata().version = Version.fullVersionString(); + Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); try { cfg.load(); - int bId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); - ironChestBlock = new BlockIronChest(bId); + blockId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); ChestChangerType.buildItems(cfg, 29501); CACHE_RENDER = cfg.getOrCreateBooleanProperty("cacheRenderingInformation", Configuration.CATEGORY_GENERAL, true).getBoolean(true); OCELOTS_SITONCHESTS = cfg.getOrCreateBooleanProperty("ocelotsSitOnChests", Configuration.CATEGORY_GENERAL, true).getBoolean(true); @@ -62,6 +62,7 @@ public class IronChest { @Init public void load(FMLInitializationEvent evt) { + ironChestBlock = new BlockIronChest(blockId); GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class); for (IronChestType typ : IronChestType.values()) { GameRegistry.registerTileEntity(typ.clazz, typ.name()); diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 683a345..e1bffbf 100644 --- a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -2,6 +2,7 @@ package cpw.mods.ironchest; import java.util.List; +import net.minecraft.src.EntityAIOcelotSit; import net.minecraft.src.EntityAITaskEntry; import net.minecraft.src.EntityOcelot; import net.minecraftforge.event.ForgeSubscribe; @@ -20,7 +21,7 @@ public class OcelotsSitOnChestsHandler { for (int i=0; i 0) { return null; } diff --git a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java b/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java deleted file mode 100644 index 9958121..0000000 --- a/IronChests2/server/cpw/mods/ironchest/server/ServerProxy.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest.server; - -import java.io.File; - -import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ModLoader; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import cpw.mods.ironchest.ContainerIronChestBase; -import cpw.mods.ironchest.IProxy; -import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.TileEntityIronChest; - -public class ServerProxy implements IProxy { - - @Override - public void registerRenderInformation() { - // NOOP on server - } - - @Override - public void registerTileEntities() { - for (IronChestType typ : IronChestType.values()) { - ModLoader.registerTileEntity(typ.clazz, typ.name()); - } - } - - @Override - public void registerTranslations() { - // NOOP on server - } - - @Override - public File getMinecraftDir() { - return new File("."); - } - - @Override - public void applyExtraDataToDrops(EntityItem entityitem, NBTTagCompound data) { - entityitem.item.setTagCompound(data); - } - - @Override - public boolean isRemote() { - return false; - } - - @Override - public World getCurrentWorld() { - // NOOP on server: there's lots - return null; - } - -} From 8b48a515f1a426d4c6cddea7bbb68a69e86f7235 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 14 Aug 2012 13:42:17 -0400 Subject: [PATCH 080/188] Tweaks for ocelots. fix mcmod.info --- .../common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java | 2 +- IronChests2/mcmod.info | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index e1bffbf..885244a 100644 --- a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -12,7 +12,7 @@ import net.minecraftforge.event.entity.living.LivingSpecialSpawnEvent; public class OcelotsSitOnChestsHandler { @ForgeSubscribe public void changeSittingTaskForOcelots(LivingEvent.LivingUpdateEvent evt) { - if (evt.entityLiving instanceof EntityOcelot && evt.entityLiving.ticksExisted < 5) + if (evt.entityLiving.ticksExisted < 5 && evt.entityLiving instanceof EntityOcelot) { EntityOcelot ocelot = (EntityOcelot) evt.entityLiving; @SuppressWarnings("unchecked") diff --git a/IronChests2/mcmod.info b/IronChests2/mcmod.info index 0ddf6f9..98f0a0a 100644 --- a/IronChests2/mcmod.info +++ b/IronChests2/mcmod.info @@ -1,8 +1,8 @@ [ { - "modid": "mod_IronChest", + "modid": "IronChest", "name": "Iron Chest", - "description": "New chests with larger sizes, with in-place upgrade items. + "description": "New chests with larger sizes, with in-place upgrade items. The feature chest is the crystal chest, which is transparent - some inventory contents are visible without opening the chest", "version": "@VERSION@", "mcversion": "1.2.5", From 76f80dac4d104e008b4913c23c4c03231846bb3a Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 15 Aug 2012 08:55:25 -0400 Subject: [PATCH 081/188] Fix up 1.3.2 small change --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 049e1ec..c6fa280 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -25,7 +25,7 @@ import net.minecraft.src.MathHelper; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraftforge.common.Orientation; +import net.minecraftforge.common.ForgeDirection; public class BlockIronChest extends BlockContainer { @@ -113,7 +113,7 @@ public class BlockIronChest extends BlockContainer { return true; } - if (world.isBlockSolidOnSide(i, j + 1, k, Orientation.DOWN)) + if (world.isBlockSolidOnSide(i, j + 1, k, ForgeDirection.DOWN)) { return true; } From 73422fcd5eab9a7e04d44b6fc526910eb322303d Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 15 Aug 2012 22:44:29 -0400 Subject: [PATCH 082/188] show in the creative menus --- .../cpw/mods/ironchest/BlockIronChest.java | 23 ++++++++++++------- .../cpw/mods/ironchest/ItemChestChanger.java | 2 ++ .../ironchest/OcelotsSitOnChestsHandler.java | 1 - 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index c6fa280..a3cdf1d 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -11,9 +11,14 @@ package cpw.mods.ironchest; import java.util.ArrayList; +import java.util.List; import java.util.Random; +import cpw.mods.fml.common.Side; +import cpw.mods.fml.common.asm.SideOnly; + import net.minecraft.src.BlockContainer; +import net.minecraft.src.CreativeTabs; import net.minecraft.src.EntityItem; import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; @@ -41,6 +46,7 @@ public class BlockIronChest extends BlockContainer { } setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); random = new Random(); + setCreativeTab(CreativeTabs.tabDeco); } @Override @@ -205,13 +211,14 @@ public class BlockIronChest extends BlockContainer { } } - @SuppressWarnings({ "rawtypes", "unchecked" }) @Override - public void addCreativeItems(ArrayList itemList) { - for (IronChestType type : IronChestType.values()) { - if (type.isValidForCreativeMode()) { - itemList.add(new ItemStack(this, 1, type.ordinal())); - } - } - } + @SuppressWarnings({ "rawtypes", "unchecked" }) + @SideOnly(Side.CLIENT) + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) { + for (IronChestType type : IronChestType.values()) { + if (type.isValidForCreativeMode()) { + par3List.add(new ItemStack(this, 1, type.ordinal())); + } + } + } } diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index 2cd4d9b..d490a72 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -11,6 +11,7 @@ package cpw.mods.ironchest; import cpw.mods.fml.common.ObfuscationReflectionHelper; +import net.minecraft.src.CreativeTabs; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -28,6 +29,7 @@ public class ItemChestChanger extends Item { this.type=type; setIconIndex(type.ordinal()); setItemName(type.itemName); + setTabToDisplayOn(CreativeTabs.tabMisc); } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 885244a..462b2b8 100644 --- a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -7,7 +7,6 @@ import net.minecraft.src.EntityAITaskEntry; import net.minecraft.src.EntityOcelot; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.living.LivingSpecialSpawnEvent; public class OcelotsSitOnChestsHandler { @ForgeSubscribe From 0011616b6f5c669a08f5450fc85a8f4933e5c13a Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 18 Sep 2012 01:09:32 -0400 Subject: [PATCH 083/188] Update for recent Forge/FML. Fix up a graphical bug. Require shiny new FML and Forge. --- IronChests2/.gitignore | 1 + IronChests2/.project | 12 ++-- IronChests2/build.xml | 54 ++++------------- .../client/TileEntityIronChestRenderer.java | 59 ++++++++----------- .../cpw/mods/ironchest/BlockIronChest.java | 6 +- .../common/cpw/mods/ironchest/IronChest.java | 29 ++------- .../cpw/mods/ironchest/ItemChestChanger.java | 2 +- .../ironchest/OcelotsSitOnChestsHandler.java | 2 +- .../mods/ironchest/TileEntityIronChest.java | 2 +- .../common/cpw/mods/ironchest/Version.java | 42 +++---------- IronChests2/getversion.py | 31 +++++----- IronChests2/mcmod.info | 2 +- 12 files changed, 78 insertions(+), 164 deletions(-) diff --git a/IronChests2/.gitignore b/IronChests2/.gitignore index 2dbd679..57a8e50 100644 --- a/IronChests2/.gitignore +++ b/IronChests2/.gitignore @@ -5,4 +5,5 @@ bin/ /build.properties /build /ironchestversion.properties +/version.properties /tmpbukkit diff --git a/IronChests2/.project b/IronChests2/.project index d59bcf7..594c34b 100644 --- a/IronChests2/.project +++ b/IronChests2/.project @@ -15,15 +15,15 @@ org.eclipse.jdt.core.javanature - - common/ironchestversion.properties - 1 - PROJECT_LOC/ironchestversion.properties - common/mcmod.info 1 - PROJECT_LOC/mcmod.info + /home/cpw/projects/gitstores/ironchests/IronChests2/mcmod.info + + + common/version.properties + 1 + /home/cpw/projects/gitstores/ironchests/IronChests2/version.properties diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 6eeb372..d417bd3 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -21,9 +21,6 @@ - - - @@ -31,8 +28,9 @@ - - + + + @@ -52,11 +50,6 @@ - - - - - @@ -66,7 +59,6 @@ - @@ -76,17 +68,17 @@ - - - - - - + + + + + + + - @@ -125,6 +117,7 @@ + @@ -136,7 +129,7 @@ - + @@ -176,28 +169,7 @@ - - - - - - - - - - - - - - - - - - - - - - + diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index d4cd0e7..199df1c 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -55,17 +55,8 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { private RenderBlocks renderBlocks; - 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.32F, 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.32F, 0.5F }, }; public TileEntityIronChestRenderer() { model = new ModelChest(); @@ -73,15 +64,11 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { renderBlocks = new RenderBlocks(); } - private void overrideTexture(Object obj) - { - if (obj instanceof Item) - { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(((Item)obj).getTextureFile())); - } - else if (obj instanceof Block) - { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(((Block)obj).getTextureFile())); + private void overrideTexture(Object obj) { + if (obj instanceof Item) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(((Item) obj).getTextureFile())); + } else if (obj instanceof Block) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(((Block) obj).getTextureFile())); } } @@ -91,10 +78,10 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } int facing = 3; IronChestType type = tile.getType(); - if (tile != null && tile.func_70314_l() != null) { + if (tile != null && tile.getWorldObj() != null) { facing = tile.getFacing(); type = tile.getType(); - int typ = tile.func_70314_l().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); + int typ = tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); type = IronChestType.values()[typ]; } bindTextureByName(type.getModelTexture()); @@ -160,7 +147,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { shiftZ = shifts[shift][2]; shift++; float localScale = blockScale; - if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null) { + if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null && Block.blocksList[item.itemID].blockID != 0) { int j = Block.blocksList[item.itemID].getRenderType(); if (j == 1 || j == 19 || j == 12 || j == 2) { localScale = 2 * blockScale; @@ -180,24 +167,28 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } MappableItemStackWrapper mis = new MappableItemStackWrapper(item); if (!IronChest.CACHE_RENDER || !renderList.containsKey(mis)) { // Added support for using only old system. - if (IronChest.CACHE_RENDER) { - int render = glGenLists(1); - renderList.put(mis, render); - glNewList(render, GL_COMPILE_AND_EXECUTE); - } - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, IItemRenderer.ItemRenderType.ENTITY); + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, IItemRenderer.ItemRenderType.ENTITY); if (customRenderer != null) { customitem.item = item; bindTextureByName("/terrain.png"); overrideTexture(item.getItem()); customRenderer.renderItem(IItemRenderer.ItemRenderType.ENTITY, item, renderBlocks, customitem); - } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { + } else if (item.itemID < Block.blocksList.length && Block.blocksList[item.itemID] != null && Block.blocksList[item.itemID].blockID != 0 && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { bindTextureByName("/terrain.png"); overrideTexture(Block.blocksList[item.itemID]); renderBlocks.renderBlockAsItem(Block.blocksList[item.itemID], item.getItemDamage(), 1.0F); } else { + int render = 0; + if (IronChest.CACHE_RENDER) { + render = glGenLists(1); + if (render != 0) + { + renderList.put(mis, render); + glNewList(render, GL_COMPILE_AND_EXECUTE); + } + } int i = item.getIconIndex(); - if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID] == null) { + if (item.itemID >= Block.blocksList.length || Block.blocksList[item.itemID] == null || Block.blocksList[item.itemID].blockID == 0) { bindTextureByName("/gui/items.png"); overrideTexture(Item.itemsList[item.itemID]); } else { @@ -227,9 +218,9 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { 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(); - } - if (IronChest.CACHE_RENDER) { - glEndList(); + if (IronChest.CACHE_RENDER && render != 0) { + glEndList(); + } } } else { Integer integer = renderList.get(mis); diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index a3cdf1d..88b82e5 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -10,7 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -41,12 +40,9 @@ public class BlockIronChest extends BlockContainer { setBlockName("IronChest"); setHardness(3.0F); setRequiresSelfNotify(); - if (id >= 256) { - disableStats(); - } setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); random = new Random(); - setCreativeTab(CreativeTabs.tabDeco); + setCreativeTab(CreativeTabs.tabDecorations); } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index d7d2176..7b0439d 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -10,7 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.lang.reflect.Method; import java.util.logging.Level; import net.minecraftforge.common.Configuration; @@ -30,14 +29,14 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", version = "4.0") -@NetworkMod(channels = { "IronChest" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) +@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:FML@[3.1.15,)") +@NetworkMod(channels = { "IronChest" }, versionBounds = "[4.0,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") public static CommonProxy proxy; - @Instance + @Instance("IronChest") public static IronChest instance; public static boolean CACHE_RENDER = true; public static boolean OCELOTS_SITONCHESTS = true; @@ -45,6 +44,7 @@ public class IronChest { @PreInit public void preInit(FMLPreInitializationEvent event) { + Version.init(event.getVersionProperties()); event.getModMetadata().version = Version.fullVersionString(); Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); try { @@ -84,26 +84,5 @@ public class IronChest { @PostInit public void modsLoaded(FMLPostInitializationEvent evt) { - try { - Class equivexmaps = Class.forName("ee.EEMaps"); - Method addEMC = equivexmaps.getMethod("addEMC", int.class, int.class, int.class); - Method addMeta = equivexmaps.getMethod("addMeta", int.class, int.class); - int[] chestEMCValues = new int[] { 8 * 8 + 256 * 8, /* iron chest */ - 8 * 8 + 256 * 8 + 2048 * 8, /* gold chest */ - 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6, /* diamond chest */ - 85 * 8 + 8 * 8, /* copper chest */ - 85 * 8 + 8 * 8 + 512 * 8, /* silver chest */ - 2 * 8192 + 8 * 8 + 256 * 8 + 2048 * 8 + 6 + 8 /* crystal chest */ - }; - for (IronChestType icType : IronChestType.values()) { - if (icType.ordinal() >= chestEMCValues.length) - break; - addEMC.invoke(null, ironChestBlock.blockID, icType.ordinal(), chestEMCValues[icType.ordinal()]); - } - addMeta.invoke(null, ironChestBlock.blockID, IronChestType.values().length - 1); - FMLLog.fine("mod_IronChest registered chests with Equivalent Exchange"); - } catch (Exception ex) { - FMLLog.fine("mod_IronChest unable to load Equivalent Exchange integration"); - } } } diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java index d490a72..e22679f 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java @@ -29,7 +29,7 @@ public class ItemChestChanger extends Item { this.type=type; setIconIndex(type.ordinal()); setItemName(type.itemName); - setTabToDisplayOn(CreativeTabs.tabMisc); + setCreativeTab(CreativeTabs.tabMisc); } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 462b2b8..70ae41a 100644 --- a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -15,7 +15,7 @@ public class OcelotsSitOnChestsHandler { { EntityOcelot ocelot = (EntityOcelot) evt.entityLiving; @SuppressWarnings("unchecked") - List tasks = ocelot.tasks.field_75782_a; + List tasks = ocelot.tasks.taskEntries; for (int i=0; i Date: Sun, 21 Oct 2012 15:01:57 -0400 Subject: [PATCH 084/188] Update for 1.4 --- IronChests2/common/cpw/mods/ironchest/BlockIronChest.java | 2 +- IronChests2/common/cpw/mods/ironchest/PacketHandler.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java index 88b82e5..25376ab 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java @@ -158,7 +158,7 @@ public class BlockIronChest extends BlockContainer { } @Override - protected int damageDropped(int i) { + public int damageDropped(int i) { return i; } diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java index 084ecea..ad24493 100644 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java @@ -14,7 +14,7 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; -import net.minecraft.src.NetworkManager; +import net.minecraft.src.INetworkManager; import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; @@ -28,7 +28,7 @@ import cpw.mods.fml.common.network.Player; public class PacketHandler implements IPacketHandler { @Override - public void onPacketData(NetworkManager network, Packet250CustomPayload packet, Player player) { + public void onPacketData(INetworkManager network, Packet250CustomPayload packet, Player player) { ByteArrayDataInput dat = ByteStreams.newDataInput(packet.data); int x = dat.readInt(); int y = dat.readInt(); From aa0e9265329fd0b7318c199e269f4fb2697f5f59 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 21 Oct 2012 15:12:25 -0400 Subject: [PATCH 085/188] Some tweaks to the code layout. The common proxy should *not* have client gui code references. --- .../cpw/mods/ironchest/client/ClientProxy.java | 14 ++++++++++++++ .../cpw/mods/ironchest/ChestChangerType.java | 2 +- .../common/cpw/mods/ironchest/CommonProxy.java | 10 ++-------- .../common/cpw/mods/ironchest/IronChest.java | 11 +++++------ 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java index e044796..e80b6b7 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java +++ b/IronChests2/client/cpw/mods/ironchest/client/ClientProxy.java @@ -11,12 +11,15 @@ package cpw.mods.ironchest.client; import net.minecraft.src.ChestItemRenderHelper; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.ironchest.CommonProxy; import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; public class ClientProxy extends CommonProxy { @Override @@ -35,4 +38,15 @@ public class ClientProxy extends CommonProxy { public World getClientWorld() { return FMLClientHandler.instance().getClient().theWorld; } + + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + TileEntity te = world.getBlockTileEntity(x, y, z); + if (te != null && te instanceof TileEntityIronChest) { + return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); + } else { + return null; + } + } } diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java index 62e7fe8..6f6a73a 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java @@ -52,7 +52,7 @@ public enum ChestChangerType { } public ItemChestChanger buildItem(Configuration cfg, int id) { - int itemId = cfg.getOrCreateIntProperty(itemName, Configuration.CATEGORY_ITEM, id).getInt(id); + int itemId = cfg.get(Configuration.CATEGORY_ITEM, itemName, id).getInt(id); item = new ItemChestChanger(itemId, this); return item; } diff --git a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java b/IronChests2/common/cpw/mods/ironchest/CommonProxy.java index f6d48b8..f48fbad 100644 --- a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java +++ b/IronChests2/common/cpw/mods/ironchest/CommonProxy.java @@ -10,11 +10,10 @@ ******************************************************************************/ package cpw.mods.ironchest; +import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.src.EntityPlayer; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.ironchest.client.GUIChest; public class CommonProxy implements IGuiHandler { @@ -30,12 +29,7 @@ public class CommonProxy implements IGuiHandler { @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - TileEntity te = world.getBlockTileEntity(x, y, z); - if (te != null && te instanceof TileEntityIronChest) { - return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); - } else { - return null; - } + return null; } @Override diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index 7b0439d..b01a844 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -29,10 +29,9 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:FML@[3.1.15,)") -@NetworkMod(channels = { "IronChest" }, versionBounds = "[4.0,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) +@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:FML@[4.0,)") +@NetworkMod(channels = { "IronChest" }, versionBounds = "[4.1,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class IronChest { - public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") public static CommonProxy proxy; @@ -49,10 +48,10 @@ public class IronChest { Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); try { cfg.load(); - blockId = cfg.getOrCreateBlockIdProperty("ironChests", 181).getInt(181); + blockId = cfg.get(Configuration.CATEGORY_BLOCK, "ironChests", 181).getInt(181); ChestChangerType.buildItems(cfg, 29501); - CACHE_RENDER = cfg.getOrCreateBooleanProperty("cacheRenderingInformation", Configuration.CATEGORY_GENERAL, true).getBoolean(true); - OCELOTS_SITONCHESTS = cfg.getOrCreateBooleanProperty("ocelotsSitOnChests", Configuration.CATEGORY_GENERAL, true).getBoolean(true); + CACHE_RENDER = cfg.get(Configuration.CATEGORY_GENERAL, "cacheRenderingInformation", true).getBoolean(true); + OCELOTS_SITONCHESTS = cfg.get(Configuration.CATEGORY_GENERAL, "ocelotsSitOnChests", true).getBoolean(true); } catch (Exception e) { FMLLog.log(Level.SEVERE, e, "IronChest has a problem loading it's configuration"); } finally { From db8490fd35ac434761da044217f8aab7e3e87227 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 21 Oct 2012 15:29:56 -0400 Subject: [PATCH 086/188] Clean up build script. --- IronChests2/build.xml | 59 +++++++++++-------------------------------- 1 file changed, 15 insertions(+), 44 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index d417bd3..191e2c1 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -9,20 +9,6 @@ ====================================================================== --> Iron Chest - - - - - - - - - - - - - - @@ -40,7 +26,7 @@ - + @@ -51,14 +37,12 @@ - - + - + - @@ -79,12 +63,7 @@ - - - - - - + @@ -101,34 +80,28 @@ - - - + - - - - - + + + + - - - + - - + - + @@ -157,13 +130,11 @@ - - - - + + - + From 1b441072cd4c1814288c8dd6f7bdd9a60328f750 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 21 Oct 2012 16:18:22 -0400 Subject: [PATCH 087/188] New version of transferStackInSlot with bonus player: func_82846_b --- .../common/cpw/mods/ironchest/ContainerIronChestBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 0f17f21..3f0feb8 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -35,7 +35,7 @@ public class ContainerIronChestBase extends Container { return chest.isUseableByPlayer(player); } - public ItemStack transferStackInSlot(int i) + public ItemStack func_82846_b(EntityPlayer p, int i) { ItemStack itemstack = null; Slot slot = (Slot) inventorySlots.get(i); From cea769047aafde963834c9077e5cd69d487d8444 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 21 Oct 2012 16:19:31 -0400 Subject: [PATCH 088/188] Fix build to include resources always --- IronChests2/build.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 191e2c1..2ddecf0 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -115,9 +115,7 @@ - - - + From 61b34db3b41d3ccafe9bc0743f648bb8018e363e Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 21 Oct 2012 16:48:36 -0400 Subject: [PATCH 089/188] Update some stuff. Skulls don't render in crystal chest as blocks because they're a TESR with no block render model. --- IronChests2/.project | 4 ++-- .../mods/ironchest/client/TileEntityIronChestRenderer.java | 2 ++ .../common/cpw/mods/ironchest/ContainerIronChestBase.java | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/IronChests2/.project b/IronChests2/.project index 594c34b..1600a76 100644 --- a/IronChests2/.project +++ b/IronChests2/.project @@ -18,12 +18,12 @@ common/mcmod.info 1 - /home/cpw/projects/gitstores/ironchests/IronChests2/mcmod.info + /home/cpw/projects/ironchests/IronChests2/mcmod.info common/version.properties 1 - /home/cpw/projects/gitstores/ironchests/IronChests2/version.properties + /home/cpw/projects/ironchests/IronChests2/version.properties diff --git a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 199df1c..e449235 100644 --- a/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/IronChests2/client/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -167,6 +167,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } MappableItemStackWrapper mis = new MappableItemStackWrapper(item); if (!IronChest.CACHE_RENDER || !renderList.containsKey(mis)) { // Added support for using only old system. + // TODO add support for the skull TESR IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, IItemRenderer.ItemRenderType.ENTITY); if (customRenderer != null) { customitem.item = item; @@ -243,5 +244,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { render((TileEntityIronChest) tileentity, x, y, z, partialTick); } + private ModelChest model; } diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java index 3f0feb8..9fa83ad 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java @@ -30,11 +30,13 @@ public class ContainerIronChestBase extends Container { layoutContainer(playerInventory, chestInventory, type, xSize, ySize); } + @Override public boolean canInteractWith(EntityPlayer player) { return chest.isUseableByPlayer(player); } + @Override public ItemStack func_82846_b(EntityPlayer p, int i) { ItemStack itemstack = null; @@ -64,6 +66,7 @@ public class ContainerIronChestBase extends Container { return itemstack; } + @Override public void onCraftGuiClosed(EntityPlayer entityplayer) { super.onCraftGuiClosed(entityplayer); @@ -95,6 +98,7 @@ public class ContainerIronChestBase extends Container { addSlotToContainer(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize - 24)); } } + public EntityPlayer getPlayer() { return player; } From c63b0560289fe16645f380494cd3b50cefeb871f Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 23 Oct 2012 19:18:36 -0400 Subject: [PATCH 090/188] Update for forge 6.0 --- IronChests2/common/cpw/mods/ironchest/IronChest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index b01a844..9825327 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -29,8 +29,8 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:FML@[4.0,)") -@NetworkMod(channels = { "IronChest" }, versionBounds = "[4.1,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) +@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:FML@[6.0,)") +@NetworkMod(channels = { "IronChest" }, versionBounds = "[4.2,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") From 86d66ff0dc352a25526e90d7df20e73a1745360c Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 23 Oct 2012 23:26:55 -0400 Subject: [PATCH 091/188] Fix forge dependency *sigh* --- IronChests2/common/cpw/mods/ironchest/IronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/IronChests2/common/cpw/mods/ironchest/IronChest.java index 9825327..1e65f7c 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/IronChest.java @@ -29,7 +29,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:FML@[6.0,)") +@Mod(modid = "IronChest", name = "Iron Chests", dependencies="required-after:Forge@[6.0,)") @NetworkMod(channels = { "IronChest" }, versionBounds = "[4.2,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class IronChest { public static BlockIronChest ironChestBlock; From 9210e63338582f3298c23c5b8303b2f2bcccdf7d Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 29 Oct 2012 22:25:19 -0400 Subject: [PATCH 092/188] Fix up some build stuff. This makes things a little bit prettier. --- IronChests2/build.xml | 25 +++++++------------ .../common/cpw/mods/ironchest/Version.java | 5 ++-- IronChests2/mcmod.info | 4 +-- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/IronChests2/build.xml b/IronChests2/build.xml index 2ddecf0..d7d5bb7 100644 --- a/IronChests2/build.xml +++ b/IronChests2/build.xml @@ -2,7 +2,7 @@ - - Iron Chest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java b/IronChests2/common/cpw/mods/ironchest/PacketHandler.java deleted file mode 100644 index 9cba6cb..0000000 --- a/IronChests2/common/cpw/mods/ironchest/PacketHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import net.minecraft.network.INetworkManager; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteStreams; - -import cpw.mods.fml.common.network.IPacketHandler; -import cpw.mods.fml.common.network.Player; - -public class PacketHandler implements IPacketHandler { - @Override - public void onPacketData(INetworkManager network, Packet250CustomPayload packet, Player player) - { - ByteArrayDataInput dat = ByteStreams.newDataInput(packet.data); - int x = dat.readInt(); - int y = dat.readInt(); - int z = dat.readInt(); - int typDat = dat.readByte(); - byte typ = (byte)(typDat & 0xf); - byte facing = (byte)((typDat >> 4) & 0xf); - boolean hasStacks = dat.readByte() != 0; - int[] items = new int[0]; - if (hasStacks) - { - items = new int[24]; - for (int i = 0; i < items.length; i++) - { - items[i] = dat.readInt(); - } - } - World world = IronChest.proxy.getClientWorld(); - TileEntity te = world.getBlockTileEntity(x, y, z); - if (te instanceof TileEntityIronChest) - { - TileEntityIronChest icte = (TileEntityIronChest) te; - icte.setFacing(facing); - icte.handlePacketData(typ, items); - } - } - - public static Packet getPacket(TileEntityIronChest tileEntityIronChest) - { - ByteArrayOutputStream bos = new ByteArrayOutputStream(140); - DataOutputStream dos = new DataOutputStream(bos); - int x = tileEntityIronChest.xCoord; - int y = tileEntityIronChest.yCoord; - int z = tileEntityIronChest.zCoord; - int typ = (tileEntityIronChest.getType().ordinal() | (tileEntityIronChest.getFacing() << 4)) & 0xFF; - int[] items = tileEntityIronChest.buildIntDataList(); - boolean hasStacks = (items != null); - try - { - dos.writeInt(x); - dos.writeInt(y); - dos.writeInt(z); - dos.writeByte(typ); - dos.writeByte(hasStacks ? 1 : 0); - if (hasStacks) - { - for (int i = 0; i < 24; i++) - { - dos.writeInt(items[i]); - } - } - } - catch (IOException e) - { - // UNPOSSIBLE? - } - Packet250CustomPayload pkt = new Packet250CustomPayload(); - pkt.channel = "IronChest"; - pkt.data = bos.toByteArray(); - pkt.length = bos.size(); - pkt.isChunkDataPacket = true; - return pkt; - } -} diff --git a/IronChests2/getversion.py b/IronChests2/getversion.py deleted file mode 100644 index 9298f71..0000000 --- a/IronChests2/getversion.py +++ /dev/null @@ -1,61 +0,0 @@ -import sys -import os -import commands -import fnmatch -import re -import subprocess, shlex - -mcp_home = sys.argv[1] -mcp_dir = os.path.abspath(mcp_home) - -print(mcp_dir) -sys.path.append(mcp_dir) - -from runtime.commands import Commands -Commands._version_config = os.path.join(mcp_dir,Commands._version_config) - -def cmdsplit(args): - if os.sep == '\\': - args = args.replace('\\', '\\\\') - return shlex.split(args) - -def cleanDirs(path): - if not os.path.isdir(path): - return - - files = os.listdir(path) - if len(files): - for f in files: - fullpath = os.path.join(path, f) - if os.path.isdir(fullpath): - cleanDirs(fullpath) - - files = os.listdir(path) - if len(files) == 0: - os.rmdir(path) - -def main(): - print("Obtaining version information from git") - cmd = "git describe --long --match='[^(jenkins)]*'" - try: - process = subprocess.Popen(cmdsplit(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1) - vers, _ = process.communicate() - except OSError: - print("Git not found") - vers="v1.0-0-deadbeef" - (major,minor,rev,githash)=re.match("v(\d+).(\d+)-(\d+)-(.*)",vers).groups() - - (mcpversion,mcversion,mcserverversion) = re.match("[.\w]+ \(data: ([.\w]+), client: ([.\w.]+), server: ([.\w.]+)\)",Commands.fullversion()).groups() - - with open("version.properties","w") as f: - f.write("%s=%s\n" %("IronChest.build.major.number",major)) - f.write("%s=%s\n" %("IronChest.build.minor.number",minor)) - f.write("%s=%s\n" %("IronChest.build.revision.number",rev)) - f.write("%s=%s\n" %("IronChest.build.githash",githash)) - f.write("%s=%s\n" %("IronChest.build.mcpversion",mcpversion)) - f.write("%s=%s\n" %("IronChest.build.mcversion",mcversion)) - - print("Version information: IronChest %s.%s.%s using MCP %s for %s" % (major, minor, rev, mcpversion, mcversion)) - -if __name__ == '__main__': - main() diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..90c3e8f --- /dev/null +++ b/build.gradle @@ -0,0 +1,107 @@ +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.1-SNAPSHOT' + } +} + +apply plugin: 'forge' + +def versionInfo = getGitVersion() +version = "${versionInfo['IronChest.version']}" + +group= "cpw.mods.ironchest" // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = "ironchest" + +minecraft { + version = "1.7.2-10.12.0.1024" +} + +logger.lifecycle "IronChest "+version + +processResources +{ + exclude '**/*.xcf' + // replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version + } + + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } + + // generate version properties file + doLast { + def propsFile = new File(destinationDir, 'version.properties') + def properties = new Properties() + + properties.putAll(versionInfo) + properties['IronChest.build.mcversion'] = project.minecraft.apiVersion + + properties.store(propsFile.newWriter(), null) + } +} + +jar { appendix = 'universal' } + +task sourceJar(type: Jar) { + from sourceSets.main.allSource + appendix = 'src' +} + +// because the normal default jar task has been modified to be obfuscated +task deobfJar(type: Jar) { + from sourceSets.main.output + appendix = 'deobf' +} + +artifacts { + archives sourceJar + archives deobfJar +} + + +// version +def getGitVersion() +{ + def out = [:] + + // call git command. + def outStream = new ByteArrayOutputStream() + def result = exec { + executable = 'git' + args = [ 'describe', '--long', "--match=[^(jenkins)]*"] + standardOutput = outStream + } + + def fullVersion = outStream.toString().trim() + def matcher = fullVersion =~ /(\d+).(\d+)-(\d+)-(.*)/ + + def maj = matcher[0][1] + def min = matcher[0][2] + def rev = matcher[0][3] + def bn = System.getProperty("BUILD_NUMBER","1") + out['IronChest.build.major.number'] = maj + out['IronChest.build.minor.number'] = min + out['IronChest.build.revision.number'] = rev + out['IronChest.build.githash'] = matcher[0][4] + out['IronChest.build.number' ] = bn + out['IronChest.version' ] = "${maj}.${min}.${rev}.${bn}" + + return out +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..667288ad6c2b3b87c990ece1267e56f0bcbf3622 GIT binary patch literal 50514 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java similarity index 84% rename from IronChests2/common/cpw/mods/ironchest/BlockIronChest.java rename to src/main/java/cpw/mods/ironchest/BlockIronChest.java index 586a5bb..e5f03a1 100644 --- a/IronChests2/common/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,8 +10,8 @@ ******************************************************************************/ package cpw.mods.ironchest; -import static net.minecraftforge.common.ForgeDirection.DOWN; -import static net.minecraftforge.common.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.UP; import java.util.ArrayList; import java.util.List; @@ -19,9 +19,10 @@ import java.util.Random; import com.google.common.collect.Lists; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -29,13 +30,14 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Icon; +import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -44,20 +46,23 @@ public class BlockIronChest extends BlockContainer { private Random random; @SideOnly(Side.CLIENT) - private Icon[][] icons; + private IIcon[][] icons; - public BlockIronChest(int id) + public BlockIronChest() { - super(id, Material.iron); - setUnlocalizedName("IronChest"); + super(Material.iron); + setBlockName("IronChest"); setHardness(3.0F); setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); random = new Random(); setCreativeTab(CreativeTabs.tabDecorations); } + /** + * Overridden by {@link #createTileEntity(World, int)} + */ @Override - public TileEntity createNewTileEntity(World w) + public TileEntity createNewTileEntity(World w, int i) { return null; } @@ -88,7 +93,7 @@ public class BlockIronChest extends BlockContainer { @SideOnly(Side.CLIENT) @Override - public Icon getIcon(int i, int j) + public IIcon getIcon(int i, int j) { if (j < IronChestType.values().length) { @@ -99,7 +104,7 @@ public class BlockIronChest extends BlockContainer { } @Override - public ArrayList getBlockDropped(World world, int x, int y, int z, int metadata, int fortune) + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { ArrayList items = Lists.newArrayList(); ItemStack stack = new ItemStack(this,1,metadata); @@ -110,14 +115,14 @@ public class BlockIronChest extends BlockContainer { @Override public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer player, int i1, float f1, float f2, float f3) { - TileEntity te = world.getBlockTileEntity(i, j, k); + TileEntity te = world.getTileEntity(i, j, k); if (te == null || !(te instanceof TileEntityIronChest)) { return true; } - if (world.isBlockSolidOnSide(i, j + 1, k, ForgeDirection.DOWN)) + if (world.isSideSolid(i, j + 1, k, ForgeDirection.DOWN)) { return true; } @@ -159,7 +164,7 @@ public class BlockIronChest extends BlockContainer { { chestFacing = 4; } - TileEntity te = world.getBlockTileEntity(i, j, k); + TileEntity te = world.getTileEntity(i, j, k); if (te != null && te instanceof TileEntityIronChest) { TileEntityIronChest teic = (TileEntityIronChest) te; @@ -176,9 +181,9 @@ public class BlockIronChest extends BlockContainer { } @Override - public void breakBlock(World world, int i, int j, int k, int i1, int i2) + public void breakBlock(World world, int i, int j, int k, Block i1, int i2) { - TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getBlockTileEntity(i, j, k); + TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getTileEntity(i, j, k); if (tileentitychest != null) { tileentitychest.removeAdornments(); @@ -208,7 +213,7 @@ public class BlockIronChest extends BlockContainer { } itemstack.stackSize -= i1; EntityItem entityitem = new EntityItem(world, (float) xCoord + f, (float) yCoord + (newSize > 0 ? 1 : 0) + f1, (float) zCoord + f2, - new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage())); + new ItemStack(itemstack.getItem(), i1, itemstack.getItemDamage())); float f3 = 0.05F; entityitem.motionX = (float) random.nextGaussian() * f3; entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F; @@ -225,7 +230,7 @@ public class BlockIronChest extends BlockContainer { @Override @SuppressWarnings({ "rawtypes", "unchecked" }) @SideOnly(Side.CLIENT) - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { for (IronChestType type : IronChestType.values()) { @@ -239,7 +244,7 @@ public class BlockIronChest extends BlockContainer { @Override public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) { - TileEntity te = world.getBlockTileEntity(x, y, z); + TileEntity te = world.getTileEntity(x, y, z); if (te instanceof TileEntityIronChest) { TileEntityIronChest teic = (TileEntityIronChest) te; @@ -255,13 +260,13 @@ public class BlockIronChest extends BlockContainer { @Override public int getComparatorInputOverride(World par1World, int par2, int par3, int par4, int par5) { - return Container.calcRedstoneFromInventory((TileEntityIronChest) par1World.getBlockTileEntity(par2, par3, par4)); + return Container.calcRedstoneFromInventory((TileEntityIronChest) par1World.getTileEntity(par2, par3, par4)); } @Override @SideOnly(Side.CLIENT) - public void registerIcons(IconRegister par1IconRegister) + public void registerBlockIcons(IIconRegister par1IconRegister) { for (IronChestType typ: IronChestType.values()) { @@ -285,7 +290,7 @@ public class BlockIronChest extends BlockContainer { } if (axis == UP || axis == DOWN) { - TileEntity tileEntity = worldObj.getBlockTileEntity(x, y, z); + TileEntity tileEntity = worldObj.getTileEntity(x, y, z); if (tileEntity instanceof TileEntityIronChest) { TileEntityIronChest icte = (TileEntityIronChest) tileEntity; icte.rotateAround(axis); diff --git a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java similarity index 88% rename from IronChests2/common/cpw/mods/ironchest/ChestChangerType.java rename to src/main/java/cpw/mods/ironchest/ChestChangerType.java index 4550e58..65dd56a 100644 --- a/IronChests2/common/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -14,9 +14,9 @@ import static cpw.mods.ironchest.IronChestType.IRON; import static cpw.mods.ironchest.IronChestType.OBSIDIAN; import static cpw.mods.ironchest.IronChestType.SILVER; import static cpw.mods.ironchest.IronChestType.WOOD; -import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraftforge.common.Configuration; +import net.minecraftforge.common.config.Configuration; import cpw.mods.fml.common.registry.GameRegistry; public enum ChestChangerType { @@ -56,10 +56,9 @@ public enum ChestChangerType { return this.target.ordinal(); } - public ItemChestChanger buildItem(Configuration cfg, int id) + public ItemChestChanger buildItem(Configuration cfg) { - int itemId = cfg.getItem(itemName, id).getInt(id); - item = new ItemChestChanger(itemId, this); + item = new ItemChestChanger(this); GameRegistry.registerItem(item, itemName); return item; } @@ -72,16 +71,16 @@ public enum ChestChangerType { { Object targetMaterial = IronChestType.translateOreName(targetMat); Object sourceMaterial = IronChestType.translateOreName(sourceMat); - IronChestType.addRecipe(new ItemStack(item), recipe, 'm', targetMaterial, 's', sourceMaterial, 'G', Block.glass, 'O', Block.obsidian); + IronChestType.addRecipe(new ItemStack(item), recipe, 'm', targetMaterial, 's', sourceMaterial, 'G', Blocks.glass, 'O', Blocks.obsidian); } } } - public static void buildItems(Configuration cfg, int defaultId) + public static void buildItems(Configuration cfg) { for (ChestChangerType type : values()) { - type.buildItem(cfg, defaultId++); + type.buildItem(cfg); } } diff --git a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java b/src/main/java/cpw/mods/ironchest/CommonProxy.java similarity index 90% rename from IronChests2/common/cpw/mods/ironchest/CommonProxy.java rename to src/main/java/cpw/mods/ironchest/CommonProxy.java index 3b1315c..9b82146 100644 --- a/IronChests2/common/cpw/mods/ironchest/CommonProxy.java +++ b/src/main/java/cpw/mods/ironchest/CommonProxy.java @@ -35,11 +35,11 @@ public class CommonProxy implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int X, int Y, int Z) { - TileEntity te = world.getBlockTileEntity(X, Y, Z); + TileEntity te = world.getTileEntity(X, Y, Z); if (te != null && te instanceof TileEntityIronChest) { TileEntityIronChest icte = (TileEntityIronChest) te; - return new ContainerIronChestBase(player.inventory, icte, icte.getType(), 0, 0); + return new ContainerIronChest(player.inventory, icte, icte.getType(), 0, 0); } else { diff --git a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java similarity index 93% rename from IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java rename to src/main/java/cpw/mods/ironchest/ContainerIronChest.java index 3228424..e4900cb 100644 --- a/IronChests2/common/cpw/mods/ironchest/ContainerIronChestBase.java +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -17,17 +17,17 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -public class ContainerIronChestBase extends Container { +public class ContainerIronChest extends Container { private IronChestType type; private EntityPlayer player; private IInventory chest; - public ContainerIronChestBase(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) + public ContainerIronChest(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) { chest = chestInventory; player = ((InventoryPlayer) playerInventory).player; this.type = type; - chestInventory.openChest(); + chestInventory.openInventory(); layoutContainer(playerInventory, chestInventory, type, xSize, ySize); } @@ -77,7 +77,7 @@ public class ContainerIronChestBase extends Container { public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); - chest.closeChest(); + chest.closeInventory(); } protected void layoutContainer(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) diff --git a/IronChests2/common/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java similarity index 79% rename from IronChests2/common/cpw/mods/ironchest/IronChest.java rename to src/main/java/cpw/mods/ironchest/IronChest.java index 36cf72b..27737e7 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,10 +10,9 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.logging.Level; - -import net.minecraftforge.common.Configuration; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import org.apache.logging.log4j.Level; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -22,12 +21,10 @@ import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[7.0,);required-after:FML@[5.0.5,)") -@NetworkMod(channels = { "IronChest" }, versionBounds = "[5.2,)", clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") @@ -36,7 +33,6 @@ public class IronChest { public static IronChest instance; public static boolean CACHE_RENDER = true; public static boolean OCELOTS_SITONCHESTS = true; - private int blockId; @EventHandler public void preInit(FMLPreInitializationEvent event) @@ -47,22 +43,22 @@ public class IronChest { try { cfg.load(); - blockId = cfg.getBlock("ironChests", 975).getInt(975); - ChestChangerType.buildItems(cfg, 19501); + ChestChangerType.buildItems(cfg); CACHE_RENDER = cfg.get(Configuration.CATEGORY_GENERAL, "cacheRenderingInformation", true).getBoolean(true); OCELOTS_SITONCHESTS = cfg.get(Configuration.CATEGORY_GENERAL, "ocelotsSitOnChests", true).getBoolean(true); } catch (Exception e) { - FMLLog.log(Level.SEVERE, e, "IronChest has a problem loading it's configuration"); + FMLLog.log(Level.ERROR, e, "IronChest has a problem loading it's configuration"); } finally { if (cfg.hasChanged()) cfg.save(); } - ironChestBlock = new BlockIronChest(blockId); + ironChestBlock = new BlockIronChest(); GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + PacketHandler.INSTANCE.ordinal(); } @EventHandler @@ -75,12 +71,12 @@ public class IronChest { } IronChestType.registerBlocksAndRecipes(ironChestBlock); ChestChangerType.generateRecipes(); - NetworkRegistry.instance().registerGuiHandler(instance, proxy); + NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); proxy.registerRenderInformation(); - if (OCELOTS_SITONCHESTS) - { - MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); - } +// if (OCELOTS_SITONCHESTS) +// { +// MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); +// } MinecraftForge.EVENT_BUS.register(this); } diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java b/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java similarity index 65% rename from IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java rename to src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java index 6e8c87b..51c2aa3 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestAIOcelotSit.java +++ b/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java @@ -10,13 +10,13 @@ public class IronChestAIOcelotSit extends EntityAIOcelotSit { super(par1EntityOcelot, par2); } - @Override - protected boolean isSittableBlock(World world, int x, int y, int z) +/* @Override + protected boolean func_151486_a(World world, int x, int y, int z) { - if (world.getBlockId(x, y, z) == IronChest.ironChestBlock.blockID) + if (world.getBlock(x, y, z) == IronChest.ironChestBlock) { return true; } - return super.isSittableBlock(world, x, y, z); + return super.func_151486_a(world, x, y, z); } -} +*/} diff --git a/IronChests2/common/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java similarity index 90% rename from IronChests2/common/cpw/mods/ironchest/IronChestType.java rename to src/main/java/cpw/mods/ironchest/IronChestType.java index 82a217f..0c7a7d3 100644 --- a/IronChests2/common/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -13,15 +13,15 @@ package cpw.mods.ironchest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; 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.minecraft.util.IIcon; import net.minecraftforge.oredict.ShapedOreRecipe; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -35,7 +35,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"), + DIRTCHEST9000(1, 1, false, "Dirt Chest 9000", "dirtchest.png",7,Arrays.asList("dirt"), TileEntityDirtChest.class,Item.getItemFromBlock(Blocks.dirt),"mmmmCmmmm"), WOOD(0, 0, false, "", "", -1, Arrays.asList("plankWood"), null); int size; private int rowLength; @@ -110,7 +110,7 @@ public enum IronChestType { public static void registerBlocksAndRecipes(BlockIronChest blockResult) { - ItemStack previous = new ItemStack(Block.chest); + ItemStack previous = new ItemStack(Blocks.chest); for (IronChestType typ : values()) { generateRecipesForType(blockResult, previous, typ); @@ -131,7 +131,7 @@ public enum IronChestType { mainMaterial = translateOreName(mat); addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mainMaterial, 'P', previousTier, /* previous tier of chest */ - 'G', Block.glass, 'C', Block.chest, + 'G', Blocks.glass, 'C', Blocks.chest, '0', new ItemStack(blockResult, 1, 0), /* Iron Chest */ '1', new ItemStack(blockResult, 1, 1), /* Gold Chest */ '2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */ @@ -146,27 +146,27 @@ public enum IronChestType { { if (mat == "ingotIron") { - return Item.ingotIron; + return Items.iron_ingot; } else if (mat == "ingotGold") { - return Item.ingotGold; + return Items.gold_ingot; } else if (mat == "gemDiamond") { - return Item.diamond; + return Items.diamond; } else if (mat == "blockGlass") { - return Block.glass; + return Blocks.glass; } else if (mat == "obsidian") { - return Block.obsidian; + return Blocks.obsidian; } else if (mat == "dirt") { - return Block.dirt; + return Blocks.dirt; } return mat; } @@ -220,14 +220,14 @@ public enum IronChestType { } @SideOnly(Side.CLIENT) - private Icon[] icons; + private IIcon[] icons; @SideOnly(Side.CLIENT) - public void makeIcons(IconRegister par1IconRegister) + public void makeIcons(IIconRegister par1IconRegister) { if (isValidForCreativeMode()) { - icons = new Icon[3]; + icons = new IIcon[3]; int i = 0; for (String s : sideNames) { @@ -237,7 +237,7 @@ public enum IronChestType { } @SideOnly(Side.CLIENT) - public Icon getIcon(int side) + public IIcon getIcon(int side) { return icons[sideMapping[side]]; @@ -259,7 +259,7 @@ public enum IronChestType { { if (this == DIRTCHEST9000) { - item.setTagInfo("dirtchest", new NBTTagByte("",(byte) 1)); + item.setTagInfo("dirtchest", new NBTTagByte((byte) 1)); } } } diff --git a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java similarity index 88% rename from IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java rename to src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 8d1e6f3..0677f08 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -10,9 +10,10 @@ ******************************************************************************/ package cpw.mods.ironchest; -import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -26,9 +27,9 @@ public class ItemChestChanger extends Item { private ChestChangerType type; - public ItemChestChanger(int id, ChestChangerType type) + public ItemChestChanger(ChestChangerType type) { - super(id); + super(); setMaxStackSize(1); this.type = type; setUnlocalizedName("ironchest:"+type.name()); @@ -38,7 +39,7 @@ public class ItemChestChanger extends Item { @Override @SideOnly(Side.CLIENT) - public void registerIcons(IconRegister par1IconRegister) + public void registerIcons(IIconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon("ironchest:"+type.itemName); } @@ -47,7 +48,7 @@ public class ItemChestChanger extends Item { public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side, float hitX, float hitY, float hitZ) { if (world.isRemote) return false; - TileEntity te = world.getBlockTileEntity(X, Y, Z); + TileEntity te = world.getTileEntity(X, Y, Z); TileEntityIronChest newchest; if (te != null && te instanceof TileEntityIronChest) { @@ -61,7 +62,7 @@ public class ItemChestChanger extends Item { else if (te != null && te instanceof TileEntityChest) { TileEntityChest tec = (TileEntityChest) te; - if (tec.numUsingPlayers > 0) + if (tec.numPlayersUsing > 0) { return false; } @@ -83,20 +84,20 @@ public class ItemChestChanger extends Item { chestContents[i] = null; } // Clear the old block out - world.setBlock(X, Y, Z, 0, 0, 3); + world.setBlock(X, Y, Z, Blocks.air, 0, 3); // Force the Chest TE to reset it's knowledge of neighbouring blocks tec.updateContainingBlockInfo(); // Force the Chest TE to update any neighbours so they update next // tick tec.checkForAdjacentChests(); // And put in our block instead - world.setBlock(X, Y, Z, block.blockID, newchest.getType().ordinal(), 3); + world.setBlock(X, Y, Z, block, newchest.getType().ordinal(), 3); } else { return false; } - world.setBlockTileEntity(X, Y, Z, newchest); + world.setTileEntity(X, Y, Z, newchest); world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal(), 3); stack.stackSize = 0; return true; diff --git a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java b/src/main/java/cpw/mods/ironchest/ItemIronChest.java similarity index 91% rename from IronChests2/common/cpw/mods/ironchest/ItemIronChest.java rename to src/main/java/cpw/mods/ironchest/ItemIronChest.java index 00ce5a6..0b3b8e2 100644 --- a/IronChests2/common/cpw/mods/ironchest/ItemIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ItemIronChest.java @@ -10,14 +10,15 @@ ******************************************************************************/ package cpw.mods.ironchest; +import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; public class ItemIronChest extends ItemBlock { - public ItemIronChest(int id) + public ItemIronChest(Block block) { - super(id); + super(block); setMaxDamage(0); setHasSubtypes(true); } diff --git a/IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java b/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java similarity index 88% rename from IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java rename to src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java index e74a7f5..95a8a40 100644 --- a/IronChests2/common/cpw/mods/ironchest/MappableItemStackWrapper.java +++ b/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java @@ -21,13 +21,13 @@ public class MappableItemStackWrapper { } else { - return isw.wrap.itemID == wrap.itemID; + return isw.wrap == wrap; } } @Override public int hashCode() { - return wrap.itemID; + return System.identityHashCode(wrap); } } diff --git a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java similarity index 76% rename from IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java rename to src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index bb994c7..3e3283e 100644 --- a/IronChests2/common/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -1,26 +1,25 @@ package cpw.mods.ironchest; import java.util.List; - +import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.entity.ai.EntityAIOcelotSit; -import net.minecraft.entity.ai.EntityAITaskEntry; +import net.minecraft.entity.ai.EntityAITasks; import net.minecraft.entity.passive.EntityOcelot; -import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingEvent; public class OcelotsSitOnChestsHandler { - @ForgeSubscribe + @SubscribeEvent public void changeSittingTaskForOcelots(LivingEvent.LivingUpdateEvent evt) { if (evt.entityLiving.ticksExisted < 5 && evt.entityLiving instanceof EntityOcelot) { EntityOcelot ocelot = (EntityOcelot) evt.entityLiving; @SuppressWarnings("unchecked") - List tasks = ocelot.tasks.taskEntries; + List tasks = ocelot.tasks.taskEntries; for (int i = 0; i < tasks.size(); i++) { - EntityAITaskEntry task = tasks.get(i); + EntityAITasks.EntityAITaskEntry task = tasks.get(i); if (task.priority == 6 && (task.action instanceof EntityAIOcelotSit) && !(task.action instanceof IronChestAIOcelotSit)) { task.action = new IronChestAIOcelotSit(ocelot, 0.4F); diff --git a/src/main/java/cpw/mods/ironchest/PacketHandler.java b/src/main/java/cpw/mods/ironchest/PacketHandler.java new file mode 100644 index 0000000..6466c82 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/PacketHandler.java @@ -0,0 +1,131 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import java.util.EnumMap; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.network.FMLEmbeddedChannel; +import cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public enum PacketHandler { + INSTANCE; + private EnumMap channels; + + private PacketHandler() + { + this.channels = NetworkRegistry.INSTANCE.newChannel("IronChest", new IronChestCodec()); + if (FMLCommonHandler.instance().getSide() == Side.CLIENT) + { + addClientHandler(); + } + } + + @SideOnly(Side.CLIENT) + private void addClientHandler() { + FMLEmbeddedChannel clientChannel = this.channels.get(Side.CLIENT); + String codec = clientChannel.findChannelHandlerNameForType(IronChestCodec.class); + clientChannel.pipeline().addAfter(codec, "ClientHandler", new IronChestMessageHandler()); + } + + private static class IronChestMessageHandler extends SimpleChannelInboundHandler + { + @Override + protected void channelRead0(ChannelHandlerContext ctx, IronChestMessage msg) throws Exception + { + World world = IronChest.proxy.getClientWorld(); + TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z); + if (te instanceof TileEntityIronChest) + { + TileEntityIronChest icte = (TileEntityIronChest) te; + icte.setFacing(msg.facing); + icte.handlePacketData(msg.type, msg.items); + } + } + } + public static class IronChestMessage + { + int x; + int y; + int z; + int type; + int facing; + int[] items; + } + private class IronChestCodec extends FMLIndexedMessageToMessageCodec + { + public IronChestCodec() + { + addDiscriminator(0, IronChestMessage.class); + } + @Override + public void encodeInto(ChannelHandlerContext ctx, IronChestMessage msg, ByteBuf target) throws Exception + { + target.writeInt(msg.x); + target.writeInt(msg.y); + target.writeInt(msg.z); + int typeAndFacing = ((msg.type & 0x0F) | ((msg.facing & 0x0F) << 4)) & 0xFF; + target.writeByte(typeAndFacing); + target.writeBoolean(msg.items != null); + if (msg.items != null) + { + int[] items = msg.items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + } + } + } + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, IronChestMessage msg) + { + msg.x = dat.readInt(); + msg.y = dat.readInt(); + msg.z = dat.readInt(); + int typDat = dat.readByte(); + msg.type = (byte)(typDat & 0xf); + msg.facing = (byte)((typDat >> 4) & 0xf); + boolean hasStacks = dat.readBoolean(); + msg.items = new int[0]; + if (hasStacks) + { + msg.items = new int[24]; + for (int i = 0; i < msg.items.length; i++) + { + msg.items[i] = dat.readInt(); + } + } + } + + } + + public static Packet getPacket(TileEntityIronChest tileEntityIronChest) + { + IronChestMessage msg = new IronChestMessage(); + msg.x = tileEntityIronChest.xCoord; + msg.y = tileEntityIronChest.yCoord; + msg.z = tileEntityIronChest.zCoord; + msg.type = tileEntityIronChest.getType().ordinal(); + msg.facing = tileEntityIronChest.getFacing(); + msg.items = tileEntityIronChest.buildIntDataList(); + return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); + } +} diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java b/src/main/java/cpw/mods/ironchest/TileEntityCopperChest.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/TileEntityCopperChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityCopperChest.java diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java b/src/main/java/cpw/mods/ironchest/TileEntityCrystalChest.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/TileEntityCrystalChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityCrystalChest.java diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java b/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/TileEntityDiamondChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java b/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java similarity index 56% rename from IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java index 56c0b7d..a7608c0 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityDirtChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java @@ -1,32 +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.entity.EntityLivingBase; -import net.minecraft.item.Item; +import net.minecraft.init.Items; 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); + private static ItemStack dirtChest9000GuideBook = new ItemStack(Items.written_book); static { - dirtChest9000GuideBook.setTagInfo("author", new NBTTagString("author", "cpw")); - dirtChest9000GuideBook.setTagInfo("title", new NBTTagString("title", StatCollector.translateToLocal("book.ironchest:dirtchest9000.title"))); + dirtChest9000GuideBook.setTagInfo("author", new NBTTagString("cpw")); + dirtChest9000GuideBook.setTagInfo("title", new NBTTagString(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"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page1"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page2"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page3"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page4"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page5"))); dirtChest9000GuideBook.setTagInfo("pages", pages); } public TileEntityDirtChest() { super(IronChestType.DIRTCHEST9000); } - + @Override public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) { @@ -34,7 +31,7 @@ public class TileEntityDirtChest extends TileEntityIronChest { setInventorySlotContents(0, dirtChest9000GuideBook.copy()); } } - + @Override public void removeAdornments() { diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java b/src/main/java/cpw/mods/ironchest/TileEntityGoldChest.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/TileEntityGoldChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityGoldChest.java diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java similarity index 87% rename from IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index f346db3..404757e 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -18,13 +18,15 @@ import java.util.List; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.packet.Packet; +import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityIronChest extends TileEntity implements IInventory { private int ticksSinceSync = -1; @@ -34,7 +36,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { private IronChestType type; public ItemStack[] chestContents; private ItemStack[] topStacks; - private byte facing; + private int facing; private boolean inventoryTouched; private boolean hadStuff; @@ -62,13 +64,13 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return type.size; } - public byte getFacing() + public int getFacing() { return this.facing; } @Override - public String getInvName() + public String getInventoryName() { return type.name(); } @@ -86,9 +88,9 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } @Override - public void onInventoryChanged() + public void markDirty() { - super.onInventoryChanged(); + super.markDirty(); sortTopStacks(); } @@ -180,7 +182,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { ItemStack itemstack = chestContents[i]; chestContents[i] = null; - onInventoryChanged(); + markDirty(); return itemstack; } ItemStack itemstack1 = chestContents[i].splitStack(j); @@ -188,7 +190,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { chestContents[i] = null; } - onInventoryChanged(); + markDirty(); return itemstack1; } else @@ -205,18 +207,18 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { itemstack.stackSize = getInventoryStackLimit(); } - onInventoryChanged(); + markDirty(); } @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); - NBTTagList nbttaglist = nbttagcompound.getTagList("Items"); + NBTTagList nbttaglist = nbttagcompound.getTagList("Items", Constants.NBT.TAG_COMPOUND); chestContents = new ItemStack[getSizeInventory()]; for (int i = 0; i < nbttaglist.tagCount(); i++) { - NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.tagAt(i); + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); int j = nbttagcompound1.getByte("Slot") & 0xff; if (j >= 0 && j < chestContents.length) { @@ -244,7 +246,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } nbttagcompound.setTag("Items", nbttaglist); - nbttagcompound.setByte("facing", facing); + nbttagcompound.setByte("facing", (byte)facing); } @Override @@ -260,7 +262,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { return true; } - if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this) + if (worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { return false; } @@ -276,14 +278,15 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { this.numUsingPlayers = 0; float var1 = 5.0F; - List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); - Iterator var3 = var2.iterator(); + @SuppressWarnings("unchecked") + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); + Iterator var3 = var2.iterator(); while (var3.hasNext()) { - EntityPlayer var4 = (EntityPlayer)var3.next(); + EntityPlayer var4 = var3.next(); - if (var4.openContainer instanceof ContainerIronChestBase) + if (var4.openContainer instanceof ContainerIronChest) { ++this.numUsingPlayers; } @@ -292,7 +295,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (worldObj != null && !worldObj.isRemote && ticksSinceSync < 0) { - worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); + worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); } if (!worldObj.isRemote && inventoryTouched) { @@ -358,24 +361,24 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } @Override - public void openChest() + public void openInventory() { if (worldObj == null) return; numUsingPlayers++; - worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 1, numUsingPlayers); + worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock, 1, numUsingPlayers); } @Override - public void closeChest() + public void closeInventory() { if (worldObj == null) return; numUsingPlayers--; - worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 1, numUsingPlayers); + worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock, 1, numUsingPlayers); } - public void setFacing(byte chestFacing) + public void setFacing(int facing2) { - this.facing = chestFacing; + this.facing = facing2; } public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) @@ -410,8 +413,8 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { if (l != type.ordinal()) { - worldObj.setBlockTileEntity(xCoord, yCoord, zCoord, IronChestType.makeEntity(l)); - return (TileEntityIronChest) worldObj.getBlockTileEntity(xCoord, yCoord, zCoord); + worldObj.setTileEntity(xCoord, yCoord, zCoord, IronChestType.makeEntity(l)); + return (TileEntityIronChest) worldObj.getTileEntity(xCoord, yCoord, zCoord); } } return this; @@ -441,7 +444,8 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { if (intData[pos + 2] != 0) { - ItemStack is = new ItemStack(intData[pos], intData[pos + 2], intData[pos + 1]); + Item it = Item.getItemById(intData[pos]); + ItemStack is = new ItemStack(it, intData[pos + 2], intData[pos + 1]); chest.topStacks[i] = is; } else @@ -463,7 +467,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { if (is != null) { - sortList[pos++] = is.itemID; + sortList[pos++] = Item.getIdFromItem(is.getItem()); sortList[pos++] = is.getItemDamage(); sortList[pos++] = is.stackSize; } @@ -479,6 +483,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return null; } + @Override public ItemStack getStackInSlotOnClosing(int par1) { if (this.chestContents[par1] != null) @@ -505,7 +510,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { } @Override - public boolean isInvNameLocalized() + public boolean hasCustomInventoryName() { return false; } @@ -513,7 +518,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { void rotateAround(ForgeDirection axis) { setFacing((byte)ForgeDirection.getOrientation(facing).getRotation(axis).ordinal()); - worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 2, getFacing()); + worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, IronChest.ironChestBlock, 2, getFacing()); } public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) @@ -522,6 +527,6 @@ public class TileEntityIronChest extends TileEntity implements IInventory { public void removeAdornments() { - + } } diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityObsidianChest.java b/src/main/java/cpw/mods/ironchest/TileEntityObsidianChest.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/TileEntityObsidianChest.java rename to src/main/java/cpw/mods/ironchest/TileEntityObsidianChest.java diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java b/src/main/java/cpw/mods/ironchest/TileEntitySilverChest.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/TileEntitySilverChest.java rename to src/main/java/cpw/mods/ironchest/TileEntitySilverChest.java diff --git a/IronChests2/common/cpw/mods/ironchest/ValidatingSlot.java b/src/main/java/cpw/mods/ironchest/ValidatingSlot.java similarity index 100% rename from IronChests2/common/cpw/mods/ironchest/ValidatingSlot.java rename to src/main/java/cpw/mods/ironchest/ValidatingSlot.java diff --git a/IronChests2/common/cpw/mods/ironchest/Version.java b/src/main/java/cpw/mods/ironchest/Version.java similarity index 97% rename from IronChests2/common/cpw/mods/ironchest/Version.java rename to src/main/java/cpw/mods/ironchest/Version.java index 07096d7..791e78d 100644 --- a/IronChests2/common/cpw/mods/ironchest/Version.java +++ b/src/main/java/cpw/mods/ironchest/Version.java @@ -13,6 +13,7 @@ public class Version { private static String minor; private static String rev; private static String build; + @SuppressWarnings("unused") private static String mcversion; static void init(Properties properties) diff --git a/IronChests2/common/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java similarity index 88% rename from IronChests2/common/cpw/mods/ironchest/client/ClientProxy.java rename to src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 4571019..1885523 100644 --- a/IronChests2/common/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -10,7 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest.client; -import net.minecraft.client.renderer.ChestItemRenderHelper; +import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -24,7 +24,7 @@ public class ClientProxy extends CommonProxy { @Override public void registerRenderInformation() { - ChestItemRenderHelper.instance = new IronChestRenderHelper(); + TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); } @Override @@ -42,7 +42,7 @@ public class ClientProxy extends CommonProxy { @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - TileEntity te = world.getBlockTileEntity(x, y, z); + TileEntity te = world.getTileEntity(x, y, z); if (te != null && te instanceof TileEntityIronChest) { return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); diff --git a/IronChests2/common/cpw/mods/ironchest/client/GUIChest.java b/src/main/java/cpw/mods/ironchest/client/GUIChest.java similarity index 96% rename from IronChests2/common/cpw/mods/ironchest/client/GUIChest.java rename to src/main/java/cpw/mods/ironchest/client/GUIChest.java index d40a7af..345791b 100644 --- a/IronChests2/common/cpw/mods/ironchest/client/GUIChest.java +++ b/src/main/java/cpw/mods/ironchest/client/GUIChest.java @@ -17,7 +17,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import cpw.mods.ironchest.ContainerIronChestBase; +import cpw.mods.ironchest.ContainerIronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; @@ -60,7 +60,7 @@ public class GUIChest extends GuiContainer { protected Container makeContainer(IInventory player, IInventory chest) { - return new ContainerIronChestBase(player, chest, mainType, xSize, ySize); + return new ContainerIronChest(player, chest, mainType, xSize, ySize); } public static GUIChest buildGUI(IronChestType type, IInventory playerInventory, TileEntityIronChest chestInventory) diff --git a/IronChests2/common/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java similarity index 82% rename from IronChests2/common/cpw/mods/ironchest/client/IronChestRenderHelper.java rename to src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java index 3b51b9d..36b5534 100644 --- a/IronChests2/common/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -11,18 +11,15 @@ package cpw.mods.ironchest.client; import java.util.Map; - import net.minecraft.block.Block; -import net.minecraft.client.renderer.ChestItemRenderHelper; -import net.minecraft.client.renderer.tileentity.TileEntityRenderer; - +import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import com.google.common.collect.Maps; - import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -public class IronChestRenderHelper extends ChestItemRenderHelper { +public class IronChestRenderHelper extends TileEntityRendererChestHelper { private Map itemRenders = Maps.newHashMap(); public IronChestRenderHelper() @@ -38,7 +35,7 @@ public class IronChestRenderHelper extends ChestItemRenderHelper { { if (block == IronChest.ironChestBlock) { - TileEntityRenderer.instance.renderTileEntityAt(itemRenders.get(i), 0.0D, 0.0D, 0.0D, 0.0F); + TileEntityRendererDispatcher.instance.renderTileEntityAt(itemRenders.get(i), 0.0D, 0.0D, 0.0D, 0.0F); } else { diff --git a/IronChests2/common/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java similarity index 91% rename from IronChests2/common/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java rename to src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 0e230d7..3749e26 100644 --- a/IronChests2/common/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -18,11 +18,9 @@ import static org.lwjgl.opengl.GL11.glPushMatrix; import static org.lwjgl.opengl.GL11.glRotatef; import static org.lwjgl.opengl.GL11.glScalef; import static org.lwjgl.opengl.GL11.glTranslatef; - import java.util.HashMap; import java.util.Map; import java.util.Random; - import net.minecraft.client.model.ModelChest; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.RenderItem; @@ -32,16 +30,15 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; - import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.primitives.SignedBytes; - import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { + @SuppressWarnings("unused") private static Map renderList = new HashMap(); private static Map locations; @@ -54,6 +51,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } private Random random; + @SuppressWarnings("unused") private RenderBlocks renderBlocks; private RenderItem itemRenderer; @@ -68,11 +66,11 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { renderBlocks = new RenderBlocks(); itemRenderer = new RenderItem() { @Override - public byte getMiniBlockCount(ItemStack stack) { + public byte getMiniBlockCount(ItemStack stack, byte original) { return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 15) + 1); } @Override - public byte getMiniItemCount(ItemStack stack) { + public byte getMiniItemCount(ItemStack stack, byte original) { return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 7) + 1); } @Override @@ -93,7 +91,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } int facing = 3; IronChestType type = tile.getType(); - if (tile != null && tile.getWorldObj() != null) { + if (tile != null && tile.hasWorldObj()) { facing = tile.getFacing(); type = tile.getType(); int typ = tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); @@ -130,7 +128,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if (type.isTransparent() && tile.getDistanceFrom(this.tileEntityRenderer.playerX, this.tileEntityRenderer.playerY, this.tileEntityRenderer.playerZ) < 128d) { + if (type.isTransparent() && tile.getDistanceFrom(this.field_147501_a.field_147560_j, this.field_147501_a.field_147561_k, this.field_147501_a.field_147558_l) < 128d) { random.setSeed(254L); float shiftX; float shiftY; @@ -145,7 +143,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glPushMatrix(); glDisable(2896 /* GL_LIGHTING */); glTranslatef((float) x, (float) y, (float) z); - EntityItem customitem = new EntityItem(tileEntityRenderer.worldObj); + EntityItem customitem = new EntityItem(field_147501_a.field_147550_f); customitem.hoverStart = 0f; for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { @@ -164,7 +162,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { glRotatef(timeD, 0.0F, 1.0F, 0.0F); glScalef(blockScale, blockScale, blockScale); customitem.setEntityItemStack(item); - itemRenderer.doRenderItem(customitem, 0, 0, 0, 0, 0); + itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); glPopMatrix(); } glEnable(2896 /* GL_LIGHTING */); @@ -173,6 +171,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { } } + @Override public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick) { render((TileEntityIronChest) tileentity, x, y, z, partialTick); diff --git a/IronChests2/resources/assets/ironchest/lang/cs_CZ.lang b/src/main/resources/assets/ironchest/lang/cs_CZ.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/cs_CZ.lang rename to src/main/resources/assets/ironchest/lang/cs_CZ.lang diff --git a/IronChests2/resources/assets/ironchest/lang/da_DK.lang b/src/main/resources/assets/ironchest/lang/da_DK.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/da_DK.lang rename to src/main/resources/assets/ironchest/lang/da_DK.lang diff --git a/IronChests2/resources/assets/ironchest/lang/de_DE.lang b/src/main/resources/assets/ironchest/lang/de_DE.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/de_DE.lang rename to src/main/resources/assets/ironchest/lang/de_DE.lang diff --git a/IronChests2/resources/assets/ironchest/lang/en_US.lang b/src/main/resources/assets/ironchest/lang/en_US.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/en_US.lang rename to src/main/resources/assets/ironchest/lang/en_US.lang diff --git a/IronChests2/resources/assets/ironchest/lang/es_ES.lang b/src/main/resources/assets/ironchest/lang/es_ES.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/es_ES.lang rename to src/main/resources/assets/ironchest/lang/es_ES.lang diff --git a/IronChests2/resources/assets/ironchest/lang/fr_FR.lang b/src/main/resources/assets/ironchest/lang/fr_FR.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/fr_FR.lang rename to src/main/resources/assets/ironchest/lang/fr_FR.lang diff --git a/IronChests2/resources/assets/ironchest/lang/pl_PL.lang b/src/main/resources/assets/ironchest/lang/pl_PL.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/pl_PL.lang rename to src/main/resources/assets/ironchest/lang/pl_PL.lang diff --git a/IronChests2/resources/assets/ironchest/lang/ru_RU.lang b/src/main/resources/assets/ironchest/lang/ru_RU.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/ru_RU.lang rename to src/main/resources/assets/ironchest/lang/ru_RU.lang diff --git a/IronChests2/resources/assets/ironchest/lang/sv_SE.lang b/src/main/resources/assets/ironchest/lang/sv_SE.lang similarity index 100% rename from IronChests2/resources/assets/ironchest/lang/sv_SE.lang rename to src/main/resources/assets/ironchest/lang/sv_SE.lang diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/copper_front.png b/src/main/resources/assets/ironchest/textures/blocks/copper_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/copper_front.png rename to src/main/resources/assets/ironchest/textures/blocks/copper_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/copper_side.png b/src/main/resources/assets/ironchest/textures/blocks/copper_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/copper_side.png rename to src/main/resources/assets/ironchest/textures/blocks/copper_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/copper_top.png b/src/main/resources/assets/ironchest/textures/blocks/copper_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/copper_top.png rename to src/main/resources/assets/ironchest/textures/blocks/copper_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/crystal_front.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/crystal_front.png rename to src/main/resources/assets/ironchest/textures/blocks/crystal_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/crystal_side.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/crystal_side.png rename to src/main/resources/assets/ironchest/textures/blocks/crystal_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/crystal_top.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/crystal_top.png rename to src/main/resources/assets/ironchest/textures/blocks/crystal_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/diamond_front.png b/src/main/resources/assets/ironchest/textures/blocks/diamond_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/diamond_front.png rename to src/main/resources/assets/ironchest/textures/blocks/diamond_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/diamond_side.png b/src/main/resources/assets/ironchest/textures/blocks/diamond_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/diamond_side.png rename to src/main/resources/assets/ironchest/textures/blocks/diamond_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/diamond_top.png b/src/main/resources/assets/ironchest/textures/blocks/diamond_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/diamond_top.png rename to src/main/resources/assets/ironchest/textures/blocks/diamond_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/gold_front.png b/src/main/resources/assets/ironchest/textures/blocks/gold_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/gold_front.png rename to src/main/resources/assets/ironchest/textures/blocks/gold_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/gold_side.png b/src/main/resources/assets/ironchest/textures/blocks/gold_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/gold_side.png rename to src/main/resources/assets/ironchest/textures/blocks/gold_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/gold_top.png b/src/main/resources/assets/ironchest/textures/blocks/gold_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/gold_top.png rename to src/main/resources/assets/ironchest/textures/blocks/gold_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/iron_front.png b/src/main/resources/assets/ironchest/textures/blocks/iron_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/iron_front.png rename to src/main/resources/assets/ironchest/textures/blocks/iron_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/iron_side.png b/src/main/resources/assets/ironchest/textures/blocks/iron_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/iron_side.png rename to src/main/resources/assets/ironchest/textures/blocks/iron_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/iron_top.png b/src/main/resources/assets/ironchest/textures/blocks/iron_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/iron_top.png rename to src/main/resources/assets/ironchest/textures/blocks/iron_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/obsidian_front.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/obsidian_front.png rename to src/main/resources/assets/ironchest/textures/blocks/obsidian_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/obsidian_side.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/obsidian_side.png rename to src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/obsidian_top.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/obsidian_top.png rename to src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/silver_front.png b/src/main/resources/assets/ironchest/textures/blocks/silver_front.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/silver_front.png rename to src/main/resources/assets/ironchest/textures/blocks/silver_front.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/silver_side.png b/src/main/resources/assets/ironchest/textures/blocks/silver_side.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/silver_side.png rename to src/main/resources/assets/ironchest/textures/blocks/silver_side.png diff --git a/IronChests2/resources/assets/ironchest/textures/blocks/silver_top.png b/src/main/resources/assets/ironchest/textures/blocks/silver_top.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/blocks/silver_top.png rename to src/main/resources/assets/ironchest/textures/blocks/silver_top.png diff --git a/IronChests2/resources/assets/ironchest/textures/gui/coppercontainer.png b/src/main/resources/assets/ironchest/textures/gui/coppercontainer.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/gui/coppercontainer.png rename to src/main/resources/assets/ironchest/textures/gui/coppercontainer.png diff --git a/IronChests2/resources/assets/ironchest/textures/gui/diamondcontainer.png b/src/main/resources/assets/ironchest/textures/gui/diamondcontainer.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/gui/diamondcontainer.png rename to src/main/resources/assets/ironchest/textures/gui/diamondcontainer.png diff --git a/IronChests2/resources/assets/ironchest/textures/gui/dirtcontainer.png b/src/main/resources/assets/ironchest/textures/gui/dirtcontainer.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/gui/dirtcontainer.png rename to src/main/resources/assets/ironchest/textures/gui/dirtcontainer.png diff --git a/IronChests2/resources/assets/ironchest/textures/gui/goldcontainer.png b/src/main/resources/assets/ironchest/textures/gui/goldcontainer.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/gui/goldcontainer.png rename to src/main/resources/assets/ironchest/textures/gui/goldcontainer.png diff --git a/IronChests2/resources/assets/ironchest/textures/gui/ironcontainer.png b/src/main/resources/assets/ironchest/textures/gui/ironcontainer.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/gui/ironcontainer.png rename to src/main/resources/assets/ironchest/textures/gui/ironcontainer.png diff --git a/IronChests2/resources/assets/ironchest/textures/gui/silvercontainer.png b/src/main/resources/assets/ironchest/textures/gui/silvercontainer.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/gui/silvercontainer.png rename to src/main/resources/assets/ironchest/textures/gui/silvercontainer.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/copperIronUpgrade.png b/src/main/resources/assets/ironchest/textures/items/copperIronUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/copperIronUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/copperIronUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/copperSilverUpgrade.png b/src/main/resources/assets/ironchest/textures/items/copperSilverUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/copperSilverUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/copperSilverUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/diamondCrystalUpgrade.png b/src/main/resources/assets/ironchest/textures/items/diamondCrystalUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/diamondCrystalUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/diamondCrystalUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/diamondObsidianUpgrade.png b/src/main/resources/assets/ironchest/textures/items/diamondObsidianUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/diamondObsidianUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/diamondObsidianUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png b/src/main/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/ironGoldUpgrade.png b/src/main/resources/assets/ironchest/textures/items/ironGoldUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/ironGoldUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/ironGoldUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/silverGoldUpgrade.png b/src/main/resources/assets/ironchest/textures/items/silverGoldUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/silverGoldUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/silverGoldUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/woodCopperUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/woodCopperUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/items/woodIronUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/items/woodIronUpgrade.png rename to src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/copperchest.png b/src/main/resources/assets/ironchest/textures/model/copperchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/copperchest.png rename to src/main/resources/assets/ironchest/textures/model/copperchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/crystalchest.png b/src/main/resources/assets/ironchest/textures/model/crystalchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/crystalchest.png rename to src/main/resources/assets/ironchest/textures/model/crystalchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/diamondchest.png b/src/main/resources/assets/ironchest/textures/model/diamondchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/diamondchest.png rename to src/main/resources/assets/ironchest/textures/model/diamondchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/dirtchest.png b/src/main/resources/assets/ironchest/textures/model/dirtchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/dirtchest.png rename to src/main/resources/assets/ironchest/textures/model/dirtchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/goldchest.png b/src/main/resources/assets/ironchest/textures/model/goldchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/goldchest.png rename to src/main/resources/assets/ironchest/textures/model/goldchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/ironchest.png b/src/main/resources/assets/ironchest/textures/model/ironchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/ironchest.png rename to src/main/resources/assets/ironchest/textures/model/ironchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/obsidianchest.png b/src/main/resources/assets/ironchest/textures/model/obsidianchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/obsidianchest.png rename to src/main/resources/assets/ironchest/textures/model/obsidianchest.png diff --git a/IronChests2/resources/assets/ironchest/textures/model/silverchest.png b/src/main/resources/assets/ironchest/textures/model/silverchest.png similarity index 100% rename from IronChests2/resources/assets/ironchest/textures/model/silverchest.png rename to src/main/resources/assets/ironchest/textures/model/silverchest.png diff --git a/IronChests2/resources/itemsheet.xcf b/src/main/resources/itemsheet.xcf similarity index 100% rename from IronChests2/resources/itemsheet.xcf rename to src/main/resources/itemsheet.xcf diff --git a/IronChests2/mcmod.info b/src/main/resources/mcmod.info similarity index 89% rename from IronChests2/mcmod.info rename to src/main/resources/mcmod.info index 890cfda..d3ab3dc 100644 --- a/IronChests2/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,8 +3,8 @@ "modid": "IronChest", "name": "Iron Chest", "description": "New chests with larger sizes, with in-place upgrade items.\nThe feature chest is the crystal chest, which is transparent - some inventory contents are visible without opening the chest", - "version": "@VERSION@", - "mcversion": "1.6.2", + "version": "${version}", + "mcversion": ${mcversion}", "url": "http://www.minecraftforum.net/topic/981855-", "updateUrl": "", "authors": [ diff --git a/IronChests2/resources/texturesheet.xcf b/src/main/resources/texturesheet.xcf similarity index 100% rename from IronChests2/resources/texturesheet.xcf rename to src/main/resources/texturesheet.xcf From 9e510135cd0f9755a0c784edb607b12b87d1dd74 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 5 Feb 2014 13:42:54 -0500 Subject: [PATCH 142/188] Fix build script to build properly --- build.gradle | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 90c3e8f..7b6ef1c 100644 --- a/build.gradle +++ b/build.gradle @@ -49,9 +49,8 @@ processResources doLast { def propsFile = new File(destinationDir, 'version.properties') def properties = new Properties() - properties.putAll(versionInfo) - properties['IronChest.build.mcversion'] = project.minecraft.apiVersion + properties['IronChest.build.mcversion'] = project.minecraft.version properties.store(propsFile.newWriter(), null) } @@ -96,12 +95,12 @@ def getGitVersion() def min = matcher[0][2] def rev = matcher[0][3] def bn = System.getProperty("BUILD_NUMBER","1") - out['IronChest.build.major.number'] = maj - out['IronChest.build.minor.number'] = min - out['IronChest.build.revision.number'] = rev - out['IronChest.build.githash'] = matcher[0][4] - out['IronChest.build.number' ] = bn - out['IronChest.version' ] = "${maj}.${min}.${rev}.${bn}" + out['IronChest.build.major.number'] = maj.toString() + out['IronChest.build.minor.number'] = min.toString() + out['IronChest.build.revision.number'] = rev.toString() + out['IronChest.build.githash'] = matcher[0][4].toString() + out['IronChest.build.number' ] = bn.toString() + out['IronChest.version' ] = "${maj}.${min}.${rev}.${bn}".toString() return out } From 077e37ae037039ec4fc579a8b7125d5002a86509 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 5 Feb 2014 14:04:02 -0500 Subject: [PATCH 143/188] Add the uploadArchives task for uploading to files --- build.gradle | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7b6ef1c..d314c1e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,13 @@ buildscript { apply plugin: 'forge' +repositories { + flatDir { + name "fileRepo" + dirs "repo" + } +} + def versionInfo = getGitVersion() version = "${versionInfo['IronChest.version']}" @@ -74,6 +81,66 @@ artifacts { archives deobfJar } +uploadArchives { + repositories { + if (project.hasProperty("filesmaven")) { + logger.info('Publishing to files server') + + mavenDeployer { + configuration = configurations.deployJars + + repository(url: project.filesmaven.url) { + authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key) + } + + pom { + groupId = project.group + version = project.version + artifactId = project.archivesBaseName + project { + name project.archivesBaseName + packaging 'jar' + description 'IronChest' + url 'https://github.com/cpw/IronChest' + + scm { + url 'https://github.com/cpw/IronChest' + connection 'scm:git:git://github.com/cpw/IronChest.git' + developerConnection 'scm:git:git@github.com:cpw/IronChest.git' + } + + issueManagement { + system 'github' + url 'https://github.com/cpw/IronChest/issues' + } + + licenses { + license { + name 'GNU Public License (GPL), Version 3.0' + url 'http://www.gnu.org/licenses/gpl-3.0.txt' + distribution 'repo' + } + } + + developers { + developer { + id 'cpw' + name 'cpw' + roles { role 'developer' } + } + } + } + } + } + } else { + logger.info('Publishing to repo folder') + + mavenDeployer { + repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath()) + } + } + } +} // version def getGitVersion() @@ -94,7 +161,8 @@ def getGitVersion() def maj = matcher[0][1] def min = matcher[0][2] def rev = matcher[0][3] - def bn = System.getProperty("BUILD_NUMBER","1") + def bn = System.getenv("BUILD_NUMBER") ?: "1" + out['IronChest.build.major.number'] = maj.toString() out['IronChest.build.minor.number'] = min.toString() out['IronChest.build.revision.number'] = rev.toString() From 4d3ca0ffb28a9f7175f4d45333d4684f8c25bbc0 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 5 Feb 2014 14:38:24 -0500 Subject: [PATCH 144/188] Fix up build file properly, I think. Should be good now --- build.gradle | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index d314c1e..e469409 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,4 @@ +// This sets us up for building a forge project - you need all of these buildscript { repositories { mavenCentral() @@ -15,31 +16,36 @@ buildscript { } } +// Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc apply plugin: 'forge' +// This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target repositories { flatDir { name "fileRepo" dirs "repo" } } - +// IronChest uses git tagging to mark major versions. This sets up the project version to that version data def versionInfo = getGitVersion() version = "${versionInfo['IronChest.version']}" -group= "cpw.mods.ironchest" // http://maven.apache.org/guides/mini/guide-naming-conventions.html +// This is our group. I'm cpw.mods +group= "cpw.mods" // http://maven.apache.org/guides/mini/guide-naming-conventions.html +// This is our actual project within the group. Note: FML has "fml" here. But this is ironchest. archivesBaseName = "ironchest" +// Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { version = "1.7.2-10.12.0.1024" } -logger.lifecycle "IronChest "+version - +// This wrangles the resources for the jar files- stuff like textures and languages processResources { + // we're omitting the .xcf files - they're development only exclude '**/*.xcf' - // replace stuff in mcmod.info, nothing else + // we only want to do search/replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' @@ -52,35 +58,42 @@ processResources exclude 'mcmod.info' } - // generate version properties file + // generate version.properties file from the git version data earlier doLast { def propsFile = new File(destinationDir, 'version.properties') def properties = new Properties() properties.putAll(versionInfo) properties['IronChest.build.mcversion'] = project.minecraft.version - properties.store(propsFile.newWriter(), null) } } -jar { appendix = 'universal' } +// this sets our output jar to have a 'tag' of 'universal' on it +// It also adds the minecraft version as a name 'appendix' +// The result is files named ---universal.jar +jar { + classifier = 'universal' + appendix = project.minecraft.version +} +// Add in a source jar for people, should they desire to download such a thing task sourceJar(type: Jar) { from sourceSets.main.allSource - appendix = 'src' + classifier = 'src' } -// because the normal default jar task has been modified to be obfuscated +// Add in an mcp named jar, for those who wish to run in a development environment (assuming mcp naming matches) task deobfJar(type: Jar) { from sourceSets.main.output - appendix = 'deobf' + classifier = 'deobf' } +// Tell the artifact system about our extra jars artifacts { - archives sourceJar - archives deobfJar + archives sourceJar, deobfJar } +// Configure an upload task. this is setup for uploading to files.minecraftforge.net. There are other examples around uploadArchives { repositories { if (project.hasProperty("filesmaven")) { @@ -93,6 +106,7 @@ uploadArchives { authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key) } + // This is just the pom data for the maven repo pom { groupId = project.group version = project.version @@ -142,7 +156,7 @@ uploadArchives { } } -// version +// This is a special task for pulling the version information from git and the environment (for BUILD_NUMBER) def getGitVersion() { def out = [:] From c90472b66cb8fb49624ee8a40039d803e369858b Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 5 Feb 2014 15:11:31 -0500 Subject: [PATCH 145/188] Hopefully fix the versioning properly --- build.gradle | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index e469409..db652f7 100644 --- a/build.gradle +++ b/build.gradle @@ -69,23 +69,28 @@ processResources } // this sets our output jar to have a 'tag' of 'universal' on it -// It also adds the minecraft version as a name 'appendix' +// It also adds the minecraft version in a custom version name // The result is files named ---universal.jar jar { classifier = 'universal' - appendix = project.minecraft.version + version = "${project.minecraft.version}-${project.version}" + } +println "FISHBUM ${jar.version}" + // Add in a source jar for people, should they desire to download such a thing task sourceJar(type: Jar) { from sourceSets.main.allSource classifier = 'src' + version = "${project.minecraft.version}-${project.version}" } // Add in an mcp named jar, for those who wish to run in a development environment (assuming mcp naming matches) task deobfJar(type: Jar) { from sourceSets.main.output classifier = 'deobf' + version = "${project.minecraft.version}-${project.version}" } // Tell the artifact system about our extra jars @@ -109,7 +114,8 @@ uploadArchives { // This is just the pom data for the maven repo pom { groupId = project.group - version = project.version + // Force the maven upload to use the - syntax preferred at files + version = "${project.minecraft.version}-${project.version}" artifactId = project.archivesBaseName project { name project.archivesBaseName @@ -150,6 +156,7 @@ uploadArchives { logger.info('Publishing to repo folder') mavenDeployer { + pom.version = "${project.minecraft.version}-${project.version}" repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath()) } } From 7e90e2ac1d2ed9e5daf11dbe7b2c0d1f4bfda60e Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 5 Feb 2014 16:28:07 -0500 Subject: [PATCH 146/188] Add in some doc to packethandler, since I suspect people will be curious how to do it --- .../cpw/mods/ironchest/PacketHandler.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/main/java/cpw/mods/ironchest/PacketHandler.java b/src/main/java/cpw/mods/ironchest/PacketHandler.java index 6466c82..8c8aa05 100644 --- a/src/main/java/cpw/mods/ironchest/PacketHandler.java +++ b/src/main/java/cpw/mods/ironchest/PacketHandler.java @@ -21,15 +21,30 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.FMLEmbeddedChannel; import cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec; import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +/** + * Handles the packet wrangling for IronChest + * @author cpw + * + */ public enum PacketHandler { INSTANCE; + + /** + * Our channel "pair" from {@link NetworkRegistry} + */ private EnumMap channels; + /** + * Make our packet handler, and add an {@link IronChestCodec} always + */ private PacketHandler() { + // request a channel pair for IronChest from the network registry + // Add the IronChestCodec as a member of both channel pipelines this.channels = NetworkRegistry.INSTANCE.newChannel("IronChest", new IronChestCodec()); if (FMLCommonHandler.instance().getSide() == Side.CLIENT) { @@ -37,13 +52,28 @@ public enum PacketHandler { } } + /** + * This is only called on the client side - it adds an + * {@link IronChestMessageHandler} to the client side pipeline, since the + * only place we expect to handle messages is on the client. + */ @SideOnly(Side.CLIENT) private void addClientHandler() { FMLEmbeddedChannel clientChannel = this.channels.get(Side.CLIENT); + // These two lines find the existing codec (Ironchestcodec) and insert our message handler after it + // in the pipeline String codec = clientChannel.findChannelHandlerNameForType(IronChestCodec.class); clientChannel.pipeline().addAfter(codec, "ClientHandler", new IronChestMessageHandler()); } + /** + * This class simply handles the {@link IronChestMessage} when it's received + * at the client side It can contain client only code, because it's only run + * on the client. + * + * @author cpw + * + */ private static class IronChestMessageHandler extends SimpleChannelInboundHandler { @Override @@ -59,6 +89,16 @@ public enum PacketHandler { } } } + + /** + * This is our "message". In fact, {@link FMLIndexedMessageToMessageCodec} + * can handle many messages on the same channel at once, using a + * discriminator byte. But for IronChest, we only need the one message, so + * we have just this. + * + * @author cpw + * + */ public static class IronChestMessage { int x; @@ -68,8 +108,21 @@ public enum PacketHandler { int facing; int[] items; } + + /** + * This is the codec that automatically transforms the + * {@link FMLProxyPacket} which wraps the client and server custom payload + * packets into a message we care about. + * + * @author cpw + * + */ private class IronChestCodec extends FMLIndexedMessageToMessageCodec { + /** + * We register our discriminator bytes here. We only have the one type, so we only + * register one. + */ public IronChestCodec() { addDiscriminator(0, IronChestMessage.class); @@ -117,6 +170,22 @@ public enum PacketHandler { } + /** + * This is a utility method called to transform a packet from a custom + * packet into a "system packet". We're called from + * {@link TileEntity#getDescriptionPacket()} in this case, but there are + * others. All network packet methods in minecraft have been adapted to + * handle {@link FMLProxyPacket} but general purpose objects can't be + * handled sadly. + * + * This method uses the {@link IronChestCodec} to transform a custom packet + * {@link IronChestMessage} into an {@link FMLProxyPacket} by using the + * utility method {@link FMLEmbeddedChannel#generatePacketFrom(Object)} on + * the channel to do exactly that. + * + * @param tileEntityIronChest + * @return + */ public static Packet getPacket(TileEntityIronChest tileEntityIronChest) { IronChestMessage msg = new IronChestMessage(); From 5522c45034b4e15b552685d231b1f4007f47840f Mon Sep 17 00:00:00 2001 From: Abrar Syed Date: Wed, 5 Feb 2014 17:29:02 -0600 Subject: [PATCH 147/188] fixed reobfuscation --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index db652f7..1a48096 100644 --- a/build.gradle +++ b/build.gradle @@ -100,6 +100,7 @@ artifacts { // Configure an upload task. this is setup for uploading to files.minecraftforge.net. There are other examples around uploadArchives { + dependsOn 'reobf' repositories { if (project.hasProperty("filesmaven")) { logger.info('Publishing to files server') From 1d038214ca88da0918ff2bff699ddddfd8b28f58 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 5 Feb 2014 18:31:42 -0500 Subject: [PATCH 148/188] Fix .gitignore to ignore the repo dir from local deployment --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2d4612c..281ec46 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build/ .gradle/ eclipse/ bin/ +repo/ From 851f532cb1d565c9316a6c4a6ebcedf8799fcd86 Mon Sep 17 00:00:00 2001 From: cpw Date: Mon, 3 Mar 2014 16:06:11 +0000 Subject: [PATCH 149/188] Create README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b65a8e --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +ironchest +========= + +Iron Chest minecraft mod - now dormant + +This was the home of IronChest a GPL v3 licensed mod by cpw. It lies dormant, awaiting someone to awaken it again. From f9d7cac243f6bd42adfc17726bc2f65d23616ff9 Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 18:40:38 -0400 Subject: [PATCH 150/188] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b65a8e..718993c 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,7 @@ ironchest Iron Chest minecraft mod - now dormant -This was the home of IronChest a GPL v3 licensed mod by cpw. It lies dormant, awaiting someone to awaken it again. +a GPL v3 licensed mod by cpw + +Currently Maintained by ProgWML6 + From 4b69ec3a75f10d455654ea2270b90bd58d3ed06e Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 19:25:58 -0400 Subject: [PATCH 151/188] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 718993c..f149a3f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ironchest ========= -Iron Chest minecraft mod - now dormant +Iron Chest minecraft mod a GPL v3 licensed mod by cpw From 9a94e1cbf6a610310035a2812270cbcb7b205bde Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 19:30:02 -0400 Subject: [PATCH 152/188] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f149a3f..7c2d0e9 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,4 @@ a GPL v3 licensed mod by cpw Currently Maintained by ProgWML6 +See http://files.minecraftforge.net/IronChests2/ for downloads From 3b393684968e18fa384d2c5c2bd2fef494a99a7e Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 19:45:58 -0400 Subject: [PATCH 153/188] update repo location for POM --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 1a48096..f6403cc 100644 --- a/build.gradle +++ b/build.gradle @@ -125,14 +125,14 @@ uploadArchives { url 'https://github.com/cpw/IronChest' scm { - url 'https://github.com/cpw/IronChest' - connection 'scm:git:git://github.com/cpw/IronChest.git' - developerConnection 'scm:git:git@github.com:cpw/IronChest.git' + url 'https://github.com/progwml6/IronChest' + connection 'scm:git:git://github.com/progwml6/IronChest.git' + developerConnection 'scm:git:git@github.com:progwml6/IronChest.git' } issueManagement { system 'github' - url 'https://github.com/cpw/IronChest/issues' + url 'https://github.com/progwml6/IronChest/issues' } licenses { From 77ed46ffe83f01e4e7352e269182357ec8e44b92 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 19 Mar 2014 23:26:10 +0000 Subject: [PATCH 154/188] Update --- .../textures/blocks/dirtchest9000_front.png | Bin 0 -> 3194 bytes .../textures/blocks/dirtchest9000_side.png | Bin 0 -> 3202 bytes .../textures/blocks/dirtchest9000_top.png | Bin 0 -> 3212 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png create mode 100644 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png create mode 100644 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1e1fdd307ba264954c8c52e8d9d20737923625 GIT binary patch literal 3194 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ebda19fd06b24959429d20ffb2f6fc6d9220cad6 GIT binary patch literal 3202 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a92c5f17eb6c7855a2f9baa3a6f7fd454b5b81e4 GIT binary patch literal 3212 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 Date: Sun, 30 Mar 2014 20:48:46 -0400 Subject: [PATCH 155/188] Rogue apostrophe --- src/main/java/cpw/mods/ironchest/IronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 27737e7..f3b0d16 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -49,7 +49,7 @@ public class IronChest { } catch (Exception e) { - FMLLog.log(Level.ERROR, e, "IronChest has a problem loading it's configuration"); + FMLLog.log(Level.ERROR, e, "IronChest has a problem loading its configuration"); } finally { From 103a22860b5e35306e60a9fb78e3be2b7043d2cd Mon Sep 17 00:00:00 2001 From: progwml6 Date: Fri, 4 Apr 2014 20:49:09 -0400 Subject: [PATCH 156/188] restore compatibility with inventory tweaks --- .../api/container/ChestContainer.java | 28 +++++++++++++++++++ .../mods/ironchest/ContainerIronChest.java | 7 +++++ 2 files changed, 35 insertions(+) create mode 100644 src/api/java/invtweaks/api/container/ChestContainer.java diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/api/java/invtweaks/api/container/ChestContainer.java new file mode 100644 index 0000000..4722921 --- /dev/null +++ b/src/api/java/invtweaks/api/container/ChestContainer.java @@ -0,0 +1,28 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A marker for containers that have a chest-like persistant storage component. Enables the Inventroy Tweaks sorting + * buttons for this container. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ChestContainer { + // Size of a chest row + int rowSize() default 9; + + // Uses 'large chest' mode for sorting buttons + // (Renders buttons vertically down the right side of the GUI) + boolean isLargeChest() default false; + + // Annotation for method to get size of a chest row if it is not a fixed size for this container class + // Signature int func() + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface RowSizeCallback { + } +} \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java index e4900cb..92f111d 100644 --- a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -16,7 +16,9 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import invtweaks.api.container.ChestContainer; +@ChestContainer(isLargeChest = true) public class ContainerIronChest extends Container { private IronChestType type; private EntityPlayer player; @@ -115,4 +117,9 @@ public class ContainerIronChest extends Container { { return player; } + + @ChestContainer.RowSizeCallback + public int getNumColumns() { + return type.getRowLength(); + } } From 3ae2335887dc732b9aebf5e827883f5d6d913a6e Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:39:56 +0400 Subject: [PATCH 157/188] Create pt_PT.lang --- .../resources/assets/ironchest/lang/pt_PT.lang | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/pt_PT.lang diff --git a/src/main/resources/assets/ironchest/lang/pt_PT.lang b/src/main/resources/assets/ironchest/lang/pt_PT.lang new file mode 100644 index 0000000..cb29cb2 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pt_PT.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Baú de Ferro +tile.ironchest:GOLD.name=Baú de Ouro +tile.ironchest:DIAMOND.name=Baú de Diamante +tile.ironchest:COPPER.name=Baú de Cobre +tile.ironchest:SILVER.name=Baú de Prata +tile.ironchest:CRYSTAL.name=Baú de Cristal +tile.ironchest:OBSIDIAN.name=Baú de Obsidiana + +item.ironchest:IRONGOLD.name=Melhoria de Baú de Ferro para Ouro +item.ironchest:GOLDDIAMOND.name=Melhoria de Baú de Ouro para Diamante +item.ironchest:COPPERSILVER.name=Melhoria de Baú de Cobre para Prata +item.ironchest:SILVERGOLD.name=Melhoria de Baú de Prata para Ouro +item.ironchest:COPPERIRON.name=Melhoria de Baú de Cobre para Ferro +item.ironchest:DIAMONDCRYSTAL.name=Melhoria de Baú de Diamante para Cristal +item.ironchest:WOODIRON.name=Melhoria de Baú de Madeira para Ferro +item.ironchest:WOODCOPPER.name=Melhoria de Baú de Madeira para Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Melhoria de Baú de Diamante para Obsidiana From 27a35b0b43faf6da39e6442a3a092f10fd5d012f Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:41:39 +0400 Subject: [PATCH 158/188] Create pt_BR.lang --- .../assets/ironchest/lang/pt_BR.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/pt_BR.lang diff --git a/src/main/resources/assets/ironchest/lang/pt_BR.lang b/src/main/resources/assets/ironchest/lang/pt_BR.lang new file mode 100644 index 0000000..38c0e34 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pt_BR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Baú de Ferro +tile.ironchest:GOLD.name=Baú de Ouro +tile.ironchest:DIAMOND.name=Baú de Diamante +tile.ironchest:COPPER.name=Baú de Cobre +tile.ironchest:SILVER.name=Baú de Prata +tile.ironchest:CRYSTAL.name=Baú de Cristal +tile.ironchest:OBSIDIAN.name=Baú de Obsidiana +tile.ironchest:DIRTCHEST9000.name=BaúDeSujeira 9000! + +item.ironchest:IRONGOLD.name=Aprimoramento de Baú de Ferro para Ouro +item.ironchest:GOLDDIAMOND.name=Aprimoramento de Baú de Ouro para Diamante +item.ironchest:COPPERSILVER.name=Aprimoramento de Baú de Cobre para Prata +item.ironchest:SILVERGOLD.name=Aprimoramento de Baú de Prata para Ouro +item.ironchest:COPPERIRON.name=Aprimoramento de Baú de Cobre para Ferro +item.ironchest:DIAMONDCRYSTAL.name=Aprimoramento de Baú de Diamante para Cristal +item.ironchest:WOODIRON.name=Aprimoramento de Baú de Madeira para Ferro +item.ironchest:WOODCOPPER.name=Aprimoramento de Baú de Madeira para Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Aprimoramento de Baú de Diamante para Obsidiana + +book.ironchest:dirtchest9000.title=Como utilizar seu BaúDeSujeira 9000! +book.ironchest:dirtchest9000.page1=Bem-vindo ao seu novo BaúDeSujeira 9000! Esperamos que desfrute de muitos anos felizes de armazenagem de sua pilha de sujeira em nosso utilitário de armazenamento. +book.ironchest:dirtchest9000.page2=Uso: basta inserir o monte de sujeira de sua escolha no slot altamente receptivo e apreciar a grande conveniência de ter essa sujeira disponíveis para você, a qualquer momento que você passar pelo baú! +book.ironchest:dirtchest9000.page3=Esperamos que tenham gostado de rever este manual de instruções, e espero que você considere o uso de nossos produtos no futuro! Atenciosamente, manual do BaúDeSujeira 9000 escritores incorporados. +book.ironchest:dirtchest9000.page4=Garantia: Este produto não tem qualquer tipo de garantia. Sua sujeira pode não ser armazenada, pode vazar lentamente para o ambiente, ou alternativamente, pode não fazer absolutamente nada. +book.ironchest:dirtchest9000.page5=BaúDeSujeira 9000 é bom para o meio ambiente. Elimine este guia de forma responsável, e não o que você faz apenas lançando-o em alguma lava. Ficaríamos muito triste. From dc3098d00a00e0199723f8f291f144934c21c8f8 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:43:52 +0400 Subject: [PATCH 159/188] Create el_GR.lang --- .../resources/assets/ironchest/lang/el_GR.lang | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/el_GR.lang diff --git a/src/main/resources/assets/ironchest/lang/el_GR.lang b/src/main/resources/assets/ironchest/lang/el_GR.lang new file mode 100644 index 0000000..67285bb --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/el_GR.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Σιδερένιο Σεντούκι +tile.ironchest:GOLD.name=Χρυσό Σεντούκι +tile.ironchest:DIAMOND.name=Διαμαντένιο Σεντούκι +tile.ironchest:COPPER.name=Χάλκινο Σεντούκι +tile.ironchest:SILVER.name=Ασημένιο Σεντούκι +tile.ironchest:CRYSTAL.name=Κρυστάλλινο Σεντούκι +tile.ironchest:OBSIDIAN.name=Σεντούκι Οψιδιανού + +item.ironchest:IRONGOLD.name=Αναβάθμιση από Σιδερένιο σε Χρυσό Σεντούκι +item.ironchest:GOLDDIAMOND.name=Αναβάθμιση από Χρυσό σε Διαμαντένιο Σεντούκι +item.ironchest:COPPERSILVER.name=Αναβάθμιση από Χάλκινο σε Ασημένιο Σεντούκι +item.ironchest:SILVERGOLD.name=Αναβάθμιση από Ασημένιο σε Χρυσό Σεντούκι +item.ironchest:COPPERIRON.name=Αναβάθμιση από Χάλκινο σε Σιδερένιο Σεντούκι +item.ironchest:DIAMONDCRYSTAL.name=Αναβάθμιση από Διαμαντένιο σε Κρυστάλλινο Σεντούκι +item.ironchest:WOODIRON.name=Αναβάθμιση από Ξύλινο σε Σιδερένιο Σεντούκι +item.ironchest:WOODCOPPER.name=Αναβάθμιση από Ξύλινο σε Χάλκινο Σεντούκι +item.ironchest:DIAMONDOBSIDIAN.name=Αναβάθμιση από Διαμαντένιο σε Σεντούκι Οψιδιανού From 4c480dd8383df1d6e6c9d81e081629758f00d4a5 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:45:37 +0400 Subject: [PATCH 160/188] Create nl_NL.lang --- .../assets/ironchest/lang/nl_NL.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/nl_NL.lang diff --git a/src/main/resources/assets/ironchest/lang/nl_NL.lang b/src/main/resources/assets/ironchest/lang/nl_NL.lang new file mode 100644 index 0000000..fb3a2f5 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/nl_NL.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Ijzeren Kist +tile.ironchest:GOLD.name=Gouden Kist +tile.ironchest:DIAMOND.name=Diamanten Kist +tile.ironchest:COPPER.name=Koperen Kist +tile.ironchest:SILVER.name=Zilveren Kist +tile.ironchest:CRYSTAL.name=Kristallen Kist +tile.ironchest:OBSIDIAN.name=Obsidiaanen Kist +tile.ironchest:DIRTCHEST9000.name=Aarden Kist 9000! + +item.ironchest:IRONGOLD.name=Ijzeren naar Gouden Kist Transformatie +item.ironchest:GOLDDIAMOND.name=Gouden naar Diamanten Kist Transformatie +item.ironchest:COPPERSILVER.name=Koperen naar Zilveren Kist Transformatie +item.ironchest:SILVERGOLD.name=Zilveren naar Gouden Kist Transformatie +item.ironchest:COPPERIRON.name=Koperen naar Ijzeren Kist Transformatie +item.ironchest:DIAMONDCRYSTAL.name=Diamanten naar Kristallen Kist Transformatie +item.ironchest:WOODIRON.name=Houten naar Ijzeren Kist Transformatie +item.ironchest:WOODCOPPER.name=Houten naar Koperen Kist Transformatie +item.ironchest:DIAMONDOBSIDIAN.name=Diamanten naar Obsidiaanen Kist Transformatie + +book.ironchest:dirtchest9000.title=Hoe gebruik je uw Aarden Kist 9000! +book.ironchest:dirtchest9000.page1=Welkom voor uw nieuwe Aarden Kist 9000! We hopen dat je veel geluk zal beleven om uw hoop aarde te bewaren in onze stokeer faciliteit. +book.ironchest:dirtchest9000.page2=Gebruik: Plaats simpelweg uw hoop aarde naar uw keuze in de zeer ontvankelijke gleuf en geniet van de geriefelijkheid om dat hoop aarde altijd beschikbaar tot u te hebben, wanneer dan ook! +book.ironchest:dirtchest9000.page3=We hopen dat u heeft genoten om deze handleiding te lezen en we hopen dat u overweegt om onze producten in de toekomst te gebruiken! Met vriendelijke groeten, De Aarden Kist 9000 Handleiding Auteurs. +book.ironchest:dirtchest9000.page4=Garantie: Deze product biedt geen enkele garantie. Uw aarde kan mogenlijk niet gestockeerd worden, het kan langzaam verdampen of het kan ook helemaal niks doen. +book.ironchest:dirtchest9000.page5=Aarden Kist 9000 is mileuvriendelijk. Gelieve deze handleiding verantwoordlijk te ontdoen en gooi het niet zomaar in wat lava. We zouden zeer verdrietig zijn. From d0980a29770426a7389565ff9a9fd3c6b85b6c47 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:47:00 +0400 Subject: [PATCH 161/188] Create zh_CN.lang --- .../assets/ironchest/lang/zh_CN.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/zh_CN.lang diff --git a/src/main/resources/assets/ironchest/lang/zh_CN.lang b/src/main/resources/assets/ironchest/lang/zh_CN.lang new file mode 100644 index 0000000..974ada4 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/zh_CN.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=铁箱子 +tile.ironchest:GOLD.name=金箱子 +tile.ironchest:DIAMOND.name=钻石箱子 +tile.ironchest:COPPER.name=铜箱子 +tile.ironchest:SILVER.name=银箱子 +tile.ironchest:CRYSTAL.name=水晶箱子 +tile.ironchest:OBSIDIAN.name=黑曜石箱子 +tile.ironchest:DIRTCHEST9000.name=泥箱子9000! + +item.ironchest:IRONGOLD.name=升级:铁>金 +item.ironchest:GOLDDIAMOND.name=升级:金>钻石 +item.ironchest:COPPERSILVER.name=升级:铜>银 +item.ironchest:SILVERGOLD.name=升级:银>金 +item.ironchest:COPPERIRON.name=升级:铜>铁 +item.ironchest:DIAMONDCRYSTAL.name=升级:钻石>水晶 +item.ironchest:WOODIRON.name=升级:木>铁 +item.ironchest:WOODCOPPER.name=升级:木>铜 +item.ironchest:DIAMONDOBSIDIAN.name=升级:钻石>黑曜石 + +book.ironchest:dirtchest9000.title=傻瓜也一定会用的泥箱子9000! +book.ironchest:dirtchest9000.page1=欢迎使用这台全新的泥箱子9000!希望你能愉快地常年使用我们的设备来储存(大量)泥土(大雾)。 +book.ironchest:dirtchest9000.page2=使用方法: 把一组泥土丢进去就行了。每次您经过的时候都可以打开它(很方便地)取出来用。 +book.ironchest:dirtchest9000.page3=希望您阅读本手册愉快,并选择使用我们的产品。作为泥箱子9000手册作者我谨向您致以诚挚问候。 +book.ironchest:dirtchest9000.page4=质量保障: 恕本产品不提供任何质量保障。您的泥土或者能安全存储其内,或者会逐渐流失到环境中,或者什么也不会发生。(读者:我了个去!) +book.ironchest:dirtchest9000.page5=泥箱子9000十分环保。请小心收藏好本手册,如果您随手丢进岩浆的话,我们可会伤心的。 From cc1069967de56dc0d81c6b599247450cdd286f9f Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:48:08 +0400 Subject: [PATCH 162/188] Create nb_NO.lang --- .../assets/ironchest/lang/nb_NO.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/nb_NO.lang diff --git a/src/main/resources/assets/ironchest/lang/nb_NO.lang b/src/main/resources/assets/ironchest/lang/nb_NO.lang new file mode 100644 index 0000000..c5beb18 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/nb_NO.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Jernkiste +tile.ironchest:GOLD.name=Gullkiste +tile.ironchest:DIAMOND.name=Diamantkiste +tile.ironchest:COPPER.name=Kobberkiste +tile.ironchest:SILVER.name=Sølvkiste +tile.ironchest:CRYSTAL.name=Krystallkiste +tile.ironchest:OBSIDIAN.name=Obsidiankiste +tile.ironchest:DIRTCHEST9000.name=JordKiste 9000! + +item.ironchest:IRONGOLD.name=Jern til Gull Kisteoppgradering +item.ironchest:GOLDDIAMOND.name=Gull til Diamant Kisteoppgradering +item.ironchest:COPPERSILVER.name=Kobber til Sølv Kisteoppgradering +item.ironchest:SILVERGOLD.name=Sølv til Gull Kisteoppgradering +item.ironchest:COPPERIRON.name=Kobber til Jern Kisteoppgradering +item.ironchest:DIAMONDCRYSTAL.name=Diamant til Krystall Kisteoppgradering +item.ironchest:WOODIRON.name=Tre til Jern Kisteoppgradering +item.ironchest:WOODCOPPER.name=Tre til Kobber Kisteoppgradering +item.ironchest:DIAMONDOBSIDIAN.name=Diamant til Obsidian Kisteoppgradering + +book.ironchest:dirtchest9000.title=Hvordan bruker din JordKiste 9000! +book.ironchest:dirtchest9000.page1=Velkommen til din nye JordKiste9000! Vi håper du vil nyte mange lykkelige år med lagring av din stabel av jord i vå lager verktøy. +book.ironchest:dirtchest9000.page2=Bruk: bare å sette bunken med jord av ditt valg i den svært mottakelige sporet og nyte den store fordelen med åa den jorden tilgjengelig for deg, nådu passerer denne kisten! +book.ironchest:dirtchest9000.page3=Vi håper du har hatt en god fornøyelse gjennom denne bruksanvisningen, og hår du vil vurdere å bruke vå produkter i fremtiden! Vennlig hilsen, JordKiste9000 manual forfattere innarbeidet. +book.ironchest:dirtchest9000.page4=Garanti: Dette produktet har ingen garantier av noe slag. Din jord kan ikke lagres, det kan sakte lekke ut i miljøet, eller alternativt, kan det ikke gjøre noe i det hele tatt. +book.ironchest:dirtchest9000.page5=JordKiste 9000 er snill mot miljøet. Vennligst ta hånd om denne veileder boken ansvarlig, og hva du enn gjør ikke kast den inn i noe lav. Vi ville bli veldig trist. From f93a9058ee70c929cba9ed4d739674d117961c2b Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:49:46 +0400 Subject: [PATCH 163/188] Create tr_TR.lang --- .../assets/ironchest/lang/tr_TR.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/tr_TR.lang diff --git a/src/main/resources/assets/ironchest/lang/tr_TR.lang b/src/main/resources/assets/ironchest/lang/tr_TR.lang new file mode 100644 index 0000000..9c86204 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/tr_TR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Demir Sandık +tile.ironchest:GOLD.name=Altın Sandık +tile.ironchest:DIAMOND.name=Elmas Sandık +tile.ironchest:COPPER.name=Bakır Sandık +tile.ironchest:SILVER.name=Gümüş Sandık +tile.ironchest:CRYSTAL.name=Kristal Sandık +tile.ironchest:OBSIDIAN.name=Obsidyen Sandık +tile.ironchest:DIRTCHEST9000.name=Toprak Sandık-9000! + +item.ironchest:IRONGOLD.name=Demir Sandığı Altın Sandığa Yükselt +item.ironchest:GOLDDIAMOND.name=Altın Sandığı Elmas Sandığa Yükselt +item.ironchest:COPPERSILVER.name=Bakır Sandığı Gümüş Sandığa Yükselt +item.ironchest:SILVERGOLD.name=Gümüş Sandığı Altın Sandığa Yükselt +item.ironchest:COPPERIRON.name=Bakır Sandığı Demir Sandığa Yükselt +item.ironchest:DIAMONDCRYSTAL.name=Elmas Sandığı Kristal Sandığa Yükselt +item.ironchest:WOODIRON.name=Tahta Sandığı Demir Sandığa Yükselt +item.ironchest:WOODCOPPER.name=Tahta Sandığı Bakır Sandığa Yükselt +item.ironchest:DIAMONDOBSIDIAN.name=Elmas Sandığı Obsidyen Sandığa Yükselt + +book.ironchest:dirtchest9000.title=Toprak Sandık-9000 Kullanım Kılavuzu +book.ironchest:dirtchest9000.page1=Yeni sandık olan Toprak Sandık-9000 yaptığınız için teşekkürler.Bu sandık ile topraklarınızı depolayabilirsiniz. +book.ironchest:dirtchest9000.page2=Kullanımı: 64 adet toprak alarak içine koyunuz. Böylece sadece toprak depolanır. +book.ironchest:dirtchest9000.page3=Biz bu kılavuzu gözden keyif aldık umuyoruz, ve gelecekte ürünlerimizi kullanmayı düşünün umuyoruz! Saygılarımızla, dahil DirtChest 9000 manuel yazar. +book.ironchest:dirtchest9000.page4=Garanti: Bu ürün herhangi bir garanti vardır. Sizin kir depolanabilir değil, yavaş yavaş çevreye sülük olabilir, ya da alternatif olarak, hiç bir şey yapamazsınız. +book.ironchest:dirtchest9000.page5=Toprak Sandık-9000 çevreye türüdür. Sorumlu bu rehber kitap imha edin ve ne olursa olsun sadece bazı lav içine ayna yok yok. Bizim için çok üzücü olacaktır. From 0a1323320ce4777d360e6a7ce8ac5070ed843c43 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:50:29 +0400 Subject: [PATCH 164/188] Create et_EE.lang --- .../resources/assets/ironchest/lang/et_EE.lang | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/et_EE.lang diff --git a/src/main/resources/assets/ironchest/lang/et_EE.lang b/src/main/resources/assets/ironchest/lang/et_EE.lang new file mode 100644 index 0000000..704ca36 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/et_EE.lang @@ -0,0 +1,18 @@ +tile.ironchest:IRON.name=Rauast kirst +tile.ironchest:GOLD.name=Kullast kirst +tile.ironchest:DIAMOND.name=Teemandist kirst +tile.ironchest:COPPER.name=Vasest kirst +tile.ironchest:SILVER.name=Hõbedast kirst +tile.ironchest:CRYSTAL.name=Kristallist kirst +tile.ironchest:OBSIDIAN.name=Obsidiaanist kirst +tile.ironchest:DIRTCHEST9000.name=MullastKirst 9000! + +item.ironchest:IRONGOLD.name=Uuenda rauast kirst kullast kirstuks +item.ironchest:GOLDDIAMOND.name=Uuenda kullast kirst teemandist kirstuks +item.ironchest:COPPERSILVER.name=Uuenda vasest kirst hõbedast kirstuks +item.ironchest:SILVERGOLD.name=Uuenda hõbedast kirst kullast kirstuks +item.ironchest:COPPERIRON.name=Uuenda vasest kirst rauast kirstuks +item.ironchest:DIAMONDCRYSTAL.name=Uuenda teemandist kirst kristallist kirstuks +item.ironchest:WOODIRON.name=Uuenda puust kirst rauast kirstuks +item.ironchest:WOODCOPPER.name=Uuenda puust kirst vasest kirstuks +item.ironchest:DIAMONDOBSIDIAN.name=Uuenda teemandist kirst obsidiaanist kirstuks From 6752d84a9260de2febde76c8103855df3cdf7b4c Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:51:27 +0400 Subject: [PATCH 165/188] Update de_DE.lang --- src/main/resources/assets/ironchest/lang/de_DE.lang | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/assets/ironchest/lang/de_DE.lang b/src/main/resources/assets/ironchest/lang/de_DE.lang index 26a8bd9..fd6c403 100644 --- a/src/main/resources/assets/ironchest/lang/de_DE.lang +++ b/src/main/resources/assets/ironchest/lang/de_DE.lang @@ -5,6 +5,7 @@ tile.ironchest:COPPER.name=Kupfertruhe tile.ironchest:SILVER.name=Silbertruhe tile.ironchest:CRYSTAL.name=Kristalltruhe tile.ironchest:OBSIDIAN.name=Obsidiantruhe +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! item.ironchest:IRONGOLD.name=Eisen-zu-Goldtruhen-Upgrade item.ironchest:GOLDDIAMOND.name=Gold-zu-Diamanttruhen-Upgrade @@ -15,3 +16,10 @@ item.ironchest:DIAMONDCRYSTAL.name=Diamant-zu-Kristalltruhen-Upgrade item.ironchest:WOODIRON.name=Holz-zu-Eisentruhen-Upgrade item.ironchest:WOODCOPPER.name=Holz-zu-Kupfertruhen-Upgrade item.ironchest:DIAMONDOBSIDIAN.name=Diamant-zu-Obsidiantruhen-Upgrade + +book.ironchest:dirtchest9000.title=Wie du deine neue DirtChest 9000 nutzt! +book.ironchest:dirtchest9000.page1=Willkommen zu Ihrer neuen DirtChest 9000! Wir hoffen, dass Sie viele freudige Jahre genießen werden, wenn Sie Ihre Erd-Stacks in unserem nützlichen Speichergerät lagern. +book.ironchest:dirtchest9000.page2=Nutzung: Werfen Sie einfach den Erd-Stack Ihrer Wahl in den äußerst rezeptiven Slot und genießen Sie die Annehmlichkeit, diese Erde für Sie verfügbar zu haben, jedes mal, wenn Sie diese Truhe passieren! +book.ironchest:dirtchest9000.page3=Wir hoffen, Sie haben das Durchgehen dieser Bedienungsanleitung genossen, und hoffen, dass sie sich weiterhin entscheiden werden, in Zukunft unsere Produkte zu nutzen! Mit freundlichen Grüßen, Die DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Garantie: Dieses Produkt hat keine Garantie jeglicher Sorte. Ihre Erde könnte nicht gespeichert werden, er könnte langsam in die Umwelt gesaugt werden, oder stattdessen könnte das Produkt gar nichts machen. +book.ironchest:dirtchest9000.page5=DirtChest 9000 ist freundlich zur Umwelt. Bitte entsorgen Sie diesen Guide verantwortungsbewusst, und tun sie nicht, was Sie immer tun und schmeißen ihn in irgendwelche Lava. Wir würden sehr traurig sein. From 44871dc5cf4e9bad6f38f5b12b5f7d55bcfc19ef Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Thu, 29 May 2014 08:28:35 +0300 Subject: [PATCH 166/188] Fixed Estonian translation --- .../assets/ironchest/lang/et_EE.lang | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/et_EE.lang b/src/main/resources/assets/ironchest/lang/et_EE.lang index 704ca36..c0b3776 100644 --- a/src/main/resources/assets/ironchest/lang/et_EE.lang +++ b/src/main/resources/assets/ironchest/lang/et_EE.lang @@ -1,18 +1,18 @@ -tile.ironchest:IRON.name=Rauast kirst -tile.ironchest:GOLD.name=Kullast kirst -tile.ironchest:DIAMOND.name=Teemandist kirst -tile.ironchest:COPPER.name=Vasest kirst -tile.ironchest:SILVER.name=Hõbedast kirst -tile.ironchest:CRYSTAL.name=Kristallist kirst -tile.ironchest:OBSIDIAN.name=Obsidiaanist kirst -tile.ironchest:DIRTCHEST9000.name=MullastKirst 9000! +tile.ironchest:IRON.name=Raudkirst +tile.ironchest:GOLD.name=Kuldkirst +tile.ironchest:DIAMOND.name=Teemantkirst +tile.ironchest:COPPER.name=Vaskkirst +tile.ironchest:SILVER.name=Hõbekirst +tile.ironchest:CRYSTAL.name=Kristallkirst +tile.ironchest:OBSIDIAN.name=Obsidiaankirst +tile.ironchest:DIRTCHEST9000.name=Muldkirst 9000! -item.ironchest:IRONGOLD.name=Uuenda rauast kirst kullast kirstuks -item.ironchest:GOLDDIAMOND.name=Uuenda kullast kirst teemandist kirstuks -item.ironchest:COPPERSILVER.name=Uuenda vasest kirst hõbedast kirstuks -item.ironchest:SILVERGOLD.name=Uuenda hõbedast kirst kullast kirstuks -item.ironchest:COPPERIRON.name=Uuenda vasest kirst rauast kirstuks -item.ironchest:DIAMONDCRYSTAL.name=Uuenda teemandist kirst kristallist kirstuks -item.ironchest:WOODIRON.name=Uuenda puust kirst rauast kirstuks -item.ironchest:WOODCOPPER.name=Uuenda puust kirst vasest kirstuks -item.ironchest:DIAMONDOBSIDIAN.name=Uuenda teemandist kirst obsidiaanist kirstuks +item.ironchest:IRONGOLD.name=Raudkirst kuld kirstuks +item.ironchest:GOLDDIAMOND.name=Kuldkirst teemandist kirstuks +item.ironchest:COPPERSILVER.name=Vaskkirst hõbedast kirstuks +item.ironchest:SILVERGOLD.name=Hõbekirst kullast kirstuks +item.ironchest:COPPERIRON.name=Vaskkirst rauast kirstuks +item.ironchest:DIAMONDCRYSTAL.name=Teemantkirst kristallist kirstuks +item.ironchest:WOODIRON.name=Puukirst rauast kirstuks +item.ironchest:WOODCOPPER.name=Puukirst vasest kirstuks +item.ironchest:DIAMONDOBSIDIAN.name=Teemantkirst obsidiaanist kirstuks From 6a95a896042fad6095796e3d6cf85c9c184f27f8 Mon Sep 17 00:00:00 2001 From: TheVikingWarrior Date: Sun, 8 Jun 2014 13:52:29 +0200 Subject: [PATCH 167/188] Create it_IT.lang --- .../assets/ironchest/lang/it_IT.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/it_IT.lang diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang new file mode 100644 index 0000000..9578e14 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Cassa di Ferro +tile.ironchest:GOLD.name=Cassa d'Oro +tile.ironchest:DIAMOND.name=Cassa di Diamante +tile.ironchest:COPPER.name=Cassa di Rame +tile.ironchest:SILVER.name=Cassa d'Argento +tile.ironchest:CRYSTAL.name=Cassa di Cristallo +tile.ironchest:OBSIDIAN.name=Cassa di Ossidiana +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! + +item.ironchest:IRONGOLD.name=Miglioramento da Ferro a Oro +item.ironchest:GOLDDIAMOND.name=Miglioramento da Oro a Diamante +item.ironchest:COPPERSILVER.name=Miglioramento da Rame a Argento +item.ironchest:SILVERGOLD.name=Miglioramento da Argento a Oro +item.ironchest:COPPERIRON.name=Miglioramento da Rame a Ferro +item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da Diamante a Cristallo +item.ironchest:WOODIRON.name=Miglioramento da Legno a Ferro +item.ironchest:WOODCOPPER.name=Miglioramento da Legno a Rame +item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da Diamante a Ossidiana + +book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! +book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. +book.ironchest:dirtchest9000.page2=Uso: inserisci uno stack di terra nello slot e goditi la grande convenienza di avere della terra a tua disposizione ogni volta che passi vicino alla cassa! +book.ironchest:dirtchest9000.page3=Speriamo che questo manuale vi sia stato utile, e speriamo che prenderete in considerazione usare i nostri prodotti in futuro ! I migliori saluti, i scrittori del manuale per la DirtChest 9000. +book.ironchest:dirtchest9000.page4=Garanzia: Questo prodotto non ha nessuna garanzia di alcun tipo. La tua terra potrebbe non essere imagazzinata, potrebbe lentamente fuoriuscire nell'ambiente, oppure, non farà niente. +book.ironchest:dirtchest9000.page5=La DirtChest 9000 è amico dell'ambiente. Per favore conservate questo libro in un modo responsabile, e non buttatelo nella lava come un oggetto qualsiasi. Saremmo veramente tristi. From eddab41b99665af9211e8b4a621e48e54f02b456 Mon Sep 17 00:00:00 2001 From: Cricket Date: Mon, 9 Jun 2014 14:12:56 -0400 Subject: [PATCH 168/188] Pirate Speak! --- .../assets/ironchest/lang/en_PT.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/en_PT.lang diff --git a/src/main/resources/assets/ironchest/lang/en_PT.lang b/src/main/resources/assets/ironchest/lang/en_PT.lang new file mode 100644 index 0000000..ea69e27 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/en_PT.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Steel Coffer +tile.ironchest:GOLD.name=Gold Coffer +tile.ironchest:DIAMOND.name=Diamond Coffer +tile.ironchest:COPPER.name=Copper Coffer +tile.ironchest:SILVER.name=Silver Coffer +tile.ironchest:CRYSTAL.name=Shinin' Coffer +tile.ironchest:OBSIDIAN.name=Coffer o' tears +tile.ironchest:DIRTCHEST9000.name=FilthCoffer 9000! + +item.ironchest:IRONGOLD.name=Steel to Gold Coffer Upgradin' +item.ironchest:GOLDDIAMOND.name=Gold to Diamond Coffer Upgradin' +item.ironchest:COPPERSILVER.name=Copper to Silver Coffer Upgradin' +item.ironchest:SILVERGOLD.name=Silver to Gold Coffer Upgradin' +item.ironchest:COPPERIRON.name=Copper to Steel Coffer Upgradin' +item.ironchest:DIAMONDCRYSTAL.name=Diamond to Shinin' Coffer Upgradin' +item.ironchest:WOODIRON.name=Timber to Steel Coffer Upgradin' +item.ironchest:WOODCOPPER.name=Wood to Copper Coffer Upgradin' +item.ironchest:DIAMONDOBSIDIAN.name=Diamond to Coffer o' Tears Upgradin' + +book.ironchest:dirtchest9000.title=How to use yer FilthCoffer 9000! +book.ironchest:dirtchest9000.page1=Welcome to yer new FilthCoffer 9000! We hope ye will enjoy many happy years of storing yer filth wit yer coffer . +book.ironchest:dirtchest9000.page2=Usage: simply put yer filth in yer slot and yer got yerself some filth any time ye need it! +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: We can't keep yer filth from pirates. Yer filth may not be stored, it may slowly return to yer world, or it may stay in yer coffer. +book.ironchest:dirtchest9000.page5=FilthCoffer 9000 is kind to yer voyage. Throw yer paper in a coffer near by wit yer booty, and don't just chuck it into some molten rock. We wouldn't be the happiest o' pirates. From b3b17d886798b925cfb3a96ae8c923bca2952e00 Mon Sep 17 00:00:00 2001 From: Negaihoshi Date: Tue, 17 Jun 2014 23:31:13 +0800 Subject: [PATCH 169/188] add zh-TW lang --- .../assets/ironchest/lang/zh_TW.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/zh_TW.lang diff --git a/src/main/resources/assets/ironchest/lang/zh_TW.lang b/src/main/resources/assets/ironchest/lang/zh_TW.lang new file mode 100644 index 0000000..d4755f6 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/zh_TW.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=鐵箱 +tile.ironchest:GOLD.name=黃金箱 +tile.ironchest:DIAMOND.name=鑽石箱 +tile.ironchest:COPPER.name=銅箱 +tile.ironchest:SILVER.name=銀箱 +tile.ironchest:CRYSTAL.name=水晶箱 +tile.ironchest:OBSIDIAN.name=黑曜石箱 +tile.ironchest:DIRTCHEST9000.name=泥土箱9000! + +item.ironchest:IRONGOLD.name=鐵箱升級成金箱 +item.ironchest:GOLDDIAMOND.name=金箱升級成鑽石箱 +item.ironchest:COPPERSILVER.name=銅箱升級成銀箱 +item.ironchest:SILVERGOLD.name=銀箱升級成金箱 +item.ironchest:COPPERIRON.name=銅箱升級成鐵箱 +item.ironchest:DIAMONDCRYSTAL.name=鑽石箱升級成水晶箱 +item.ironchest:WOODIRON.name=木箱升級成鐵箱 +item.ironchest:WOODCOPPER.name=木箱升級成銅箱 +item.ironchest:DIAMONDOBSIDIAN.name=鑽石箱升級成黑曜石箱 + +book.ironchest:dirtchest9000.title=笨蛋也一定會用的泥土箱9000! +book.ironchest:dirtchest9000.page1=歡迎使用這台全新的泥土箱9000!希望你能愉快地常年使用我們的設備來儲存泥土。 +book.ironchest:dirtchest9000.page2=使用方法:把一組泥土丟進去就行了。每次您經過的時候都可以打開它很方便地取出來用。 +book.ironchest:dirtchest9000.page3=希望您閱讀本手冊愉快,並選擇使用我們的產品。作為泥土箱9000手冊作者我謹向您致以誠摯問候。 +book.ironchest:dirtchest9000.page4=質量保障:恕本產品不提供任何質量保障。您的泥土或許能安全存儲其內,或許會逐漸流失到環境中,或者什麼也不會發生。 +book.ironchest:dirtchest9000.page5=泥土箱9000十分環保。請小心收藏好本手冊,如果您隨手丟進岩漿的話,我們可會傷心的。 \ No newline at end of file From f05b509f1efde82bcb6a3522b263f4787f1ce6c4 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 25 Jun 2014 17:41:06 +0100 Subject: [PATCH 170/188] Update TileEntityIronChest.java AxisAlignedBB.getAABBPool().getAABB is deprecated --- src/main/java/cpw/mods/ironchest/TileEntityIronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 404757e..be2481b 100644 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -279,7 +279,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { this.numUsingPlayers = 0; float var1 = 5.0F; @SuppressWarnings("unchecked") - List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); Iterator var3 = var2.iterator(); while (var3.hasNext()) From bfbbab21f048b94047ffddc56144c04d7bd0aa8e Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 25 Jun 2014 17:57:28 +0100 Subject: [PATCH 171/188] Better textures for wood updates --- .../textures/items/woodCopperUpgrade.png | Bin 480 -> 542 bytes .../textures/items/woodIronUpgrade.png | Bin 480 -> 540 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png index 92202fd06d7c44c6f5d214eca9471bf3c0a6c72b..4273a54660295d9d4c22a9001afc1b31522da67d 100644 GIT binary patch delta 528 zcmV+r0`L9c1D*ts8Gi-<001BJ|6u?C00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-vn84xulDy!ac00052Nkl9=Pzh@7}{X_uU8o2`8V^+!szhr>n&YvKmsS9(~sXQN6o#)%P8(`GPAlR>_G~Odz%0}np-p~%7;5w zYHWb{S1)wUYkwlG3qdQp4wY)1?e{NH?FL#Ygp>eAz9EQ7$%lmprn%dw@h1qWxI+M_ zrgx`GE1Hd>;JPO4kufr_KN198L)ee&umOZ6**SV>k})Y+cv9x`Nt}1j1}m@u0;O1* zJvYg0Duw@RjknW20HNPRYmE@%c7m9cq=yp##N(0gvwv2TYNs8|z;8uspw#UII#h&y zmzeC*@+039)(~aci4+8#!4`xi86HcRM8S2*rczW+Ypj3YH^ra6TKp^&#SH?0k|!v6 zbpSHSaY`Pf$CG4|qrLk&BZ-?91i45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|muo{lUOn;t!lAb(cf38d>(znPuMVz#zJ0;-9gD7?5502QgUh}G@7v_ z$S;_|;n|He5GTpo-9=^&iz7Rb!&%@FS;35t-o?B5kww4Mp8Z)4zf7DxCNU*FYTf^14`az>ww1RV zgf)S-s+PD$l%ynSgc&?t{an^LB{Ts5d~2@5 diff --git a/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png index 5100b04ba2ee90334de5bc593f8b039f3395d538..e6e62bb956036eeb0da647c08d792685ea909ff4 100644 GIT binary patch delta 526 zcmV+p0`dLe1Dphq8Gi-<001BJ|6u?C00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-vn84xxSAToIe00050Nkl&MO}($K_NSdn`{Ir_!0&40NoTSu6+XGF7gn%aN#Da(0^522&HsYLqe&sG`C62 z&Ha-*E^a!-rj61A2Zl2+0aBHqPIXy9V5^-y;X|-E6uZzgPE>|iQ z6bgWZ1b}+IPIbE~a|PU*YsxRmhzQ2ak~j7nRJW_*%p+**HvlM=N{FPrn$0FN7AocE zrau^=)fJG4(0{uava|P|%_o}}V-OJz4i79ofCG@xn%%8?_Hz8Y&uNs<^A-RYjYqdq zDgcvA=y;w@XK9(@%MV0R3_#!qHm`>RAWHN3`>HKwv}SAljIT#o-o6Gu@NXq>0HVo+ zH_y&(aidTmXno|>9vg)My>_48r+4=7mv4$6ou4uz0MH!>-N6um zVt$400M=IW6!Z6|`$Lv;lNka5c>3s}xqQ=P`nwfoy1w%5k3){ze-r!xs!_Z0q*ojI Q00000Ne4wvM6N<$f}X7E7XSbN literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|Gw05H_Tt&Y#}9AayLIQ@oh#R_T)lqv^!d|gE}Xf3KJ?0Ik0Zy996oyZ*@KQ7 zmz#F&+jakDWnXvO#nZ)`w{AXtEc?j5q*d!yEm^i?@zTX}7tWotV9x*l|Ap?yHvx@i zED7=pW^j0RBMrn!@^*KTnZx494&-nactjR6FmMZlFeAgPITAp@EKe855Q)p7XI~37 z2#B}^#=mIl3i5jYf8Io)-|dNWjhiRPc*xF*a?sRe?I}K1=XiVTMjeJ#hiR*)1j!}hs2`FES`7qZhmCZFSTcXmcuU-XOBrtNsn6h|JcJ=GMR1V z?FL~@pslJUt`Q|Ei6yC4$wjF^iowXh&{)^NP}j&P#L&#j(A>(@QrE!L%D~{MMe0u! c4Y~O#nQ4`{HB3pp3kqQdPgg&ebxsLQ0BMb}>i_@% From c6cb9bc2c8a5949b337210e261f06ed75edd0da8 Mon Sep 17 00:00:00 2001 From: progwml6 Date: Wed, 25 Jun 2014 20:04:18 -0400 Subject: [PATCH 172/188] update to 1.7.10_pre4 --- build.gradle | 4 ++-- src/main/java/cpw/mods/ironchest/IronChest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index f6403cc..7be4947 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.1-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' } } @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.7.2-10.12.0.1024" + version = "1.7.10_pre4-10.12.2.1143-prerelease" } // This wrangles the resources for the jar files- stuff like textures and languages diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index f3b0d16..9cf3e85 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -24,7 +24,7 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[7.0,);required-after:FML@[5.0.5,)") +@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[10.10,);required-after:FML@[7.2,)") public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") From a14b2c46c56b078e4300b8629fcf0c2cc49190cb Mon Sep 17 00:00:00 2001 From: progwml6 Date: Wed, 25 Jun 2014 20:33:12 -0400 Subject: [PATCH 173/188] add IDEA & extra eclipse stuff to .gitignore --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 281ec46..8eef75c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,10 @@ build/ eclipse/ bin/ repo/ +/run/ +.settings/ +#IDEA files from Gradle +.idea/ +/*.iml +/*.ipr +/*.iws From fd8dd9931d3de74da62c76ea2ce0add7607cee1e Mon Sep 17 00:00:00 2001 From: progwml6 Date: Thu, 26 Jun 2014 15:41:53 -0400 Subject: [PATCH 174/188] bump to 1.7.10 :D --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7be4947..a24a928 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.7.10_pre4-10.12.2.1143-prerelease" + version = "1.7.10-10.13.0.1150" } // This wrangles the resources for the jar files- stuff like textures and languages From 892709daed4dc316f7d3770daab70792e46bd87c Mon Sep 17 00:00:00 2001 From: TheVikingWarrior Date: Fri, 27 Jun 2014 23:50:48 +0200 Subject: [PATCH 175/188] Update it_IT.lang Here's the new update for 1.7.10. The italian vanilla localization have changed a lot of words and the capital letter in the words that are not the first in the localization (a part from a few mobs and others). --- .../assets/ironchest/lang/it_IT.lang | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang index 9578e14..f84955f 100644 --- a/src/main/resources/assets/ironchest/lang/it_IT.lang +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -1,21 +1,21 @@ -tile.ironchest:IRON.name=Cassa di Ferro -tile.ironchest:GOLD.name=Cassa d'Oro -tile.ironchest:DIAMOND.name=Cassa di Diamante -tile.ironchest:COPPER.name=Cassa di Rame -tile.ironchest:SILVER.name=Cassa d'Argento -tile.ironchest:CRYSTAL.name=Cassa di Cristallo -tile.ironchest:OBSIDIAN.name=Cassa di Ossidiana +tile.ironchest:IRON.name=Baule di ferro +tile.ironchest:GOLD.name=Baule d'oro +tile.ironchest:DIAMOND.name=Baule di diamante +tile.ironchest:COPPER.name=Baule di rame +tile.ironchest:SILVER.name=Baule d'argento +tile.ironchest:CRYSTAL.name=Baule di cristallo +tile.ironchest:OBSIDIAN.name=Baule di ossidiana tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! -item.ironchest:IRONGOLD.name=Miglioramento da Ferro a Oro -item.ironchest:GOLDDIAMOND.name=Miglioramento da Oro a Diamante -item.ironchest:COPPERSILVER.name=Miglioramento da Rame a Argento -item.ironchest:SILVERGOLD.name=Miglioramento da Argento a Oro -item.ironchest:COPPERIRON.name=Miglioramento da Rame a Ferro -item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da Diamante a Cristallo -item.ironchest:WOODIRON.name=Miglioramento da Legno a Ferro -item.ironchest:WOODCOPPER.name=Miglioramento da Legno a Rame -item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da Diamante a Ossidiana +item.ironchest:IRONGOLD.name=Miglioramento da ferro a oro +item.ironchest:GOLDDIAMOND.name=Miglioramento da oro a diamante +item.ironchest:COPPERSILVER.name=Miglioramento da rame a argento +item.ironchest:SILVERGOLD.name=Miglioramento da argento a oro +item.ironchest:COPPERIRON.name=Miglioramento da rame a ferro +item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da diamante a cristallo +item.ironchest:WOODIRON.name=Miglioramento da legno a ferro +item.ironchest:WOODCOPPER.name=Miglioramento da legno a rame +item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da diamante a ossidiana book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. From c1f2bb6003f022f2d4af174b92a78ba6c8836b8e Mon Sep 17 00:00:00 2001 From: TheVikingWarrior Date: Thu, 31 Jul 2014 18:49:32 +0200 Subject: [PATCH 176/188] Update it_IT.lang --- .../resources/assets/ironchest/lang/it_IT.lang | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang index f84955f..fc3d82c 100644 --- a/src/main/resources/assets/ironchest/lang/it_IT.lang +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -7,15 +7,15 @@ tile.ironchest:CRYSTAL.name=Baule di cristallo tile.ironchest:OBSIDIAN.name=Baule di ossidiana tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! -item.ironchest:IRONGOLD.name=Miglioramento da ferro a oro -item.ironchest:GOLDDIAMOND.name=Miglioramento da oro a diamante -item.ironchest:COPPERSILVER.name=Miglioramento da rame a argento -item.ironchest:SILVERGOLD.name=Miglioramento da argento a oro -item.ironchest:COPPERIRON.name=Miglioramento da rame a ferro -item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da diamante a cristallo -item.ironchest:WOODIRON.name=Miglioramento da legno a ferro -item.ironchest:WOODCOPPER.name=Miglioramento da legno a rame -item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da diamante a ossidiana +item.ironchest:IRONGOLD.name=Potenziamento da ferro a oro +item.ironchest:GOLDDIAMOND.name=Potenziamento da oro a diamante +item.ironchest:COPPERSILVER.name=Potenziamento da rame a argento +item.ironchest:SILVERGOLD.name=Potenziamento da argento a oro +item.ironchest:COPPERIRON.name=Potenziamento da rame a ferro +item.ironchest:DIAMONDCRYSTAL.name=Potenziamento da diamante a cristallo +item.ironchest:WOODIRON.name=Potenziamento da legno a ferro +item.ironchest:WOODCOPPER.name=Potenziamento da legno a rame +item.ironchest:DIAMONDOBSIDIAN.name=Potenziamento da diamante a ossidiana book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. From 000ef0bc5144db1fb4e9a3147db9cb5a001057f8 Mon Sep 17 00:00:00 2001 From: FireBall1725 Date: Thu, 31 Jul 2014 19:42:02 -0400 Subject: [PATCH 177/188] Fixed comparator support for chests --- src/main/java/cpw/mods/ironchest/BlockIronChest.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index e5f03a1..da4c957 100644 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -256,11 +256,20 @@ public class BlockIronChest extends BlockContainer { return super.getExplosionResistance(par1Entity, world, x, y, z, explosionX, explosionY, explosionZ); } + @Override + public boolean hasComparatorInputOverride() { + return true; + } @Override public int getComparatorInputOverride(World par1World, int par2, int par3, int par4, int par5) { - return Container.calcRedstoneFromInventory((TileEntityIronChest) par1World.getTileEntity(par2, par3, par4)); + TileEntity te = par1World.getTileEntity(par2, par3, par4); + if (te instanceof IInventory) + { + return Container.calcRedstoneFromInventory((IInventory)te); + } + return 0; } @@ -299,4 +308,5 @@ public class BlockIronChest extends BlockContainer { } return false; } + } From e9e50c855d3f3b8788426ec9786dda1b49b6a8c9 Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 10 Aug 2014 16:36:58 -0400 Subject: [PATCH 178/188] Update mcmod.info --- src/main/resources/mcmod.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index d3ab3dc..c2a7c0a 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -4,7 +4,7 @@ "name": "Iron Chest", "description": "New chests with larger sizes, with in-place upgrade items.\nThe feature chest is the crystal chest, which is transparent - some inventory contents are visible without opening the chest", "version": "${version}", - "mcversion": ${mcversion}", + "mcversion": "${mcversion}", "url": "http://www.minecraftforum.net/topic/981855-", "updateUrl": "", "authors": [ From a85429632a26e3a7c14d5d3ba63c85317f533963 Mon Sep 17 00:00:00 2001 From: "MMKP Team Public." Date: Wed, 13 Aug 2014 09:41:08 +0900 Subject: [PATCH 179/188] Create ko_KR.lang --- .../assets/ironchest/lang/ko_KR.lang | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/ko_KR.lang diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang new file mode 100644 index 0000000..e37d644 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -0,0 +1,26 @@ +tile.ironchest:IRON.name=철 상자 +tile.ironchest:GOLD.name=금 상자 +tile.ironchest:DIAMOND.name=다이아몬드 상자 +tile.ironchest:COPPER.name=구리 상자 +tile.ironchest:SILVER.name=은 상자 +tile.ironchest:CRYSTAL.name=수정 상자 +tile.ironchest:OBSIDIAN.name=흑요석 상자 +tile.ironchest:DIRTCHEST9000.name=흙 상자 9000! + +item.ironchest:IRONGOLD.name=철 상자를 금 상자로 업그레이드 +item.ironchest:GOLDDIAMOND.name=금 상자를 다이아몬드 상자로 업그레이드 +item.ironchest:COPPERSILVER.name=구리 상자를 은 상자로 업그레이드 +item.ironchest:SILVERGOLD.name=은 상자를 금 상자로 업그레이드 +item.ironchest:COPPERIRON.name=구리 상자를 철 상자로 업그레이드 +item.ironchest:DIAMONDCRYSTAL.name=다이아몬드 상자를 수정 상자로 업그레이드 +item.ironchest:WOODIRON.name=나무 상자를 철 상자로 업그레이드 +item.ironchest:WOODCOPPER.name=나무 상자를 구리 상자로 업그레이드 +item.ironchest:DIAMONDOBSIDIAN.name=다이아몬드 상자를 흑요석 상자로 업그레이드 + +book.ironchest:dirtchest9000.title=흙상자 9000을 사용하는 방법! +book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되신 것을 환영합니다! 우리는 당신이 이 저장 도구에서 흙들을 많은 해 동안 행복하게 저장하기를 기원합니다. +사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! +book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 +book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. +book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. + 우리는 매우 슬플 것입니다. From 5cf5be53c76a051c1e00f1d562c025ff33ee4ad8 Mon Sep 17 00:00:00 2001 From: "MMKP Team Public." Date: Wed, 13 Aug 2014 09:41:34 +0900 Subject: [PATCH 180/188] Update ko_KR.lang --- src/main/resources/assets/ironchest/lang/ko_KR.lang | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang index e37d644..7cd5931 100644 --- a/src/main/resources/assets/ironchest/lang/ko_KR.lang +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -22,5 +22,4 @@ book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되 사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. -book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. - 우리는 매우 슬플 것입니다. +book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. From 0a51d58ff86821acc6d74040c472691013b30968 Mon Sep 17 00:00:00 2001 From: anesin1109 Date: Mon, 25 Aug 2014 20:01:00 +0900 Subject: [PATCH 181/188] Update ko_KR.lang --- src/main/resources/assets/ironchest/lang/ko_KR.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang index 7cd5931..837ae58 100644 --- a/src/main/resources/assets/ironchest/lang/ko_KR.lang +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -17,9 +17,9 @@ item.ironchest:WOODIRON.name=나무 상자를 철 상자로 업그레이드 item.ironchest:WOODCOPPER.name=나무 상자를 구리 상자로 업그레이드 item.ironchest:DIAMONDOBSIDIAN.name=다이아몬드 상자를 흑요석 상자로 업그레이드 -book.ironchest:dirtchest9000.title=흙상자 9000을 사용하는 방법! +book.ironchest:dirtchest9000.title=흙 상자 9000을 사용하는 방법! book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되신 것을 환영합니다! 우리는 당신이 이 저장 도구에서 흙들을 많은 해 동안 행복하게 저장하기를 기원합니다. 사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. -book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. +book.ironchest:dirtchest9000.page5=흙 상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. From 92ffc8bcd7fb713faa2475a4e55579da537e59d6 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 4 Sep 2014 20:29:25 -0400 Subject: [PATCH 182/188] get rid of useless excess method in ironchesttype --- src/main/java/cpw/mods/ironchest/IronChestType.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 0c7a7d3..981c478 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -104,10 +104,6 @@ public enum IronChestType { return null; } - public static void registerTranslations() - { - } - public static void registerBlocksAndRecipes(BlockIronChest blockResult) { ItemStack previous = new ItemStack(Blocks.chest); From b8f8d10f68c97b53c10499811ce6200266953dfc Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 4 Sep 2014 20:36:25 -0400 Subject: [PATCH 183/188] minor cleanup c/o IDEA code analysis --- src/main/java/cpw/mods/ironchest/IronChestType.java | 12 ++++++------ .../mods/ironchest/OcelotsSitOnChestsHandler.java | 7 ++----- .../java/cpw/mods/ironchest/TileEntityIronChest.java | 9 ++------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 981c478..119f5a6 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -140,27 +140,27 @@ public enum IronChestType { public static Object translateOreName(String mat) { - if (mat == "ingotIron") + if (mat.equals("ingotIron")) { return Items.iron_ingot; } - else if (mat == "ingotGold") + else if (mat.equals("ingotGold")) { return Items.gold_ingot; } - else if (mat == "gemDiamond") + else if (mat.equals("gemDiamond")) { return Items.diamond; } - else if (mat == "blockGlass") + else if (mat.equals("blockGlass")) { return Blocks.glass; } - else if (mat == "obsidian") + else if (mat.equals("obsidian")) { return Blocks.obsidian; } - else if (mat == "dirt") + else if (mat.equals("dirt")) { return Blocks.dirt; } diff --git a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 3e3283e..1e42515 100644 --- a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -17,11 +17,8 @@ public class OcelotsSitOnChestsHandler { @SuppressWarnings("unchecked") List tasks = ocelot.tasks.taskEntries; - for (int i = 0; i < tasks.size(); i++) - { - EntityAITasks.EntityAITaskEntry task = tasks.get(i); - if (task.priority == 6 && (task.action instanceof EntityAIOcelotSit) && !(task.action instanceof IronChestAIOcelotSit)) - { + for (EntityAITasks.EntityAITaskEntry task : tasks) { + if (task.priority == 6 && (task.action instanceof EntityAIOcelotSit) && !(task.action instanceof IronChestAIOcelotSit)) { task.action = new IronChestAIOcelotSit(ocelot, 0.4F); } } diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index be2481b..17f8fd8 100644 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -280,14 +280,9 @@ public class TileEntityIronChest extends TileEntity implements IInventory { float var1 = 5.0F; @SuppressWarnings("unchecked") List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); - Iterator var3 = var2.iterator(); - while (var3.hasNext()) - { - EntityPlayer var4 = var3.next(); - - if (var4.openContainer instanceof ContainerIronChest) - { + for (EntityPlayer var4 : var2) { + if (var4.openContainer instanceof ContainerIronChest) { ++this.numUsingPlayers; } } From 0c086f55697e93110fb7573f2e85c88dc62391a0 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 4 Sep 2014 20:52:03 -0400 Subject: [PATCH 184/188] synch NBT as well for crystal chest --- .../cpw/mods/ironchest/PacketHandler.java | 27 +++++++++--------- .../mods/ironchest/TileEntityIronChest.java | 28 ++++++------------- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/PacketHandler.java b/src/main/java/cpw/mods/ironchest/PacketHandler.java index 8c8aa05..3a77a7e 100644 --- a/src/main/java/cpw/mods/ironchest/PacketHandler.java +++ b/src/main/java/cpw/mods/ironchest/PacketHandler.java @@ -10,10 +10,13 @@ ******************************************************************************/ package cpw.mods.ironchest; +import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import java.util.EnumMap; + +import net.minecraft.item.ItemStack; import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -85,7 +88,7 @@ public enum PacketHandler { { TileEntityIronChest icte = (TileEntityIronChest) te; icte.setFacing(msg.facing); - icte.handlePacketData(msg.type, msg.items); + icte.handlePacketData(msg.type, msg.itemStacks); } } } @@ -106,7 +109,7 @@ public enum PacketHandler { int z; int type; int facing; - int[] items; + ItemStack[] itemStacks; } /** @@ -135,14 +138,12 @@ public enum PacketHandler { target.writeInt(msg.z); int typeAndFacing = ((msg.type & 0x0F) | ((msg.facing & 0x0F) << 4)) & 0xFF; target.writeByte(typeAndFacing); - target.writeBoolean(msg.items != null); - if (msg.items != null) + target.writeBoolean(msg.itemStacks != null); + if (msg.itemStacks != null) { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) + for (ItemStack i: msg.itemStacks) { - int i = items[j]; - target.writeInt(i); + ByteBufUtils.writeItemStack(target, i); } } } @@ -157,13 +158,13 @@ public enum PacketHandler { msg.type = (byte)(typDat & 0xf); msg.facing = (byte)((typDat >> 4) & 0xf); boolean hasStacks = dat.readBoolean(); - msg.items = new int[0]; + msg.itemStacks = new ItemStack[0]; if (hasStacks) { - msg.items = new int[24]; - for (int i = 0; i < msg.items.length; i++) + msg.itemStacks = new ItemStack[8]; + for (int i = 0; i < msg.itemStacks.length; i++) { - msg.items[i] = dat.readInt(); + msg.itemStacks[i] = ByteBufUtils.readItemStack(dat); } } } @@ -194,7 +195,7 @@ public enum PacketHandler { msg.z = tileEntityIronChest.zCoord; msg.type = tileEntityIronChest.getType().ordinal(); msg.facing = tileEntityIronChest.getFacing(); - msg.items = tileEntityIronChest.buildIntDataList(); + msg.itemStacks = tileEntityIronChest.buildItemStackDataList(); return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); } } diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 17f8fd8..44c4359 100644 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -15,10 +15,10 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; +import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -421,7 +421,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return PacketHandler.getPacket(this); } - public void handlePacketData(int typeData, int[] intData) + public void handlePacketData(int typeData, ItemStack[] intData) { TileEntityIronChest chest = this; if (this.type.ordinal() != typeData) @@ -431,46 +431,36 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (IronChestType.values()[typeData].isTransparent() && intData != null) { int pos = 0; - if (intData.length < chest.topStacks.length * 3) - { - return; - } for (int i = 0; i < chest.topStacks.length; i++) { - if (intData[pos + 2] != 0) + if (intData[pos] != null) { - Item it = Item.getItemById(intData[pos]); - ItemStack is = new ItemStack(it, intData[pos + 2], intData[pos + 1]); - chest.topStacks[i] = is; + chest.topStacks[i] = intData[pos]; } else { chest.topStacks[i] = null; } - pos += 3; + pos ++; } } } - public int[] buildIntDataList() + public ItemStack[] buildItemStackDataList() { if (type.isTransparent()) { - int[] sortList = new int[topStacks.length * 3]; + ItemStack[] sortList = new ItemStack[topStacks.length]; int pos = 0; for (ItemStack is : topStacks) { if (is != null) { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; + sortList[pos++] = is; } else { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; + sortList[pos++] = null; } } return sortList; From 8dcee374b531f7a98b281fb10ac75047f031ca2e Mon Sep 17 00:00:00 2001 From: Zach Date: Tue, 9 Sep 2014 22:54:36 -0400 Subject: [PATCH 185/188] update to gradle 2 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d9425c6..ec94fc4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.8-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-2.0-bin.zip From e86aad017ab03360199b0fabb5f4c1c48a283e94 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Wed, 10 Sep 2014 01:33:28 -0400 Subject: [PATCH 186/188] actually commit updated wrapper jar as well --- gradle/wrapper/gradle-wrapper.jar | Bin 50514 -> 51017 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 667288ad6c2b3b87c990ece1267e56f0bcbf3622..b7612167031001b7b84baf2a959e8ea8ad03c011 100644 GIT binary patch delta 24889 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%0A`3;a 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 UFo_-vTpnOKhXa$yss0-AKkzv|fB*mh delta 24379 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 Date: Fri, 19 Sep 2014 20:58:20 +0100 Subject: [PATCH 187/188] Added ore dictionary support --- src/main/java/cpw/mods/ironchest/IronChest.java | 5 +++++ src/main/java/cpw/mods/ironchest/IronChestType.java | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 9cf3e85..2cce098 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,9 +10,13 @@ ******************************************************************************/ package cpw.mods.ironchest; +import net.minecraft.init.Blocks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.oredict.OreDictionary; + import org.apache.logging.log4j.Level; + import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -69,6 +73,7 @@ public class IronChest { GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest."+typ.name(), typ.name()); proxy.registerTileEntitySpecialRenderer(typ); } + OreDictionary.registerOre("chestWood", Blocks.chest); IronChestType.registerBlocksAndRecipes(ironChestBlock); ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 119f5a6..787eb81 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -106,7 +106,7 @@ public enum IronChestType { public static void registerBlocksAndRecipes(BlockIronChest blockResult) { - ItemStack previous = new ItemStack(Blocks.chest); + Object previous = "chestWood"; for (IronChestType typ : values()) { generateRecipesForType(blockResult, previous, typ); @@ -127,7 +127,7 @@ public enum IronChestType { mainMaterial = translateOreName(mat); addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mainMaterial, 'P', previousTier, /* previous tier of chest */ - 'G', Blocks.glass, 'C', Blocks.chest, + 'G', Blocks.glass, 'C', "chestWood", '0', new ItemStack(blockResult, 1, 0), /* Iron Chest */ '1', new ItemStack(blockResult, 1, 1), /* Gold Chest */ '2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */ From 17bc3355c0ee3b1a02e5c861e049bfe4299c3209 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Sat, 20 Sep 2014 18:51:54 +0100 Subject: [PATCH 188/188] Added ore dict support for glass, iron, gold and diamond as well That will allow crafting the chests with stained glass... if that's not intended change "blockGlass" to "blockGlassColorless". --- .../cpw/mods/ironchest/IronChestType.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 787eb81..3a9c9d3 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -127,12 +127,12 @@ public enum IronChestType { mainMaterial = translateOreName(mat); addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mainMaterial, 'P', previousTier, /* previous tier of chest */ - 'G', Blocks.glass, 'C', "chestWood", + 'G', "blockGlass", 'C', "chestWood", '0', new ItemStack(blockResult, 1, 0), /* Iron Chest */ '1', new ItemStack(blockResult, 1, 1), /* Gold Chest */ '2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */ '3', new ItemStack(blockResult, 1, 3), /* Copper Chest */ - '4', new ItemStack(blockResult, 1, 4)/* Silver Chest */ + '4', new ItemStack(blockResult, 1, 4) /* Silver Chest */ ); } } @@ -140,23 +140,7 @@ public enum IronChestType { public static Object translateOreName(String mat) { - if (mat.equals("ingotIron")) - { - return Items.iron_ingot; - } - else if (mat.equals("ingotGold")) - { - return Items.gold_ingot; - } - else if (mat.equals("gemDiamond")) - { - return Items.diamond; - } - else if (mat.equals("blockGlass")) - { - return Blocks.glass; - } - else if (mat.equals("obsidian")) + if (mat.equals("obsidian")) { return Blocks.obsidian; }