mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-19 15:20:55 +00:00
Implement layer palette groups
This commit is contained in:
+1
@@ -88,6 +88,7 @@ public class LayeredChunkGeneratorAddon implements AddonInitializer {
|
|||||||
paletteTypeRegistry.register(addon.key("PALETTE"), SimpleLayerPaletteTemplate::new);
|
paletteTypeRegistry.register(addon.key("PALETTE"), SimpleLayerPaletteTemplate::new);
|
||||||
paletteTypeRegistry.register(addon.key("BIOME_DEFINED"), BiomeDefinedLayerPaletteTemplate::new);
|
paletteTypeRegistry.register(addon.key("BIOME_DEFINED"), BiomeDefinedLayerPaletteTemplate::new);
|
||||||
CheckedRegistry<InstanceWrapper<LayerPalette>> paletteRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TOKEN);
|
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) -> {
|
event.loadTemplate(new LayerPalettePackConfigTemplate()).getPalettes().forEach((key, palette) -> {
|
||||||
paletteRegistry.register(addon.key(key), new InstanceWrapper<>(palette));
|
paletteRegistry.register(addon.key(key), new InstanceWrapper<>(palette));
|
||||||
});
|
});
|
||||||
|
|||||||
+63
-2
@@ -1,10 +1,71 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator.api;
|
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.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
public interface LayerPalette {
|
|
||||||
|
|
||||||
Palette get(long seed, Biome biome, int x, int y, int z);
|
public abstract class LayerPalette {
|
||||||
|
|
||||||
|
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
-3
@@ -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.Default;
|
||||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
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.api.LayerPalette;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.layer.palette.BiomeDefinedLayerPalette;
|
import com.dfsek.terra.addons.chunkgenerator.layer.palette.BiomeDefinedLayerPalette;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
|
||||||
public class BiomeDefinedLayerPaletteTemplate implements ObjectTemplate<LayerPalette> {
|
public class BiomeDefinedLayerPaletteTemplate extends LayerPaletteTemplate {
|
||||||
|
|
||||||
@Value("default")
|
@Value("default")
|
||||||
@Default
|
@Default
|
||||||
@@ -17,6 +16,6 @@ public class BiomeDefinedLayerPaletteTemplate implements ObjectTemplate<LayerPal
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LayerPalette get() {
|
public LayerPalette get() {
|
||||||
return new BiomeDefinedLayerPalette(defaultPalette);
|
return new BiomeDefinedLayerPalette(group, resetsGroup, defaultPalette);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
+2
-3
@@ -1,20 +1,19 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator.config.palette;
|
package com.dfsek.terra.addons.chunkgenerator.config.palette;
|
||||||
|
|
||||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
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.api.LayerPalette;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.layer.palette.SimpleLayerPalette;
|
import com.dfsek.terra.addons.chunkgenerator.layer.palette.SimpleLayerPalette;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
|
||||||
public class SimpleLayerPaletteTemplate implements ObjectTemplate<LayerPalette> {
|
public class SimpleLayerPaletteTemplate extends LayerPaletteTemplate {
|
||||||
|
|
||||||
@Value("palette")
|
@Value("palette")
|
||||||
private Palette palette;
|
private Palette palette;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LayerPalette get() {
|
public LayerPalette get() {
|
||||||
return new SimpleLayerPalette(palette);
|
return new SimpleLayerPalette(group, resetsGroup, palette);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -52,6 +52,10 @@ public class LayeredChunkGenerator implements ChunkGenerator {
|
|||||||
|
|
||||||
if (previousLayerPalette == layerPalette) {
|
if (previousLayerPalette == layerPalette) {
|
||||||
paletteLevel++;
|
paletteLevel++;
|
||||||
|
} else if (layerPalette.resetsGroup()) {
|
||||||
|
paletteLevel = 0;
|
||||||
|
} else if (previousLayerPalette != null && layerPalette.getGroup() == previousLayerPalette.getGroup()) {
|
||||||
|
paletteLevel++;
|
||||||
} else {
|
} else {
|
||||||
paletteLevel = 0;
|
paletteLevel = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -18,11 +18,12 @@ import com.dfsek.terra.api.world.biome.Biome;
|
|||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
|
||||||
public class BiomeDefinedLayerPalette implements LayerPalette {
|
public class BiomeDefinedLayerPalette extends LayerPalette {
|
||||||
|
|
||||||
private final Palette defaultPalette;
|
private final Palette defaultPalette;
|
||||||
|
|
||||||
public BiomeDefinedLayerPalette(Palette defaultPalette) {
|
public BiomeDefinedLayerPalette(Group group, boolean resetsGroup, Palette defaultPalette) {
|
||||||
|
super(group, resetsGroup);
|
||||||
this.defaultPalette = defaultPalette;
|
this.defaultPalette = defaultPalette;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -5,11 +5,12 @@ import com.dfsek.terra.api.world.biome.Biome;
|
|||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
|
||||||
public class SimpleLayerPalette implements LayerPalette {
|
public class SimpleLayerPalette extends LayerPalette {
|
||||||
|
|
||||||
private final Palette palette;
|
private final Palette palette;
|
||||||
|
|
||||||
public SimpleLayerPalette(Palette palette) {
|
public SimpleLayerPalette(Group group, boolean resetsGroup, Palette palette) {
|
||||||
|
super(group, resetsGroup);
|
||||||
this.palette = palette;
|
this.palette = palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user