MFF

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

    Inventaire Custom

    Planifier Épinglé Verrouillé Déplacé Non résolu Sans suite
    1.12.2
    8 Messages 2 Publieurs 394 Vues 2 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.
    • En0ri4nE Hors-ligne
      En0ri4n
      dernière édition par

      Salut tout le monde,
      Je viens aujourd’hui vous demander de l’aide pour mon inventaire custom, je m’explique : j’essaye de passer par un capability pour stocker 4 slots, j’ai suivi ce tuto : ici pour créer ma capability mais je ne sais pas si je j’utilise bien ou meme si je l’ai bien créée 😐
      Ma classe principale
      Mon Capability Provider
      Mon Inventory Container
      Mon Packet Inventory
      Mon Schedule Packet Task
      Je ne sais pas aussi si j’ajoute bien mes slots a l’inventaire 🤔

      Merci à tous ce qui m’aideront 😄

      Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

        Vraiment personne pour m’aider ? 😕

        Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

        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

          Bonjour,
          Serait-il possible de détailler le problème ?

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

            Enfait j’aimerais rajouter 4 slot a l’inventaire vanilla mais je ne sais pas si il faut prendre l’inventaire vanilla et rajouter 4 slot OU totalement recréer un inventaire custom… 🤔
            Ici j’ai créé ma capability pour 4 slot mais je ne sais pas si je l’ai bien fait car le tuto datait de la 1.8… 😕
            Merci pour vos réponses 😄

            Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

            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

              Il faut rajouter uniquement 4 slots.
              Ta capability me semble correcte.

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

                j’ai toujours une oob avec ça :

                @SubscribeEvent
                	public static void onPlayerJoin(PlayerLoggedInEvent event)
                	{
                		if(!event.player.world.isRemote)
                		{
                			EntityPlayer player = event.player;
                			Container playerContainer = event.player.inventoryContainer;
                			InventoryPlayer inv = new InventoryPlayer(player);
                			for(int i = 0; i < 4; i++)
                			{
                				playerContainer.inventorySlots.add(new Slot(inv, playerContainer.inventorySlots.size() + i, 10, 10 + 10 * 20));
                				playerContainer.inventoryItemStacks.add(new ItemStack(Items.DIAMOND, 1));
                			}
                		}
                	}
                

                ma classe InventoryPlayer

                Le crash :

                Description: Ticking player
                
                java.lang.ArrayIndexOutOfBoundsException: 4
                	at java.util.Arrays$ArrayList.get(Unknown Source)
                	at net.minecraft.util.NonNullList.get(NonNullList.java:51)
                	at fr.eno.pyrion.container.InventoryPlayer.getStackInSlot(InventoryPlayer.java:85)
                	at net.minecraft.inventory.Slot.getStack(Slot.java:81)
                	at net.minecraft.inventory.Container.detectAndSendChanges(Container.java:97)
                	at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:365)
                	at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2174)
                	at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
                	at net.minecraft.world.World.updateEntity(World.java:2133)
                	at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:672)
                	at net.minecraft.world.World.updateEntities(World.java:1909)
                	at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)
                	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
                	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
                	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
                	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
                	at java.lang.Thread.run(Unknown Source)
                

                Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

                  Bon alors j’ai un peu changé de direction mais maintenant j’essaye d’ajouter un appel a une de mes méthode dans le constructeur de EntityPlayer, j’ai essayé de faire mais ça ne marche pas :

                  @Override
                  	public byte[] transform(String name, String transformedName, byte[] basicClass)
                  	{
                  		if(name.equals("aeb") || name.equals("EntityPlayer")) {
                  	        // Par exemple ici pour l'explosion : <nom obfusqué>=agw et <nom normal>=net.minecraft.world.Explosion
                  	        //Pyrion.LOGGER.info("About to patch : " + name);
                  	        return patchEntityPlayer(name, basicClass, name.equals("aeb"));
                  	    }
                  	    return basicClass;
                  	}
                  
                  private byte[] patchEntityPlayer(String name, byte[] basicClass, boolean obf)
                  	{
                  		String targetMethodName = obf ? "<init>" : "<init>"; // On veut modifier la méthode explosionB
                  		 
                  	    ClassNode classNode = new ClassNode();
                  	    ClassReader classReader = new ClassReader(basicClass);
                  	    ClassWriter cw = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS);
                  	    classReader.accept(classNode, ClassReader.EXPAND_FRAMES);
                  	    MethodNode mnode = ASMHelper.findMethod(classNode, targetMethodName, "(Lnet/minecraft/world/World;Lcom/mojang/authlib/GameProfile;)V"); // On récupère le contenu de la méthode
                  	 
                  
                          MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(Lnet/minecraft/world/World;Lcom/mojang/authlib/GameProfile;)V", null, null);
                          mv.visitCode();
                          mv.visitVarInsn(Opcodes.ALOAD, 0);
                          mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "EntityPlayer", "<init>", "(Lnet/minecraft/world/World;Lcom/mojang/authlib/GameProfile;)V", false);
                  
                          // Generate INVOKEDYNAMIC instead of NEW+INVOKESPECIAL.
                          // This will instantiate the target class by calling its private constructor.
                          // Bootstrap method is called just once to link this call site.
                          mv.visitInvokeDynamicInsn("invoke", "()Lfr/eno/pyrion/Pyrion;",
                                  new Handle(Opcodes.H_INVOKESTATIC, "Pyrion", "patchInventory", "(Lnet/minecraft/entity/EntityPlayer;)V", false));
                          // Here we have newly constructed instance of InvokeGenerator.Target
                          mv.visitInsn(Opcodes.POP);
                  
                          mv.visitInsn(Opcodes.RETURN);
                          mv.visitMaxs(0, 0);
                          mv.visitEnd();
                  
                          cw.visitEnd();
                          byte[] classData = cw.toByteArray();
                          
                  	    classNode.accept(cw);
                  	    return cw.toByteArray();
                  	}
                  

                  Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

                    Vraiment personne ne peut m’aider ?

                    Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

                    MINECRAFT FORGE FRANCE © 2024

                    Powered by NodeBB