Always invoke config initialisers
This resolves an issue where the worker threads were not initialised if the config file did not exist already.
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
package ca.spottedleaf.moonrise.common.config;
|
||||
|
||||
public interface InitialiseHook {
|
||||
|
||||
public void initialise();
|
||||
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package ca.spottedleaf.moonrise.common.config;
|
||||
|
||||
public interface PostDeserializeHook {
|
||||
|
||||
public void deserialize();
|
||||
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
package ca.spottedleaf.moonrise.common.config.adapter;
|
||||
|
||||
import ca.spottedleaf.moonrise.common.config.PostDeserializeHook;
|
||||
import ca.spottedleaf.moonrise.common.config.InitialiseHook;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.collection.CollectionTypeAdapter;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.collection.ListTypeAdapter;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.collection.SortedMapTypeAdapter;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.collection.UnsortedMapTypeAdapter;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.primitive.BooleanTypeAdapter;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.primitive.ByteTypeAdapter;
|
||||
import ca.spottedleaf.moonrise.common.config.adapter.primitive.DoubleTypeAdapter;
|
||||
@@ -32,7 +31,6 @@ import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public final class TypeAdapterRegistry {
|
||||
|
||||
@@ -117,6 +115,20 @@ public final class TypeAdapterRegistry {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public <T> void callInitialisers(final T object) {
|
||||
if (object == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final TypeAdapter<?, ?> adapter = this.getAdapter(object.getClass());
|
||||
|
||||
if (!(adapter instanceof AutoTypeAdapter<?> autoTypeAdapter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
((AutoTypeAdapter<T>)autoTypeAdapter).callInitialisers(object);
|
||||
}
|
||||
|
||||
private static final class AutoTypeAdapter<T> extends TypeAdapter<T, Map<Object, Object>> {
|
||||
|
||||
private final TypeAdapterRegistry registry;
|
||||
@@ -229,10 +241,6 @@ public final class TypeAdapterRegistry {
|
||||
field.field.set(ret, field.adapter.deserialize(registry, fieldValue, field.field.getGenericType()));
|
||||
}
|
||||
|
||||
if (ret instanceof PostDeserializeHook hook) {
|
||||
hook.deserialize();
|
||||
}
|
||||
|
||||
return ret;
|
||||
} catch (final Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
@@ -267,6 +275,23 @@ public final class TypeAdapterRegistry {
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void callInitialisers(final T value) {
|
||||
for (final SerializableField field : this.fields) {
|
||||
final Object fieldValue;
|
||||
try {
|
||||
fieldValue = field.field.get(value);
|
||||
} catch (final Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
|
||||
if (fieldValue instanceof InitialiseHook initialiseHook) {
|
||||
initialiseHook.initialise();
|
||||
}
|
||||
|
||||
this.registry.callInitialisers(fieldValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static final class CommentedData {
|
||||
|
||||
@@ -131,6 +131,10 @@ public final class YamlConfig<T> {
|
||||
return ret.append(this.saveToString()).toString();
|
||||
}
|
||||
|
||||
public void callInitialisers() {
|
||||
this.typeAdapters.callInitialisers(this.config);
|
||||
}
|
||||
|
||||
private static final class YamlConstructor extends Constructor {
|
||||
|
||||
public YamlConstructor(final LoaderOptions loadingConfig) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package ca.spottedleaf.moonrise.common.config.moonrise;
|
||||
|
||||
import ca.spottedleaf.moonrise.common.config.PostDeserializeHook;
|
||||
import ca.spottedleaf.moonrise.common.config.InitialiseHook;
|
||||
import ca.spottedleaf.moonrise.common.config.annotation.Adaptable;
|
||||
import ca.spottedleaf.moonrise.common.config.ui.ClothConfig;
|
||||
import ca.spottedleaf.moonrise.common.config.annotation.Serializable;
|
||||
@@ -147,7 +147,7 @@ public final class MoonriseConfig {
|
||||
public WorkerPool workerPool = new WorkerPool();
|
||||
|
||||
@Adaptable
|
||||
public static final class WorkerPool implements PostDeserializeHook {
|
||||
public static final class WorkerPool implements InitialiseHook {
|
||||
@Serializable(
|
||||
comment = """
|
||||
Set the number of shared worker threads to be used by chunk rendering,
|
||||
@@ -163,7 +163,7 @@ public final class MoonriseConfig {
|
||||
public int workerThreads = -1;
|
||||
|
||||
@Override
|
||||
public void deserialize() {
|
||||
public void initialise() {
|
||||
MoonriseCommon.adjustWorkerThreads(this);
|
||||
}
|
||||
}
|
||||
@@ -172,7 +172,7 @@ public final class MoonriseConfig {
|
||||
public ChunkSystem chunkSystem = new ChunkSystem();
|
||||
|
||||
@Adaptable
|
||||
public static final class ChunkSystem implements PostDeserializeHook {
|
||||
public static final class ChunkSystem implements InitialiseHook {
|
||||
|
||||
@Serializable(
|
||||
comment = """
|
||||
@@ -205,7 +205,7 @@ public final class MoonriseConfig {
|
||||
public boolean populationGenParallelism = false;
|
||||
|
||||
@Override
|
||||
public void deserialize() {
|
||||
public void initialise() {
|
||||
ChunkTaskScheduler.init(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,6 +117,14 @@ public final class MoonriseCommon {
|
||||
}
|
||||
|
||||
public static boolean reloadConfig() {
|
||||
final boolean ret = reloadConfig0();
|
||||
|
||||
CONFIG.callInitialisers();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static boolean reloadConfig0() {
|
||||
synchronized (CONFIG) {
|
||||
if (CONFIG_FILE.exists()) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user