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>


  • Administrateurs

    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 ^^