MFF

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

    Problème avec le NBTTagList.

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    6 Messages 2 Publieurs 525 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.
    • GabsG Hors-ligne
      Gabs
      dernière édition par Gabs

      Problème avec le NBTTagList.

      Bonjour, cela fait maintenant quelques heures que j’essaye de régler mon problème mais je n’y arrive pas alors je fais appel à vous!

      Je vous expliques, j’ai fais un système de “blockrespawn” en gros quand un joueur casse un bloc, il est stocké dans une map et respawn au bout d’un certain temps t (cela fonctionne) mais je voudrai sauvegarder cette map car si le serveur crash la map ne serra pas save et je perdrai tout les blocs qui ont était casser.
      Pour save mes blocs je passes donc par un WorldSavedData, et c’est dans cette classe que le problème apparait, j’ai fais du debug et j’ai trouver que le soucis venait du NBTTagList, il prend que les coordonées du dernier bloc casser et pas la totalité des blocs.
      Je ne sais pas si vous avez tout saisie, je vous mets des screens des logs et ma classe WorldSavedData.

      J’explique très mal je sais désolé.

      Merci d’avance !

      Classe WorldSavedData:

      package fr.altismine.mainmod.common.altis.save;
      
      import java.util.Iterator;
      import java.util.Map.Entry;
      import java.util.UUID;
      
      import fr.altismine.mainmod.proxy.CommonProxy;
      import net.minecraft.nbt.NBTBase;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.nbt.NBTTagList;
      import net.minecraft.util.math.BlockPos;
      import net.minecraft.world.World;
      import net.minecraft.world.storage.MapStorage;
      import net.minecraft.world.storage.WorldSavedData;
      import net.minecraftforge.common.DimensionManager;
      
      public class WorldSaved extends WorldSavedData {
      
      
      	public static WorldSaved load(World w) {
      		if (DimensionManager.getWorlds().length < 1)
      			return null;
      		MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); 
      																				
      		final String KEY = "KEYS"; 
      												
      												
      		WorldSaved result = (WorldSaved) storage.getOrLoadData(WorldSaved.class, KEY);
      		if (result == null) { 
      			result = new WorldSaved(KEY);
      			storage.setData(KEY, result);
      		}
      
      		return result; 
      	}
      
      	public WorldSaved(String key) {
      		super(key);
      
      	}
      
      	@Override
      	public void readFromNBT(NBTTagCompound compound) {
      		System.out.println("test read");
      		NBTTagList keyList = (NBTTagList) compound.getTag("keyList");
      		for(int i=0;i<keyList.tagCount();i++)
      		{
      			NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
      			System.out.println(keyTag);
      			for(int i1=0;i1<(keyTag.getInteger("i")+1);i1++)
      			{
      				CommonProxy.respawntime.put(new BlockPos(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z")), keyTag.getInteger("timer"));
      				if(CommonProxy.blockpos.isEmpty())
      				{
      					CommonProxy.blockpos.add(0, new BlockPos(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z")));
      				}
      				else
      				{
      					CommonProxy.blockpos.add(i1, new BlockPos(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z")));
      				}
      				System.out.println(i1 + " size: "  +(keyTag.getInteger("i")+1));
      			}
      		}
      	}
      
      	@Override
      	public NBTTagCompound writeToNBT(NBTTagCompound compound) {
      		NBTTagList keyList = new NBTTagList();
      		NBTTagCompound keyTag = new NBTTagCompound();
      		Iterator<BlockPos> iterator = CommonProxy.blockpos.iterator();
      		Iterator<Entry<BlockPos, Integer>> iterator2 = CommonProxy.respawntime.entrySet().iterator();
      		while(iterator2.hasNext())
      		{
      			Entry<BlockPos, Integer> s = iterator2.next();
      			keyTag.setInteger("x", s.getKey().getX());
      			keyTag.setInteger("y", s.getKey().getY());
      			keyTag.setInteger("z", s.getKey().getZ());
      			keyTag.setInteger("timer", s.getValue());
      			for(int i1=0;i1<CommonProxy.respawntime.size();i1++)
      			{
      				if(CommonProxy.respawntime.isEmpty())
      				{
      					keyTag.setInteger("i", 0);
      				}
      				else
      				{
      					keyTag.setInteger("i", i1);
      				}
      			}
      			keyList.appendTag(keyTag);
      			System.out.println(keyList);
      		}
      		compound.setTag("keyList", keyList);
      		System.out.println(compound.getTag("keyList"));
      		return compound;
      	}
      
      }
      

      Write:

      text alternatif

      Read:

      text alternatif

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

        Bonjour, quelqu’un peut-il m’aider ?

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

          Up!

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

            Salut, dans writeToNBT, il faut déplacer la ligne NBTTagCompound keyTag = new NBTTagCompound(); dans le while pour que ça crée un Compound à chaque tour de boucle plutôt que de changer les valeur enregistrés avant.

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

              Aussi, je ne vois pas pourquoi tu utilise un Iterator. C’est plus simple de faire un foreach

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

                Salut, super merci beaucoup ça fonctionne!
                Pour le foreach je ne connaissait pas, c’est super simple et pratique merci beaucoup de ton aide!
                Je met en résolu.

                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