addon initialization

This commit is contained in:
dfsek
2021-11-17 17:22:29 -07:00
parent 3737e3510d
commit 208cbbd8e0
25 changed files with 59 additions and 28 deletions
@@ -5,6 +5,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.meta.RegistryFactory; import com.dfsek.terra.api.registry.meta.RegistryFactory;
@@ -24,7 +27,7 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde
void registerConfigType(ConfigType<?, ?> type, String id, int priority); void registerConfigType(ConfigType<?, ?> type, String id, int priority);
Set<TerraAddon> addons(); Map<BaseAddon, VersionRange> addons();
boolean vanillaMobs(); boolean vanillaMobs();
@@ -1,5 +1,6 @@
package com.dfsek.terra.config; package com.dfsek.terra.config;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.TypeRegistry;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@@ -16,6 +17,7 @@ import com.dfsek.terra.config.loaders.LinkedHashMapLoader;
import com.dfsek.terra.config.loaders.MaterialSetLoader; import com.dfsek.terra.config.loaders.MaterialSetLoader;
import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader; import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
import com.dfsek.terra.config.loaders.RangeLoader; import com.dfsek.terra.config.loaders.RangeLoader;
import com.dfsek.terra.config.loaders.VersionRangeLoader;
public class GenericLoaders implements LoaderRegistrar { public class GenericLoaders implements LoaderRegistrar {
@@ -30,6 +32,7 @@ public class GenericLoaders implements LoaderRegistrar {
registry.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader()) registry.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader())
.registerLoader(Range.class, new RangeLoader()) .registerLoader(Range.class, new RangeLoader())
.registerLoader(MaterialSet.class, new MaterialSetLoader()) .registerLoader(MaterialSet.class, new MaterialSetLoader())
.registerLoader(VersionRange.class, new VersionRangeLoader())
.registerLoader(LinkedHashMap.class, new LinkedHashMapLoader()); .registerLoader(LinkedHashMap.class, new LinkedHashMapLoader());
if(platform != null) { if(platform != null) {
@@ -0,0 +1,22 @@
package com.dfsek.terra.config.loaders;
import ca.solostudios.strata.Versions;
import ca.solostudios.strata.parser.tokenizer.ParseException;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import java.lang.reflect.AnnotatedType;
public class VersionRangeLoader implements TypeLoader<VersionRange> {
@Override
public VersionRange load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException {
try {
return Versions.parseVersionRange((String) c);
} catch(ParseException e) {
throw new LoadException("Failed to parse version range: ", e);
}
}
}
@@ -1,23 +1,25 @@
package com.dfsek.terra.config.pack; package com.dfsek.terra.config.pack;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.config.ConfigTemplate;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Map;
import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.BaseAddon;
@SuppressWarnings("FieldMayBeFinal") @SuppressWarnings("FieldMayBeFinal")
public class ConfigPackAddonsTemplate implements ConfigTemplate { public class ConfigPackAddonsTemplate implements ConfigTemplate {
@Value("addons") @Value("addons")
@Default @Default
private Set<TerraAddon> addons = new HashSet<>(); private Map<BaseAddon, VersionRange> addons = new HashMap<>();
public Set<TerraAddon> getAddons() { public Map<BaseAddon, VersionRange> getAddons() {
return addons; return addons;
} }
} }
@@ -1,5 +1,6 @@
package com.dfsek.terra.config.pack; package com.dfsek.terra.config.pack;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.paralithic.eval.parser.Scope; import com.dfsek.paralithic.eval.parser.Scope;
import com.dfsek.tectonic.abstraction.AbstractConfigLoader; import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
import com.dfsek.tectonic.abstraction.AbstractConfiguration; import com.dfsek.tectonic.abstraction.AbstractConfiguration;
@@ -34,7 +35,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigFactory;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.config.ConfigType;
@@ -90,7 +91,7 @@ public class ConfigPackImpl implements ConfigPack {
private final Configuration configuration; private final Configuration configuration;
private final Set<TerraAddon> addons; private final Map<BaseAddon, VersionRange> addons;
private final BiomeProvider seededBiomeProvider; private final BiomeProvider seededBiomeProvider;
@@ -237,7 +238,7 @@ public class ConfigPackImpl implements ConfigPack {
} }
@Override @Override
public Set<TerraAddon> addons() { public Map<BaseAddon, VersionRange> addons() {
return addons; return addons;
} }
@@ -35,7 +35,7 @@ public class FunctionalEventHandlerImpl implements FunctionalEventHandler {
contextMap.getOrDefault(event.getClass(), Collections.emptyList()).forEach(context -> { contextMap.getOrDefault(event.getClass(), Collections.emptyList()).forEach(context -> {
try { try {
if(event instanceof PackEvent) { if(event instanceof PackEvent) {
if((context.isGlobal() || ((PackEvent) event).getPack().addons().contains(context.getAddon()))) { if((context.isGlobal() || ((PackEvent) event).getPack().addons().containsKey(context.getAddon()))) {
((EventContextImpl<Event>) context).handle(event); ((EventContextImpl<Event>) context).handle(event);
} }
} else { } else {