From 2af0731a81726550853a1974fc1afdb69f36c994 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 5 Dec 2022 00:53:14 +0100 Subject: [PATCH] Simplified BCLBiome inheritance, and removed redundant biome configs (replaced by builtin datapack) --- .../bclib/api/v2/generator/BiomePicker.java | 4 +- .../bclib/api/v2/generator/map/MapStack.java | 2 +- .../api/v2/generator/map/hex/HexBiomeMap.java | 4 +- .../generator/map/square/SquareBiomeMap.java | 2 +- .../api/v2/levelgen/biomes/BCLBiome.java | 63 +++++++++---------- .../v2/levelgen/biomes/BCLBiomeBuilder.java | 3 +- .../v2/levelgen/biomes/BCLBiomeSettings.java | 56 +---------------- .../api/v2/levelgen/biomes/BiomeAPI.java | 16 ++--- .../v2/levelgen/biomes/InternalBiomeAPI.java | 6 +- .../client/render/CustomFogRenderer.java | 4 +- 10 files changed, 52 insertions(+), 108 deletions(-) diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BiomePicker.java b/src/main/java/org/betterx/bclib/api/v2/generator/BiomePicker.java index 4f18fca5..213c462c 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BiomePicker.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BiomePicker.java @@ -81,7 +81,7 @@ public class BiomePicker { biomes.forEach(biome -> { if (biome.isValid) - list.add(biome, biome.bclBiome.getGenChance()); + list.add(biome, biome.bclBiome.settings.getGenChance()); }); //only a single biome, we need to add the edges as well if (list.size() == 1) { @@ -89,7 +89,7 @@ public class BiomePicker { if (biome.getEdge() != null) { float defaultBiomeSize = 128; - float edgeSize = (biome.bclBiome.getEdgeSize() * list.getWeight(0)) / defaultBiomeSize; + float edgeSize = (biome.bclBiome.settings.getEdgeSize() * list.getWeight(0)) / defaultBiomeSize; list.add(biome.getEdge(), edgeSize); } } diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/map/MapStack.java b/src/main/java/org/betterx/bclib/api/v2/generator/map/MapStack.java index c7af8d8d..6d4097d8 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/map/MapStack.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/map/MapStack.java @@ -92,7 +92,7 @@ public class MapStack implements BiomeMap { if (biome == null) { biome = chunks[i].getBiome(x, z); } - if (biome.bclBiome.isVertical()) { + if (biome.bclBiome.settings.isVertical()) { biomeMap[x][z] = biome; isNoEmpty = true; } diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/map/hex/HexBiomeMap.java b/src/main/java/org/betterx/bclib/api/v2/generator/map/hex/HexBiomeMap.java index 713f7fe2..af5b2ace 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/map/hex/HexBiomeMap.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/map/hex/HexBiomeMap.java @@ -56,11 +56,11 @@ public class HexBiomeMap implements BiomeMap { public BiomePicker.ActualBiome getBiome(double x, double y, double z) { BiomePicker.ActualBiome biome = getRawBiome(x, z); BiomePicker.ActualBiome edge = biome.getEdge(); - int size = biome.bclBiome.getEdgeSize(); + int size = biome.bclBiome.settings.getEdgeSize(); if (edge == null && biome.getParentBiome() != null) { edge = biome.getParentBiome().getEdge(); - size = biome.getParentBiome().bclBiome.getEdgeSize(); + size = biome.getParentBiome().bclBiome.settings.getEdgeSize(); } if (edge == null) { diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/map/square/SquareBiomeMap.java b/src/main/java/org/betterx/bclib/api/v2/generator/map/square/SquareBiomeMap.java index 1ce1d9e0..58f9a9e8 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/map/square/SquareBiomeMap.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/map/square/SquareBiomeMap.java @@ -55,7 +55,7 @@ public class SquareBiomeMap implements BiomeMap { search = biome.getParentBiome(); } - int size = search.bclBiome.getEdgeSize(); + int size = search.bclBiome.settings.getEdgeSize(); boolean edge = !search.isSame(getRawBiome(x + size, z)); edge = edge || !search.isSame(getRawBiome(x - size, z)); edge = edge || !search.isSame(getRawBiome(x, z + size)); diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java index 956b1845..b8842831 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java @@ -40,7 +40,7 @@ import org.jetbrains.annotations.Nullable; * You may use {@link BCLBiome#codecWithSettings(RecordCodecBuilder.Instance)} to create a Codec that includes * all default settings for {@link BCLBiome} as well as additional Data for your specific subclass. */ -public class BCLBiome extends BCLBiomeSettings implements BiomeData { +public class BCLBiome implements BiomeData { public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecWithSettings(instance).apply( instance, BCLBiome::new @@ -54,27 +54,27 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { private static class CodecAttributes { public RecordCodecBuilder t0 = Codec.FLOAT.fieldOf("terrainHeight") .orElse(0.1f) - .forGetter((T o1) -> o1.terrainHeight); + .forGetter((T o1) -> o1.settings.terrainHeight); public RecordCodecBuilder t1 = Codec.FLOAT.fieldOf("fogDensity") .orElse(1.0f) - .forGetter((T o1) -> o1.fogDensity); + .forGetter((T o1) -> o1.settings.fogDensity); public RecordCodecBuilder t2 = Codec.FLOAT.fieldOf("genChance") .orElse(1.0f) - .forGetter((T o1) -> o1.genChance); + .forGetter((T o1) -> o1.settings.genChance); public RecordCodecBuilder t3 = Codec.INT.fieldOf("edgeSize") .orElse(0) - .forGetter((T o1) -> o1.edgeSize); + .forGetter((T o1) -> o1.settings.edgeSize); public RecordCodecBuilder t4 = Codec.BOOL.fieldOf("vertical") .orElse(false) - .forGetter((T o1) -> o1.vertical); + .forGetter((T o1) -> o1.settings.vertical); public RecordCodecBuilder> t5 = ResourceLocation.CODEC .optionalFieldOf("edge") .orElse(Optional.empty()) - .forGetter((T o1) -> o1.edge == null + .forGetter((T o1) -> ((BCLBiome) o1).edge == null ? Optional.empty() - : Optional.of(o1.edge)); + : Optional.of(((BCLBiome) o1).edge)); public RecordCodecBuilder t6 = ResourceLocation.CODEC.fieldOf("biome") .forGetter((T o) -> ((BCLBiome) o).biomeID); @@ -150,6 +150,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { return instance.group(a.t0, a.t1, a.t2, a.t3, a.t4, a.t5, a.t6, a.t7, a.t8, a.t10); } + public final BCLBiomeSettings settings; private final Map customData = Maps.newHashMap(); private final ResourceLocation biomeID; private final ResourceKey biomeKey; @@ -157,6 +158,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { protected final List parameterPoints = Lists.newArrayList(); private ResourceLocation biomeParent; + private ResourceLocation edge; private BiomeAPI.BiomeType intendedType = BiomeAPI.BiomeType.NONE; @@ -172,7 +174,14 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { Optional biomeParent, Optional intendedType ) { - super(terrainHeight, fogDensity, genChance, edgeSize, vertical, edge.orElse(null)); + this.settings = new BCLBiomeSettings( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical + ); + this.edge = edge.orElse(null); this.biomeID = biomeID; this.biomeKey = ResourceKey.create(Registries.BIOME, biomeID); this.biomeParent = biomeParent.orElse(null); @@ -216,12 +225,9 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { * @param defaults The Settings for this Biome or null if you want to apply the defaults */ protected BCLBiome(ResourceKey biomeKey, BCLBiomeSettings defaults) { + this.settings = defaults; this.biomeID = biomeKey.location(); this.biomeKey = biomeKey; - - if (defaults != null) { - defaults.applyWithDefaults(this); - } } /** @@ -231,12 +237,9 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { * @param defaults The Settings for this Biome or null if you want to apply the defaults */ protected BCLBiome(ResourceLocation biomeID, BCLBiomeSettings defaults) { + this.settings = defaults; this.biomeID = biomeID; this.biomeKey = ResourceKey.create(Registries.BIOME, biomeID); - - if (defaults != null) { - defaults.applyWithDefaults(this); - } } /** @@ -272,20 +275,14 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { return !BCLBiomeRegistry.isEmptyBiome(edge); } - /** - * Set biome edge for this biome instance. - * - * @param edge {@link BCLBiome} as the edge biome. - * @return same {@link BCLBiome}. - */ - BCLBiome setEdgeID(ResourceLocation edge) { - this.edge = edge; - return this; - } - BCLBiome setEdge(BCLBiome edge) { - this.edge = edge.biomeID; - edge.biomeParent = this.biomeID; + BCLBiome _setEdge(BCLBiome edge) { + if (edge != null) { + this.edge = edge.biomeID; + edge.biomeParent = this.biomeID; + } else { + this.edge = null; + } return this; } @@ -300,7 +297,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { if (this.edge != null) { newEdge.biomeParent = this.edge; } else { - this.setEdge(newEdge); + this._setEdge(newEdge); } return this; } @@ -329,9 +326,9 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { BCLBiome b = entry.getValue(); if ( this.biomeID.equals(entry.getValue().biomeParent) - && !entry.getValue().getID().equals(edge) + && !entry.getValue().isEdgeBiome() ) { - subbiomes.add(b, b.genChance); + subbiomes.add(b, b.settings.genChance); } } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeBuilder.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeBuilder.java index 0043b291..a8ce09ae 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeBuilder.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeBuilder.java @@ -930,7 +930,6 @@ public class BCLBiomeBuilder { .setFogDensity(fogDensity) .setGenChance(genChance) .setEdgeSize(edgeSize) - .setEdge(edge) .setVertical(vertical) .build(); final T bclBiome = biomeConstructor.apply(ResourceKey.create(Registries.BIOME, biomeID), settings); @@ -951,7 +950,7 @@ public class BCLBiomeBuilder { builder.specialEffects(getEffects().build()); if (edge != null) { - bclBiome.setEdge(edge); + bclBiome._setEdge(edge); } //res.addBiomeTags(tags); diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeSettings.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeSettings.java index 99bc32dc..558acde2 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeSettings.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeSettings.java @@ -1,10 +1,6 @@ package org.betterx.bclib.api.v2.levelgen.biomes; import org.betterx.bclib.api.v2.generator.BiomePicker; -import org.betterx.bclib.config.Configs; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; public class BCLBiomeSettings { public static Builder createBCL() { @@ -81,17 +77,6 @@ public class BCLBiomeSettings { return (R) this; } - /** - * Set edges:biome for this biome. - * - * @param edge The {@link Biome}. - * @return same {@link Builder}. - */ - public R setEdge(BCLBiome edge) { - storage.edge = edge == null ? null : edge.getID(); - return (R) this; - } - /** * Sets fog density for this biome. * @@ -109,15 +94,13 @@ public class BCLBiomeSettings { float fogDensity, float genChance, int edgeSize, - boolean vertical, - ResourceLocation edge + boolean vertical ) { this.terrainHeight = terrainHeight; this.fogDensity = fogDensity; this.genChance = genChance; this.edgeSize = edgeSize; this.vertical = vertical; - this.edge = edge; } protected BCLBiomeSettings() { @@ -126,7 +109,6 @@ public class BCLBiomeSettings { this.genChance = 1.0F; this.edgeSize = 0; this.vertical = false; - this.edge = null; } float terrainHeight; @@ -134,7 +116,6 @@ public class BCLBiomeSettings { float genChance; int edgeSize; boolean vertical; - ResourceLocation edge; /** @@ -181,39 +162,4 @@ public class BCLBiomeSettings { public int getEdgeSize() { return edgeSize; } - - /** - * Getter for edge-biome. - * - * @return The assigned edge biome. - */ - public BCLBiome getEdge() { - return BiomeAPI.getBiome(edge); - } - - /** - * Load values from Config and apply to the passed Biome. The Default values for the loaded settings - * are derifed from the values store in this object - * - * @param biome {@link BCLBiome} to assign values to - */ - public void applyWithDefaults(BCLBiome biome) { - final String group = biome.configGroup(); - biome.genChance = Configs.BIOMES_CONFIG.getFloat(group, "generation_chance", this.genChance); - - if (edge != null) { - biome.edgeSize = Configs.BIOMES_CONFIG.getInt(group, "edge_size", this.edgeSize); - if (edgeSize > 0) { - biome.setEdgeID(edge); - } - } - - if (!(this instanceof VanillaBiomeSettings)) { - biome.fogDensity = Configs.BIOMES_CONFIG.getFloat(group, "fog_density", this.fogDensity); - biome.vertical = Configs.BIOMES_CONFIG.getBoolean(group, "vertical", this.vertical); - biome.terrainHeight = Configs.BIOMES_CONFIG.getFloat(group, "terrain_height", this.terrainHeight); - } - - Configs.BIOMES_CONFIG.saveChanges(); - } } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BiomeAPI.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BiomeAPI.java index 4bb330e5..6a8ddde7 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BiomeAPI.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BiomeAPI.java @@ -155,7 +155,7 @@ public class BiomeAPI { public static final BiomeType END_CENTER = new BiomeType("END_CENTER", END); public static final BiomeType END_BARRENS = new BiomeType("END_BARRENS", END); public static final BiomeType BCL_END_LAND = new BiomeType("BCL_END_LAND", END_LAND, (biome, ignored) -> { - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (biome.isEdgeBiome()) { @@ -166,14 +166,14 @@ public class BiomeAPI { } }); public static final BiomeType BCL_END_VOID = new BiomeType("BCL_END_VOID", END_VOID, (biome, ignored) -> { - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (!biome.isEdgeBiome()) { TheEndBiomes.addSmallIslandsBiome(key, weight); } }); public static final BiomeType BCL_END_CENTER = new BiomeType("BCL_END_CENTER", END_CENTER, (biome, ignored) -> { - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (!biome.isEdgeBiome()) { TheEndBiomes.addMainIslandBiome(key, weight); @@ -184,7 +184,7 @@ public class BiomeAPI { "BCL_END_BARRENS", END_BARRENS, (biome, highlandBiome) -> { - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (!biome.isEdgeBiome()) { ResourceKey parentKey = highlandBiome.getBiomeKey(); @@ -339,7 +339,7 @@ public class BiomeAPI { static BCLBiome registerEndLandBiome(BootstapContext bootstrapContext, BCLBiome biome) { registerBuiltinBiomeAndOverrideIntendedDimension(bootstrapContext, biome, BiomeType.BCL_END_LAND); - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (biome.isEdgeBiome()) { @@ -363,7 +363,7 @@ public class BiomeAPI { static BCLBiome registerEndVoidBiome(BootstapContext bootstrapContext, BCLBiome biome) { registerBuiltinBiomeAndOverrideIntendedDimension(bootstrapContext, biome, BiomeType.BCL_END_VOID); - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (!biome.isEdgeBiome()) { TheEndBiomes.addSmallIslandsBiome(key, weight); @@ -382,7 +382,7 @@ public class BiomeAPI { static BCLBiome registerEndCenterBiome(BootstapContext bootstrapContext, BCLBiome biome) { registerBuiltinBiomeAndOverrideIntendedDimension(bootstrapContext, biome, BiomeType.BCL_END_CENTER); - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (!biome.isEdgeBiome()) { TheEndBiomes.addMainIslandBiome(key, weight); @@ -405,7 +405,7 @@ public class BiomeAPI { ) { registerBuiltinBiomeAndOverrideIntendedDimension(bootstrapContext, biome, BiomeType.BCL_END_BARRENS); - float weight = biome.getGenChance(); + float weight = biome.settings.getGenChance(); ResourceKey key = biome.getBiomeKey(); if (!biome.isEdgeBiome()) { ResourceKey parentKey = highlandBiome.getBiomeKey(); diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/InternalBiomeAPI.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/InternalBiomeAPI.java index ad08b322..ab24fcb5 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/InternalBiomeAPI.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/InternalBiomeAPI.java @@ -223,9 +223,11 @@ public class InternalBiomeAPI { ) { VanillaBiomeSettings.Builder settings = VanillaBiomeSettings.createVanilla(); if (genChance >= 0) settings.setGenChance(genChance); - settings.setEdge(edgeBiome); settings.setEdgeSize(edgeBiomeSize); - return wrapBiome(biomeKey, settings.build(), type); + + final BCLBiome b = wrapBiome(biomeKey, settings.build(), type); + b._setEdge(edgeBiome); + return b; } /** diff --git a/src/main/java/org/betterx/bclib/client/render/CustomFogRenderer.java b/src/main/java/org/betterx/bclib/client/render/CustomFogRenderer.java index d079ce5d..45048abe 100644 --- a/src/main/java/org/betterx/bclib/client/render/CustomFogRenderer.java +++ b/src/main/java/org/betterx/bclib/client/render/CustomFogRenderer.java @@ -124,9 +124,9 @@ public class CustomFogRenderer { Biome biome = level.getBiome(MUT_POS.set(x, y, z)).value(); BCLBiome renderBiome = BiomeAPI.getRenderBiome(biome); if (renderBiome == null) { - return BCLBiomeRegistry.EMPTY_BIOME.getFogDensity(); + return BCLBiomeRegistry.EMPTY_BIOME.settings.getFogDensity(); } - return renderBiome.getFogDensity(); + return renderBiome.settings.getFogDensity(); } private static float getFogDensity(Level level, double x, double y, double z) {