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

View File

@@ -5,6 +5,9 @@ import java.util.List;
import java.util.Map;
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.registry.CheckedRegistry;
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);
Set<TerraAddon> addons();
Map<BaseAddon, VersionRange> addons();
boolean vanillaMobs();

View File

@@ -1,5 +1,6 @@
package com.dfsek.terra.config;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.loading.TypeRegistry;
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.ProbabilityCollectionLoader;
import com.dfsek.terra.config.loaders.RangeLoader;
import com.dfsek.terra.config.loaders.VersionRangeLoader;
public class GenericLoaders implements LoaderRegistrar {
@@ -30,6 +32,7 @@ public class GenericLoaders implements LoaderRegistrar {
registry.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader())
.registerLoader(Range.class, new RangeLoader())
.registerLoader(MaterialSet.class, new MaterialSetLoader())
.registerLoader(VersionRange.class, new VersionRangeLoader())
.registerLoader(LinkedHashMap.class, new LinkedHashMapLoader());
if(platform != null) {

View File

@@ -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);
}
}
}

View File

@@ -1,23 +1,25 @@
package com.dfsek.terra.config.pack;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import java.util.HashMap;
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")
public class ConfigPackAddonsTemplate implements ConfigTemplate {
@Value("addons")
@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;
}
}

View File

@@ -1,5 +1,6 @@
package com.dfsek.terra.config.pack;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.paralithic.eval.parser.Scope;
import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
import com.dfsek.tectonic.abstraction.AbstractConfiguration;
@@ -34,7 +35,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
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.ConfigPack;
import com.dfsek.terra.api.config.ConfigType;
@@ -90,7 +91,7 @@ public class ConfigPackImpl implements ConfigPack {
private final Configuration configuration;
private final Set<TerraAddon> addons;
private final Map<BaseAddon, VersionRange> addons;
private final BiomeProvider seededBiomeProvider;
@@ -237,7 +238,7 @@ public class ConfigPackImpl implements ConfigPack {
}
@Override
public Set<TerraAddon> addons() {
public Map<BaseAddon, VersionRange> addons() {
return addons;
}

View File

@@ -35,7 +35,7 @@ public class FunctionalEventHandlerImpl implements FunctionalEventHandler {
contextMap.getOrDefault(event.getClass(), Collections.emptyList()).forEach(context -> {
try {
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);
}
} else {