java - 为什么我的 config.yml 文件一直只输出零?bukkit 插件
问题描述
我制作了一个插件,用于跟踪您在 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 时,它应该打印出“你已经开采了 (a) 钻石”。但无论您开采了多少钻石,它总是打印出零。
解决方案
除了一个小错误之外,您的代码似乎看起来不错。您说您在 setConfig 中尝试过 +1,因此如果此解决方案对您不起作用,则可能是版本问题
如果配置getInt()
返回 0,则可能意味着两件事:
- 值不存在(默认返回)
- 配置中的值实际上是 0
在测试配置中确实存在该值(由于saveConfig()
, 但设置为 0。所以这导致我进入设置方法。
问题是添加部分。你在方法里面做a++,这将增加方法后面的数字,我们想要之前,切换到++a。看到这个帖子。
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();
}
推荐阅读
- python - 对于带有 numpy/pandas 的循环(遍历列标题)
- php - 在表单页面上显示表单错误消息
- azure - Xamarin 文本 blob Azure 存储
- c# - C# UWP BluetoothLEDevice.FromIdAsync 停止工作
- azure - Azure:Microsoft.Compute 资源提供商在“注册”中停留了大约一天
- vb.net - 在 uwp 中处理 excel 文件
- javascript - 更新数据表输入字段并在输入更改时自动计算总数
- rust - 从 Rust 向 C 函数提供`char **` 参数?
- c++ - Qt:窗口图标质量不好
- c# - 如何通过我的实体基类上的属性过滤从实体框架返回的所有内容