From 1afe4d8e615cf0399695bc6fb676a590ee1e53d5 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Thu, 26 Jan 2012 23:50:52 -0500 Subject: [PATCH] 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