load addon dependencies before pack manifest

This commit is contained in:
dfsek
2021-07-07 13:15:09 -07:00
parent 1ac903cf91
commit 6a1cc16dc3
3 changed files with 41 additions and 30 deletions
@@ -0,0 +1,20 @@
package com.dfsek.terra.config.pack;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.api.addon.TerraAddon;
import java.util.HashSet;
import java.util.Set;
public class ConfigPackAddonsTemplate implements ConfigTemplate {
@Value("addons")
@Default
private Set<TerraAddon> addons = new HashSet<>();
public Set<TerraAddon> getAddons() {
return addons;
}
}
@@ -13,11 +13,7 @@ import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.config.*;
import com.dfsek.terra.api.config.ConfigFactory;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.ConfigType;
import com.dfsek.terra.api.config.Loader;
import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent;
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.CheckedRegistry;
@@ -25,8 +21,8 @@ import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException; import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.registry.meta.RegistryFactory; import com.dfsek.terra.api.registry.meta.RegistryFactory;
import com.dfsek.terra.api.util.generic.pair.ImmutablePair; import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.util.seeded.BiomeProviderBuilder; import com.dfsek.terra.api.util.seeded.BiomeProviderBuilder;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider; import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider;
import com.dfsek.terra.config.dummy.DummyWorld; import com.dfsek.terra.config.dummy.DummyWorld;
import com.dfsek.terra.config.fileloaders.FolderLoader; import com.dfsek.terra.config.fileloaders.FolderLoader;
@@ -44,18 +40,8 @@ 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.*;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
@@ -76,6 +62,8 @@ public class ConfigPackImpl implements ConfigPack {
private final Configuration configuration; private final Configuration configuration;
private final Set<TerraAddon> addons;
private final BiomeProviderBuilder biomeProviderBuilder; private final BiomeProviderBuilder biomeProviderBuilder;
@@ -106,12 +94,16 @@ public class ConfigPackImpl implements ConfigPack {
try { try {
configuration = new Configuration(new FileInputStream(pack)); configuration = new Configuration(new FileInputStream(pack));
selfLoader.load(template, configuration);
main.logger().info("Loading config pack \"" + template.getID() + "\""); ConfigPackAddonsTemplate addonsTemplate = new ConfigPackAddonsTemplate();
selfLoader.load(addonsTemplate, configuration);
this.addons = addonsTemplate.getAddons();
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this, template -> selfLoader.load(template, configuration))); main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this, template -> selfLoader.load(template, configuration)));
selfLoader.load(template, configuration);
main.logger().info("Loading config pack \"" + template.getID() + "\"");
load(l, main); load(l, main);
ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate(); ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate();
@@ -158,11 +150,17 @@ public class ConfigPackImpl implements ConfigPack {
if(pack == null) throw new LoadException("No pack.yml file found in " + file.getName()); if(pack == null) throw new LoadException("No pack.yml file found in " + file.getName());
configuration = new Configuration(file.getInputStream(pack)); configuration = new Configuration(file.getInputStream(pack));
selfLoader.load(template, configuration);
main.logger().info("Loading config pack \"" + template.getID() + "\""); ConfigPackAddonsTemplate addonsTemplate = new ConfigPackAddonsTemplate();
selfLoader.load(addonsTemplate, configuration);
this.addons = addonsTemplate.getAddons();
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this, template -> selfLoader.load(template, configuration))); main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this, template -> selfLoader.load(template, configuration)));
selfLoader.load(template, configuration);
main.logger().info("Loading config pack \"" + template.getID() + "\"");
load(l, main); load(l, main);
ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate(); ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate();
@@ -185,6 +183,7 @@ public class ConfigPackImpl implements ConfigPack {
private void checkDeadEntries(TerraPlugin main) { private void checkDeadEntries(TerraPlugin main) {
registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl<?>) pair.getLeft()).getDeadEntries().forEach((id, value) -> main.getDebugLogger().warning("Dead entry in '" + clazz + "' registry: '" + id + "'"))); registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl<?>) pair.getLeft()).getDeadEntries().forEach((id, value) -> main.getDebugLogger().warning("Dead entry in '" + clazz + "' registry: '" + id + "'")));
} }
@Override @Override
public <T> ConfigPackImpl applyLoader(Type type, TypeLoader<T> loader) { public <T> ConfigPackImpl applyLoader(Type type, TypeLoader<T> loader) {
abstractConfigLoader.registerLoader(type, loader); abstractConfigLoader.registerLoader(type, loader);
@@ -306,7 +305,7 @@ public class ConfigPackImpl implements ConfigPack {
@Override @Override
public Set<TerraAddon> addons() { public Set<TerraAddon> addons() {
return template.getAddons(); return addons;
} }
@Override @Override
@@ -17,10 +17,6 @@ public class ConfigPackTemplate implements ConfigTemplate {
@Value("id") @Value("id")
private String id; private String id;
@Value("addons")
@Default
private Set<TerraAddon> addons = new HashSet<>();
@Value("variables") @Value("variables")
@Default @Default
private Map<String, Double> variables = new HashMap<>(); private Map<String, Double> variables = new HashMap<>();
@@ -159,8 +155,4 @@ public class ConfigPackTemplate implements ConfigTemplate {
public boolean doBetaCarvers() { public boolean doBetaCarvers() {
return betaCarvers; return betaCarvers;
} }
public Set<TerraAddon> getAddons() {
return addons;
}
} }