- 342
- 33
- 54
HI
Такие две проблемы
1. При сохранении значения восстанавливаются до стандартных:
Была уже такая тема, но с того момента я переписал саму систему сохранения + как-то подзабил на cfg
Общий метод остался примерно тем же
Только внутри каждого configEntry теперь есть свой
codec зависит он entry(т.е может быть и float и bool и т.д)
Ну проблема та же...
2. Округление чисел:
Код загрузки:
Общий
Внутри entry
Грузит всё нормально... кроме float и double(возможно)
Загрузчик округляет числа
Например 2.99999999 -> 3
конфиг все еще .txt
Такие две проблемы
1. При сохранении значения восстанавливаются до стандартных:
Была уже такая тема, но с того момента я переписал саму систему сохранения + как-то подзабил на cfg
Общий метод остался примерно тем же
Java:
public void save() {
try (final PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(this.getConfig().toFile()), StandardCharsets.UTF_8))) {
this.entries.forEach(configEntry -> configEntry.save(writer));
} catch (IOException e) {
ToadLib.LOGGER.error(ToadLib.CONFIG, "Failed to save '{}'", this.path);
}
}
Только внутри каждого configEntry теперь есть свой
save()
Java:
public void save(PrintWriter writer) {
DataResult<JsonElement> result = this.codec.encodeStart(JsonOps.INSTANCE, this.get());
result.error().ifPresent(r -> ToadLib.LOGGER.error(ToadLib.CONFIG, "Failed to save '{}':{}", this.name, r.message()));
result.result().ifPresent(r -> {
writer.print(this.name);
writer.print(":");
writer.println(r);
});
}
codec зависит он entry(т.е может быть и float и bool и т.д)
Ну проблема та же...
2. Округление чисел:
Код загрузки:
Общий
Java:
public void load() {
if (Files.notExists(this.getConfig())) {
return;
}
CompoundTag nbt = new CompoundTag();
try (BufferedReader bufferedreader = Files.newBufferedReader(this.getConfig(), Charsets.UTF_8)) {
bufferedreader.lines().forEach((line) -> {
try {
Iterator<String> iterator = OPTION_SPLITTER.split(line).iterator();
nbt.putString(iterator.next(), iterator.next());
} catch (Exception e) {
ToadLib.LOGGER.error(ToadLib.CONFIG, "Skipping bad entry: '{}' in '{}'", line, this.path);
}
});
} catch (IOException e) {
ToadLib.LOGGER.error(ToadLib.CONFIG, "Failed to load '{}'", this.path, e);
}
StringFunction<OptionalString> value = s -> nbt.contains(s) ? OptionalString.of(nbt.getString(s)) : OptionalString.empty();
this.entries.forEach(configEntry -> value.apply(configEntry.toString()).ifPresent(s -> configEntry.load(new JsonReader(new StringReader(s.isEmpty() ? "\"\"" : s)))));
ToadLib.LOGGER.info(ToadLib.CONFIG, "E is '{}'", ToadLibConfig.E.get());
}
Внутри entry
Java:
public void load(JsonReader reader) {
JsonElement element = JsonParser.parseReader(reader);
DataResult<T> result = this.codec.parse(JsonOps.INSTANCE, element);
result.error().ifPresent(r -> ToadLib.LOGGER.error(ToadLib.CONFIG, "Error parsing '{}':{}", this.name, r.message()));
result.result().ifPresent(this::setValue);
}
Грузит всё нормально... кроме float и double(возможно)
Загрузчик округляет числа
Например 2.99999999 -> 3
конфиг все еще .txt