diff --git a/fml/client/cpw/mods/fml/client/modloader/ModLoaderClientHelper.java b/fml/client/cpw/mods/fml/client/modloader/ModLoaderClientHelper.java index bd0451a07..d233a02cf 100644 --- a/fml/client/cpw/mods/fml/client/modloader/ModLoaderClientHelper.java +++ b/fml/client/cpw/mods/fml/client/modloader/ModLoaderClientHelper.java @@ -8,6 +8,8 @@ import java.util.Map.Entry; import net.minecraft.client.Minecraft; import net.minecraft.src.BaseMod; import net.minecraft.src.Entity; +import net.minecraft.src.EntityClientPlayerMP; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.KeyBinding; import net.minecraft.src.Render; @@ -92,4 +94,11 @@ public class ModLoaderClientHelper implements IModLoaderSidedHelper handler.addKeyBinding(keyHandler, allowRepeat); KeyBindingRegistry.registerKeyBinding(handler); } + + + @Override + public Object getClientGui(BaseModProxy mod, EntityPlayer player, int ID, int x, int y, int z) + { + return ((net.minecraft.src.BaseMod)mod).getContainerGUI((EntityClientPlayerMP) player, ID, x, y, z); + } } diff --git a/fml/client/net/minecraft/src/BaseMod.java b/fml/client/net/minecraft/src/BaseMod.java index b9ac07c40..2793aa258 100644 --- a/fml/client/net/minecraft/src/BaseMod.java +++ b/fml/client/net/minecraft/src/BaseMod.java @@ -234,8 +234,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * @return */ @SideOnly(CLIENT) - @Override - public GuiScreen getContainerGUI(EntityPlayer player, int containerID, int x, int y, int z) + public GuiContainer getContainerGUI(EntityClientPlayerMP player, int containerID, int x, int y, int z) { return null; } diff --git a/fml/client/net/minecraft/src/ModLoader.java b/fml/client/net/minecraft/src/ModLoader.java index 830e1bd01..0f6c5f0d9 100644 --- a/fml/client/net/minecraft/src/ModLoader.java +++ b/fml/client/net/minecraft/src/ModLoader.java @@ -35,7 +35,6 @@ import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ObfuscationReflectionHelper; import cpw.mods.fml.common.asm.SideOnly; -import cpw.mods.fml.common.modloader.BaseModProxy; import cpw.mods.fml.common.modloader.ModLoaderHelper; import cpw.mods.fml.common.modloader.ModLoaderModContainer; import cpw.mods.fml.common.network.NetworkRegistry; @@ -573,7 +572,7 @@ public class ModLoader GameRegistry.registerBlock(block, itemclass); } - public static void registerContainerID(BaseModProxy mod, int id) + public static void registerContainerID(BaseMod mod, int id) { ModLoaderHelper.buildGuiHelper(mod, id); } @@ -604,7 +603,7 @@ public class ModLoader } @SideOnly(CLIENT) - public static void registerKey(BaseModProxy mod, KeyBinding keyHandler, boolean allowRepeat) + public static void registerKey(BaseMod mod, KeyBinding keyHandler, boolean allowRepeat) { ModLoaderClientHelper.registerKeyBinding(mod, keyHandler, allowRepeat); } @@ -616,7 +615,7 @@ public class ModLoader * @param mod * @param channel */ - public static void registerPacketChannel(BaseModProxy mod, String channel) + public static void registerPacketChannel(BaseMod mod, String channel) { NetworkRegistry.instance().registerChannel(ModLoaderHelper.buildPacketHandlerFor(mod), channel); } @@ -751,7 +750,7 @@ public class ModLoader //TODO } - public static void serverOpenWindow(EntityPlayer player, Container container, int ID, int x, int y, int z) + public static void serverOpenWindow(EntityPlayerMP player, Container container, int ID, int x, int y, int z) { ModLoaderHelper.openGui(ID, player, container, x, y, z); } @@ -763,13 +762,13 @@ public class ModLoader * @param enable indicates whether you want to recieve them or not * @param useClock don't receive render subticks, just world ticks */ - public static void setInGameHook(BaseModProxy mod, boolean enable, boolean useClock) + public static void setInGameHook(BaseMod mod, boolean enable, boolean useClock) { ModLoaderHelper.updateStandardTicks(mod, enable, useClock); } - public static void setInGUIHook(BaseModProxy mod, boolean enable, boolean useClock) + public static void setInGUIHook(BaseMod mod, boolean enable, boolean useClock) { ModLoaderHelper.updateGUITicks(mod, enable, useClock); } diff --git a/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java b/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java index 66791ab4e..cf8e46035 100644 --- a/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java +++ b/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java @@ -85,7 +85,4 @@ public interface BaseModProxy public abstract void receiveChatPacket(String text); public abstract void onItemPickup(EntityPlayer player, ItemStack item); - - @SideOnly(Side.CLIENT) - public abstract GuiScreen getContainerGUI(EntityPlayer player, int containerID, int x, int y, int z); } diff --git a/fml/common/cpw/mods/fml/common/modloader/IModLoaderSidedHelper.java b/fml/common/cpw/mods/fml/common/modloader/IModLoaderSidedHelper.java index 0c238a32e..de773d29d 100644 --- a/fml/common/cpw/mods/fml/common/modloader/IModLoaderSidedHelper.java +++ b/fml/common/cpw/mods/fml/common/modloader/IModLoaderSidedHelper.java @@ -1,8 +1,12 @@ package cpw.mods.fml.common.modloader; +import net.minecraft.src.EntityPlayer; + public interface IModLoaderSidedHelper { void finishModLoading(ModLoaderModContainer mc); + Object getClientGui(BaseModProxy mod, EntityPlayer player, int iD, int x, int y, int z); + } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java index db17bc755..7e94c0c8d 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java @@ -21,13 +21,16 @@ public class ModLoaderGuiHelper implements IGuiHandler @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + System.out.printf("returning container %s, %d for server side\n", container, id); return container; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - return mod.getContainerGUI(player, ID, x, y, z); + Object o = ModLoaderHelper.getClientSideGui(mod, player, ID, x, y, z); + System.out.printf("fetching gui %s %d for client side\n", o, id); + return o; } public void injectContainer(Container container) diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java index 49c7fac73..7f8ca0db7 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java @@ -127,12 +127,23 @@ public class ModLoaderHelper { ModLoaderGuiHelper handler = new ModLoaderGuiHelper(mod, id); guiHelpers.put(id, handler); - NetworkRegistry.instance().registerGuiHandler(Loader.instance().activeModContainer(), handler); + NetworkRegistry.instance().registerGuiHandler(mod, handler); } public static void openGui(int id, EntityPlayer player, Container container, int x, int y, int z) { - guiHelpers.get(id).injectContainer(container); - player.openGui(guiHelpers.get(id).getMod(), id, player.field_70170_p, x, y, z); + ModLoaderGuiHelper helper = guiHelpers.get(id); + helper.injectContainer(container); + System.out.printf("Opening GUI %d %s at %d %d %d\n", id, container, x,y,z); + player.openGui(helper.getMod(), id, player.field_70170_p, x, y, z); + } + + public static Object getClientSideGui(BaseModProxy mod, EntityPlayer player, int ID, int x, int y, int z) + { + if (sidedHelper != null) + { + return sidedHelper.getClientGui(mod, player, ID, x, y, z); + } + return null; } } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java index 3fe2d310a..d91d0945b 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java @@ -142,6 +142,7 @@ public class ModLoaderModContainer implements ModContainer try { mlPropFields.add(new ModProperty(modClazz.getDeclaredField(dat.getObjectName()), dat.getAnnotationInfo())); + FMLLog.finest("Found an MLProp field %s in %s", dat.getObjectName(), modClazzName); } catch (Exception e) { @@ -484,6 +485,11 @@ public class ModLoaderModContainer implements ModContainer configureMod(modClazz, event.getASMHarvestedData()); isNetworkMod = FMLNetworkHandler.instance().registerNetworkMod(this, modClazz, event.getASMHarvestedData()); mod = (BaseModProxy)modClazz.newInstance(); + if (!isNetworkMod) + { + FMLLog.fine("Injecting dummy network mod handler for BaseMod %s", getModId()); + FMLNetworkHandler.instance().registerNetworkMod(new ModLoaderNetworkHandler(this, mod)); + } ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide()); } catch (Exception e) diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderNetworkHandler.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderNetworkHandler.java new file mode 100644 index 000000000..b8119bab6 --- /dev/null +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderNetworkHandler.java @@ -0,0 +1,40 @@ +package cpw.mods.fml.common.modloader; + +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.discovery.ASMDataTable; +import cpw.mods.fml.common.network.NetworkMod; +import cpw.mods.fml.common.network.NetworkModHandler; + +public class ModLoaderNetworkHandler extends NetworkModHandler +{ + + private BaseModProxy baseMod; + public ModLoaderNetworkHandler(ModLoaderModContainer mlmc, BaseModProxy mod) + { + super(mlmc, null); + this.baseMod = mod; + } + + @Override + public boolean requiresClientSide() + { + return false; + } + + @Override + public boolean requiresServerSide() + { + return false; + } + + @Override + public boolean acceptVersion(String version) + { + return baseMod.getVersion().equals(version); + } + @Override + public boolean isNetworkMod() + { + return true; + } +} diff --git a/fml/common/cpw/mods/fml/common/modloader/ModProperty.java b/fml/common/cpw/mods/fml/common/modloader/ModProperty.java index 8577fef85..6232d7d56 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModProperty.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModProperty.java @@ -29,12 +29,12 @@ public class ModProperty private String name; private Field field; - public ModProperty(Field f, String info, double min, double max, String name) + public ModProperty(Field f, String info, Double min, Double max, String name) { this.field = f; this.info = info; - this.min = min; - this.max = max; + this.min = min != null ? min : Double.MIN_VALUE; + this.max = max != null ? max : Double.MAX_VALUE; this.name = name; } public ModProperty(Field field, Map annotationInfo)