为什么我的 config.yml 文件一直只输出零? bukkit插件

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

我制作了一个插件,可以跟踪您在 Minecraft 中开采的钻石数量并将其保存到 config.yml 文件中。但是我的代码似乎无法正常工作,我不知道为什么?

我已经在 setConfig args 中尝试了 +1,现在我已经切换到这个,但它似乎仍然无法正常工作。我的 config.yml 文件中也预定义了钻石。

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();
        }

    }

当玩家执行命令 /mydiamonds 时,它应该打印出来,"you have mined (a) diamonds"。但无论您开采了多少钻石,它总是打印出零。

除了一个小错误外,您的代码看起来还不错。你说你已经在 setConfig 中尝试过 +1,所以如果这个解决方案对你不起作用,那可能是版本问题

如果配置 getInt() returns 0 它可能意味着两件事:

  1. 值不存在(返回默认值)
  2. 配置中的值实际上是0

经测试,该值确实存在于配置中(由于 saveConfig(),但设置为 0。所以这引导我进入设置方法。

问题是添加部分。您在方法内部执行 a++,这将在方法 之后递增 方法,我们希望在此之前切换到 ++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();
}