From 1a232cf76638ccd6217bb7c4e0f9aa2cbcd26816 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 27 Dec 2012 23:00:52 -0500 Subject: [PATCH] Fix multiple GUI containers for ML containers. Sorry ultimatechest that this fix took so long, a bug report at github.com/cpw/FML would help, next time ;) --- .../common/modloader/ModLoaderGuiHelper.java | 20 ++++++++++++++---- .../fml/common/modloader/ModLoaderHelper.java | 21 +++++++++++++------ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java b/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java index ce49493f08..5fed0ccddf 100644 --- a/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java +++ b/common/cpw/mods/fml/common/modloader/ModLoaderGuiHelper.java @@ -1,21 +1,27 @@ package cpw.mods.fml.common.modloader; +import java.util.Set; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; + +import com.google.common.collect.Sets; + import cpw.mods.fml.common.network.IGuiHandler; public class ModLoaderGuiHelper implements IGuiHandler { private BaseModProxy mod; - private int id; + private Set ids; private Container container; + private int currentID; - ModLoaderGuiHelper(BaseModProxy mod, int id) + ModLoaderGuiHelper(BaseModProxy mod) { this.mod = mod; - this.id = id; + this.ids = Sets.newHashSet(); } @Override @@ -30,9 +36,10 @@ public class ModLoaderGuiHelper implements IGuiHandler return ModLoaderHelper.getClientSideGui(mod, player, ID, x, y, z); } - public void injectContainer(Container container) + public void injectContainerAndID(Container container, int ID) { this.container = container; + this.currentID = ID; } public Object getMod() @@ -40,4 +47,9 @@ public class ModLoaderGuiHelper implements IGuiHandler return mod; } + public void associateId(int additionalID) + { + this.ids.add(additionalID); + } + } diff --git a/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java b/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java index 26967dcbca..8d9882116b 100644 --- a/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java +++ b/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java @@ -20,8 +20,10 @@ import java.util.Map; import java.util.concurrent.Callable; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Maps; +import com.google.common.collect.SetMultimap; import net.minecraft.command.ICommand; import net.minecraft.entity.Entity; @@ -60,7 +62,8 @@ public class ModLoaderHelper { public static IModLoaderSidedHelper sidedHelper; - private static Map guiHelpers = Maps.newHashMap(); + private static Map guiHelpers = Maps.newHashMap(); + private static Map guiIDs = Maps.newHashMap(); public static void updateStandardTicks(BaseModProxy mod, boolean enable, boolean useClock) { @@ -161,15 +164,21 @@ public class ModLoaderHelper public static void buildGuiHelper(BaseModProxy mod, int id) { - ModLoaderGuiHelper handler = new ModLoaderGuiHelper(mod, id); - guiHelpers.put(id, handler); - NetworkRegistry.instance().registerGuiHandler(mod, handler); + ModLoaderGuiHelper handler = guiHelpers.get(mod); + if (handler == null) + { + handler = new ModLoaderGuiHelper(mod); + guiHelpers.put(mod,handler); + NetworkRegistry.instance().registerGuiHandler(mod, handler); + } + handler.associateId(id); + guiIDs.put(id, handler); } public static void openGui(int id, EntityPlayer player, Container container, int x, int y, int z) { - ModLoaderGuiHelper helper = guiHelpers.get(id); - helper.injectContainer(container); + ModLoaderGuiHelper helper = guiIDs.get(id); + helper.injectContainerAndID(container, id); player.openGui(helper.getMod(), id, player.field_70170_p, x, y, z); }