YamlConfiguration.loadConfiguration doesn't load the file content

Discussion in 'Plugin Development' started by Paultje52, May 3, 2020.

Thread Status:
Not open for further replies.
  1. Offline

    Paultje52

    Hello. I made a class for my userdata with some simple get/set stuff. I use java.io.File to load in the file "userdata.yml" and I use YamlConfiguration.loadConfiguration to convert the file to a get/set.

    Code:
    package me.paultje52.PaulMinigames;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Set;
    
    import javax.annotation.Nonnull;
    
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    
    public class userdata {
      private me.paultje52.PaulMinigames.Main plugin;
      private File file;
      private FileConfiguration data;
     
      public userdata(me.paultje52.PaulMinigames.Main main) {
        System.out.println("Loading config!");
        this.plugin = main;
       
        this.file = new File(this.plugin.getDataFolder(), "userdata.yml");
        this.data = YamlConfiguration.loadConfiguration(this.file);
      }
     
      private void save() {
        try {
          this.data.save(this.file);
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
     
      public void set(String key, Object value) {
        this.data.set(key, value);
        this.save();
      }
      public void delete(String key) {
        this.data.set(key, null);
        this.save();
      }
     
      public String get(String key) {
        return this.data.getString(key);
      }
     
      public String[] getKeys(String path) {
        try {
          this.data.get(path).toString();
        } catch(NullPointerException e1) {
          return new String[0];
        }
        @Nonnull Set<String> keys = this.data.getConfigurationSection(path).getKeys(false);
        return keys.toArray(new String[keys.size()]);
      }
    }

    It works fine, getting and setting. And the file is changed everytime I set something. But when I stop my server, and then start it again, and I try to set a new value, all the old values disappear. Does anyone know what I'm doing wrong?
     
  2. Offline

    KarimAKL

  3. Offline

    Paultje52

    1. I'm sorry, I just started programming with java, I know most of the syntax, but nog the naming scheme. I'll make sure to look at it.
    2. I call it after I set a value. For example, this.plugin.userdata.set("key", "value");, It first uses the set method and then it uses the save method. I used a try catch block, I never get an error or something like that.
     
  4. Offline

    KarimAKL

    I linked the naming conventions.

    Post the 'onEnable()', 'onDisable()', and the parts of code where you call 'save()' and create a new instance of 'userdata'.
     
  5. Offline

    Paultje52

    This is my whole plugin.

    Main.java
    Code:
    package me.paultje52.PaulMinigames;
    
    import org.bukkit.plugin.java.JavaPlugin;
    
    import me.paultje52.PaulMinigames.events.SignStuff;
    
    
    public class Main extends JavaPlugin {
     
      public me.paultje52.PaulMinigames.userdata userdata;
    
      @Override
      public void onEnable() {
        // Loading utils
        this.userdata = new userdata(this);
       
       
        // Loading events
        new SignStuff(this);
       
        // Ready!
        System.out.println("+===============+\r\n" +
            "| PaulMiniGames |\r\n" +
            "+===============+\r\n" +
            "PaulMinigames is succesvol geladen!");
      }
    }
    
    SignStuff.java
    Code:
    package me.paultje52.PaulMinigames.events;
    
    import org.bukkit.Bukkit;
    import org.bukkit.block.Block;
    import org.bukkit.block.Sign;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.SignChangeEvent;
    
    public class SignStuff implements Listener {
      private me.paultje52.PaulMinigames.Main plugin;
    
      public SignStuff(me.paultje52.PaulMinigames.Main main) {
        this.plugin = main;
        Bukkit.getServer().getPluginManager().registerEvents(this, main);
      }
      // Sign destoy
      @EventHandler
      public void onBlockBreak(BlockBreakEvent event) {
        Block block = event.getBlock();
        if (!block.getType().toString().toLowerCase().contains("sign")) return;
        String key = block.getWorld().getUID().toString()+block.getX()+block.getY()+block.getZ();
        Sign sign = (Sign) block.getState();
        if (!sign.getLine(0).toLowerCase().contains("minigame")) return;
        String minigame = sign.getLine(1).toLowerCase();
        if (!minigame.toLowerCase().contains("§3")) return;
        minigame = minigame.split("§3")[1];
        try {
          this.plugin.userdata.get("joinsigns."+minigame+"."+key+".w").toString();
        } catch(NullPointerException e1) {
          return;
        }
        event.getPlayer().sendMessage("Je brak een join sign, deze is nu gedeactiveerd!");
      }
      // Sign create
      @EventHandler
      public void onSignEdit(SignChangeEvent sign) {
        Player player = sign.getPlayer();
        if (!player.hasPermission("paulminigames.*") &&
            !player.hasPermission("paulminigames.createjoinsign")) return;
        if (!sign.getLine(0).equalsIgnoreCase("pmg: joinsign")) return;
       
        String minigame = sign.getLine(1).toLowerCase();
        Block block = sign.getBlock();
        String key = block.getWorld().getUID().toString()+block.getX()+block.getY()+block.getZ();
       
        // Store to config
        this.plugin.userdata.set("joinsigns."+minigame+"."+key+".w", block.getWorld().getUID());
        this.plugin.userdata.set("joinsigns."+minigame+"."+key+".x", block.getX());
        this.plugin.userdata.set("joinsigns."+minigame+"."+key+".y", block.getY());
        this.plugin.userdata.set("joinsigns."+minigame+"."+key+".z", block.getZ());
        this.plugin.userdata.set("joinsigns."+minigame+"."+key+".active", false);
        this.plugin.userdata.set("joinsigns."+minigame+"."+key+".map", "");
       
        // Edit sign
        sign.setLine(0, "§0[§6MiniGame§0]");
        sign.setLine(1, "§3"+minigame);
        sign.setLine(2, ""); // §a0/0
        sign.setLine(3, "§4Geen game");
       
        player.sendMessage("Sign bewerkt en is nu actief!");
      }
    }
    
     
Thread Status:
Not open for further replies.

Share This Page