From 271c974929e4b7adf7237705e41961671636e453 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 30 Nov 2022 12:12:20 +0100 Subject: [PATCH] [Changes] Adapted `BCLPlacedFeatureBuilder` for DataGen pass --- .../features/BCLConfigureFeature.java | 8 +-- .../api/v3/levelgen/features/BCLFeature.java | 24 ++++++++ .../levelgen/features/BCLFeatureBuilder.java | 14 ++++- .../features/BCLInlinePlacedBuilder.java | 22 +++---- .../features/BCLPlacedFeatureBuilder.java | 60 ++++++++----------- .../features/CommonPlacedFeatureBuilder.java | 3 +- .../bclib/datagen/TestConfiguredFeatures.java | 14 ++++- .../bclib/datagen/TestPlacedFeatures.java | 17 +++--- 8 files changed, 93 insertions(+), 69 deletions(-) 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 e7eb07ee..c8fa4bb7 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 @@ -55,12 +55,12 @@ public class BCLConfigureFeature, FC extends FeatureConfig } - public BCLPlacedFeatureBuilder place(BCLPlacedFeatureBuilder.Context ctx) { - return place(ctx, this.id); + public BCLPlacedFeatureBuilder place() { + return place(this.id); } - public BCLPlacedFeatureBuilder place(BCLPlacedFeatureBuilder.Context ctx, ResourceLocation id) { - return BCLPlacedFeatureBuilder.place(ctx, id, this); + public BCLPlacedFeatureBuilder place(ResourceLocation id) { + return BCLPlacedFeatureBuilder.place(id, this); } static , FC extends FeatureConfiguration> BCLConfigureFeature create(Holder> registeredFeature) { 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 9e5964b9..4fd05320 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 @@ -7,6 +7,7 @@ import org.betterx.bclib.api.v3.levelgen.features.features.*; import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.feature.Feature; @@ -17,6 +18,25 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature; import org.jetbrains.annotations.ApiStatus; public class BCLFeature, FC extends FeatureConfiguration> { + public static class Unregistered, FC extends FeatureConfiguration> extends BCLFeature { + Unregistered( + BCLConfigureFeature configuredFeature, + Holder placed, + GenerationStep.Decoration decoration + ) { + super(configuredFeature, placed, decoration); + } + + @Override + public BCLFeature register(BootstapContext bootstrapContext) { + Holder holder = BCLPlacedFeatureBuilder.register( + bootstrapContext, + getPlacedFeature() + ); + return new BCLFeature<>(configuredFeature, holder, decoration); + } + } + public static final Feature PLACE_BLOCK = register( BCLib.makeID("place_block"), new PlaceBlockFeature<>(PlaceFacingBlockConfig.CODEC) @@ -102,4 +122,8 @@ public class BCLFeature, FC extends FeatureConfiguration> ) { return Registry.register(BuiltInRegistries.FEATURE, location, feature); } + + public BCLFeature register(BootstapContext bootstrapContext) { + return this; + } } 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 a7d435de..d7d9cb67 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 @@ -59,6 +59,8 @@ public abstract class BCLFeatureBuilder, FC extends Featur B create(ResourceLocation id, Holder> configuredFeature); } + private static List> ALL_UNREGISTERED = new LinkedList<>(); + /** * Starts a new {@link BCLFeature} builder. * @@ -273,7 +275,7 @@ public abstract class BCLFeatureBuilder, FC extends Featur } public BCLConfigureFeature.Unregistered build() { - return buildAndCreateHolder( + final var res = buildAndCreateHolder( (featureID, holder) -> new BCLConfigureFeature.Unregistered<>(featureID, holder), (featureID, cFeature) -> (FullReferenceHolder>) (Object) FullReferenceHolder.create( Registries.CONFIGURED_FEATURE, @@ -281,6 +283,12 @@ public abstract class BCLFeatureBuilder, FC extends Featur cFeature ) ); + ALL_UNREGISTERED.add(res); + return res; + } + + public static void registerAll(BootstapContext> bootstapContext) { + ALL_UNREGISTERED.forEach(u -> u.register(bootstapContext)); } public BCLInlinePlacedBuilder inlinePlace() { @@ -290,7 +298,7 @@ public abstract class BCLFeatureBuilder, FC extends Featur public Holder inlinePlace(BCLInlinePlacedBuilder placer) { BCLConfigureFeature f = buildInline(); - return placer.build(f); + return placer.build(f).getPlacedFeature(); } public static class AsOre extends BCLFeatureBuilder { @@ -914,7 +922,7 @@ public abstract class BCLFeatureBuilder, FC extends Featur if (isEmpty) blockFeature.isEmpty(); if (groundType != null) blockFeature.isOn(groundType); - return new RandomPatchConfiguration(tries, xzSpread, ySpread, blockFeature.build()); + return new RandomPatchConfiguration(tries, xzSpread, ySpread, blockFeature.build().getPlacedFeature()); } } diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLInlinePlacedBuilder.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLInlinePlacedBuilder.java index c825eb7a..71c3e112 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLInlinePlacedBuilder.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/BCLInlinePlacedBuilder.java @@ -3,6 +3,7 @@ package org.betterx.bclib.api.v3.levelgen.features; import net.minecraft.core.Holder; import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; @@ -48,7 +49,7 @@ public class BCLInlinePlacedBuilder, FC extends FeatureCon * @return created {@link PlacedFeature} instance. */ @Override - public Holder build() { + public BCLFeature.Unregistered build() { return build(cFeature); } @@ -57,18 +58,13 @@ public class BCLInlinePlacedBuilder, FC extends FeatureCon * * @return created {@link PlacedFeature} instance. */ - public Holder build(BCLConfigureFeature feature) { - return build(feature.configuredFeature); - } - - /** - * Builds a new inline (not registered) {@link PlacedFeature}. - * - * @return created {@link PlacedFeature} instance. - */ - public Holder build(Holder> feature) { + public BCLFeature.Unregistered build(BCLConfigureFeature feature) { PlacementModifier[] modifiers = modifications.toArray(new PlacementModifier[modifications.size()]); - return PlacementUtils.inlinePlaced((Holder>) (Object) feature, modifiers); + Holder holder = PlacementUtils.inlinePlaced( + feature.configuredFeature, + modifiers + ); + return new BCLFeature.Unregistered<>(feature, holder, GenerationStep.Decoration.VEGETAL_DECORATION); } /** @@ -83,7 +79,7 @@ public class BCLInlinePlacedBuilder, FC extends FeatureCon public BCLFeatureBuilder.RandomPatch inRandomPatch(ResourceLocation id) { - return BCLFeatureBuilder.startRandomPatch(id, build()); + return BCLFeatureBuilder.startRandomPatch(id, build().getPlacedFeature()); } public BCLFeatureBuilder.RandomPatch randomBonemealDistribution(ResourceLocation id) { 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 c11fbe0e..c375b3c5 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 @@ -1,9 +1,10 @@ package org.betterx.bclib.api.v3.levelgen.features; +import org.betterx.bclib.util.FullReferenceHolder; + import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; -import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.levelgen.GenerationStep; @@ -12,18 +13,17 @@ 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.List; + public class BCLPlacedFeatureBuilder, FC extends FeatureConfiguration> extends CommonPlacedFeatureBuilder> { private final ResourceLocation featureID; private GenerationStep.Decoration decoration = GenerationStep.Decoration.VEGETAL_DECORATION; private final BCLConfigureFeature cFeature; - protected final BCLPlacedFeatureBuilder.Context ctx; private BCLPlacedFeatureBuilder( - Context ctx, ResourceLocation featureID, BCLConfigureFeature cFeature ) { - this.ctx = ctx; this.featureID = featureID; this.cFeature = cFeature; } @@ -48,11 +48,10 @@ public class BCLPlacedFeatureBuilder, FC extends FeatureCo * @return {@link CommonPlacedFeatureBuilder} instance. */ public static , FC extends FeatureConfiguration> BCLPlacedFeatureBuilder place( - Context ctx, ResourceLocation featureID, Holder> holder ) { - return place(ctx, featureID, BCLConfigureFeature.create(holder)); + return place(featureID, BCLConfigureFeature.create(holder)); } @@ -64,43 +63,36 @@ public class BCLPlacedFeatureBuilder, FC extends FeatureCo * @return {@link CommonPlacedFeatureBuilder} instance. */ static , FC extends FeatureConfiguration> BCLPlacedFeatureBuilder place( - Context ctx, ResourceLocation featureID, BCLConfigureFeature cFeature ) { - return new BCLPlacedFeatureBuilder(ctx, featureID, cFeature); + return new BCLPlacedFeatureBuilder(featureID, cFeature); } - public static , FC extends FeatureConfiguration> BCLPlacedFeatureBuilder place( - BCLPlacedFeatureBuilder.Context ctx, - ResourceLocation configuredFeature - ) { - ResourceKey> key = ResourceKey.create( - Registries.CONFIGURED_FEATURE, - configuredFeature - ); - Holder> holder = (Holder>) (Object) ctx.bootstrapContext - .lookup(Registries.CONFIGURED_FEATURE) - .get(key); - var cFeature = new BCLConfigureFeature(configuredFeature, holder, false); - return new BCLPlacedFeatureBuilder(ctx, configuredFeature, cFeature); - } - - /** * Builds a new {@link BCLFeature} instance. * * @return created {@link BCLFeature} instance. */ - public Holder build() { + public BCLFeature.Unregistered build() { final ResourceKey key = ResourceKey.create(Registries.PLACED_FEATURE, featureID); - PlacementUtils.register( - ctx.bootstrapContext, - key, + PlacedFeature pFeature = new PlacedFeature( (Holder>) (Object) cFeature.configuredFeature, - modifications + List.copyOf(modifications) ); - return ctx.bootstrapContext.lookup(Registries.PLACED_FEATURE).get(key).orElseThrow(); + FullReferenceHolder holder = FullReferenceHolder.create( + Registries.PLACED_FEATURE, + featureID, + pFeature + ); + return new BCLFeature.Unregistered<>(cFeature, holder, decoration); + } + + public static Holder register( + BootstapContext bootstrapContext, + Holder holder + ) { + return bootstrapContext.register(holder.unwrapKey().orElseThrow(), holder.value()); } @@ -110,11 +102,7 @@ public class BCLPlacedFeatureBuilder, FC extends FeatureCo * * @return created {@link BCLFeature} instance. */ - public BCLFeature buildAndRegister() { - Holder p = build(); - return new BCLFeature(cFeature, p, decoration); - } - - public record Context(BootstapContext bootstrapContext) { + public BCLFeature buildAndRegister(BootstapContext bootstapContext) { + return build().register(bootstapContext); } } diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java index 76f1dac7..52c2b58d 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java @@ -6,7 +6,6 @@ import org.betterx.bclib.api.v3.levelgen.features.placement.*; import org.betterx.worlds.together.tag.v3.CommonBlockTags; import net.minecraft.core.Direction; -import net.minecraft.core.Holder; import net.minecraft.core.Vec3i; import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.resources.ResourceLocation; @@ -424,5 +423,5 @@ abstract class CommonPlacedFeatureBuilder, FC extends Feat * * @return created {@link PlacedFeature} instance. */ - abstract Holder build(); + abstract BCLFeature.Unregistered build(); } diff --git a/src/main/java/org/betterx/bclib/datagen/TestConfiguredFeatures.java b/src/main/java/org/betterx/bclib/datagen/TestConfiguredFeatures.java index 424142c0..a0c612f5 100644 --- a/src/main/java/org/betterx/bclib/datagen/TestConfiguredFeatures.java +++ b/src/main/java/org/betterx/bclib/datagen/TestConfiguredFeatures.java @@ -4,7 +4,10 @@ import org.betterx.bclib.BCLib; import org.betterx.bclib.api.v3.levelgen.features.BCLConfigureFeature; import org.betterx.bclib.api.v3.levelgen.features.BCLFeatureBuilder; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.RandomPatchFeature; @@ -19,9 +22,16 @@ public class TestConfiguredFeatures { .build(); public static void bootstrap(BootstapContext> bootstrapContext) { - BCLib.LOGGER.info("Bootstrap CONFIGUREDFeatures"); + Holder> holder = bootstrapContext.lookup(Registries.CONFIGURED_FEATURE) + .getOrThrow(ResourceKey.create( + Registries.CONFIGURED_FEATURE, + YELLOW_FEATURE.id + )); + + BCLib.LOGGER.info("Bootstrap CONFIGUREDFeatures" + holder); if (BCLibDatagen.ADD_TESTS && BCLib.isDevEnvironment()) { - YELLOW_FEATURE = YELLOW_FEATURE.register(bootstrapContext); + //YELLOW_FEATURE = YELLOW_FEATURE.register(bootstrapContext); + BCLFeatureBuilder.registerAll(bootstrapContext); } } } diff --git a/src/main/java/org/betterx/bclib/datagen/TestPlacedFeatures.java b/src/main/java/org/betterx/bclib/datagen/TestPlacedFeatures.java index 51376cf5..3a2d99be 100644 --- a/src/main/java/org/betterx/bclib/datagen/TestPlacedFeatures.java +++ b/src/main/java/org/betterx/bclib/datagen/TestPlacedFeatures.java @@ -2,7 +2,6 @@ package org.betterx.bclib.datagen; import org.betterx.bclib.BCLib; import org.betterx.bclib.api.v3.levelgen.features.BCLFeature; -import org.betterx.bclib.api.v3.levelgen.features.BCLPlacedFeatureBuilder; import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.world.level.levelgen.GenerationStep; @@ -11,19 +10,19 @@ import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConf import net.minecraft.world.level.levelgen.placement.PlacedFeature; public class TestPlacedFeatures { - static BCLFeature YELLOW_PLACED; + static BCLFeature YELLOW_PLACED = TestConfiguredFeatures + .YELLOW_FEATURE + .place() + .decoration(GenerationStep.Decoration.VEGETAL_DECORATION) + .vanillaNetherGround(8) + .isEmptyAndOnNetherGround() + .build(); public static void bootstrap(BootstapContext bootstrapContext) { BCLib.LOGGER.info("Bootstrap PLACEDFeatures"); if (BCLibDatagen.ADD_TESTS && BCLib.isDevEnvironment()) { - final BCLPlacedFeatureBuilder.Context buildContext = new BCLPlacedFeatureBuilder.Context(bootstrapContext); - YELLOW_PLACED = TestConfiguredFeatures.YELLOW_FEATURE - .place(buildContext) - .decoration(GenerationStep.Decoration.VEGETAL_DECORATION) - .vanillaNetherGround(8) - .isEmptyAndOnNetherGround() - .buildAndRegister(); + YELLOW_PLACED = YELLOW_PLACED.register(bootstrapContext); } } }