diff --git a/src/main/java/org/betterx/bclib/api/biomes/BCLBiome.java b/src/main/java/org/betterx/bclib/api/biomes/BCLBiome.java index 172d7e2a..9cabf79f 100644 --- a/src/main/java/org/betterx/bclib/api/biomes/BCLBiome.java +++ b/src/main/java/org/betterx/bclib/api/biomes/BCLBiome.java @@ -27,7 +27,7 @@ import java.util.function.Consumer; import org.jetbrains.annotations.Nullable; public class BCLBiome extends BCLBiomeSettings { - private final Set> structureTags = Sets.newHashSet(); + private final Set> biomeTags = Sets.newHashSet(); private final WeightedList subbiomes = new WeightedList<>(); private final Map customData = Maps.newHashMap(); private final ResourceLocation biomeID; @@ -200,7 +200,7 @@ public class BCLBiome extends BCLBiomeSettings { */ void afterRegistration() { ResourceKey key = BuiltinRegistries.BIOME.getResourceKey(getBiome()).orElseThrow(); - this.structureTags.forEach(tagKey -> TagAPI.addBiomeTag(tagKey, biome)); + this.biomeTags.forEach(tagKey -> TagAPI.addBiomeTag(tagKey, biome)); if (this.surfaceInit != null) { surfaceInit.accept(key); @@ -280,8 +280,8 @@ public class BCLBiome extends BCLBiomeSettings { * Adds structures to this biome. For internal use only. * Used inside {@link BCLBiomeBuilder}. */ - void attachStructures(List> structures) { - structureTags.addAll(structures); + void addBiomeTags(Set> tags) { + biomeTags.addAll(tags); } /** diff --git a/src/main/java/org/betterx/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/org/betterx/bclib/api/biomes/BCLBiomeBuilder.java index 11615c00..474a7157 100644 --- a/src/main/java/org/betterx/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/org/betterx/bclib/api/biomes/BCLBiomeBuilder.java @@ -28,6 +28,7 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.betterx.bclib.api.surface.SurfaceRuleBuilder; import org.betterx.bclib.entity.BCLEntityWrapper; import org.betterx.bclib.mixin.common.BiomeGenerationSettingsAccessor; @@ -41,6 +42,7 @@ import org.betterx.bclib.world.structures.BCLStructure; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -53,7 +55,6 @@ public class BCLBiomeBuilder { private static final SurfaceRules.ConditionSource SURFACE_NOISE = SurfaceRules.noiseCondition(Noises.SOUL_SAND_LAYER, -0.012); - private final List> structureTags = new ArrayList<>(8); private final List>>> carvers = new ArrayList<>( 1); private BiomeGenerationSettings.Builder generationSettings; @@ -63,6 +64,8 @@ public class BCLBiomeBuilder { private Precipitation precipitation; private ResourceLocation biomeID; + private Set> tags = Sets.newHashSet(); + private final List parameters = Lists.newArrayList(); //BiomeTags.IS_NETHER @@ -88,7 +91,6 @@ public class BCLBiomeBuilder { INSTANCE.generationSettings = null; INSTANCE.effectsBuilder = null; INSTANCE.spawnSettings = null; - INSTANCE.structureTags.clear(); INSTANCE.temperature = 1.0F; INSTANCE.fogDensity = 1.0F; INSTANCE.edgeSize = 0; @@ -99,6 +101,7 @@ public class BCLBiomeBuilder { INSTANCE.edge = null; INSTANCE.carvers.clear(); INSTANCE.parameters.clear(); + INSTANCE.tags.clear(); return INSTANCE; } @@ -590,7 +593,7 @@ public class BCLBiomeBuilder { * @return same {@link BCLBiomeBuilder} instance. */ public BCLBiomeBuilder structure(TagKey structureTag) { - structureTags.add(structureTag); + tags.add(structureTag); return this; } @@ -670,6 +673,13 @@ public class BCLBiomeBuilder { return this; } + public BCLBiomeBuilder tag(TagKey... tag) { + for (TagKey t : tag) { + tags.add(t); + } + return this; + } + /** * Set terrain height for the biome. Can be used in custom generators, doesn't change vanilla biome distribution or generation. * @@ -755,7 +765,7 @@ public class BCLBiomeBuilder { final Biome biome = builder.build(); final T res = biomeConstructor.apply(biomeID, biome, settings); - res.attachStructures(structureTags); + res.addBiomeTags(tags); res.setSurface(surfaceRule); res.addClimateParameters(parameters); diff --git a/src/main/java/org/betterx/bclib/api/biomes/BiomeAPI.java b/src/main/java/org/betterx/bclib/api/biomes/BiomeAPI.java index 35dc9372..2ef82798 100644 --- a/src/main/java/org/betterx/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/org/betterx/bclib/api/biomes/BiomeAPI.java @@ -169,6 +169,7 @@ public class BiomeAPI { */ public static void initRegistry(Registry biomeRegistry) { if (biomeRegistry != BiomeAPI.biomeRegistry) { + System.out.println("Switching Registry to " + biomeRegistry);//17015, 19009, 19058, 19009 BiomeAPI.biomeRegistry = biomeRegistry; CLIENT.clear(); } @@ -420,11 +421,20 @@ public class BiomeAPI { * @return biome {@link ResourceLocation}. */ public static ResourceLocation getBiomeID(Biome biome) { - ResourceLocation id = BuiltinRegistries.BIOME.getKey(biome); - if (id == null && biomeRegistry != null) { + ResourceLocation id = null; + if (biomeRegistry != null) { id = biomeRegistry.getKey(biome); } - return id == null ? EMPTY_BIOME.getID() : id; + if (id == null) { + id = BuiltinRegistries.BIOME.getKey(biome); + } + + if (id == null) { + BCLib.LOGGER.error("Unable to get ID for " + biome + ". Falling back to empty Biome..."); + id = EMPTY_BIOME.getID(); + } + + return id; } /**