Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED Conflit entre GuiHandler

    1.8.x
    1.8
    3
    4
    708
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Gabs
      Gabs last edited by

      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>

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

        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 …

        1 Reply Last reply Reply Quote 0
        • AymericRed
          AymericRed last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • Gabs
            Gabs last edited by

            D’accord merci ^^

            1 Reply Last reply Reply Quote 0
            • 1 / 1
            • First post
              Last post
            Design by Woryk
            Contact / Mentions Légales / Faire un don

            MINECRAFT FORGE FRANCE © 2018

            Powered by NodeBB