Added first test code for new StructreFeature building
This commit is contained in:
parent
3c746a8dc4
commit
86a3480ce0
7 changed files with 74 additions and 15 deletions
|
@ -1,6 +1,7 @@
|
|||
package ru.bclib.api.biomes;
|
||||
|
||||
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.particles.ParticleOptions;
|
||||
import net.minecraft.data.BuiltinRegistries;
|
||||
import net.minecraft.data.worldgen.BiomeDefaultFeatures;
|
||||
|
@ -500,7 +501,7 @@ public class BCLBiomeBuilder {
|
|||
* @param feature {@link PlacedFeature}.
|
||||
* @return same {@link BCLBiomeBuilder} instance.
|
||||
*/
|
||||
public BCLBiomeBuilder feature(Decoration decoration, PlacedFeature feature) {
|
||||
public BCLBiomeBuilder feature(Decoration decoration, Holder<PlacedFeature> feature) {
|
||||
getGeneration().addFeature(decoration, feature);
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import net.minecraft.world.item.Item;
|
|||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import ru.bclib.mixin.common.DiggerItemAccessor;
|
||||
|
@ -38,6 +39,18 @@ public class TagAPI {
|
|||
.findAny()
|
||||
.orElse(TagKey.create(registry.key(), id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or create {@link Block} {@link TagKey} with mod namespace.
|
||||
*
|
||||
* @param modID - {@link String} mod namespace (mod id);
|
||||
* @param name - {@link String} tag name.
|
||||
* @return {@link Block} {@link TagKey}.
|
||||
*/
|
||||
public static TagKey<Biome> makeBiomeTag(String modID, String name) {
|
||||
return TagKey.create(Registry.BIOME_REGISTRY, new ResourceLocation(modID, name));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get or create {@link Block} {@link TagKey} with mod namespace.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package ru.bclib.mixin.common;
|
||||
|
||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||
import net.minecraft.world.level.levelgen.feature.StructureFeature;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||
|
||||
@Mixin(StructureFeature.class)
|
||||
public interface StructureFeatureAccessor {
|
||||
@Invoker
|
||||
static <F extends StructureFeature<?>> F callRegister(String name, F structureFeature, GenerationStep.Decoration step) {
|
||||
throw new RuntimeException("Unexpected call");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package ru.bclib.mixin.common;
|
||||
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.data.worldgen.StructureFeatures;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.StructureFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||
|
||||
@Mixin(StructureFeatures.class)
|
||||
public interface StructureFeaturesAccessor {
|
||||
@Invoker
|
||||
static <FC extends FeatureConfiguration, F extends StructureFeature<FC>> Holder<ConfiguredStructureFeature<?, ?>> callRegister(ResourceKey<ConfiguredStructureFeature<?, ?>> resourceKey, ConfiguredStructureFeature<FC, F> configuredStructureFeature) {
|
||||
throw new RuntimeException("Unexpected call");
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package ru.bclib.world.features;
|
||||
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.data.BuiltinRegistries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
|
|
|
@ -1,22 +1,27 @@
|
|||
package ru.bclib.world.structures;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import net.fabricmc.fabric.api.structure.v1.FabricStructureBuilder;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.QuartPos;
|
||||
import net.minecraft.data.BuiltinRegistries;
|
||||
import net.minecraft.data.worldgen.StructureFeatures;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.data.worldgen.StructureSets;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.StructureFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
|
||||
import net.minecraft.world.level.levelgen.structure.StructureSet;
|
||||
import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier;
|
||||
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement;
|
||||
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType;
|
||||
import ru.bclib.api.tag.TagAPI;
|
||||
import ru.bclib.mixin.common.StructureFeatureAccessor;
|
||||
import ru.bclib.mixin.common.StructureFeaturesAccessor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
@ -24,11 +29,14 @@ import java.util.Random;
|
|||
public class BCLStructureFeature {
|
||||
private static final Random RANDOM = new Random(354);
|
||||
private final StructureFeature<NoneFeatureConfiguration> structure;
|
||||
private final ConfiguredStructureFeature<?, ?> featureConfigured;
|
||||
private final Holder<ConfiguredStructureFeature<?, ?>> featureConfigured;
|
||||
private final GenerationStep.Decoration featureStep;
|
||||
private final List<ResourceLocation> biomes = Lists.newArrayList();
|
||||
private final ResourceLocation id;
|
||||
|
||||
public final TagKey<Biome> biomeTag;
|
||||
public final ResourceKey<ConfiguredStructureFeature<?, ?>> structureKey;
|
||||
public final ResourceKey<StructureSet> structureSetKey;
|
||||
|
||||
public BCLStructureFeature(ResourceLocation id, StructureFeature<NoneFeatureConfiguration> structure, GenerationStep.Decoration step, int spacing, int separation) {
|
||||
this.id = id;
|
||||
this.featureStep = step;
|
||||
|
@ -42,14 +50,15 @@ public class BCLStructureFeature {
|
|||
//public static final StructureFeature<NoneFeatureConfiguration> JUNGLE_TEMPLE =
|
||||
// StructureFeature.register("jungle_pyramid", new JunglePyramidFeature(NoneFeatureConfiguration.CODEC), GenerationStep.Decoration.SURFACE_STRUCTURES);
|
||||
//
|
||||
|
||||
final RandomSpreadStructurePlacement spreadConfig = new RandomSpreadStructurePlacement(spacing, separation, RandomSpreadType.LINEAR, RANDOM.nextInt(8192));
|
||||
this.structure = FabricStructureBuilder
|
||||
.create(id, structure)
|
||||
.step(step)
|
||||
.defaultConfig(spacing, separation, RANDOM.nextInt(8192))
|
||||
.register();
|
||||
this.featureConfigured = this.structure.configured(NoneFeatureConfiguration.NONE);
|
||||
BuiltinRegistries.register(BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE, id, this.featureConfigured);
|
||||
this.structureKey = ResourceKey.create(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY, id);
|
||||
this.structureSetKey = ResourceKey.create(Registry.STRUCTURE_SET_REGISTRY, id);
|
||||
|
||||
this.biomeTag = TagAPI.makeBiomeTag(id.getNamespace(), "has_structure/"+id.getPath());
|
||||
this.structure = StructureFeatureAccessor.callRegister(id.toString(), structure, step);
|
||||
this.featureConfigured = StructureFeaturesAccessor.callRegister(structureKey, this.structure.configured(NoneFeatureConfiguration.NONE, biomeTag));
|
||||
StructureSets.register(structureSetKey, featureConfigured, spreadConfig);
|
||||
//TODO: 1.18 check if structures are added correctly
|
||||
//FlatChunkGeneratorConfigAccessor.getStructureToFeatures().put(this.structure, this.featureConfigured);
|
||||
}
|
||||
|
|
|
@ -42,7 +42,9 @@
|
|||
"AnvilMenuMixin",
|
||||
"TagLoaderMixin",
|
||||
"MainMixin",
|
||||
"BiomeAccessor"
|
||||
"BiomeAccessor",
|
||||
"StructureFeatureAccessor",
|
||||
"StructureFeaturesAccessor"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue