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

    Solved Texture item

    1.11.x
    1.11.x
    9
    43
    6360
    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.
    • S
      Sebenf0rce last edited by

      Bonjour,

      J’ai un soucis lors de la création de mon item. Je n’arrive pas à afficher la texture, ça doit être tout bête mais je ne vois pas du tout.
      Je déclare mon item ici :

      package fr.sebenforce.mod;
      
      import net.minecraft.client.renderer.block.model.ModelResourceLocation;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.item.Item;
      import net.minecraftforge.client.model.ModelLoader;
      import net.minecraftforge.fml.common.registry.GameRegistry;
      import net.minecraftforge.fml.relauncher.Side;
      import net.minecraftforge.fml.relauncher.SideOnly;
      
      public class Items {
      
      public static final Item chestExplorer = new ChestExplorer().setRegistryName("chestExplorer").setCreativeTab(CreativeTabs.TOOLS);
      
      public static void registerItems() {
      GameRegistry.register(chestExplorer);
      }
      
      @SideOnly(Side.CLIENT)
      public static void registerItemsModels() {
      ModelLoader.setCustomModelResourceLocation(chestExplorer, 0, new ModelResourceLocation(Main.MODID + ":chestExplorer", "inventory"));
      }
      }
      
      

      Et le json se trouve ici src\main\resources\assets\sebenforcemod\models\item\chestExplorer.json

      {
          "parent": "item/generated",
          "textures": {
              "layer0": "sebenforcemod:items/chestExplorer"
          }
      }
      

      Qui spécifie la texture qui se trouve ici : src\main\resources\assets\sebenforcemod\textures\items\chestExplorer.png

      J’ai également une deuxième question, j’aimerais savoir pourquoi la méthode : TileEntity tile = world.getTileEntity(new BlockPos(hitX, hitY, hitZ)); me renvoie toujours null quand je l’utilise avec la méthode onItemUse de mon item.

      Merci d’avance.

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

        enlève la majuscule dans le nom de ta texture, le nom de ton json et le nom de ton item dans le registre (ainsi que le nom non localisé si tu en as mis une là-bas aussi).

        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 Reply Last reply Reply Quote 0
        • S
          Sebenf0rce last edited by

          @Dylem:

          enlève la majuscule dans le nom de ta texture, le nom de ton json et le nom de ton item dans le registre (ainsi que le nom non localisé si tu en as mis une là-bas aussi).

          En effet ça venait de là, c’est une erreur assez bête merci 😉

          Quelqu’un a une idée pour le tileEntity null ?

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

            Tu essaies de l’utiliser sur quelle tileEntity ? +poste le code

            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 Reply Last reply Reply Quote 0
            • S
              Sebenf0rce last edited by

              @‘Dylem’:

              Tu essaies de l’utiliser sur quelle tileEntity ? +poste le code

              J’essaie sur un coffre avec ce code :

              @Override
                  public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
                  {
              if (!world.isRemote) {
              TileEntity tile = world.getTileEntity(new BlockPos(hitX, hitY, hitZ));
              System.out.println(tile); //affiche toujours null
              
              if (tile == null) {
              return EnumActionResult.SUCCESS;
              }
              if (((tile instanceof IInventory)) && (tile.getClass().toString().contains("Chest"))) {
              player.openGui(Main.instance, 13, world, (int)hitX, (int)hitY, (int)hitZ);
              return EnumActionResult.SUCCESS;
              }
              }
              return EnumActionResult.SUCCESS;
                  }
              
              1 Reply Last reply Reply Quote 0
              • Dylem
                Dylem last edited by

                Plusieurs remarques :

                • Pourquoi !world.isRemote ? Ca ne me semble pas très logique pour ce que tu veux en faire…
                • Pourquoi return EnumActionResult.SUCCESS si l’entité est null ? Il faut return PASS
                • Ce code est étrange :
                if (((tile instanceof IInventory)) && (tile.getClass().toString().contains("Chest"))) {
                

                Fais plutôt directement :

                if(tile instanceof TileEntityChest) {
                

                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 Reply Last reply Reply Quote 0
                • Deleted
                  Deleted last edited by

                  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 Reply Last reply Reply Quote 0
                  • Dylem
                    Dylem last edited by

                    @‘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 Reply Last reply Reply Quote 0
                    • Deleted
                      Deleted last edited by

                      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 Reply Last reply Reply Quote 0
                      • Dylem
                        Dylem last edited by

                        @‘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 Reply Last reply Reply Quote 0
                        • S
                          Sebenf0rce last edited by

                          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 Reply Last reply Reply Quote 0
                          • BrokenSwing
                            BrokenSwing Moddeurs confirmés Rédacteurs last edited by

                            Tu as quoi dans ton GuiHandler ?

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

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

                              1 Reply Last reply Reply Quote 0
                              • S
                                Sebenf0rce last edited by

                                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 Reply Last reply Reply Quote 0
                                • Deleted
                                  Deleted last edited by

                                  En fait t’as pas vraiment le choix :x

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

                                    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 Reply Last reply Reply Quote 0
                                    • S
                                      Sebenf0rce last edited by

                                      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 Reply Last reply Reply Quote 0
                                      • AymericRed
                                        AymericRed last edited by

                                        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 Reply Last reply Reply Quote 0
                                        • S
                                          Sebenf0rce last edited by

                                          @‘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 Reply Last reply Reply Quote 0
                                          • S
                                            Sebenf0rce last edited by

                                            Personne a une idée ?

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB