Oliver Huth
Oliver Huth

Reputation: 63

Why does my config.yml file keep on outputting only zero? bukkit plugin

I have made a plugin that is supposed to track the amount of diamonds you have mined in Minecraft and save it to a config.yml file. But my code doesn't seem to be working and I cant figure out why?

I've already tried +1 in the setConfig args and now I've switched over to this and it still doesn't seem to be working. I also have diamonds predefined in my config.yml file.

package com.raidoxe.BlockPlugin;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {


    @Override
    public void onEnable() {
        getLogger().info("Sartu has been enabled :)");
        PluginManager pm = getServer().getPluginManager();
        SartuListener listener = new SartuListener(this);
        pm.registerEvents(listener, this);
        this.getConfig().options().copyDefaults(true);
        this.saveConfig();


    }

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player player = (Player) sender;

        if (sender instanceof Player) {
            String lowerCmd = cmd.getName().toLowerCase();

            switch (lowerCmd) {

            case "mydiamonds":

                int a = this.getConfig().getInt("diamonds."+player.getUniqueId());
                player.sendMessage(ChatColor.DARK_PURPLE+"You have mined "+ChatColor.RED+a+ChatColor.AQUA+" Diamonds");

                return true;    
            }
        }
        return true;
        }


------------Listener File-----------

package com.raidoxe.BlockPlugin;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
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.BlockPlaceEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.Plugin;

public class SartuListener implements Listener {

    private Plugin plugin = Main.getPlugin(Main.class);
    public SartuListener(Main plugin) {

    }

    @EventHandler
    public void blockBreak(BlockBreakEvent event) {
        Player player = (Player) event.getPlayer();
        Block block = event.getBlock();
        Material blockMaterial = block.getType();
        if(blockMaterial.equals(Material.DIAMOND_ORE)) {
            Bukkit.broadcastMessage(ChatColor.WHITE+player.getDisplayName()+" found a "+ ChatColor.AQUA + ChatColor.BOLD+"Diamond!!!");
            int a = plugin.getConfig().getInt("diamonds."+player.getUniqueId());
            plugin.getConfig().set("diamonds."+player.getUniqueId(), a++);
            plugin.saveConfig();
        }

    }

when the player does the command /mydiamonds it should print out, "you have mined (a) diamonds". But it always prints out zero, no matter how many diamonds you have mined.

Upvotes: 1

Views: 171

Answers (1)

user7106805
user7106805

Reputation:

Your code seems to be looking fine except one minor mistake. You say that you've tried +1 in the setConfig, so if this solution does not work for you it's probably a version thing

If a config getInt() returns 0 it can mean two things:

  1. value does not exist (default is returned)
  2. value is actually 0 in the config

Upon testing the value does exist in the config (due to saveConfig(), but is set to 0. So this lead me to the setting method.

The issue is the adding part. You do a++ inside the method, this will increment the number after the method, we want before, switch to ++a. See this post.

if(blockMaterial.equals(Material.DIAMOND_ORE)) {
    Bukkit.broadcastMessage(ChatColor.WHITE+player.getDisplayName()+" found a "+ ChatColor.AQUA + ChatColor.BOLD+"Diamond!!!");
    int a = plugin.getConfig().getInt("diamonds."+player.getUniqueId());
    plugin.getConfig().set("diamonds."+player.getUniqueId(), ++a);
    plugin.saveConfig();
}

Upvotes: 1

Related Questions