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.8k 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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      Et il faudrait également get le tile entity avec le pos en paramètre et non les trois float qui désignent précisément l’endroit où tu as tapé sur la face du block, il me semble.

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

        @‘Plaigon’:

        Et il faudrait également get le tile entity avec le pos en paramètre et non les trois float qui désignent précisément l’endroit où tu as tapé sur le block, il me semble

        ça a l’air bon, si tu regardes il a instancié un nouveau BlockPos en paramètre, les floats devraient être automatiquement convertis en double.

        Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

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

          Non, les hit n’ont rien à voir avec les coordonnées du block sur lequel le joueur frappe. On a un BlockPos en paramètre, il est + qu’évident qu’il faut get la TE avec, et non refaire une nouvelle instance.

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

            @‘Plaigon’:

            Non, les hit n’ont rien à voir avec les coordonnées du block sur lequel le joueur frappe. On a un BlockPos en paramètre, il est + qu’évident qu’il faut get la TE avec, et non refaire une nouvelle instance.

            ah oui juste, autant pour moi, j’ai regardé en diagonale

            Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

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

              Merci j’ai modifié le code en suivant ce que vous m’avez dis, du coup le TileEntity n’est plus nul et contient le chest.
              Par contre j’ai un soucis avec le openGui ça n’affiche rien.

              Voici mon code maintenant :

              @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, 13, world, pos.getX(), pos.getY(), pos.getZ());
              return EnumActionResult.SUCCESS;
              }
              }
              return EnumActionResult.PASS;
                  }
              

              (le test2 est bien affiché)

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

                Tu as quoi dans ton GuiHandler ?

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

                  Sûrement un problème avec ton GuiHandler. File nous sa classe stp

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

                    J’utilise pas de GuiHandler perso.
                    J’utilise directement la méthode de la classe player :

                    /**
                        * Opens a GUI with this player, uses FML's IGuiHandler system.
                        * Allows for extension by modders.
                        *
                        * @param mod The mod trying to open a GUI
                        * @param modGuiId GUI ID
                        * @param world Current World
                        * @param x Passed directly to IGuiHandler, data meaningless Typically world X position
                        * @param y Passed directly to IGuiHandler, data meaningless Typically world Y position
                        * @param z Passed directly to IGuiHandler, data meaningless Typically world Z position
                        */
                       public void openGui(Object mod, int modGuiId, World world, int x, int y, int z)
                    

                    C’est au niveau des position où je ne sais pas trop quoi mettre. En 1.7.10 je l’avais utilisé mais il y avait des paramètres supplémentaires (x,y et z)

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

                      En fait t’as pas vraiment le choix :x

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

                        Cette fonction est une fonction de forge qui redirige vers le GuiHandler du mod passé en paramètres. Si tu veux utiliser la fonction de Minecraft, il te faut utiliser : player.displayGUIChest

                        1 réponse Dernière réponse Répondre Citer 0
                        • 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
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB