Проблема в том, что когда FDevTools (компилятор плагинов и загрузчик плагинов для [nukkit] https://github.com/NukkitX/Nukkit) пытается найти класс, он возвращает соответствующую ошибку, потому что класс не существует, но я непонять, почему класс вообще ищется в первую очередь ??
вот соответствующая строка, которая выдает ошибку в FDevtools https://github.com/jasin/FDevTools/blob/master/src/main/java/moe/berd/FDevTools/SourcePluginClassLoader.java#L41
два класса, которые пытаются загрузить:
jasin.mcmmo.datatypes.player.PlayerProfileBeanInfo
jasin.mcmmo.datatypes.player.PlayerProfileCustomizer
Я пробовалвыяснить, где имя класса генерируется безрезультатно.
Код вызова с использованием snakeyaml
public class FlatFileDatabase implements Database {
private String path;
public FlatFileDatabase(String path) {
this.path = path;
}
public PlayerProfile loadPlayerProfile(String name, UUID uuid, boolean create) {
PlayerProfile profile = new PlayerProfile();
File file = new File(this.path + File.separator + name);
PlayerProfileRepresenter representer = new PlayerProfileRepresenter();
Yaml yaml = new Yaml(new CustomClassLoaderConstructor(FlatFileDatabase.class.getClassLoader()));
if(file.exists()) {
try {
profile = yaml.loadAs(new FileInputStream(file), PlayerProfile.class);
} catch(Exception e) {
System.out.println(e);
}
} else if(create) {
try {
profile.setName(name);
profile.setUUID(uuid.toString());
FileWriter writer = new FileWriter(file, false);
yaml.dump(profile, writer);
} catch(Exception e) { }
}
return profile;
}
private class PlayerProfileRepresenter extends Representer {
@Override
protected NodeTuple representJavaBeanProperty(Object javaBean, Property property, Object propertyValue, Tag customTag) {
if("loaded".equals(property.getName())) {
return null;
} else {
return super.representJavaBeanProperty(javaBean, property, propertyValue, customTag);
}
}
}
}
package jasin.mcmmo.datatypes.player;
import cn.nukkit.Player;
import java.beans.*;
public class PlayerProfile {
public String name;
public String UUID;
public boolean loaded;
//private Player player;
public PlayerProfile() {}
public PlayerProfile(Player player) {
//this.player = player;
}
public PlayerProfile(String name, String uuid) {
this.name = name;
this.UUID = uuid;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getUUID() {
return this.UUID;
}
public void setUUID(String uuid) {
this.UUID = uuid;
}
@Transient
public boolean isLoaded() {
return true;
}
public void setLoaded(boolean loaded) {
this.loaded = loaded;
}
}
16: 28: 01 [ОШИБКА] [FDevTools] java.lang.ClassNotFoundException: jasin.mcmmo.datatypes.player.PlayerProfileBeanInfo
16: 28: 01 [ОШИБКА] [FDevTools] java.lang.ClassNotFoundException: jasin.mcmmo.datatypes.player.PlayerProfileCustomizer
Ожидаемый результат: эти классы являются этими классамии PlayerProfileCustomizer не следует загружать, так как они не существуют. Или не должно существовать на афаике. Есть ли что-то, чего мне не хватает, как работает snakeyaml, и для этого нужны эти классы? Я уверен, что мне здесь не хватает нюанса, но я не могу его найти.