Résolu Conflit entre GuiHandler
-
Bonjour,
Comme vous l’avez vus dans le titre j’ai un conflit entre GuiHandler.
Je m’expliques:
J’ai deux item: un item “panierlinge” et un item “coli” .
Tout deux sont des items identique a l’item backpack .
Mais voilà: les deux items appelle le même handler (même en utilisant les ID).
Je vous passe les classes et les logs se serra plus simple de comprendre:
classe coli:
public class coli extends Item { @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { player.openGui(Main.instance, 3, world, (int) player.posX, (int) player.posY, (int) player.posZ); System.out.println("right click item coli"); return stack; } }
init Main class:
@EventHandler public void init(FMLInitializationEvent event) { proxy.init(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerPanierLinge()); // NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerInv()); NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerColi());// c'est ce handler qui est appeller par les deux items System.out.println("init main class"); // // NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerMachine()); //Events MinecraftForge.EVENT_BUS.register(new Events()); FMLCommonHandler.instance().bus().register(new Events()); }
GuiHandler Coli:
public class GuiHandlerColi implements IGuiHandler{ @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 3) if (player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof coli)) return new ContainerColi(player.inventory, new InventoryColi(player.getHeldItem(), 54)); System.out.println("getServerGuiElement, ID:" + ID); return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { System.out.println(""); if(ID == 3) if (player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof coli)) return new GuiColi(player.inventory, new InventoryColi(player.getHeldItem(), 54)); System.out.println("getClientGuiElement, ID:" + ID); return null; } }
je vous passe l’item panierlinge:
public class panierlinger extends Item { public panierlinger() { this.maxStackSize = 1; // N'oubliez pas ceci, çà empêche l'item d'être stackable } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { player.openGui(Main.instance, 0, world, (int) player.posX, (int) player.posY, (int) player.posZ); System.out.println("right click panierlinge item"); return stack; } }
Et les logs:
[11:21:28] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiHandlerColi:getClientGuiElement:26]: [11:21:28] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiHandlerColi:getClientGuiElement:30]: getClientGuiElement, ID:3 [11:21:28] [Client thread/INFO] [STDOUT]: [com.CSC.net.item.coli:onItemRightClick:15]: right click item coli [11:21:28] [Server thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiHandlerColi:getServerGuiElement:19]: getServerGuiElement, ID:3 [11:21:28] [Server thread/INFO] [STDOUT]: [com.CSC.net.item.coli:onItemRightClick:15]: right click item coli [11:21:34] [Server thread/INFO]: <floriangabet>–------------ [11:21:34] [Client thread/INFO]: [CHAT] <floriangabet>–------------ [11:21:38] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiHandlerColi:getClientGuiElement:26]: [11:21:38] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiHandlerColi:getClientGuiElement:30]: getClientGuiElement, ID:0 [11:21:38] [Client thread/INFO] [STDOUT]: [com.CSC.net.item.panierlinger:onItemRightClick:20]: right click panierlinge item [11:21:38] [Server thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiHandlerColi:getServerGuiElement:19]: getServerGuiElement, ID:0 [11:21:38] [Server thread/INFO] [STDOUT]: [com.CSC.net.item.panierlinger:onItemRightClick:20]: right click panierlinge item
L’item panierlinge exécute le GuiHandlerColi alors qu’il ne devrais pas, de plus il y a un if ID == 3, et son id et de 0 .
Merci d’avance :)</floriangabet></floriangabet>
-
Il n’est pas possible d’avoir plusieurs gui handler. Le dernier a être enregistrer et le seul qui reste car à chaque fois que tu en enregistrer un nouveau ça écrase celui d’avant.
Un mod = un gui handler.Je passe mon temps à le répéter dans la section support …
-
Tu ne devrais pas avoir deux handlers, tout mod ne doit en avoir qu’un seul, dans tes items tu donner un id différent et mettre un if pour chaque id.
-
D’accord merci ^^