[Changes] Adapted BCLPlacedFeatureBuilder
for DataGen pass
This commit is contained in:
parent
2e60364029
commit
271c974929
8 changed files with 93 additions and 69 deletions
|
@ -55,12 +55,12 @@ public class BCLConfigureFeature<F extends Feature<FC>, FC extends FeatureConfig
|
|||
}
|
||||
|
||||
|
||||
public BCLPlacedFeatureBuilder<F, FC> place(BCLPlacedFeatureBuilder.Context ctx) {
|
||||
return place(ctx, this.id);
|
||||
public BCLPlacedFeatureBuilder<F, FC> place() {
|
||||
return place(this.id);
|
||||
}
|
||||
|
||||
public BCLPlacedFeatureBuilder<F, FC> place(BCLPlacedFeatureBuilder.Context ctx, ResourceLocation id) {
|
||||
return BCLPlacedFeatureBuilder.place(ctx, id, this);
|
||||
public BCLPlacedFeatureBuilder<F, FC> place(ResourceLocation id) {
|
||||
return BCLPlacedFeatureBuilder.place(id, this);
|
||||
}
|
||||
|
||||
static <F extends Feature<FC>, FC extends FeatureConfiguration> BCLConfigureFeature<F, FC> create(Holder<ConfiguredFeature<FC, F>> registeredFeature) {
|
||||
|
|
|
@ -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<F extends Feature<FC>, FC extends FeatureConfiguration> {
|
||||
public static class Unregistered<F extends Feature<FC>, FC extends FeatureConfiguration> extends BCLFeature<F, FC> {
|
||||
Unregistered(
|
||||
BCLConfigureFeature<F, FC> configuredFeature,
|
||||
Holder<PlacedFeature> placed,
|
||||
GenerationStep.Decoration decoration
|
||||
) {
|
||||
super(configuredFeature, placed, decoration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BCLFeature<F, FC> register(BootstapContext<PlacedFeature> bootstrapContext) {
|
||||
Holder<PlacedFeature> holder = BCLPlacedFeatureBuilder.register(
|
||||
bootstrapContext,
|
||||
getPlacedFeature()
|
||||
);
|
||||
return new BCLFeature<>(configuredFeature, holder, decoration);
|
||||
}
|
||||
}
|
||||
|
||||
public static final Feature<PlaceFacingBlockConfig> PLACE_BLOCK = register(
|
||||
BCLib.makeID("place_block"),
|
||||
new PlaceBlockFeature<>(PlaceFacingBlockConfig.CODEC)
|
||||
|
@ -102,4 +122,8 @@ public class BCLFeature<F extends Feature<FC>, FC extends FeatureConfiguration>
|
|||
) {
|
||||
return Registry.register(BuiltInRegistries.FEATURE, location, feature);
|
||||
}
|
||||
|
||||
public BCLFeature<F, FC> register(BootstapContext<PlacedFeature> bootstrapContext) {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,6 +59,8 @@ public abstract class BCLFeatureBuilder<F extends Feature<FC>, FC extends Featur
|
|||
B create(ResourceLocation id, Holder<ConfiguredFeature<FC, F>> configuredFeature);
|
||||
}
|
||||
|
||||
private static List<BCLConfigureFeature.Unregistered<?, ?>> ALL_UNREGISTERED = new LinkedList<>();
|
||||
|
||||
/**
|
||||
* Starts a new {@link BCLFeature} builder.
|
||||
*
|
||||
|
@ -273,7 +275,7 @@ public abstract class BCLFeatureBuilder<F extends Feature<FC>, FC extends Featur
|
|||
}
|
||||
|
||||
public BCLConfigureFeature.Unregistered<F, FC> build() {
|
||||
return buildAndCreateHolder(
|
||||
final var res = buildAndCreateHolder(
|
||||
(featureID, holder) -> new BCLConfigureFeature.Unregistered<>(featureID, holder),
|
||||
(featureID, cFeature) -> (FullReferenceHolder<ConfiguredFeature<FC, F>>) (Object) FullReferenceHolder.create(
|
||||
Registries.CONFIGURED_FEATURE,
|
||||
|
@ -281,6 +283,12 @@ public abstract class BCLFeatureBuilder<F extends Feature<FC>, FC extends Featur
|
|||
cFeature
|
||||
)
|
||||
);
|
||||
ALL_UNREGISTERED.add(res);
|
||||
return res;
|
||||
}
|
||||
|
||||
public static void registerAll(BootstapContext<ConfiguredFeature<?, ?>> bootstapContext) {
|
||||
ALL_UNREGISTERED.forEach(u -> u.register(bootstapContext));
|
||||
}
|
||||
|
||||
public BCLInlinePlacedBuilder<F, FC> inlinePlace() {
|
||||
|
@ -290,7 +298,7 @@ public abstract class BCLFeatureBuilder<F extends Feature<FC>, FC extends Featur
|
|||
|
||||
public Holder<PlacedFeature> inlinePlace(BCLInlinePlacedBuilder<F, FC> placer) {
|
||||
BCLConfigureFeature<F, FC> f = buildInline();
|
||||
return placer.build(f);
|
||||
return placer.build(f).getPlacedFeature();
|
||||
}
|
||||
|
||||
public static class AsOre extends BCLFeatureBuilder<OreFeature, OreConfiguration> {
|
||||
|
@ -914,7 +922,7 @@ public abstract class BCLFeatureBuilder<F extends Feature<FC>, 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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<F extends Feature<FC>, FC extends FeatureCon
|
|||
* @return created {@link PlacedFeature} instance.
|
||||
*/
|
||||
@Override
|
||||
public Holder<PlacedFeature> build() {
|
||||
public BCLFeature.Unregistered<F, FC> build() {
|
||||
return build(cFeature);
|
||||
}
|
||||
|
||||
|
@ -57,18 +58,13 @@ public class BCLInlinePlacedBuilder<F extends Feature<FC>, FC extends FeatureCon
|
|||
*
|
||||
* @return created {@link PlacedFeature} instance.
|
||||
*/
|
||||
public Holder<PlacedFeature> build(BCLConfigureFeature feature) {
|
||||
return build(feature.configuredFeature);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a new inline (not registered) {@link PlacedFeature}.
|
||||
*
|
||||
* @return created {@link PlacedFeature} instance.
|
||||
*/
|
||||
public Holder<PlacedFeature> build(Holder<ConfiguredFeature<FC, F>> feature) {
|
||||
public BCLFeature.Unregistered<F, FC> build(BCLConfigureFeature feature) {
|
||||
PlacementModifier[] modifiers = modifications.toArray(new PlacementModifier[modifications.size()]);
|
||||
return PlacementUtils.inlinePlaced((Holder<ConfiguredFeature<?, ?>>) (Object) feature, modifiers);
|
||||
Holder<PlacedFeature> holder = PlacementUtils.inlinePlaced(
|
||||
feature.configuredFeature,
|
||||
modifiers
|
||||
);
|
||||
return new BCLFeature.Unregistered<>(feature, holder, GenerationStep.Decoration.VEGETAL_DECORATION);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -83,7 +79,7 @@ public class BCLInlinePlacedBuilder<F extends Feature<FC>, 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) {
|
||||
|
|
|
@ -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<F extends Feature<FC>, FC extends FeatureConfiguration> extends CommonPlacedFeatureBuilder<F, FC, BCLPlacedFeatureBuilder<F, FC>> {
|
||||
private final ResourceLocation featureID;
|
||||
private GenerationStep.Decoration decoration = GenerationStep.Decoration.VEGETAL_DECORATION;
|
||||
private final BCLConfigureFeature<F, FC> cFeature;
|
||||
protected final BCLPlacedFeatureBuilder.Context ctx;
|
||||
|
||||
private BCLPlacedFeatureBuilder(
|
||||
Context ctx,
|
||||
ResourceLocation featureID,
|
||||
BCLConfigureFeature<F, FC> cFeature
|
||||
) {
|
||||
this.ctx = ctx;
|
||||
this.featureID = featureID;
|
||||
this.cFeature = cFeature;
|
||||
}
|
||||
|
@ -48,11 +48,10 @@ public class BCLPlacedFeatureBuilder<F extends Feature<FC>, FC extends FeatureCo
|
|||
* @return {@link CommonPlacedFeatureBuilder} instance.
|
||||
*/
|
||||
public static <F extends Feature<FC>, FC extends FeatureConfiguration> BCLPlacedFeatureBuilder<F, FC> place(
|
||||
Context ctx,
|
||||
ResourceLocation featureID,
|
||||
Holder<ConfiguredFeature<FC, F>> holder
|
||||
) {
|
||||
return place(ctx, featureID, BCLConfigureFeature.create(holder));
|
||||
return place(featureID, BCLConfigureFeature.create(holder));
|
||||
}
|
||||
|
||||
|
||||
|
@ -64,43 +63,36 @@ public class BCLPlacedFeatureBuilder<F extends Feature<FC>, FC extends FeatureCo
|
|||
* @return {@link CommonPlacedFeatureBuilder} instance.
|
||||
*/
|
||||
static <F extends Feature<FC>, FC extends FeatureConfiguration> BCLPlacedFeatureBuilder<F, FC> place(
|
||||
Context ctx,
|
||||
ResourceLocation featureID,
|
||||
BCLConfigureFeature<F, FC> cFeature
|
||||
) {
|
||||
return new BCLPlacedFeatureBuilder(ctx, featureID, cFeature);
|
||||
return new BCLPlacedFeatureBuilder(featureID, cFeature);
|
||||
}
|
||||
|
||||
public static <F extends Feature<FC>, FC extends FeatureConfiguration> BCLPlacedFeatureBuilder<F, FC> place(
|
||||
BCLPlacedFeatureBuilder.Context ctx,
|
||||
ResourceLocation configuredFeature
|
||||
) {
|
||||
ResourceKey<ConfiguredFeature<?, ?>> key = ResourceKey.create(
|
||||
Registries.CONFIGURED_FEATURE,
|
||||
configuredFeature
|
||||
);
|
||||
Holder<ConfiguredFeature<FC, F>> holder = (Holder<ConfiguredFeature<FC, F>>) (Object) ctx.bootstrapContext
|
||||
.lookup(Registries.CONFIGURED_FEATURE)
|
||||
.get(key);
|
||||
var cFeature = new BCLConfigureFeature<F, FC>(configuredFeature, holder, false);
|
||||
return new BCLPlacedFeatureBuilder<F, FC>(ctx, configuredFeature, cFeature);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Builds a new {@link BCLFeature} instance.
|
||||
*
|
||||
* @return created {@link BCLFeature} instance.
|
||||
*/
|
||||
public Holder<PlacedFeature> build() {
|
||||
public BCLFeature.Unregistered<F, FC> build() {
|
||||
final ResourceKey<PlacedFeature> key = ResourceKey.create(Registries.PLACED_FEATURE, featureID);
|
||||
PlacementUtils.register(
|
||||
ctx.bootstrapContext,
|
||||
key,
|
||||
PlacedFeature pFeature = new PlacedFeature(
|
||||
(Holder<ConfiguredFeature<?, ?>>) (Object) cFeature.configuredFeature,
|
||||
modifications
|
||||
List.copyOf(modifications)
|
||||
);
|
||||
return ctx.bootstrapContext.lookup(Registries.PLACED_FEATURE).get(key).orElseThrow();
|
||||
FullReferenceHolder<PlacedFeature> holder = FullReferenceHolder.create(
|
||||
Registries.PLACED_FEATURE,
|
||||
featureID,
|
||||
pFeature
|
||||
);
|
||||
return new BCLFeature.Unregistered<>(cFeature, holder, decoration);
|
||||
}
|
||||
|
||||
public static Holder<PlacedFeature> register(
|
||||
BootstapContext<PlacedFeature> bootstrapContext,
|
||||
Holder<PlacedFeature> holder
|
||||
) {
|
||||
return bootstrapContext.register(holder.unwrapKey().orElseThrow(), holder.value());
|
||||
}
|
||||
|
||||
|
||||
|
@ -110,11 +102,7 @@ public class BCLPlacedFeatureBuilder<F extends Feature<FC>, FC extends FeatureCo
|
|||
*
|
||||
* @return created {@link BCLFeature} instance.
|
||||
*/
|
||||
public BCLFeature<F, FC> buildAndRegister() {
|
||||
Holder<PlacedFeature> p = build();
|
||||
return new BCLFeature(cFeature, p, decoration);
|
||||
}
|
||||
|
||||
public record Context(BootstapContext<PlacedFeature> bootstrapContext) {
|
||||
public BCLFeature<F, FC> buildAndRegister(BootstapContext<PlacedFeature> bootstapContext) {
|
||||
return build().register(bootstapContext);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<F extends Feature<FC>, FC extends Feat
|
|||
*
|
||||
* @return created {@link PlacedFeature} instance.
|
||||
*/
|
||||
abstract Holder<PlacedFeature> build();
|
||||
abstract BCLFeature.Unregistered<F, FC> build();
|
||||
}
|
||||
|
|
|
@ -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<ConfiguredFeature<?, ?>> bootstrapContext) {
|
||||
BCLib.LOGGER.info("Bootstrap CONFIGUREDFeatures");
|
||||
Holder<ConfiguredFeature<?, ?>> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<RandomPatchFeature, RandomPatchConfiguration> YELLOW_PLACED;
|
||||
static BCLFeature<RandomPatchFeature, RandomPatchConfiguration> YELLOW_PLACED = TestConfiguredFeatures
|
||||
.YELLOW_FEATURE
|
||||
.place()
|
||||
.decoration(GenerationStep.Decoration.VEGETAL_DECORATION)
|
||||
.vanillaNetherGround(8)
|
||||
.isEmptyAndOnNetherGround()
|
||||
.build();
|
||||
|
||||
public static void bootstrap(BootstapContext<PlacedFeature> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue