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 extends TileEntityIronChest> clazz;
+ public Class extends TileEntityIronChest> 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 extends TileEntityIronChest> 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 extends TileEntitySpecialRenderer> 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
+ }
+
+}