load palettes in chunk generator

This commit is contained in:
dfsek 2021-07-15 20:01:36 -07:00
parent 9e7bab340e
commit 0bd6ff9469
5 changed files with 86 additions and 1 deletions

View File

@ -0,0 +1,30 @@
package com.dfsek.terra.addons.chunkgenerator;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo;
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder;
import com.dfsek.terra.api.world.generator.Palette;
public class BiomePaletteTemplate implements ObjectTemplate<PaletteInfo> {
@Value("palette")
private PaletteHolder palette;
@Value("slant")
@Default
private SlantHolder slant = null;
@Value("ocean.level")
private int seaLevel;
@Value("ocean.palette")
private Palette oceanPalette;
@Override
public PaletteInfo get() {
return new PaletteInfo(palette, slant, oceanPalette, seaLevel);
}
}

View File

@ -1,6 +1,8 @@
package com.dfsek.terra.addons.chunkgenerator;
import com.dfsek.terra.addons.chunkgenerator.generation.generators.NoiseChunkGenerator3D;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder;
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo;
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder;
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader;
import com.dfsek.terra.api.TerraPlugin;
@ -9,11 +11,16 @@ 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.ConfigurationLoadEvent;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider;
import java.util.HashMap;
import java.util.Map;
@Addon("chunk-generator-noise-3d")
@Author("Terra")
@Version("1.0.0")
@ -21,6 +28,8 @@ public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListe
@Inject
private TerraPlugin main;
private final Map<TerraBiome, PaletteInfo> palettes = new HashMap<>();
@Override
public void initialize() {
main.getEventManager().registerListener(this, this);
@ -30,4 +39,11 @@ public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListe
event.getPack().getOrCreateRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new NoiseChunkGenerator3D(pack, main));
event.getPack().applyLoader(SlantHolder.class, new SlantHolderLoader());
}
public void onBiomeLoad(ConfigurationLoadEvent event) {
if(event.is(TerraBiome.class)) {
TerraBiome biome = event.getLoadedObject();
palettes.put(biome, event.load(new BiomePaletteTemplate()).get());
}
}
}

View File

@ -0,0 +1,34 @@
package com.dfsek.terra.addons.chunkgenerator.palette;
import com.dfsek.terra.api.world.generator.Palette;
public class PaletteInfo {
private final PaletteHolder paletteHolder;
private final SlantHolder slantHolder;
private final Palette ocean;
private final int seaLevel;
public PaletteInfo(PaletteHolder paletteHolder, SlantHolder slantHolder, Palette ocean, int seaLevel) {
this.paletteHolder = paletteHolder;
this.slantHolder = slantHolder;
this.ocean = ocean;
this.seaLevel = seaLevel;
}
public Palette getOcean() {
return ocean;
}
public PaletteHolder getPaletteHolder() {
return paletteHolder;
}
public SlantHolder getSlantHolder() {
return slantHolder;
}
public int getSeaLevel() {
return seaLevel;
}
}

View File

@ -20,7 +20,7 @@ public class SlantHolderLoader implements TypeLoader<SlantHolder> {
for(Map<Object, Object> layer : layers) {
double threshold = ((Number) layer.get("threshold")).doubleValue();
if(threshold < minThreshold) minThreshold = threshold;
slantLayers.put(threshold, (PaletteHolder) configLoader.loadType(PaletteHolder.class, layer.get("palette")));
slantLayers.put(threshold, configLoader.loadType(PaletteHolder.class, layer.get("palette")));
}
return new SlantHolder(slantLayers, minThreshold);

View File

@ -58,4 +58,9 @@ public class ConfigurationLoadEvent implements PackEvent {
throw new ClassCastException("Cannot assign object from loader of type " + type.getTypeClass().getCanonicalName() + " to class " + clazz.getCanonicalName());
return (T) loaded;
}
@SuppressWarnings("unchecked")
public <T> T getLoadedObject() {
return (T) loaded;
}
}