0

I'm currently working on a small minecraft spigot plugin, which needs to save data. I have chosen to use a .yml file to do so and have programmed both saving and loading the data, however the loading does not work.

this is the Command being run:

package steckbrief.steckbrief.Commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import steckbrief.steckbrief.DataHolderect.DataHolder;

import java.util.ArrayList;


public class getSteckbrief implements CommandExecutor {

@Override
    public boolean onCommand(CommandSender sender, Command command, String label, String [] args){

    DataHolder zw = new DataHolder(new ArrayList<String[]>(), new ArrayList<String>());
    zw.LoadDataHolder(new String[0]);

    if(zw.names.contains(args[0])) { //prüft ob der gefragte Spieler in der VerzeichnisListe "names" existiert
        int index = zw.names.indexOf(args[0]);
        String[] sent = zw.arrays.get(index);
        sender.sendMessage("Steckbrief von: " + args[0]);
        sender.sendMessage("Name: " + sent[0]);
        sender.sendMessage("Beruf: " + sent[1]);
        sender.sendMessage("Alter: " + sent[2]);
        sender.sendMessage("Zusatz: " + sent[3]);
        return true;
    } else {
        sender.sendMessage(args[0] + " ist nicht da, bzw. hat keinen Steckbrief");
        return true;
    }
    }
}

this is my DataHolder class (saveDataHolder works fine, i tested with another command)

package steckbrief.steckbrief.Commands;
import java.util.List;
import org.yaml.snakeyaml.Yaml;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileWriter;

public class DataHolder {
    public List<String> names;
    public List<String[]> arrays;


    public DataHolder(List<String[]> arrays, List<String> names) {
        this.arrays = arrays;
        this.names = names;
    }


    public void LoadDataHolder(String[] args) {
        // Create a new instance of the Yaml class
        Yaml yaml = new Yaml();

        // Read the data from the .yml file
        try (FileReader reader = new FileReader("data.yml")) {
            try {
                DataHolder dataHolder = yaml.load(reader);
                // You can now use the arrays as needed
                this.names = dataHolder.names;
                this.arrays = dataHolder.arrays;
            } catch(Exception e){
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void saveDataHolder(String[] args) {
        // Create a new instance of the Yaml class
        Yaml yaml = new Yaml();

        // Create a new DataHolder object to hold the list of arrays
        DataHolder dataHolder = new DataHolder(arrays,names);

        // Save the data to a .yml file
        try (FileWriter writer = new FileWriter("data.yml")) {
            yaml.dump(dataHolder, writer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



}

but when the loadDataHolder method is run the console gives this Error:

[01:12:50 INFO]: AnimatingLion issued server command: /Steckbrief animatingLion
[01:12:50 WARN]: Can't construct a java object for tag:yaml.org,2002:steckbrief.steckbrief.Commands.DataHolder; exception=Class not found: steckbrief.steckbrief.Commands.DataHolder
 in 'reader', line 1, column 1:
    !!steckbrief.steckbrief.Commands ...
    ^


[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:313)

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:207)

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:196)

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:161)

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:147)

[01:12:50 WARN]:        at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:524)

[01:12:50 WARN]:        at org.yaml.snakeyaml.Yaml.load(Yaml.java:467)

[01:12:50 WARN]:        at steckbrief.steckbrief.DataHolderect.DataHolder.LoadDataHolder(DataHolder.java:26)

[01:12:50 WARN]:        at steckbrief.steckbrief.Commands.getSteckbrief.onCommand(getSteckbrief.java:17)

[01:12:50 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)

[01:12:50 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)

[01:12:50 WARN]:        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1401)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1236)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13)

[01:12:50 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)

[01:12:50 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679)

[01:12:50 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577)

[01:12:50 WARN]:        at java.base/java.lang.Thread.run(Thread.java:833)

[01:12:50 WARN]: Caused by: org.yaml.snakeyaml.error.YAMLException: Class not found: steckbrief.steckbrief.Commands.DataHolder

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.Constructor.getClassForNode(Constructor.java:642)

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.getConstructor(Constructor.java:298)

[01:12:50 WARN]:        at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:308)

[01:12:50 WARN]:        ... 24 more

As you can see it's a ClassNotFound Exception, however the DataHolder class is inside the Commands package

Also this is the .yml File

!!steckbrief.steckbrief.Commands.DataHolder
arrays:
- ['chris ', 'inf ', '15 ', 'ich mag hasen ']
names: [AnimatingLion]

I have tried updating snakeyaml I have tried correcting the classpath, although i'm new so idk if i did it right I have verified, that there is nothing wrong with the .yml file (correct place, syntax and name etc.) As mentioned I' new and only know the little bits of java i have learned in school (nothing about projects just how to use logic operations) so i'm at the end of my knowledge. The loadDataHolder is supposed to copy "names" and "arrays" from the .yml file to itself so i can work with it. sincerely Christian Walter PS english is not my first language so please excuse any spelling and grammar mistakes.

0 Answers0