From c75450b6c55ef9893227cb725ecdc8f418bfac71 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 3 Dec 2022 14:31:36 +0100 Subject: [PATCH] Fixes to make BetterNether DataGen run --- .../api/v2/generator/BCLibEndBiomeSource.java | 2 +- .../v2/levelgen/biomes/BCLBiomeBuilder.java | 9 +-- .../v2/levelgen/biomes/BCLBiomeRegistry.java | 67 ++++--------------- .../api/v2/levelgen/biomes/BiomeAPI.java | 46 +++++++++++++ .../v2/levelgen/biomes/UnboundBCLBiome.java | 1 + .../features/BCLConfigureFeature.java | 9 ++- .../api/v3/levelgen/features/BCLFeature.java | 8 ++- .../levelgen/features/BCLFeatureBuilder.java | 3 +- .../features/BCLPlacedFeatureBuilder.java | 4 +- .../VanillaBCLBiomesDataProvider.java | 38 +++++------ 10 files changed, 102 insertions(+), 85 deletions(-) diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BCLibEndBiomeSource.java b/src/main/java/org/betterx/bclib/api/v2/generator/BCLibEndBiomeSource.java index 92a3a574..9bb758d1 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BCLibEndBiomeSource.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BCLibEndBiomeSource.java @@ -189,7 +189,7 @@ public class BCLibEndBiomeSource extends BCLBiomeSource implements BiomeSourceWi } if (endCenterBiomePicker.isEmpty()) { BCLib.LOGGER.warning("No Center Island Biomes found. Forcing use of vanilla center."); - endCenterBiomePicker.addBiome(BCLBiomeRegistry.THE_END); + endCenterBiomePicker.addBiome(BiomeAPI.THE_END); endCenterBiomePicker.rebuild(); if (endCenterBiomePicker.isEmpty()) { BCLib.LOGGER.error("Unable to force vanilla central Island. Falling back to land Biomes..."); 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 321949de..a618ac50 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 @@ -45,12 +45,13 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.util.*; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; public class BCLBiomeBuilder { - private static final List> undoundBiomes = new LinkedList<>(); + static final ConcurrentLinkedQueue> UNBOUND_BIOMES = new ConcurrentLinkedQueue<>(); public static int calculateSkyColor(float temperature) { return OverworldBiomes.calculateSkyColor(temperature); @@ -957,12 +958,12 @@ public class BCLBiomeBuilder { return builder.generationSettings(fixGenerationSettings(genBuilder.build())).build(); } ); - undoundBiomes.add(unbound); + UNBOUND_BIOMES.add(unbound); return unbound; } public static void registerUnbound(BootstapContext context) { - undoundBiomes.forEach(u -> u.register(context)); - undoundBiomes.clear(); + UNBOUND_BIOMES.forEach(u -> u.register(context)); + UNBOUND_BIOMES.clear(); } } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java index c8bf772b..ba8e8bc0 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java @@ -1,6 +1,7 @@ package org.betterx.bclib.api.v2.levelgen.biomes; import org.betterx.bclib.BCLib; +import org.betterx.datagen.bclib.worldgen.VanillaBCLBiomesDataProvider; import org.betterx.worlds.together.WorldsTogether; import org.betterx.worlds.together.world.event.WorldBootstrap; @@ -43,59 +44,7 @@ public class BCLBiomeRegistry { * Have {@code Biomes.THE_VOID} as the reference biome. **/ public static final BCLBiome EMPTY_BIOME = new BCLBiome(Biomes.THE_VOID.location()); - - public static final BCLBiome THE_END = InternalBiomeAPI.wrapBiome( - Biomes.THE_END, - InternalBiomeAPI.OTHER_END_CENTER - ); - - public static final BCLBiome NETHER_WASTES_BIOME = InternalBiomeAPI.wrapBiome( - Biomes.NETHER_WASTES, - InternalBiomeAPI.OTHER_NETHER - ); - - public static final BCLBiome CRIMSON_FOREST_BIOME = InternalBiomeAPI.wrapBiome( - Biomes.CRIMSON_FOREST, - InternalBiomeAPI.OTHER_NETHER - ); - - public static final BCLBiome WARPED_FOREST_BIOME = InternalBiomeAPI.wrapBiome( - Biomes.WARPED_FOREST, - InternalBiomeAPI.OTHER_NETHER - ); - - public static final BCLBiome SOUL_SAND_VALLEY_BIOME = InternalBiomeAPI.wrapBiome( - Biomes.SOUL_SAND_VALLEY, - InternalBiomeAPI.OTHER_NETHER - ); - public static final BCLBiome BASALT_DELTAS_BIOME = InternalBiomeAPI.wrapBiome( - Biomes.BASALT_DELTAS, - InternalBiomeAPI.OTHER_NETHER - ); - - public static final BCLBiome END_MIDLANDS = InternalBiomeAPI.wrapBiome( - Biomes.END_MIDLANDS, - 0.5F, - InternalBiomeAPI.OTHER_END_LAND - ); - - public static final BCLBiome END_HIGHLANDS = InternalBiomeAPI.wrapBiome( - Biomes.END_HIGHLANDS, - END_MIDLANDS, - 8, - 0.5F, - InternalBiomeAPI.OTHER_END_LAND - ); - - public static final BCLBiome END_BARRENS = InternalBiomeAPI.wrapBiome( - Biomes.END_BARRENS, - InternalBiomeAPI.OTHER_END_BARRENS - ); - - public static final BCLBiome SMALL_END_ISLANDS = InternalBiomeAPI.wrapBiome( - Biomes.SMALL_END_ISLANDS, - InternalBiomeAPI.OTHER_END_VOID - ); + private static boolean didCreate = false; public static boolean isEmptyBiome(ResourceLocation l) { return l == null || Biomes.THE_VOID.location().equals(l); @@ -201,7 +150,7 @@ public class BCLBiomeRegistry { if (WorldBootstrap.getLastRegistryAccess() == null) return null; return WorldBootstrap.getLastRegistryAccess().registry(BCL_BIOMES_REGISTRY).orElse(null); } - + public static Stream> getAll(BiomeAPI.BiomeType dim) { Set> result = new HashSet<>(); @@ -239,4 +188,14 @@ public class BCLBiomeRegistry { public static void ensureStaticallyLoaded() { } + + public static void prepareForDatagen() { + if (didCreate) return; + didCreate = true; + + BUILTIN_BCL_BIOMES = BuiltInRegistries.registerSimple( + BCL_BIOMES_REGISTRY, + VanillaBCLBiomesDataProvider::bootstrap + ); + } } 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 aa7cc221..3c1c5d38 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 @@ -29,6 +29,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; @@ -56,6 +57,51 @@ import org.jetbrains.annotations.Nullable; public class BiomeAPI { + public static final BCLBiome THE_END = InternalBiomeAPI.wrapBiome( + Biomes.THE_END, + InternalBiomeAPI.OTHER_END_CENTER + ); + public static final BCLBiome NETHER_WASTES_BIOME = InternalBiomeAPI.wrapBiome( + Biomes.NETHER_WASTES, + InternalBiomeAPI.OTHER_NETHER + ); + public static final BCLBiome CRIMSON_FOREST_BIOME = InternalBiomeAPI.wrapBiome( + Biomes.CRIMSON_FOREST, + InternalBiomeAPI.OTHER_NETHER + ); + public static final BCLBiome WARPED_FOREST_BIOME = InternalBiomeAPI.wrapBiome( + Biomes.WARPED_FOREST, + InternalBiomeAPI.OTHER_NETHER + ); + public static final BCLBiome SOUL_SAND_VALLEY_BIOME = InternalBiomeAPI.wrapBiome( + Biomes.SOUL_SAND_VALLEY, + InternalBiomeAPI.OTHER_NETHER + ); + public static final BCLBiome BASALT_DELTAS_BIOME = InternalBiomeAPI.wrapBiome( + Biomes.BASALT_DELTAS, + InternalBiomeAPI.OTHER_NETHER + ); + public static final BCLBiome END_MIDLANDS = InternalBiomeAPI.wrapBiome( + Biomes.END_MIDLANDS, + 0.5F, + InternalBiomeAPI.OTHER_END_LAND + ); + public static final BCLBiome END_HIGHLANDS = InternalBiomeAPI.wrapBiome( + Biomes.END_HIGHLANDS, + END_MIDLANDS, + 8, + 0.5F, + InternalBiomeAPI.OTHER_END_LAND + ); + public static final BCLBiome END_BARRENS = InternalBiomeAPI.wrapBiome( + Biomes.END_BARRENS, + InternalBiomeAPI.OTHER_END_BARRENS + ); + public static final BCLBiome SMALL_END_ISLANDS = InternalBiomeAPI.wrapBiome( + Biomes.SMALL_END_ISLANDS, + InternalBiomeAPI.OTHER_END_VOID + ); + /** * Register {@link BCLBiome} instance and its {@link Biome} if necessary. * diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/UnboundBCLBiome.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/UnboundBCLBiome.java index ffda290b..e8876b94 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/UnboundBCLBiome.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/UnboundBCLBiome.java @@ -40,6 +40,7 @@ class UnboundBCLBiome extends BCLBiomeContainer { BiomeAPI.registerBuiltinBiomeAndOverrideIntendedDimension(bootstrapContext, biome, dim); } + BCLBiomeBuilder.UNBOUND_BIOMES.remove(this); registered = new BCLBiomeContainer<>(this.biome); return registered; } diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLConfigureFeature.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLConfigureFeature.java index c8fa4bb7..7817c54f 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLConfigureFeature.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLConfigureFeature.java @@ -19,18 +19,25 @@ import java.util.Optional; public class BCLConfigureFeature, FC extends FeatureConfiguration> { public static class Unregistered, FC extends FeatureConfiguration> extends BCLConfigureFeature { + private BCLConfigureFeature registered; + Unregistered(ResourceLocation id, Holder> configuredFeature) { super(id, configuredFeature, false); + registered = null; } @Override public BCLConfigureFeature register(BootstapContext> bootstrapContext) { + if (registered != null) return registered; + Holder> holder = BCLFeatureBuilder.register( bootstrapContext, id, configuredFeature.value() ); - return new BCLConfigureFeature<>(id, holder, true); + BCLFeatureBuilder.UNBOUND_FEATURES.remove(this); + registered = new BCLConfigureFeature<>(id, holder, true); + return registered; } } diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeature.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeature.java index 4fd05320..8f439f77 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeature.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeature.java @@ -19,21 +19,27 @@ import org.jetbrains.annotations.ApiStatus; public class BCLFeature, FC extends FeatureConfiguration> { public static class Unregistered, FC extends FeatureConfiguration> extends BCLFeature { + private BCLFeature registered; + Unregistered( BCLConfigureFeature configuredFeature, Holder placed, GenerationStep.Decoration decoration ) { super(configuredFeature, placed, decoration); + registered = null; } @Override public BCLFeature register(BootstapContext bootstrapContext) { + if (registered != null) return registered; Holder holder = BCLPlacedFeatureBuilder.register( bootstrapContext, getPlacedFeature() ); - return new BCLFeature<>(configuredFeature, holder, decoration); + BCLPlacedFeatureBuilder.UNBOUND_FEATURES.remove(this); + registered = new BCLFeature<>(configuredFeature, holder, decoration); + return registered; } } diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeatureBuilder.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeatureBuilder.java index 64e985d0..fe43baca 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeatureBuilder.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLFeatureBuilder.java @@ -42,6 +42,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Set; +import java.util.concurrent.ConcurrentLinkedQueue; import org.jetbrains.annotations.NotNull; @SuppressWarnings("unused") @@ -59,7 +60,7 @@ public abstract class BCLFeatureBuilder, FC extends Featur B create(ResourceLocation id, Holder> configuredFeature); } - private static List> UNBOUND_FEATURES = new LinkedList<>(); + static ConcurrentLinkedQueue> UNBOUND_FEATURES = new ConcurrentLinkedQueue<>(); /** * Starts a new {@link BCLFeature} builder. diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLPlacedFeatureBuilder.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLPlacedFeatureBuilder.java index 43d36fe1..a0b5d713 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLPlacedFeatureBuilder.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLPlacedFeatureBuilder.java @@ -13,15 +13,15 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import java.util.LinkedList; import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; public class BCLPlacedFeatureBuilder, FC extends FeatureConfiguration> extends CommonPlacedFeatureBuilder> { private final ResourceLocation featureID; private GenerationStep.Decoration decoration = GenerationStep.Decoration.VEGETAL_DECORATION; private final BCLConfigureFeature cFeature; - private static final List UNBOUND_FEATURES = new LinkedList<>(); + static final ConcurrentLinkedQueue UNBOUND_FEATURES = new ConcurrentLinkedQueue<>(); private BCLPlacedFeatureBuilder( ResourceLocation featureID, diff --git a/src/main/java/org/betterx/datagen/bclib/worldgen/VanillaBCLBiomesDataProvider.java b/src/main/java/org/betterx/datagen/bclib/worldgen/VanillaBCLBiomesDataProvider.java index 1dc9ff43..62397579 100644 --- a/src/main/java/org/betterx/datagen/bclib/worldgen/VanillaBCLBiomesDataProvider.java +++ b/src/main/java/org/betterx/datagen/bclib/worldgen/VanillaBCLBiomesDataProvider.java @@ -2,19 +2,15 @@ package org.betterx.datagen.bclib.worldgen; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; +import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; public class VanillaBCLBiomesDataProvider { private static boolean didBootstrap = false; public static void create() { - BCLBiomeRegistry.BUILTIN_BCL_BIOMES = BuiltInRegistries.registerSimple( - BCLBiomeRegistry.BCL_BIOMES_REGISTRY, - VanillaBCLBiomesDataProvider::bootstrap - ); - + BCLBiomeRegistry.prepareForDatagen(); bootstrap(BCLBiomeRegistry.BUILTIN_BCL_BIOMES); } @@ -23,35 +19,35 @@ public class VanillaBCLBiomesDataProvider { didBootstrap = true; - Registry.register(reg, BCLBiomeRegistry.SMALL_END_ISLANDS.getBCLBiomeKey(), BCLBiomeRegistry.SMALL_END_ISLANDS); - Registry.register(reg, BCLBiomeRegistry.END_BARRENS.getBCLBiomeKey(), BCLBiomeRegistry.END_BARRENS); - Registry.register(reg, BCLBiomeRegistry.END_HIGHLANDS.getBCLBiomeKey(), BCLBiomeRegistry.END_HIGHLANDS); - Registry.register(reg, BCLBiomeRegistry.END_MIDLANDS.getBCLBiomeKey(), BCLBiomeRegistry.END_MIDLANDS); - Registry.register(reg, BCLBiomeRegistry.THE_END.getBCLBiomeKey(), BCLBiomeRegistry.THE_END); + Registry.register(reg, BiomeAPI.SMALL_END_ISLANDS.getBCLBiomeKey(), BiomeAPI.SMALL_END_ISLANDS); + Registry.register(reg, BiomeAPI.END_BARRENS.getBCLBiomeKey(), BiomeAPI.END_BARRENS); + Registry.register(reg, BiomeAPI.END_HIGHLANDS.getBCLBiomeKey(), BiomeAPI.END_HIGHLANDS); + Registry.register(reg, BiomeAPI.END_MIDLANDS.getBCLBiomeKey(), BiomeAPI.END_MIDLANDS); + Registry.register(reg, BiomeAPI.THE_END.getBCLBiomeKey(), BiomeAPI.THE_END); Registry.register( reg, - BCLBiomeRegistry.BASALT_DELTAS_BIOME.getBCLBiomeKey(), - BCLBiomeRegistry.BASALT_DELTAS_BIOME + BiomeAPI.BASALT_DELTAS_BIOME.getBCLBiomeKey(), + BiomeAPI.BASALT_DELTAS_BIOME ); Registry.register( reg, - BCLBiomeRegistry.SOUL_SAND_VALLEY_BIOME.getBCLBiomeKey(), - BCLBiomeRegistry.SOUL_SAND_VALLEY_BIOME + BiomeAPI.SOUL_SAND_VALLEY_BIOME.getBCLBiomeKey(), + BiomeAPI.SOUL_SAND_VALLEY_BIOME ); Registry.register( reg, - BCLBiomeRegistry.WARPED_FOREST_BIOME.getBCLBiomeKey(), - BCLBiomeRegistry.WARPED_FOREST_BIOME + BiomeAPI.WARPED_FOREST_BIOME.getBCLBiomeKey(), + BiomeAPI.WARPED_FOREST_BIOME ); Registry.register( reg, - BCLBiomeRegistry.CRIMSON_FOREST_BIOME.getBCLBiomeKey(), - BCLBiomeRegistry.CRIMSON_FOREST_BIOME + BiomeAPI.CRIMSON_FOREST_BIOME.getBCLBiomeKey(), + BiomeAPI.CRIMSON_FOREST_BIOME ); Registry.register( reg, - BCLBiomeRegistry.NETHER_WASTES_BIOME.getBCLBiomeKey(), - BCLBiomeRegistry.NETHER_WASTES_BIOME + BiomeAPI.NETHER_WASTES_BIOME.getBCLBiomeKey(), + BiomeAPI.NETHER_WASTES_BIOME ); return Registry.register(reg, BCLBiomeRegistry.EMPTY_BIOME.getBCLBiomeKey(), BCLBiomeRegistry.EMPTY_BIOME); }