Как я могу заставить этот менеджер данных на самом деле работать с плагином Java Spigot

#java #plugins #minecraft #bukkit

Вопрос:

Я пытаюсь создать менеджер данных, и я довольно новичок в java. У меня есть событие onblockplace для работы, но я, похоже, не могу заставить его на самом деле сохранить его. Ошибок нет, но это не работает. вот мой код:

Главная:

 import plugin.GManager;
import plugin.GPlace;
import plugin.GCommands;
import plugin.files.DataManager;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

public final class GPlugin extends JavaPlugin {

    public static DataManager data;

    @Override
    public void onEnable() {
        data = new DataManager(this);
        GManager.init();
        getCommand("giveitem").setExecutor(new GCommands());
        getServer().getPluginManager().registerEvents(new GPlace(), this);

    }

    @Override
    public void onDisable() {

    }

    public static FileConfiguration getData() {
        return data.getConfig();
    }

    public static FileConfiguration saveData() {
        return data.saveConfig();
    }
}
 

Второй класс:

 import plugin.GPlugin;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.logging.Level;

public class DataManager {

    private GPlugin plugin;
    private FileConfiguration dataConfig = null;
    private File configFile = null;

    public DataManager(GenPlugin plugin) {
        this.plugin = plugin;
        saveDefaultConfig();
    }

    public void reloadConfig() {
        if (this.configFile == null) { this.configFile = new File(this.plugin.getDataFolder(), "data.yml"); }

        this.dataConfig = YamlConfiguration.loadConfiguration(this.configFile);

        InputStream defaultStream = this.plugin.getResource("data.yml");
        if (defaultStream != null) {
            YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defaultStream));
            this.dataConfig.setDefaults(defaultConfig);
        }
    }

    public FileConfiguration getConfig() {

        if (this.dataConfig == null) { reloadConfig(); }
        return this.dataConfig;
    }

    public void saveConfig() {
        if (this.dataConfig == null || this.configFile == null) { return; }

        try {
            this.getConfig().save(this.configFile);
        } catch (IOException e) {
            plugin.getLogger().log(Level.SEVERE, "Could not save config to "   this.configFile, e);

        }
    }

    public void saveDefaultConfig() {
        if (this.configFile == null) { this.configFile = new File(this.plugin.getDataFolder(), "data.yml"); }
        if (!this.configFile.exists()) { this.plugin.saveResource("data.yml", false); }

    }
}
 

Last class

 import plugin.GPlugin;
import plugin.files.DataManager;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;


public class GPlace implements Listener {

    @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
    public void onBlockPlace(BlockPlaceEvent evt) {
        Block block = evt.getBlock();
        Player player = evt.getPlayer();

        if (evt.getItemInHand().getItemMeta().getDisplayName().equals("§7Dirt Gen [Tier I]")) {
            player.sendMessage("Worked!");
            int var = 1;
            if (GenPlugin.getData().contains("data")) {
                var = GPlugin.getData().getConfigurationSection("data").getKeys(false).size()   1;

                GPlugin.getData().set("data."   player.getUniqueId()   var   ".type", "Dirt Gen");
                GPlugin.getData().set("data."   player.getUniqueId()   var   ".x", (int) block.getLocation().getX());
                GPlugin.getData().set("data."   player.getUniqueId()   var   ".y", (int) block.getLocation().getY());
                GPlugin.getData().set("data."   player.getUniqueId()   var   ".z", (int) block.getLocation().getZ());
                GPlugin.getData().set("data."   player.getUniqueId()   var   ".world", block.getLocation().getWorld().getName());
                GPlugin.saveData();
            }
        }
    }
}
 

Пожалуйста, помогите, если можете. Если вы не видите никаких ошибок, пожалуйста, скажите мне тоже, я почти уверен, что есть ошибка в коде, но я все еще могу ошибиться. Кроме того, если у вас есть какие-либо вопросы, не стесняйтесь задавать их.

Изменить: Я ожидаю, что он добавит это в файл данных, но это не так:

 data:
    <player's uuid>:
        <var>:
            Type: Dirt Gen
            x: <x>
            y: <y>
            z: <z>
            world: <world>

 

Ошибка:

 java.io.IOException: The handle is invalid
    at java.io.FileInputStream.readBytes(Native Method) ~[?:?]
    at java.io.FileInputStream.read(FileInputStream.java:271) ~[?:?]
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:282) ~[?:?]
    at java.io.BufferedInputStream.read(BufferedInputStream.java:343) ~[?:?]
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) ~[?:?]
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) ~[?:?]
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) ~[?:?]
    at java.io.InputStreamReader.read(InputStreamReader.java:178) ~[?:?]
    at java.io.BufferedReader.fill(BufferedReader.java:161) ~[?:?]
    at java.io.BufferedReader.readLine(BufferedReader.java:329) ~[?:?]
    at java.io.BufferedReader.readLine(BufferedReader.java:396) ~[?:?]
    at net.minecrell.terminalconsole.SimpleTerminalConsole.readCommands(SimpleTerminalConsole.java:180) ~[patched_1.17.1.jar:git-Paper-170]
    at net.minecrell.terminalconsole.SimpleTerminalConsole.start(SimpleTerminalConsole.java:143) ~[patched_1.17.1.jar:git-Paper-170]
    at net.minecraft.server.dedicated.DedicatedServer$1.run(DedicatedServer.java:113) ~[patched_1.17.1.jar:git-Paper-170]
    Suppressed: java.io.IOException: The handle is invalid
        at java.io.FileDescriptor.close0(Native Method) ~[?:?]
        at java.io.FileDescriptor.close(FileDescriptor.java:297) ~[?:?]
        at java.io.FileInputStream$1.close(FileInputStream.java:366) ~[?:?]
        at java.io.FileDescriptor.closeAll(FileDescriptor.java:355) ~[?:?]
        at java.io.FileInputStream.close(FileInputStream.java:364) ~[?:?]
        at java.io.BufferedInputStream.close(BufferedInputStream.java:481) ~[?:?]
        at sun.nio.cs.StreamDecoder.implClose(StreamDecoder.java:391) ~[?:?]
        at sun.nio.cs.StreamDecoder.close(StreamDecoder.java:204) ~[?:?]
        at java.io.InputStreamReader.close(InputStreamReader.java:193) ~[?:?]
        at java.io.BufferedReader.close(BufferedReader.java:532) ~[?:?]
        at net.minecrell.terminalconsole.SimpleTerminalConsole.readCommands(SimpleTerminalConsole.java:183) ~[patched_1.17.1.jar:git-Paper-170]
        at net.minecrell.terminalconsole.SimpleTerminalConsole.start(SimpleTerminalConsole.java:143) ~[patched_1.17.1.jar:git-Paper-170]
        at net.minecraft.server.dedicated.DedicatedServer$1.run(DedicatedServer.java:113) ~[patched_1.17.1.jar:git-Paper-170]
 

Комментарии:

1. Что вы подразумеваете под «это не работает»? Чего вы ожидали и что на самом деле произошло?

2. @Sweeper Я добавлю это в вопрос, я ожидаю, что он что-то добавит в файл данных, но он ничего не добавляет

Ответ №1:

Учитывая код, который вы опубликовали, похоже, что вы никогда не получаете доступ к своему DataManager GPlace классу. Вы только пытаетесь вызвать data объект, созданный вами внутри класса, который вы никогда не инициализировали, так что на самом деле вы вызываете null.

Вы определили объект с именем data a DataManager , но никогда не присваиваете ему значение.

Похоже, что единственный доступ, который вы сделали для своего DataManager , находится внутри main класса, и это #getData() метод.

Комментарии:

1. извините, я новичок в java, и я следовал учебнику, как я могу это исправить