From efa4bf5bb43de67e194c428a75e2126ed0ac476b Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 30 Dec 2025 00:23:44 -0700 Subject: [PATCH] Generify shortcut configs to work on any type --- .../terra/config/pack/ConfigPackImpl.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index 42530b81f..99886b3b2 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -26,7 +26,11 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import com.dfsek.tectonic.api.loader.AbstractConfigLoader; import com.dfsek.tectonic.api.loader.ConfigLoader; import com.dfsek.tectonic.api.loader.type.TypeLoader; +import com.dfsek.tectonic.impl.loading.object.ObjectTemplateLoader; import com.dfsek.tectonic.yaml.YamlConfiguration; + +import com.dfsek.terra.api.tectonic.ConfigLoadingDelegate; + import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimaps; import org.jetbrains.annotations.NotNull; @@ -47,9 +51,11 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.ServiceLoader.Provider; import java.util.Set; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; import java.util.function.Supplier; import com.dfsek.terra.api.Platform; @@ -99,6 +105,7 @@ public class ConfigPackImpl implements ConfigPack { private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader(); private final ConfigLoader selfLoader = new ConfigLoader(); + private final Map> loaders = new HashMap<>(); private final Platform platform; private final Path rootPath; @@ -107,7 +114,7 @@ public class ConfigPackImpl implements ConfigPack { private final BiomeProvider seededBiomeProvider; private final Map> registryMap = new HashMap<>(); - private final Map> shortcuts = new HashMap<>(); + private final Map>> shortcuts = new HashMap<>(); private final OpenRegistry> configTypeRegistry; private final TreeMap>>> configTypes = new TreeMap<>(); @@ -142,10 +149,7 @@ public class ConfigPackImpl implements ConfigPack { this.platform = platform; this.configTypeRegistry = createConfigRegistry(); - register(selfLoader); platform.register(selfLoader); - - register(abstractConfigLoader); platform.register(abstractConfigLoader); ConfigPackAddonsTemplate addonsTemplate = new ConfigPackAddonsTemplate(); @@ -163,6 +167,9 @@ public class ConfigPackImpl implements ConfigPack { platform.getEventManager().callEvent( new ConfigPackPreLoadEvent(this, template -> selfLoader.load(template, packManifest))); + register(selfLoader); + register(abstractConfigLoader); + selfLoader.load(template, packManifest); String namespace; @@ -259,6 +266,7 @@ public class ConfigPackImpl implements ConfigPack { public ConfigPackImpl applyLoader(Type type, TypeLoader loader) { abstractConfigLoader.registerLoader(type, loader); selfLoader.registerLoader(type, loader); + loaders.put(type, loader); return this; } @@ -266,6 +274,7 @@ public class ConfigPackImpl implements ConfigPack { public ConfigPackImpl applyLoader(Type type, Supplier> loader) { abstractConfigLoader.registerLoader(type, loader); selfLoader.registerLoader(type, loader); + loaders.put(type, new ObjectTemplateLoader<>(loader)); return this; } @@ -273,7 +282,7 @@ public class ConfigPackImpl implements ConfigPack { public void register(TypeRegistry registry) { registry.registerLoader(ConfigType.class, configTypeRegistry); registryMap.forEach(registry::registerLoader); - shortcuts.forEach(registry::registerLoader); // overwrite with delegated shortcuts if present + shortcuts.forEach((k, v) -> registry.registerLoader(k, v.get())); // overwrite with delegated shortcuts if present } @Override @@ -357,11 +366,9 @@ public class ConfigPackImpl implements ConfigPack { @SuppressWarnings("rawtypes") @Override public ConfigPack registerShortcut(TypeKey clazz, String shortcut, ShortcutLoader loader) { - ShortcutHolder holder = shortcuts - .computeIfAbsent(clazz.getType(), c -> new ShortcutHolder<>(getOrCreateRegistry(clazz))) - .register(shortcut, (ShortcutLoader) loader); - selfLoader.registerLoader(clazz.getType(), holder); - abstractConfigLoader.registerLoader(clazz.getType(), holder); + shortcuts.put(clazz.getType(), + () -> new ShortcutHolder<>(loaders.computeIfAbsent(clazz.getType(), t -> getOrCreateRegistry(clazz))).register(shortcut, + (ShortcutLoader) loader)); return this; }