Почему мой файл config.yml продолжает выводить только ноль?Bukkit плагин - PullRequest
1 голос
/ 05 мая 2019

Я создал плагин, который должен отслеживать количество добытых вами алмазов в Minecraft и сохранять его в файле config.yml. Но мой код, кажется, не работает, и я не могу понять, почему?

Я уже пробовал +1 в аргументах setConfig, и теперь я переключился на это, и он все еще не работает. У меня также есть бриллианты, предопределенные в моем файле 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, он должен распечатать: «вы добыли (а) алмазы». Но он всегда печатает ноль, независимо от того, сколько алмазов вы добыли.

1 Ответ

1 голос
/ 05 мая 2019

Ваш код выглядит нормально, за исключением одной незначительной ошибки.Вы говорите, что пробовали +1 в setConfig, поэтому, если это решение не работает для вас, возможно, это версия версии

Если конфигурация getInt() возвращает 0, это может означать две вещи:

  1. значение не существует (возвращается значение по умолчанию)
  2. значение фактически равно 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();
}
...