MFF

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

    Une clef pour une porte .

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8
    46 Messages 7 Publieurs 9.6k 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.
    • BrokenSwingB Hors-ligne
      BrokenSwing Moddeurs confirmés Rédacteurs
      dernière édition par

      C’est pas forcément + rapide, personnellement je n’aime pas modifier le contenu de Minecraft de cette façon (remplacer quand le truc est posé/crafté, etc …) quand il y a une autre façon de la faire. Je crois que je vais donner le code direct, parce que c’est vraiment pas compliqué et il y a déjà 3 pages.

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

        @‘Eikins’:

        Franchement, tu ferais mieux de créer une nouvelle porte en TileEntity, où tu stockerais un UUID.
        Après tu trouves un Event pour quand un bloque est posé, tu vérifies si il s’agit d’une porte en fer et tu remplace la porte en fer par ta nouvelle porte. Quand tu casse le bloc, tu récupère une porte en fer et dans l’itemstack tu stock l’UUID de la clef. Quand tu poses tu vérifies si l’Itemstack a un UUID, auquel cas tu l’ajoute à ta porte. Ensuite, tu craft une clef, et tu fais clique droit sur la porte pour leur assigner un UUID commun.

        Je pense sincèrement que c’est plus rapide.

        Très mauvaise idée, ça rendrait le mod complètement incompatible avec tout les mods qui touchent de loin ou de près aux portes dans Minecraft.

        –------------------------------------------------------------------------------------
        Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

          Dans ce cas autant créer une nouvelle porte. Après si il veut stocker les coordonnées c’est son choix, mais il faut une collection d’un nouveau DataContainer, avec les coordonnées et un UUID ou un id, car quand le joueur va bouger la porte de position ça va être dur de retrouver la bonne clef.

          Ou alors une Map<blockpos, uuid=“”>, et dans la clef on stocke uniquement l’UUID.

          Comme ça quand il clique droit -> on récupère l’UUID stocké dans la Map via la position de la porte. Par contre il faudra bel et bien stocker l’UUID dans les NBT de l’itemstack, et dès qu’on repose la porte, on met à jour la Map.</blockpos,>

          Fracture

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

            T’as aussi la solution sneak + clique-droit == réinialisation de la clé et BreakEvent pour virer de la liste les portes qui sont détruites

            EDIT : Bon voilà tu n’as plus qu’à enregistrer la liste dans les tags NBT du monde.

            
            /** On stock les positions des portes qui ont une clé pour éviter que l'on puisse créer 2 clés */
            public static final List <position>doorsPositions = Lists.newArrayList();
            
            @SubscribeEvent
            public void onInteract(PlayerInteractEvent e) {
            if(!e.world.isRemote) {
            ItemStack stack = e.entityPlayer.getHeldItem();
            if(stack != null && stack.getItem() == Items.apple && e.action == Action.RIGHT_CLICK_BLOCK) {
            BlockPos pos = e.pos;
            IBlockState state = e.world.getBlockState(pos);
            if(state.getBlock() == Blocks.iron_door) {
            /**
            * On se base sur la partie haute de la porte, en effet c'est cette partie qui contient
            * l'information pour savoir si la porte est ouverte ou non.
            * Ici si c'est la partie basse on ajoute 1 à la coordonnée Y et on récupère donc l'état
            * de la partie haute.
            */
            if(state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER) {
            pos = pos.up();
            state = e.world.getBlockState(pos);
            }
            /**
            * Si c'est une nouvelle clé on écrit les coordonnée de la porte ainsi que l'id
            * de la dimension dans ses tag NBT.
            */
            if(!stack.hasTagCompound()) {
            Position p = new Position(pos, e.world.provider.getDimensionId());
            
            if(!doorsPositions.contains(p)) {
            NBTTagCompound nbt = new NBTTagCompound();
            nbt.setIntArray("doorPos", new int[]{e.world.provider.getDimensionId(), pos.getX(), pos.getY(), pos.getZ()});
            stack.setTagCompound(nbt);
            doorsPositions.add(new Position(pos.getX(), pos.getY(), pos.getZ(), e.world.provider.getDimensionId()));
            e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Tu as créé une clé"));
            } else {
            e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Une clé existe déjà pour cette porte"));
            }
            }
            /**
            * Ici tu peut enlever le else ce qui aura pour effet d'ouvrir la porte lors de la création
            * de la clé car avec le else on doit créer la porte et refaire clique droit pour l'ouvrir.
            */
            else {
            int[] doorPos = stack.getTagCompound().getIntArray("doorPos");
            if(doorPos[0] == e.world.provider.getDimensionId() && doorPos[1] == pos.getX() && doorPos[2] == pos.getY() && doorPos[3] == pos.getZ()) {
            Boolean opened = (Boolean) (state.getValue(BlockDoor.POWERED));
            /**
            * Il y a d'autres solutions pour garder la porte ouverte, j'avais essayé de changé le state en POWERED = true
            * à chaque tick mais en changeant l'état ça update le bloc remettant POWERED à false
            * donc il faut obligatoirement utiliser la redstone, par contre tu peux faire que la
            * porte doit être posée sur un certain bloc (que tu va créer) et qui alimentera ou pas la
            * porte en énergie, ça sera plus propre que la torche. C'est à toi de voir.
            */
            if(opened) {
            e.world.setBlockToAir(pos.down(3));
            } else {
            e.world.setBlockState(pos.down(3), Blocks.redstone_torch.getDefaultState());
            }
            e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Tu as" + (opened ? " fermé " : " ouvert ") + "la porte"));
            } else {
            e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Ceci n'est pas la bonne clé"));
            }
            }
            }
            }
            }
            }
            
            @SubscribeEvent
            public void onBlockBreak(BreakEvent event) {
            /**
            * On supprime la porte de la liste si on la casse.
            */
            if(event.state.getBlock() == Blocks.iron_door) {
            BlockPos pos = event.pos;
            if(event.state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER) {
            pos = pos.up();
            }
            Position p = new Position(pos, event.world.provider.getDimensionId());
            doorsPositions.remove(p);
            }
            }
            
            /**
            * On crée un objet pour stocker la position + l'id de la dimension
            */
            public static class Position extends BlockPos {
            public int dimensionId;
            
            public Position(double x, double y, double z, int dimension) {
            super(x, y, z);
            this.dimensionId = dimension;
            }
            
            public Position(BlockPos pos, int dimension) {
            super(pos);
            this.dimensionId = dimension;
            }
            
            @Override
            public boolean equals(Object o) {
            if(o instanceof Position) {
            Position pos = (Position)o;
            if(super.equals(o) && pos.dimensionId == this.dimensionId) {
            return true;
            }
            }
            return false;
            }
            }
            
            ```</position>
            1 réponse Dernière réponse Répondre Citer 1
            • GabsG Hors-ligne
              Gabs
              dernière édition par

              @‘BrokenSwing’:

              T’as aussi la solution sneak + clique-droit == réinialisation de la clé et BreakEvent pour virer de la liste les portes qui sont détruites

              EDIT : Bon voilà tu n’as plus qu’à enregistrer la liste dans les tags NBT du monde.

              
              /** On stock les positions des portes qui ont une clé pour éviter que l'on puisse créer 2 clés */
              public static final List <position>doorsPositions = Lists.newArrayList();
              
              @SubscribeEvent
              public void onInteract(PlayerInteractEvent e) {
              if(!e.world.isRemote) {
              ItemStack stack = e.entityPlayer.getHeldItem();
              if(stack != null && stack.getItem() == Items.apple && e.action == Action.RIGHT_CLICK_BLOCK) {
              BlockPos pos = e.pos;
              IBlockState state = e.world.getBlockState(pos);
              if(state.getBlock() == Blocks.iron_door) {
              /**
              * On se base sur la partie haute de la porte, en effet c'est cette partie qui contient
              * l'information pour savoir si la porte est ouverte ou non.
              * Ici si c'est la partie basse on ajoute 1 à la coordonnée Y et on récupère donc l'état
              * de la partie haute.
              */
              if(state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER) {
              pos = pos.up();
              state = e.world.getBlockState(pos);
              }
              /**
              * Si c'est une nouvelle clé on écrit les coordonnée de la porte ainsi que l'id
              * de la dimension dans ses tag NBT.
              */
              if(!stack.hasTagCompound()) {
              Position p = new Position(pos, e.world.provider.getDimensionId());
              
              if(!doorsPositions.contains(p)) {
              NBTTagCompound nbt = new NBTTagCompound();
              nbt.setIntArray("doorPos", new int[]{e.world.provider.getDimensionId(), pos.getX(), pos.getY(), pos.getZ()});
              stack.setTagCompound(nbt);
              doorsPositions.add(new Position(pos.getX(), pos.getY(), pos.getZ(), e.world.provider.getDimensionId()));
              e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Tu as créé une clé"));
              } else {
              e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Une clé existe déjà pour cette porte"));
              }
              }
              /**
              * Ici tu peut enlever le else ce qui aura pour effet d'ouvrir la porte lors de la création
              * de la clé car avec le else on doit créer la porte et refaire clique droit pour l'ouvrir.
              */
              else {
              int[] doorPos = stack.getTagCompound().getIntArray("doorPos");
              if(doorPos[0] == e.world.provider.getDimensionId() && doorPos[1] == pos.getX() && doorPos[2] == pos.getY() && doorPos[3] == pos.getZ()) {
              Boolean opened = (Boolean) (state.getValue(BlockDoor.POWERED));
              /**
              * Il y a d'autres solutions pour garder la porte ouverte, j'avais essayé de changé le state en POWERED = true
              * à chaque tick mais en changeant l'état ça update le bloc remettant POWERED à false
              * donc il faut obligatoirement utiliser la redstone, par contre tu peux faire que la
              * porte doit être posée sur un certain bloc (que tu va créer) et qui alimentera ou pas la
              * porte en énergie, ça sera plus propre que la torche. C'est à toi de voir.
              */
              if(opened) {
              e.world.setBlockToAir(pos.down(3));
              } else {
              e.world.setBlockState(pos.down(3), Blocks.redstone_torch.getDefaultState());
              }
              e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Tu as" + (opened ? " fermé " : " ouvert ") + "la porte"));
              } else {
              e.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Ceci n'est pas la bonne clé"));
              }
              }
              }
              }
              }
              }
              
              @SubscribeEvent
              public void onBlockBreak(BreakEvent event) {
              /**
              * On supprime la porte de la liste si on la casse.
              */
              if(event.state.getBlock() == Blocks.iron_door) {
              BlockPos pos = event.pos;
              if(event.state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER) {
              pos = pos.up();
              }
              Position p = new Position(pos, event.world.provider.getDimensionId());
              doorsPositions.remove(p);
              }
              }
              
              /**
              * On crée un objet pour stocker la position + l'id de la dimension
              */
              public static class Position extends BlockPos {
              public int dimensionId;
              
              public Position(double x, double y, double z, int dimension) {
              super(x, y, z);
              this.dimensionId = dimension;
              }
              
              public Position(BlockPos pos, int dimension) {
              super(pos);
              this.dimensionId = dimension;
              }
              
              @Override
              public boolean equals(Object o) {
              if(o instanceof Position) {
              Position pos = (Position)o;
              if(super.equals(o) && pos.dimensionId == this.dimensionId) {
              return true;
              }
              }
              return false;
              }
              }
              
              ```</position>
              

              Ok en fait j’étais loin ^^
              Merci 🙂

              Quand tu me dis d’enregistrer les tag nbt de la liste (Position) dans les tags NBT du monde,

              C’est ou précisément ? dans un event dans quoi ? et quelques détails m’aiderais merci 🙂

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

                Il y a un tuto sur le forum (Persistance des données avec WorldSavedData je crois).

                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
                • BrokenSwingB Hors-ligne
                  BrokenSwing Moddeurs confirmés Rédacteurs
                  dernière édition par

                  Oui c’est ça, c’est pas très compliqué franchement tu verra

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

                    @‘AymericRed’:

                    Il y a un tuto sur le forum (Persistance des données avec WorldSavedData je crois).

                    Ouaip merci 🙂

                    J’ai fais ça pour l’instant:
                    Mes [font=Ubuntu, sans-serifdonnées][font=Ubuntu, sans-serif ne sont pas liées à vos dimensions mais a mon monde c’est ça ?]

                    
                    package com.CSC.net.save;
                    
                    import com.CSC.net.Events.Events;
                    
                    import net.minecraft.nbt.NBTTagCompound;
                    import net.minecraft.world.World;
                    import net.minecraft.world.WorldSavedData;
                    import net.minecraft.world.storage.MapStorage;
                    import net.minecraftforge.common.DimensionManager;
                    
                    public class KeySave extends WorldSavedData {
                    
                    public static KeySave load() {
                    if(DimensionManager.getWorlds().length < 1) return null;
                    MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); //On récupère la mapStorage de la dimension
                    final String KEY = Events.Key; // Si vous avez choisis de faire une fonction static String. Quoiqu'il en soit, la variable KEY que nous utiliserons ici représente votre clé. Si vous utilisez un attribut static, utilisez le directement.
                    KeySave result = (KeySave)storage.loadData(KeySave.class, KEY);//On charge nos données
                    if (result == null) { //Si nos données n'existe pas, …
                    result = new KeySave(KEY);// Alors on les crée ...
                    storage.setData(KEY, result);// Et on les ajoutes à la mapStorage.
                    }
                    
                    return result; //On retourne notre objet qui représente les données a sauvegarder
                    }
                    
                    public KeySave(String key) {
                    super(key);
                    }
                    
                    @Override
                    public void readFromNBT(NBTTagCompound p_76184_1_) {
                    // Vous remplissez les attributs de votre objet via le NBTTagCompound
                    
                    }
                    
                    @Override
                    public void writeToNBT(NBTTagCompound p_76187_1_) {
                    // Vous écrivez le contenu de votre objet dans le NBTTagCompound
                    
                    }
                    
                    }
                    

                    public static KeySave load() j’ai une crois rouge a gauche sur éclipse erreur --> Syntax error on token “Invalid Character”, delete this token

                    Et dans le write read nbt c’est un peu comme RankSave ? je sais pas si vous vous en rappelez le système de rang.

                    Ensuite a chaque modif je dois mettre [font=Ubuntu, sans-serifmarkDirty() c’est ça ?]

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

                      Pour l’erreur que d’indique eclipse, je dois admettre que je la trouve pas, c’est uniquement sur la ligne “public static KeySave load() {” ?
                      C’est sauvegardé par dimension, et tu peux choisir laquelle en changeant le 0 de cette ligne “DimensionManager.getWorlds()[0].getMapStorage();”, mais tu dois avoir un moyen d’obtenir un monde par son id dans le dimension manager.
                      Dans le write, tu écris le contenu de la liste, et dans read tu le récupères. Et pour le markDirty, oui.

                      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
                      • GabsG Hors-ligne
                        Gabs
                        dernière édition par

                        @‘AymericRed’:

                        Pour l’erreur que d’indique eclipse, je dois admettre que je la trouve pas, c’est uniquement sur la ligne “public static KeySave load() {” ?
                        C’est sauvegardé par dimension, et tu peux choisir laquelle en changeant le 0 de cette ligne “DimensionManager.getWorlds()[0].getMapStorage();”, mais tu dois avoir un moyen d’obtenir un monde par son id dans le dimension manager.
                        Dans le write, tu écris le contenu de la liste, et dans read tu le récupères. Et pour le markDirty, oui.

                        Bah oui c’est bizarre en fait j’ai fait ctrl + s pour save et j’ai eu une érreur et il ma dit de save en UTF-8 je crois un truc comme ça et j’ai ça du coup:

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

                          De toute façon ton projet devrait être en UTF-8, si ce n’est pas le cas fait le (ALT + Enter sur ton projet > Resource > Text File Encoding > Other : UTF-8)

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

                            Si tu as fais un copier/coller sur internet, tu as surement des espaces qui sont mal encodé.
                            Un petit Ctrl+A, Ctrl+I ainsi qu’un Ctrl+Shift+F peuvent résoudre ton problème 😉

                            –------------------------------------------------------------------------------------
                            Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

                              Problème réglé j’ai re créer ma classe plus de soucis ^^ bizarre …

                              Pour le WorldStorage:
                              J’ai fais nimp je comprends pas comment faire:

                              
                              package com.CSC.net.save;
                              
                              import javafx.geometry.Pos;
                              
                              import com.CSC.net.Events.Events;
                              import com.CSC.net.Events.Events.Position;
                              import com.CSC.net.proxy.ServerProxy;
                              
                              import net.minecraft.nbt.NBTTagCompound;
                              import net.minecraft.nbt.NBTTagList;
                              import net.minecraft.world.World;
                              import net.minecraft.world.WorldSavedData;
                              import net.minecraft.world.storage.MapStorage;
                              import net.minecraftforge.common.DimensionManager;
                              
                              public class KeySave extends WorldSavedData{
                              
                              public static KeySave instance;
                              
                              /**
                              /* Ce constructeur est obligatoire
                              */
                              
                              public static KeySave load(World w) {
                              if(DimensionManager.getWorlds().length < 1) return null;
                              MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); //On récupère la mapStorage de la dimension
                              final String KEY = Events.Key; // Si vous avez choisis de faire une fonction static String. Quoiqu'il en soit, la variable KEY que nous utiliserons ici représente votre clé. Si vous utilisez un attribut static, utilisez le directement.
                              KeySave result = (KeySave)storage.loadData(KeySave.class, KEY);//On charge nos données
                              if (result == null) { //Si nos données n'existe pas, …
                              result = new KeySave(KEY);// Alors on les crée ...
                              storage.setData(KEY, result);// Et on les ajoutes à la mapStorage.
                              }
                              
                              return result; //On retourne notre objet qui représente les données a sauvegarder
                              }
                              
                              public KeySave(String key) {
                              super(key);
                              instance = this;
                              
                              }
                              
                              @Override
                              public void readFromNBT(NBTTagCompound compound) {
                              NBTTagList keyList= (NBTTagList)compound.getTag("keyList");
                              for(int i = 0; i < keyList.tagCount(); i++) {
                              NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
                              Events.doorsPositions.add(new Position(x, y, z, dimension);// Quoi mettre a la place de x y z dimension ,valueof cuase érreur
                              }
                              }
                              @Override
                              public void writeToNBT(NBTTagCompound compound) {
                              NBTTagList keyList = new NBTTagList();
                              Iterator <position>iterator = Events.doorsPositions.iterator();
                              while(iterator.hasNext()) {
                              NBTTagCompound keyTag = new NBTTagCompound();
                              keyList.setString("x", ?? ; // Quoi mettre
                              keyList.setString("y", ?? ;//
                              keyList.setString("z", ?? ;//
                              keyList.setString("dimension", ?? ;//
                              keyList.appendTag(keyTag);
                              }
                              compound.setTag("keyList", keyList);
                              }
                              
                              }
                              
                              

                              S’il vous plait ?</position>

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

                                Personne ?

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

                                  Ce n’est pas si compliqué que ça pourtant, tu as déjà fait le plus dur…

                                  @Override
                                  public void readFromNBT(NBTTagCompound compound) {
                                  NBTTagList keyList= (NBTTagList)compound.getTag("keyList");
                                  for(int i = 0; i < keyList.tagCount(); i++) {
                                  NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
                                  Events.doorsPositions.add(new Position(keyTag.getInteger("x"), y, z, dimension);//A toi de faire ce que j'ai fait avez x pour les autres int
                                  }
                                  }
                                  @Override
                                  public void writeToNBT(NBTTagCompound compound) {
                                  NBTTagList keyList = new NBTTagList();
                                  Iterator <position>iterator = Events.doorsPositions.iterator();
                                  Position pos;
                                  NBTTagCompound keyTag;
                                  while(iterator.hasNext()) {
                                  pos = iterator.next();
                                  keyTag = new NBTTagCompound();
                                  keyList.setInteger("x", pos.getX());
                                  keyList.setInteger("y", pos.getY());
                                  keyList.setInteger("z", pos.getZ());
                                  keyList.setInteger("dimension", pos.dimensionId);
                                  keyList.appendTag(keyTag);
                                  }
                                  compound.setTag("keyList", keyList);
                                  }
                                  ```</position>

                                  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
                                  • GabsG Hors-ligne
                                    Gabs
                                    dernière édition par

                                    @‘AymericRed’:

                                    Ce n’est pas si compliqué que ça pourtant, tu as déjà fait le plus dur…

                                    @Override
                                    public void readFromNBT(NBTTagCompound compound) {
                                    NBTTagList keyList= (NBTTagList)compound.getTag("keyList");
                                    for(int i = 0; i < keyList.tagCount(); i++) {
                                    NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
                                    Events.doorsPositions.add(new Position(keyTag.getInteger("x"), y, z, dimension);//A toi de faire ce que j'ai fait avez x pour les autres int
                                    }
                                    }
                                    @Override
                                    public void writeToNBT(NBTTagCompound compound) {
                                    NBTTagList keyList = new NBTTagList();
                                    Iterator <position>iterator = Events.doorsPositions.iterator();
                                    Position pos;
                                    NBTTagCompound keyTag;
                                    while(iterator.hasNext()) {
                                    pos = iterator.next();
                                    keyTag = new NBTTagCompound();
                                    keyList.setInteger("x", pos.getX());
                                    keyList.setInteger("y", pos.getY());
                                    keyList.setInteger("z", pos.getZ());
                                    keyList.setInteger("dimension", pos.dimensionId);
                                    keyList.appendTag(keyTag);
                                    }
                                    compound.setTag("keyList", keyList);
                                    }
                                    ```</position>
                                    

                                    Ah ok je pensais pas que c’était possible de mettre Position pos; comme ça merci 🙂

                                    J’ai juste une érreur au keyList.setinteger il me dis que il faut un NBTTagCompound donc j’ai pris le keyTag c’est pas grave ?

                                    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

                                      Non, ce n’est pas grave, car c’est justement comme ça qu’il faut faire.
                                      AymericRed s’est fail, ça m’arrive aussi assez souvent quand je donnes du code sans l’avoir tapé sur eclipse.

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

                                        @‘robin4002’:

                                        Non, ce n’est pas grave, car c’est justement comme ça qu’il faut faire.
                                        AymericRed s’est fail, ça m’arrive aussi assez souvent quand je donnes du code sans l’avoir tapé sur eclipse.

                                        D’acc merci ! 🙂

                                        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