mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-03 22:36:10 +00:00
Implement layer palette groups
This commit is contained in:
@@ -88,6 +88,7 @@ public class LayeredChunkGeneratorAddon implements AddonInitializer {
|
||||
paletteTypeRegistry.register(addon.key("PALETTE"), SimpleLayerPaletteTemplate::new);
|
||||
paletteTypeRegistry.register(addon.key("BIOME_DEFINED"), BiomeDefinedLayerPaletteTemplate::new);
|
||||
CheckedRegistry<InstanceWrapper<LayerPalette>> paletteRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TOKEN);
|
||||
event.getPack().applyLoader(LayerPalette.Group.class, new LayerPalette.Group.Loader(event.getPack()));
|
||||
event.loadTemplate(new LayerPalettePackConfigTemplate()).getPalettes().forEach((key, palette) -> {
|
||||
paletteRegistry.register(addon.key(key), new InstanceWrapper<>(palette));
|
||||
});
|
||||
|
||||
@@ -1,10 +1,71 @@
|
||||
package com.dfsek.terra.addons.chunkgenerator.api;
|
||||
|
||||
import com.dfsek.tectonic.api.depth.DepthTracker;
|
||||
import com.dfsek.tectonic.api.exception.LoadException;
|
||||
import com.dfsek.tectonic.api.loader.ConfigLoader;
|
||||
import com.dfsek.tectonic.api.loader.type.TypeLoader;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.lang.reflect.AnnotatedType;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.dfsek.terra.api.config.ConfigPack;
|
||||
import com.dfsek.terra.api.properties.Properties;
|
||||
import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||
|
||||
public interface LayerPalette {
|
||||
|
||||
public abstract class LayerPalette {
|
||||
|
||||
Palette get(long seed, Biome biome, int x, int y, int z);
|
||||
private final Group group;
|
||||
|
||||
private final boolean resetsGroup;
|
||||
|
||||
protected LayerPalette(Group group, boolean resetsGroup) {
|
||||
this.group = group;
|
||||
this.resetsGroup = resetsGroup;
|
||||
}
|
||||
|
||||
public abstract Palette get(long seed, Biome biome, int x, int y, int z);
|
||||
|
||||
public final Group getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
public final boolean resetsGroup() {
|
||||
return resetsGroup;
|
||||
}
|
||||
|
||||
public static class Group {
|
||||
|
||||
public static Group NO_GROUP = new Group();
|
||||
|
||||
private Group() {}
|
||||
|
||||
public static Group get(String string, ConfigPack pack) {
|
||||
if (!pack.getContext().has(Holder.class)) {
|
||||
pack.getContext().put(new Holder(new HashMap<>()));
|
||||
}
|
||||
return pack.getContext().get(Holder.class).groups.computeIfAbsent(string, s -> new Group());
|
||||
}
|
||||
|
||||
private record Holder(Map<String, Group> groups) implements Properties {}
|
||||
|
||||
public static class Loader implements TypeLoader<Group> {
|
||||
|
||||
private final ConfigPack pack;
|
||||
|
||||
public Loader(ConfigPack pack) {
|
||||
this.pack = pack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Group load(@NotNull AnnotatedType annotatedType, @NotNull Object o, @NotNull ConfigLoader configLoader,
|
||||
DepthTracker depthTracker) throws LoadException {
|
||||
String groupName = (String) o;
|
||||
return Group.get(groupName, pack);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,13 @@ package com.dfsek.terra.addons.chunkgenerator.config.palette;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Default;
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerPalette;
|
||||
import com.dfsek.terra.addons.chunkgenerator.layer.palette.BiomeDefinedLayerPalette;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||
|
||||
|
||||
public class BiomeDefinedLayerPaletteTemplate implements ObjectTemplate<LayerPalette> {
|
||||
public class BiomeDefinedLayerPaletteTemplate extends LayerPaletteTemplate {
|
||||
|
||||
@Value("default")
|
||||
@Default
|
||||
@@ -17,6 +16,6 @@ public class BiomeDefinedLayerPaletteTemplate implements ObjectTemplate<LayerPal
|
||||
|
||||
@Override
|
||||
public LayerPalette get() {
|
||||
return new BiomeDefinedLayerPalette(defaultPalette);
|
||||
return new BiomeDefinedLayerPalette(group, resetsGroup, defaultPalette);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.dfsek.terra.addons.chunkgenerator.config.palette;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Default;
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerPalette;
|
||||
|
||||
|
||||
public abstract class LayerPaletteTemplate implements ObjectTemplate<LayerPalette> {
|
||||
|
||||
@Value("group")
|
||||
@Default
|
||||
protected LayerPalette.Group group = LayerPalette.Group.NO_GROUP;
|
||||
|
||||
@Value("resets-group")
|
||||
@Default
|
||||
protected boolean resetsGroup = false;
|
||||
|
||||
}
|
||||
@@ -1,20 +1,19 @@
|
||||
package com.dfsek.terra.addons.chunkgenerator.config.palette;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerPalette;
|
||||
import com.dfsek.terra.addons.chunkgenerator.layer.palette.SimpleLayerPalette;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||
|
||||
|
||||
public class SimpleLayerPaletteTemplate implements ObjectTemplate<LayerPalette> {
|
||||
public class SimpleLayerPaletteTemplate extends LayerPaletteTemplate {
|
||||
|
||||
@Value("palette")
|
||||
private Palette palette;
|
||||
|
||||
@Override
|
||||
public LayerPalette get() {
|
||||
return new SimpleLayerPalette(palette);
|
||||
return new SimpleLayerPalette(group, resetsGroup, palette);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,10 @@ public class LayeredChunkGenerator implements ChunkGenerator {
|
||||
|
||||
if (previousLayerPalette == layerPalette) {
|
||||
paletteLevel++;
|
||||
} else if (layerPalette.resetsGroup()) {
|
||||
paletteLevel = 0;
|
||||
} else if (previousLayerPalette != null && layerPalette.getGroup() == previousLayerPalette.getGroup()) {
|
||||
paletteLevel++;
|
||||
} else {
|
||||
paletteLevel = 0;
|
||||
}
|
||||
|
||||
@@ -18,11 +18,12 @@ import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||
|
||||
|
||||
public class BiomeDefinedLayerPalette implements LayerPalette {
|
||||
public class BiomeDefinedLayerPalette extends LayerPalette {
|
||||
|
||||
private final Palette defaultPalette;
|
||||
|
||||
public BiomeDefinedLayerPalette(Palette defaultPalette) {
|
||||
public BiomeDefinedLayerPalette(Group group, boolean resetsGroup, Palette defaultPalette) {
|
||||
super(group, resetsGroup);
|
||||
this.defaultPalette = defaultPalette;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,12 @@ import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||
|
||||
|
||||
public class SimpleLayerPalette implements LayerPalette {
|
||||
public class SimpleLayerPalette extends LayerPalette {
|
||||
|
||||
private final Palette palette;
|
||||
|
||||
public SimpleLayerPalette(Palette palette) {
|
||||
public SimpleLayerPalette(Group group, boolean resetsGroup, Palette palette) {
|
||||
super(group, resetsGroup);
|
||||
this.palette = palette;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user