Problème de sauvegarde WorldSavedData



  • Salut tout le monde
    Je repars sur l'utilisation des WorldSavedData, je pense avoir mieux compris qu'à l'époque de mon premier post à ce sujet. Je print la valeur de mon boolean enregistré dans ma classe WorldPartyData, depuis l'event LivingUpdateEvent. Le seul problème est que dès que je me déco reco le boolean retombe à false.
    Ma classe :

    
    public class WorldPartyData extends WorldSavedData
    {
    
    private static final String KEY = InvictusMod.MODID;
    public boolean isPartyStarted = false;
    
    public WorldPartyData(String key)
    {
    super(key);
    }
    
    @Override
    public void readFromNBT(NBTTagCompound compound)
    {
    compound.getBoolean("isPartyStarted");
    }
    
    @Override
    public void writeToNBT(NBTTagCompound compound)
    {
    compound.setBoolean("isPartyStarted", this.isPartyStarted);
    }
    
    public static WorldPartyData load()
    {
    if(DimensionManager.getWorlds().length < 1)
    return null;
    MapStorage storage = DimensionManager.getWorlds()[0].mapStorage;
    final String KEY = getDataKey();
    WorldPartyData result = (WorldPartyData) storage.loadData(WorldPartyData.class, KEY);
    if(result == null)
    {
    result = new WorldPartyData(KEY);
    storage.setData(KEY, result);
    }
    return result;
    }
    
    public static String getDataKey()
    {
    return KEY;
    }
    }
    
    

    En fait, mon système est le suivant : dès qu'un joueur envoie un message particulier dans le chat. Je check si c'est le bon avec l'event client side only ClientChatReceivedEvent, et par la suite, j'envoie un packet au serveur (packet bien enregistré sur le side server) avec cet handler :

    
    public static class Handler implements IMessageHandler <packetpartystarting, imessage="">{
    @Override
    public IMessage onMessage(PacketPartyStarting message, MessageContext ctx) 
    {
    System.out.println("arrivé");
    System.out.println(WorldPartyData.load().isPartyStarted);
    WorldPartyData.load().markDirty();
    WorldPartyData.load().isPartyStarted = true;
    System.out.println("intégré");
    System.out.println(WorldPartyData.load().isPartyStarted);
    return null;
    }
    }
    
    

    Je rappelle aussi au passage que j'appelle la méthode load dans l'event FMLServerStartedEvent depuis ma clase principale, comme l'indique le tuto lorsqu'on a des données communes à toutes les mêmes dimensions du monde.
    Merci d'avance =)</packetpartystarting,>



  • compound.getBoolean("isPartyStarted"); devient
    this.isPartyStarted = compound.getBoolean("isPartyStarted");
    Ça marchera mieux 🙂



  • Oh bah dis donc, je pensais pas du tout à ça…
    Sa marche nikel, merci beaucoup 😃



  • De rien ^^