Проблема с конфигом.

Ravil

Pioneer
Доброго времени суток! Не знаем, как пофиксить ошибку. Вообщем, после обновления сборки с 299 до 304 один из плагинов перестал работать.
Ругается на строку Config config = new Config(file, 2). В консоль дебажит:

at cn.nukkit.utils.ConfigSection.<init>(ConfigSection.java:35)
at cn.nukkit.utils.Config.parseContent(Config.java:539)
at cn.nukkit.utils.Config.load(Config.java:157)
at cn.nukkit.utils.Config.<init>(Config.java:99)
at cn.nukkit.utils.Config.<init>(Config.java:90)
at ru.detreex.simplecommands.utils.YMLprovider.save(YMLprovider.java:26)
at ru.detreex.simplecommands.SimpleCommands.onEnable(SimpleCommands.java:428)
at cn.nukkit.plugin.PluginBase.setEnabled(PluginBase.java:89)
at cn.nukkit.plugin.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:117)
at cn.nukkit.plugin.PluginManager.enablePlugin(PluginManager.java:452)
at cn.nukkit.Server.enablePlugin(Server.java:605)
at cn.nukkit.Server.enablePlugins(Server.java:594)
at cn.nukkit.Server.<init>(Server.java:441)
at cn.nukkit.Nukkit.main(Nukkit.java:65)

Пожалуйста, помогите исправить!
 
Last edited:

fromgate

Administrator
А как без кода-то исправить? ;)
Что тут: ru.detreex.simplecommands.utils.YMLprovider.save (строка 26 и вокруг неё)?
 

Ravil

Pioneer
А как без кода-то исправить? ;)
Что тут: ru.detreex.simplecommands.utils.YMLprovider.save (строка 26 и вокруг неё)?
Извиняюсь.

package ru.detreex.simplecommands.utils;
import cn.nukkit.utils.Config;
import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public abstract class YMLprovider {
public boolean save(File file) {
file.getParentFile().mkdirs();
try {
if (file.exists()) {
file.delete();
}
file.createNewFile();
}
catch (Exception var2_2) {
var2_2.printStackTrace();
return false;
}
Config config = new Config(file, 2);
for (Field field : this.getClass().getDeclaredFields()) {
String string = this.getPath(field);
try {
config.set(string, field.get(this));
continue;
}
catch (IllegalAccessException var8_9) {
var8_9.printStackTrace();
return false;
}
}
config.save();
return true;
}
public boolean load(File file) {
file.getParentFile().mkdirs();
try {
if (!file.exists()) {
file.createNewFile();
}
}
catch (Exception var2_2) {
var2_2.printStackTrace();
return false;
}
Config config = new Config(file, 2);
for (Field field : this.getClass().getDeclaredFields()) {
String string = this.getPath(field);
try {
if (field.getType() == Integer.TYPE || field.getType() == Integer.class) {
field.set(this, config.getInt(string, field.getInt(this)));
continue;
}
if (field.getType() == Boolean.TYPE || field.getType() == Boolean.class) {
field.set(this, config.getBoolean(string, field.getBoolean(this)));
continue;
}
if (field.getType() == String.class) {
field.set(this, config.getString(string, (String)field.get(this)));
continue;
}
throw new UnsupportedClassVersionError("YamlConfig did not supports this class: " + field.getType().getName());
}
catch (Exception var8_9) {
var8_9.printStackTrace();
return false;
}
}
return false;
}
private String getPath(Field field) {
String string = null;
if (field.isAnnotationPresent(Path.class)) {
Path path = (Path)field.getAnnotation(Path.class);
string = path.value();
}
if (string == null || string.isEmpty()) {
field.getName().replaceAll("_", ".");
}
if (Modifier.isPrivate(field.getModifiers())) {
field.setAccessible(true);
}
return string;
}
@Retention(value=RetentionPolicy.RUNTIME)
@Target(value={ElementType.FIELD})
public static @interface Path {
public String value() default "";
}
}
 

fromgate

Administrator
А сама ошибка какая? Всю целиком скопируй пожалуйста
 

Ravil

Pioneer
20:03:12 [INFO] Включение DTXapi v15
20:03:12 [ALERT] java.lang.NullPointerException
at cn.nukkit.utils.ConfigSection.<init>(ConfigSection.java:35)
at cn.nukkit.utils.Config.parseContent(Config.java:539)
at cn.nukkit.utils.Config.load(Config.java:157)
at cn.nukkit.utils.Config.<init>(Config.java:99)
at cn.nukkit.utils.Config.<init>(Config.java:86)
at cn.nukkit.utils.Config.<init>(Config.java:82)
at cn.nukkit.plugin.PluginBase.reloadConfig(PluginBase.java:239)
at cn.nukkit.plugin.PluginBase.getConfig(PluginBase.java:218)
at ru.detreex.simplecommands.SimpleCommands.onEnable(SimpleCommands.java:469)
at cn.nukkit.plugin.PluginBase.setEnabled(PluginBase.java:89)
at cn.nukkit.plugin.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:117)
at cn.nukkit.plugin.PluginManager.enablePlugin(PluginManager.java:452)
at cn.nukkit.Server.enablePlugin(Server.java:605)
at cn.nukkit.Server.enablePlugins(Server.java:594)
at cn.nukkit.Server.<init>(Server.java:441)
at cn.nukkit.Nukkit.main(Nukkit.java:65)
20:03:12 [INFO] Выключение DTXapi v15
А сама ошибка какая? Всю целиком скопируй пожалуйста
 

fromgate

Administrator
java.lang.NullPointerException
Это означает, что какой-то объект, к которому происходит обращение - это Null.

Смотрим 82-ую строчку класса Config: https://github.com/Nukkit/Nukkit/blob/master/src/main/java/cn/nukkit/utils/Config.java#L82

Спорим, у Вас не проинициализирован файл? ;) В смысле объект файл, который вы указываете в конструкторе - это null.

Что тут: SimpleCommands.java:469 ?
 

fromgate

Administrator
Если нужно создать объект конфигурации без привязки к файлу, то сейчас можно сделать просто:
Config cfg = new Config (Config.YAML);
или даже
Config cfg = new Config ();
 

fromgate

Administrator
Но это уже другая ошибка.
В преыдущей ноги растут откуда-то из другого места.

at cn.nukkit.utils.ConfigSection.<init>(ConfigSection.java:35) — это уже из нового. Вот тут хотелось бы понять причину.

Но для этого мне нужно понимать, что конкретно в этой строке: at ru.detreex.simplecommands.utils.YMLprovider.save(YMLprovider.java:26) тот код, что Вы привели - похож на декомпилированный. И строки там могут быть совсем другими.
 

Ravil

Pioneer
Но это уже другая ошибка.
В преыдущей ноги растут откуда-то из другого места.

at cn.nukkit.utils.ConfigSection.<init>(ConfigSection.java:35) — это уже из нового. Вот тут хотелось бы понять причину.

Но для этого мне нужно понимать, что конкретно в этой строке: at ru.detreex.simplecommands.utils.YMLprovider.save(YMLprovider.java:26) тот код, что Вы привели - похож на декомпилированный. И строки там могут быть совсем другими.
"Переменная file задаётся функцией. Если сделать так, как предлагают, то авторизация не будет работать." - так мне сказал тот, кто писал плагин.
 

Ravil

Pioneer
До сборки 301 было нормально
Но это уже другая ошибка.
В преыдущей ноги растут откуда-то из другого места.

at cn.nukkit.utils.ConfigSection.<init>(ConfigSection.java:35) — это уже из нового. Вот тут хотелось бы понять причину.

Но для этого мне нужно понимать, что конкретно в этой строке: at ru.detreex.simplecommands.utils.YMLprovider.save(YMLprovider.java:26) тот код, что Вы привели - похож на декомпилированный. И строки там могут быть совсем другими.
 

fromgate

Administrator
"Переменная file задаётся функцией. Если сделать так, как предлагают, то авторизация не будет работать." - так мне сказал тот, кто писал плагин.
Вот нужно эту функцию проверять - она в переменную file засунула null. Вместо файла.
 

Ravil

Pioneer
Но это уже другая ошибка.
В преыдущей ноги растут откуда-то из другого места.

at cn.nukkit.utils.ConfigSection.<init>(ConfigSection.java:35) — это уже из нового. Вот тут хотелось бы понять причину.

Но для этого мне нужно понимать, что конкретно в этой строке: at ru.detreex.simplecommands.utils.YMLprovider.save(YMLprovider.java:26) тот код, что Вы привели - похож на декомпилированный. И строки там могут быть совсем другими.
А может, проблема этой ошибки и вовсе, в ядре?
 

fromgate

Administrator
А может, проблема этой ошибки и вовсе, в ядре?
Для этого я пытаюсь добиться кода, который приводит к ошибке. А Вы даже ошибки целиком не привели.
Мне нужно больше информации, чтобы попытаться вопроизвести ситуацию.
Если что-то неучтено в ConfigSection — значит я буду вносить изменение. Если же что-то в коде плагина, то извините ;)

Вот к примеру, фрагмент плагина, который я специально написал для проверки конфигуратора: всё работает нормально.

Java:
	@Override
	public void onEnable(){
		this.getDataFolder().mkdirs();
		this.getLogger().info("1: "+this.getConfig().getInt("int-test",0));
		this.getConfig().set("int-test",this.getConfig().getInt("int-test",0)+1);
		this.getLogger().info("2: "+this.getConfig().getInt("int-test",0));
		this.saveConfig();
		for (String key : getConfig().getKeys(true))
			this.getLogger().info(TextFormat.GOLD+key+" : "+getConfig().get(key));
		ConfigSection section = this.getConfig().getSections("aaa");
		this.getLogger().info(section.toString());

		Config cfg = new Config();
		cfg.set("aaaa","test");
		cfg.set("bbbb","test");
		cfg.save(new File(this.getDataFolder(),"test-aaaa.cfg"));
		cfg.remove("aaaa");
		cfg.save();

		File f = new File(this.getDataFolder(),"test-bbb.cfg");
		Config cfg2 = new Config(f,Config.YAML);
		cfg2.set("aaaaa.aaaaa",100);
		cfg2.save();
 

Ravil

Pioneer
Для этого я пытаюсь добиться кода, который приводит к ошибке. А Вы даже ошибки целиком не привели.
Мне нужно больше информации, чтобы попытаться вопроизвести ситуацию.
Если что-то неучтено в ConfigSection — значит я буду вносить изменение. Если же что-то в коде плагина, то извините ;)

Вот к примеру, фрагмент плагина, который я специально написал для проверки конфигуратора: всё работает нормально.

Java:
	@Override
	public void onEnable(){
		this.getDataFolder().mkdirs();
		this.getLogger().info("1: "+this.getConfig().getInt("int-test",0));
		this.getConfig().set("int-test",this.getConfig().getInt("int-test",0)+1);
		this.getLogger().info("2: "+this.getConfig().getInt("int-test",0));
		this.saveConfig();
		for (String key : getConfig().getKeys(true))
			this.getLogger().info(TextFormat.GOLD+key+" : "+getConfig().get(key));
		ConfigSection section = this.getConfig().getSections("aaa");
		this.getLogger().info(section.toString());

		Config cfg = new Config();
		cfg.set("aaaa","test");
		cfg.set("bbbb","test");
		cfg.save(new File(this.getDataFolder(),"test-aaaa.cfg"));
		cfg.remove("aaaa");
		cfg.save();

		File f = new File(this.getDataFolder(),"test-bbb.cfg");
		Config cfg2 = new Config(f,Config.YAML);
		cfg2.set("aaaaa.aaaaa",100);
		cfg2.save();
Я скинул всё, что вылезло в консоли, скинул код. Разве этого недостаточно?
 

fromgate

Administrator
Я скинул всё, что вылезло в консоли, скинул код. Разве этого недостаточно?
В первом сообщении нет самой ошибки. Она может быть любой.
Код - это декомпиляция, а не исходный. Поэтому какая строка в этом коде соответствует YMLprovider.java:26 — непонятно.
 
Top