MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Texture item

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    43 Messages 9 Publieurs 8.7k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • S Hors-ligne
      Sebenf0rce
      dernière édition par

      D’accord autant pour moi.
      Du coup j’ai mis mon gui cependant ça plante. Voici ma classe GuiHandler :

      package fr.sebenforce.mod;
      
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.util.math.BlockPos;
      import net.minecraft.world.World;
      import net.minecraftforge.fml.common.network.IGuiHandler;
      
      public class GuiHandler implements IGuiHandler {
      
      public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
      switch (ID) {
      case 0:
      return new ContainerChestExplorer(world.getTileEntity(new BlockPos(x, y, z)));
      }
      return null;
      }
      
      public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
      switch (ID) {
      case 0:
      return new GuiChestExplorer(world.getTileEntity(new BlockPos(x, y, z)));
      }
      return null;
      }
      }
      
      

      Et voici le crash report :

      https://pastebin.com/9TtG71MD

      1 réponse Dernière réponse Répondre Citer 0
      • AymericRedA Hors-ligne
        AymericRed
        dernière édition par

        Montres ta classe “ContainerChestExplorer” car à la vue du crash report je pense que tu as spécifié un Inventory null pour un des slots.

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

        1 réponse Dernière réponse Répondre Citer 0
        • S Hors-ligne
          Sebenf0rce
          dernière édition par

          @‘AymericRed’:

          Montres ta classe “ContainerChestExplorer” car à la vue du crash report je pense que tu as spécifié un Inventory null pour un des slots.

          Oui la voici :

           package fr.sebenforce.mod;
          
           import net.minecraft.entity.player.EntityPlayer;
          import net.minecraft.inventory.Container;
          import net.minecraft.inventory.IInventory;
          import net.minecraft.item.ItemStack;
          import net.minecraft.tileentity.TileEntity;
          
           public class ContainerChestExplorer extends Container
           {
             IInventory inventory;
          
            public ContainerChestExplorer(TileEntity tile)
             {
              this.inventory = ((IInventory)tile);
          
              int i = 0;
              int j = 0;
          
              for (i = 0; i < 108; i++) {
                if (i % 12 == 0)
                   j++;
                int u = i % 12 + 1;
                if (i < this.inventory.getSizeInventory()) {
                   addSlotToContainer(new SlotChestExplorer(this.inventory, i, u * 18 - 6, j * 18 - 10));
                } else {
                  addSlotToContainer(new SlotChestExplorer(new InventoryDummy(), 0, u * 18 - 6, j * 18 - 10));
                 }
              }
             }
          
             public boolean canInteractWith(EntityPlayer player) {
              return this.inventory.isUsableByPlayer(player);
            }
          
            public ItemStack slotClick(int slotIndex, int buttonPressed, int flag, EntityPlayer player)
             {
               return null;
             }
          
             public ItemStack transferStackInSlot(EntityPlayer player, int quantity)
             {
               return null;
            }
           }
          
          1 réponse Dernière réponse Répondre Citer 0
          • S Hors-ligne
            Sebenf0rce
            dernière édition par

            Personne a une idée ?

            1 réponse Dernière réponse Répondre Citer 0
            • AymericRedA Hors-ligne
              AymericRed
              dernière édition par

              Ah non, ce n’est pas un Inventory null mais un ItemStack qui est null, en 1.11 les item stack ne peuvent pas être null, il faut remplacer cela par ItemStack.EMPTY donc passes en revue la classe de ton TileEntity et la classe “InventoryDummy” pour remplacer tout ce qui ferait référence à des ItemStack null.
              PS : pour savoir si un stack est vide (ou avant si un stack était null), c’est “lestack.isEmpty()”.

              Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

              AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

              Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
              Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

              1 réponse Dernière réponse Répondre Citer 1
              • S Hors-ligne
                Sebenf0rce
                dernière édition par

                @AymericRed:

                Ah non, ce n’est pas un Inventory null mais un ItemStack qui est null, en 1.11 les item stack ne peuvent pas être null, il faut remplacer cela par ItemStack.EMPTY donc passes en revue la classe de ton TileEntity et la classe “InventoryDummy” pour remplacer tout ce qui ferait référence à des ItemStack null.
                PS : pour savoir si un stack est vide (ou avant si un stack était null), c’est “lestack.isEmpty()”.

                Merci, ça ne crash plus désormais cependant mon gui ne s’affiche pas et je ne comprends pas pourquoi.

                J’ai bien ma méthode onItemUse qui appel le gui :

                @Override
                public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
                {
                if (!world.isRemote) {
                System.out.println("test1");
                TileEntity tile = world.getTileEntity(pos);
                System.out.println(tile); //renvoie toujours null
                
                if (tile == null) {
                return EnumActionResult.PASS;
                }
                if(tile instanceof TileEntityChest) {
                System.out.println("test2");
                player.openGui(Main.instance, 0, world, pos.getX(), pos.getY(), pos.getZ());
                return EnumActionResult.SUCCESS;
                }
                }
                return EnumActionResult.PASS;
                }
                

                Et mon guiHandler :

                
                public class GuiHandler implements IGuiHandler {
                
                @Override
                public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                switch (ID) {
                case 0:
                return new ContainerChestExplorer(world.getTileEntity(new BlockPos(x, y, z)));
                }
                return null;
                }
                
                @Override
                public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                switch (ID) {
                case 0:
                return new GuiChestExplorer(world.getTileEntity(new BlockPos(x, y, z)));
                }
                return null;
                }
                }
                
                1 réponse Dernière réponse Répondre Citer 0
                • AymericRedA Hors-ligne
                  AymericRed
                  dernière édition par

                  Vérifies que la fonction isUseableByPlayer de ton TileEntity retourne bien true et ensuite mets des prints/du debug dans les fonctions de draw, d’init et le constructeur du gui pour voir où ça bloque.

                  Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                  AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                  Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                  1 réponse Dernière réponse Répondre Citer 0
                  • S Hors-ligne
                    Sebenf0rce
                    dernière édition par

                    J’ai dû rater un truc, il faut un tileEntity pour un item ? Je pensais que c’était juste pour les blocs.

                    1 réponse Dernière réponse Répondre Citer 0
                    • AymericRedA Hors-ligne
                      AymericRed
                      dernière édition par

                      Euh…. tu sais ce que tu veux faire au moins, tu connais ton code ?
                      T’as un TileEntity ici :

                      public ContainerChestExplorer(TileEntity tile)
                      ``` et ici aussi ```java
                      return this.inventory.isUsableByPlayer(player);
                      

                      Bon il se trouve que c’est le TileEntity du coffre vanilla donc devrait pas poser de problème mais je te conseillerait de vérifier si sa fonction “isUsableByPlayer” retourne bien true à ton Container.

                      Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                      AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                      Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                      Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                      1 réponse Dernière réponse Répondre Citer 1
                      • S Hors-ligne
                        Sebenf0rce
                        dernière édition par

                        Comment je peux tester la fonction isUsableByPlayer car il faut y passer en paramètre le player mais je n’y ai pas accès dans ma classe ContainerChestExplorer.

                        J’ai remarqué également en faisant différent test que le programme ne rentre jamais dans ma fonction
                        public boolean canInteractWith(EntityPlayer player) {
                        return this.inventory.isUsableByPlayer(player);
                        }

                        Est-ce normal ?

                        1 réponse Dernière réponse Répondre Citer 0
                        • AymericRedA Hors-ligne
                          AymericRed
                          dernière édition par

                          Tu y as accès dans canInteractWith.

                          Non mais ça va avec le fait que ton gui s’ouvre pas.
                          @AymericRed:

                          […] et ensuite mets des prints/du debug dans les fonctions de draw, d’init et le constructeur du gui pour voir où ça bloque.

                          Il te reste à faire ça 😉

                          Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                          AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                          Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                          Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                          1 réponse Dernière réponse Répondre Citer 0
                          • S Hors-ligne
                            Sebenf0rce
                            dernière édition par

                            Salut,

                            Du coup j’ai mis différents print :

                            Classe GuiHandler :

                            public class GuiHandler implements IGuiHandler {
                            
                            @Override
                            public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                            switch (ID) {
                            case 0:
                            System.out.println(" création container chest explorer");
                            return new ContainerChestExplorer(world.getTileEntity(new BlockPos(x, y, z)));
                            }
                            return null;
                            }
                            
                            @Override
                            public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                            switch (ID) {
                            case 0:
                            System.out.println(" création gui chest explorer");
                            return new GuiChestExplorer(world.getTileEntity(new BlockPos(x, y, z)));
                            }
                            return null;
                            }
                            }
                            

                            Les deux print s’affiche bien.

                            Classe ContainerChestExplorer :

                            public class ContainerChestExplorer extends Container
                             {
                               IInventory inventory;
                            
                              public ContainerChestExplorer(TileEntity tile)
                               {
                             System.out.println("constructeur container");
                                this.inventory = ((IInventory)tile);
                            
                                int i = 0;
                                int j = 0;
                            
                                for (i = 0; i < 108; i++) {
                                  if (i % 12 == 0)
                                     j++;
                                  int u = i % 12 + 1;
                                  if (i < this.inventory.getSizeInventory()) {
                                     addSlotToContainer(new SlotChestExplorer(this.inventory, i, u * 18 - 6, j * 18 - 10));
                                  } else {
                                    addSlotToContainer(new SlotChestExplorer(new InventoryDummy(), 0, u * 18 - 6, j * 18 - 10));
                                   }
                                }
                               }
                            
                               public boolean canInteractWith(EntityPlayer player) {
                              System.out.println("AAAAAAAAAAAAAAA" + this.inventory.isUsableByPlayer(player));
                                return this.inventory.isUsableByPlayer(player);
                              }
                            
                              public ItemStack slotClick(int slotIndex, int buttonPressed, int flag, EntityPlayer player)
                               {
                                 return null;
                               }
                            
                               public ItemStack transferStackInSlot(EntityPlayer player, int quantity)
                               {
                                 return null;
                              }
                             }
                            

                            Le print du constructeur s’affiche bien mais celui de la méthode de canInteractWith n’apparait pas et je ne comprends pas pourquoi.

                            Classe GuiChestExplorer :

                            public class GuiChestExplorer extends GuiContainer
                             {
                              TileEntity tile;
                               ResourceLocation bg = new ResourceLocation("sebenforcemod:textures/gui/chestexplorer.png");
                            
                               public GuiChestExplorer(TileEntity te) {
                                super(new ContainerChestExplorer(te));
                                System.out.println("constructeur gui");
                                 this.xSize = 256;
                                this.ySize = 177;
                               }
                            
                              protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_)
                               {
                                this.mc.renderEngine.bindTexture(this.bg);
                                System.out.println("draw gui");
                                 drawDefaultBackground();
                                 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                                 int x = (this.width - this.xSize) / 2;
                                 int y = (this.height - this.ySize) / 2;
                                 drawTexturedModalRect(x, y, 0, 0, 256, 256);
                               }
                             }
                            

                            Les deux print s’affichent bien.

                            Est ce qu’il est possible que le gui du coffre de base s’affiche par dessus le mien ?

                            1 réponse Dernière réponse Répondre Citer 0
                            • robin4002R Hors-ligne
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                              dernière édition par

                              C’est très probable.
                              Essaies dans la classe de ton item de remplacer EnumActionResult.SUCESS par FAILED pour éviter qu’il fasse l’action du clic droit du coffre.

                              1 réponse Dernière réponse Répondre Citer 0
                              • S Hors-ligne
                                Sebenf0rce
                                dernière édition par

                                @robin4002:

                                C’est très probable.
                                Essaies dans la classe de ton item de remplacer EnumActionResult.SUCESS par FAILED pour éviter qu’il fasse l’action du clic droit du coffre.

                                Salut, j’ai essayé avec le EnumActionResult.FAIL mais ça ouvre toujours le gui du coffre de base.

                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002R Hors-ligne
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                  dernière édition par

                                  Faudrait passer par un event alors.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • S Hors-ligne
                                    Sebenf0rce
                                    dernière édition par

                                    @robin4002:

                                    Faudrait passer par un event alors.

                                    Ah d’accord 😞
                                    J’ai essayé de voir la liste des event. J’ai trouvé celui là qui pourrait m’être utile mais il ne semble pas exister en 1.11 : PlayerUseItemEvent

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Alexandre1156A Hors-ligne
                                      Alexandre1156
                                      dernière édition par

                                      @‘Sebenf0rce’:

                                      @‘robin4002’:

                                      Faudrait passer par un event alors.

                                      Ah d’accord 😞
                                      J’ai essayé de voir la liste des event. J’ai trouvé celui là qui pourrait m’être utile mais il ne semble pas exister en 1.11 : PlayerUseItemEvent

                                      Celui là :

                                      
                                      PlayerInteractEvent.RightClickBlock
                                      
                                      

                                      Il suffit de cancel l’event et d’afficher ton Gui.

                                      1 réponse Dernière réponse Répondre Citer 1
                                      • S Hors-ligne
                                        Sebenf0rce
                                        dernière édition par

                                        @Alexandre1156:

                                        @‘Sebenf0rce’:

                                        @‘robin4002’:

                                        Faudrait passer par un event alors.

                                        Ah d’accord 😞
                                        J’ai essayé de voir la liste des event. J’ai trouvé celui là qui pourrait m’être utile mais il ne semble pas exister en 1.11 : PlayerUseItemEvent

                                        Celui là :

                                        
                                        PlayerInteractEvent.RightClickBlock
                                        
                                        

                                        Il suffit de cancel l’event et d’afficher ton Gui.

                                        Merci, par contre comment je peux vérifier que le block a été right click avec mon item ?

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • BrokenSwingB Hors-ligne
                                          BrokenSwing Moddeurs confirmés Rédacteurs
                                          dernière édition par

                                          Avec l’instance du joueur tu peux vérifier si l’item qu’il tient quand la main est ton item

                                          1 réponse Dernière réponse Répondre Citer 1
                                          • S Hors-ligne
                                            Sebenf0rce
                                            dernière édition par

                                            @‘BrokenSwing’:

                                            Avec l’instance du joueur tu peux vérifier si l’item qu’il tient quand la main est ton item

                                            J’ai réussis à faire ça (est-ce que je suis sur la bonne piste ?)

                                            public class EventPlayerUseItem {
                                            
                                            @SubscribeEvent
                                            public void onRightClick(PlayerInteractEvent.RightClickBlock event) {
                                            if (event.getItemStack() != null) {
                                            Item item = event.getItemStack().getItem();
                                            
                                            if (item == Items.chestExplorer) {
                                            event.setCanceled(true);
                                            player.openGui(Main.instance, 0, world, pos.getX(), pos.getY(), pos.getZ());
                                            }
                                            }
                                            }
                                            }
                                            

                                            Seulement je ne sais pas comment récupérer l’instance du player du coup la ligne suivante ne fonctionne pas : player.openGui(Main.instance, 0, world, pos.getX(), pos.getY(), pos.getZ());

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 2 / 3
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB