diff --git a/common/addons/palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java b/common/addons/palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java new file mode 100644 index 000000000..cb22bcbb3 --- /dev/null +++ b/common/addons/palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.addons.palette; + +import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.annotations.Addon; +import com.dfsek.terra.api.addon.annotations.Author; +import com.dfsek.terra.api.addon.annotations.Version; +import com.dfsek.terra.api.event.EventListener; +import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.injection.annotations.Inject; + +@Addon("core-palette-config") +@Author("Terra") +@Version("1.0.0") +public class PaletteAddon extends TerraAddon implements EventListener { + @Inject + private TerraPlugin main; + + @Override + public void initialize() { + main.getEventManager().registerListener(this, this); + } + + public void onPackLoad(ConfigPackPreLoadEvent event) { + event.getPack().registerConfigType(new PaletteConfigType(event.getPack(), main), "PALETTE", 2); + } +} diff --git a/common/addons/palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java b/common/addons/palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java new file mode 100644 index 000000000..c3afe53cf --- /dev/null +++ b/common/addons/palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java @@ -0,0 +1,50 @@ +package com.dfsek.terra.addons.palette; + +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.tectonic.loading.TypeLoader; +import com.dfsek.terra.addons.palette.palette.PaletteImpl; +import com.dfsek.terra.api.TerraPlugin; +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.registry.OpenRegistry; +import com.dfsek.terra.api.world.generator.Palette; + +import java.lang.reflect.Type; +import java.util.function.Supplier; + +public class PaletteConfigType implements ConfigType { + private final PaletteFactory factory = new PaletteFactory(); + private final ConfigPack pack; + private final TerraPlugin main; + + public PaletteConfigType(ConfigPack pack, TerraPlugin main) { + this.pack = pack; + this.main = main; + } + + @Override + public PaletteTemplate getTemplate(ConfigPack pack, TerraPlugin main) { + return new PaletteTemplate(); + } + + @Override + public ConfigFactory getFactory() { + return factory; + } + + @Override + public Class getTypeClass() { + return Palette.class; + } + + @Override + public Supplier> registrySupplier() { + return () -> pack.getRegistryFactory().create(registry -> (TypeLoader) (t, c, loader) -> { + if(((String) c).startsWith("BLOCK:")) + return new PaletteImpl.Singleton(main.getWorldHandle().createBlockData(((String) c).substring(6))); // Return single palette for BLOCK: shortcut. + return registry.load(t, c, loader); + }); + } +}