mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-10-25 21:40:08 +00:00
cleanup and config registering
This commit is contained in:
1 parent
2b2aa493b1
commit
19d482f249
3 files changed
+19
-7
No files matched your search
@@ -18,7 +18,7 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde
|
|||||||
|
|
||||||
WorldConfig toWorldConfig(TerraWorld world);
|
WorldConfig toWorldConfig(TerraWorld world);
|
||||||
|
|
||||||
void registerConfigType(ConfigType<?, ?> type, int priority);
|
void registerConfigType(ConfigType<?, ?> type, String id, int priority);
|
||||||
|
|
||||||
Set<TerraAddon> addons();
|
Set<TerraAddon> addons();
|
||||||
|
|
||||||
|
|||||||
+17
-5
@@ -42,14 +42,17 @@ import java.io.File;
|
|||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.Serial;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
|
|
||||||
@@ -77,9 +80,11 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
private final ConfigTypeRegistry configTypeRegistry;
|
private final ConfigTypeRegistry configTypeRegistry;
|
||||||
private final Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> registryMap = newRegistryMap();
|
private final Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> registryMap = newRegistryMap();
|
||||||
|
|
||||||
|
private final TreeMap<Integer, List<ImmutablePair<String, ConfigType<?, ?>>>> configTypes = new TreeMap<>();
|
||||||
|
|
||||||
public ConfigPackImpl(File folder, TerraPlugin main) throws ConfigException {
|
public ConfigPackImpl(File folder, TerraPlugin main) throws ConfigException {
|
||||||
try {
|
try {
|
||||||
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
this.configTypeRegistry = new ConfigTypeRegistry((id, configType) -> {
|
||||||
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
||||||
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistryImpl<>(openRegistry)));
|
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistryImpl<>(openRegistry)));
|
||||||
});
|
});
|
||||||
@@ -122,7 +127,7 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
|
|
||||||
public ConfigPackImpl(ZipFile file, TerraPlugin main) throws ConfigException {
|
public ConfigPackImpl(ZipFile file, TerraPlugin main) throws ConfigException {
|
||||||
try {
|
try {
|
||||||
this.configTypeRegistry = new ConfigTypeRegistry(this, main, (id, configType) -> {
|
this.configTypeRegistry = new ConfigTypeRegistry((id, configType) -> {
|
||||||
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
OpenRegistry<?> openRegistry = configType.registrySupplier().get();
|
||||||
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistryImpl<>(openRegistry)));
|
registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistryImpl<>(openRegistry)));
|
||||||
});
|
});
|
||||||
@@ -168,9 +173,9 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
toWorldConfig(new TerraWorldImpl(new DummyWorld(), this, main)); // Build now to catch any errors immediately.
|
toWorldConfig(new TerraWorldImpl(new DummyWorld(), this, main)); // Build now to catch any errors immediately.
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
|
||||||
private Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> newRegistryMap() {
|
private Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> newRegistryMap() {
|
||||||
Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> map = new HashMap<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>>() {
|
Map<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>> map = new HashMap<Class<?>, ImmutablePair<OpenRegistry<?>, CheckedRegistry<?>>>() {
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 4015855819914064466L;
|
private static final long serialVersionUID = 4015855819914064466L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -214,6 +219,8 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
|
|
||||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
private void load(long start, TerraPlugin main) throws ConfigException {
|
private void load(long start, TerraPlugin main) throws ConfigException {
|
||||||
|
configTypes.values().forEach(list -> list.forEach(pair -> configTypeRegistry.add(pair.getLeft(), pair.getRight())));
|
||||||
|
|
||||||
for(Map.Entry<String, Double> var : template.getVariables().entrySet()) {
|
for(Map.Entry<String, Double> var : template.getVariables().entrySet()) {
|
||||||
varScope.create(var.getKey(), var.getValue());
|
varScope.create(var.getKey(), var.getValue());
|
||||||
}
|
}
|
||||||
@@ -291,8 +298,13 @@ public class ConfigPackImpl implements ConfigPack {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerConfigType(ConfigType<?, ?> type, int priority) {
|
public void registerConfigType(ConfigType<?, ?> type, String id, int priority) {
|
||||||
|
Set<String> contained = new HashSet<>();
|
||||||
|
configTypes.forEach((p, configs) -> configs.forEach(pair -> {
|
||||||
|
if(contained.contains(pair.getLeft())) throw new IllegalArgumentException("Duplicate config ID: " + id);
|
||||||
|
contained.add(id);
|
||||||
|
}));
|
||||||
|
configTypes.computeIfAbsent(priority, p -> new ArrayList<>()).add(ImmutablePair.of(id, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import java.util.function.Supplier;
|
|||||||
public class ConfigTypeRegistry extends OpenRegistryImpl<ConfigType<?, ?>> {
|
public class ConfigTypeRegistry extends OpenRegistryImpl<ConfigType<?, ?>> {
|
||||||
private final BiConsumer<String, ConfigType<?, ?>> callback;
|
private final BiConsumer<String, ConfigType<?, ?>> callback;
|
||||||
|
|
||||||
public ConfigTypeRegistry(ConfigPackImpl pack, TerraPlugin main, BiConsumer<String, ConfigType<?, ?>> callback) {
|
public ConfigTypeRegistry(BiConsumer<String, ConfigType<?, ?>> callback) {
|
||||||
super(new LinkedHashMap<>()); // Ordered
|
super(new LinkedHashMap<>()); // Ordered
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
add("PACK", new PackBuilder());
|
add("PACK", new PackBuilder());
|
||||||
|
|||||||
Reference in new issue
Block a user