[Feature] New End-Village with some special loot
This commit is contained in:
parent
d588240c7f
commit
bc75a07d75
22 changed files with 185 additions and 4 deletions
|
@ -5,6 +5,7 @@ import org.betterx.bclib.api.v2.levelgen.structures.BCLStructureBuilder;
|
||||||
import org.betterx.betterend.BetterEnd;
|
import org.betterx.betterend.BetterEnd;
|
||||||
import org.betterx.betterend.world.structures.features.*;
|
import org.betterx.betterend.world.structures.features.*;
|
||||||
import org.betterx.betterend.world.structures.piece.*;
|
import org.betterx.betterend.world.structures.piece.*;
|
||||||
|
import org.betterx.betterend.world.structures.village.VillagePools;
|
||||||
import org.betterx.worlds.together.tag.v3.TagManager;
|
import org.betterx.worlds.together.tag.v3.TagManager;
|
||||||
|
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
|
@ -13,7 +14,12 @@ import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.level.biome.Biome;
|
import net.minecraft.world.level.biome.Biome;
|
||||||
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
||||||
|
import net.minecraft.world.level.levelgen.Heightmap;
|
||||||
|
import net.minecraft.world.level.levelgen.VerticalAnchor;
|
||||||
|
import net.minecraft.world.level.levelgen.heightproviders.ConstantHeight;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.TerrainAdjustment;
|
||||||
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType;
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.structures.JigsawStructure;
|
||||||
|
|
||||||
public class EndStructures {
|
public class EndStructures {
|
||||||
public static final StructurePieceType VOXEL_PIECE = register("voxel", VoxelPiece::new);
|
public static final StructurePieceType VOXEL_PIECE = register("voxel", VoxelPiece::new);
|
||||||
|
@ -65,6 +71,17 @@ public class EndStructures {
|
||||||
.randomPlacement(16, 8)
|
.randomPlacement(16, 8)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
public static final BCLStructure<JigsawStructure> END_VILLAGE = BCLStructureBuilder
|
||||||
|
.jigsaw(BetterEnd.makeID("end_village"))
|
||||||
|
.startPool(VillagePools.START)
|
||||||
|
.adjustment(TerrainAdjustment.BEARD_THIN)
|
||||||
|
.projectStartToHeightmap(Heightmap.Types.WORLD_SURFACE_WG)
|
||||||
|
.maxDepth(6)
|
||||||
|
.startHeight(ConstantHeight.of(VerticalAnchor.absolute(0)))
|
||||||
|
.step(Decoration.SURFACE_STRUCTURES)
|
||||||
|
.randomPlacement(34, 8)
|
||||||
|
.build();
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import org.betterx.bclib.api.v2.levelgen.surface.SurfaceRuleBuilder;
|
||||||
import org.betterx.bclib.interfaces.SurfaceMaterialProvider;
|
import org.betterx.bclib.interfaces.SurfaceMaterialProvider;
|
||||||
import org.betterx.betterend.registry.EndBlocks;
|
import org.betterx.betterend.registry.EndBlocks;
|
||||||
import org.betterx.betterend.registry.EndSounds;
|
import org.betterx.betterend.registry.EndSounds;
|
||||||
|
import org.betterx.betterend.registry.EndStructures;
|
||||||
import org.betterx.betterend.world.biome.EndBiome;
|
import org.betterx.betterend.world.biome.EndBiome;
|
||||||
|
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
@ -31,6 +32,7 @@ public class DustWastelandsBiome extends EndBiome.Config {
|
||||||
.loop(EndSounds.AMBIENT_DUST_WASTELANDS)
|
.loop(EndSounds.AMBIENT_DUST_WASTELANDS)
|
||||||
.music(EndSounds.MUSIC_OPENSPACE)
|
.music(EndSounds.MUSIC_OPENSPACE)
|
||||||
.structure(BiomeTags.HAS_END_CITY)
|
.structure(BiomeTags.HAS_END_CITY)
|
||||||
|
.structure(EndStructures.END_VILLAGE.biomeTag)
|
||||||
.spawn(EntityType.ENDERMAN, 50, 1, 2);
|
.spawn(EntityType.ENDERMAN, 50, 1, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
package org.betterx.betterend.world.structures.village;
|
||||||
|
|
||||||
|
import org.betterx.bclib.api.v2.levelgen.structures.StructurePools;
|
||||||
|
import org.betterx.betterend.BetterEnd;
|
||||||
|
|
||||||
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.core.HolderGetter;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
|
import net.minecraft.data.worldgen.BootstapContext;
|
||||||
|
import net.minecraft.data.worldgen.Pools;
|
||||||
|
import net.minecraft.data.worldgen.ProcessorLists;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class VillagePools {
|
||||||
|
public static ResourceKey<StructureTemplatePool> TERMINATORS_KEY = StructurePools
|
||||||
|
.createKey(BetterEnd.makeID("village/terminators"));
|
||||||
|
public static ResourceKey<StructureTemplatePool> START = StructurePools
|
||||||
|
.createKey(BetterEnd.makeID("village/center_piece"));
|
||||||
|
public static ResourceKey<StructureTemplatePool> HOUSES_KEY = StructurePools
|
||||||
|
.createKey(BetterEnd.makeID("village/houses"));
|
||||||
|
public static ResourceKey<StructureTemplatePool> STREET_KEY = StructurePools
|
||||||
|
.createKey(BetterEnd.makeID("village/streets"));
|
||||||
|
public static ResourceKey<StructureTemplatePool> STREET_DECO_KEY = StructurePools
|
||||||
|
.createKey(BetterEnd.makeID("village/street_decorations"));
|
||||||
|
public static ResourceKey<StructureTemplatePool> DECORATIONS_KEY = StructurePools
|
||||||
|
.createKey(BetterEnd.makeID("village/decorations"));
|
||||||
|
|
||||||
|
public static void bootstrap(BootstapContext<StructureTemplatePool> ctx) {
|
||||||
|
final HolderGetter<StructureProcessorList> processorGetter = ctx.lookup(Registries.PROCESSOR_LIST);
|
||||||
|
final HolderGetter<PlacedFeature> featureGetter = ctx.lookup(Registries.PLACED_FEATURE);
|
||||||
|
final HolderGetter<StructureTemplatePool> poolGetter = ctx.lookup(Registries.TEMPLATE_POOL);
|
||||||
|
HolderGetter<Biome> biomeGetter = ctx.lookup(Registries.BIOME);
|
||||||
|
|
||||||
|
final Holder.Reference<StructureTemplatePool> emptyPool = poolGetter.getOrThrow(Pools.EMPTY);
|
||||||
|
final Holder.Reference<StructureTemplatePool> terminatorPool = poolGetter.getOrThrow(VillagePools.TERMINATORS_KEY);
|
||||||
|
|
||||||
|
final Holder.Reference<StructureProcessorList> emptyProcessor = processorGetter.getOrThrow(ProcessorLists.EMPTY);
|
||||||
|
ctx.register(VillagePools.TERMINATORS_KEY, new StructureTemplatePool(
|
||||||
|
emptyPool,
|
||||||
|
ImmutableList.of(Pair.of(
|
||||||
|
StructurePools.single(
|
||||||
|
BetterEnd.makeID("village/terminators/stree_terminator_01"),
|
||||||
|
emptyProcessor
|
||||||
|
),
|
||||||
|
1
|
||||||
|
)),
|
||||||
|
StructureTemplatePool.Projection.TERRAIN_MATCHING
|
||||||
|
));
|
||||||
|
ctx.register(VillagePools.START, new StructureTemplatePool(
|
||||||
|
terminatorPool,
|
||||||
|
ImmutableList.of(Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/center/light_pyramid_01"), emptyProcessor),
|
||||||
|
1
|
||||||
|
)),
|
||||||
|
StructureTemplatePool.Projection.RIGID
|
||||||
|
));
|
||||||
|
ctx.register(VillagePools.HOUSES_KEY, new StructureTemplatePool(
|
||||||
|
terminatorPool,
|
||||||
|
ImmutableList.of(Pair.of(StructurePoolElement.empty(), 5), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_01"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_02"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_03"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_04"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_05"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_06"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/houses/small_house_07"), emptyProcessor),
|
||||||
|
1
|
||||||
|
)),
|
||||||
|
StructureTemplatePool.Projection.RIGID
|
||||||
|
));
|
||||||
|
ctx.register(VillagePools.STREET_KEY, new StructureTemplatePool(
|
||||||
|
terminatorPool,
|
||||||
|
ImmutableList.of(Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/streets/street_01"), emptyProcessor),
|
||||||
|
6
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/streets/street_02"), emptyProcessor),
|
||||||
|
4
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/streets/curve_01"), emptyProcessor),
|
||||||
|
3
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/streets/t_crossing_01"), emptyProcessor),
|
||||||
|
1
|
||||||
|
), Pair.of(
|
||||||
|
StructurePools.single(BetterEnd.makeID("village/streets/t_crossing_02"), emptyProcessor),
|
||||||
|
2
|
||||||
|
)),
|
||||||
|
StructureTemplatePool.Projection.TERRAIN_MATCHING
|
||||||
|
));
|
||||||
|
ctx.register(VillagePools.STREET_DECO_KEY, new StructureTemplatePool(
|
||||||
|
terminatorPool,
|
||||||
|
ImmutableList.of(
|
||||||
|
Pair.of(StructurePoolElement.empty(), 5),
|
||||||
|
Pair.of(
|
||||||
|
StructurePools.single(
|
||||||
|
BetterEnd.makeID("village/street_decoration/lamp_02"),
|
||||||
|
emptyProcessor
|
||||||
|
),
|
||||||
|
2
|
||||||
|
),
|
||||||
|
Pair.of(
|
||||||
|
StructurePools.single(
|
||||||
|
BetterEnd.makeID("village/street_decoration/lamp_05"),
|
||||||
|
emptyProcessor
|
||||||
|
),
|
||||||
|
1
|
||||||
|
)
|
||||||
|
),
|
||||||
|
StructureTemplatePool.Projection.RIGID
|
||||||
|
));
|
||||||
|
ctx.register(VillagePools.DECORATIONS_KEY, new StructureTemplatePool(
|
||||||
|
terminatorPool,
|
||||||
|
ImmutableList.of(),
|
||||||
|
StructureTemplatePool.Projection.RIGID
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import org.betterx.datagen.betterend.advancement.EndAdvancementDataProvider;
|
||||||
import org.betterx.datagen.betterend.recipes.EndRecipeDataProvider;
|
import org.betterx.datagen.betterend.recipes.EndRecipeDataProvider;
|
||||||
import org.betterx.datagen.betterend.worldgen.EndBiomesDataProvider;
|
import org.betterx.datagen.betterend.worldgen.EndBiomesDataProvider;
|
||||||
import org.betterx.datagen.betterend.worldgen.EndRegistriesDataProvider;
|
import org.betterx.datagen.betterend.worldgen.EndRegistriesDataProvider;
|
||||||
|
import org.betterx.datagen.betterend.worldgen.TemplatePoolDataProvider;
|
||||||
|
|
||||||
import net.minecraft.core.RegistrySetBuilder;
|
import net.minecraft.core.RegistrySetBuilder;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
|
@ -16,6 +17,7 @@ public class BetterEndDatagen implements DataGeneratorEntrypoint {
|
||||||
public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
|
public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
|
||||||
EndBiomesDataProvider.ensureStaticallyLoaded();
|
EndBiomesDataProvider.ensureStaticallyLoaded();
|
||||||
EndRecipeDataProvider.buildRecipes();
|
EndRecipeDataProvider.buildRecipes();
|
||||||
|
TemplatePoolDataProvider.buildStructures();
|
||||||
|
|
||||||
final FabricDataGenerator.Pack pack = dataGenerator.createPack();
|
final FabricDataGenerator.Pack pack = dataGenerator.createPack();
|
||||||
pack.addProvider(EndBiomesDataProvider::new);
|
pack.addProvider(EndBiomesDataProvider::new);
|
||||||
|
@ -27,8 +29,10 @@ public class BetterEndDatagen implements DataGeneratorEntrypoint {
|
||||||
pack.addProvider(EndItemTagDataProvider::new);
|
pack.addProvider(EndItemTagDataProvider::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildRegistry(RegistrySetBuilder registryBuilder) {
|
public void buildRegistry(RegistrySetBuilder registryBuilder) {
|
||||||
|
EndBiomesDataProvider.ensureStaticallyLoaded();
|
||||||
EndRegistrySupplier.INSTANCE.bootstrapRegistries(registryBuilder);
|
EndRegistrySupplier.INSTANCE.bootstrapRegistries(registryBuilder);
|
||||||
registryBuilder.add(Registries.BIOME, EndBiomesDataProvider::bootstrap);
|
registryBuilder.add(Registries.BIOME, EndBiomesDataProvider::bootstrap);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,7 @@ import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
|
||||||
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData;
|
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData;
|
||||||
import org.betterx.bclib.api.v3.datagen.RegistrySupplier;
|
import org.betterx.bclib.api.v3.datagen.RegistrySupplier;
|
||||||
import org.betterx.betterend.BetterEnd;
|
import org.betterx.betterend.BetterEnd;
|
||||||
import org.betterx.datagen.betterend.worldgen.ConfiguredFeatureDataProvider;
|
import org.betterx.datagen.betterend.worldgen.*;
|
||||||
import org.betterx.datagen.betterend.worldgen.EndBiomesDataProvider;
|
|
||||||
import org.betterx.datagen.betterend.worldgen.PlacedFeatureDataProvider;
|
|
||||||
import org.betterx.datagen.betterend.worldgen.StructureDataProvider;
|
|
||||||
import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule;
|
import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule;
|
||||||
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
|
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
|
||||||
|
|
||||||
|
@ -17,6 +14,7 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
||||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||||
import net.minecraft.world.level.levelgen.structure.Structure;
|
import net.minecraft.world.level.levelgen.structure.Structure;
|
||||||
import net.minecraft.world.level.levelgen.structure.StructureSet;
|
import net.minecraft.world.level.levelgen.structure.StructureSet;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -54,6 +52,11 @@ public class EndRegistrySupplier extends RegistrySupplier {
|
||||||
PlacedFeature.DIRECT_CODEC,
|
PlacedFeature.DIRECT_CODEC,
|
||||||
PlacedFeatureDataProvider::bootstrap
|
PlacedFeatureDataProvider::bootstrap
|
||||||
),
|
),
|
||||||
|
new RegistryInfo<>(
|
||||||
|
Registries.TEMPLATE_POOL,
|
||||||
|
StructureTemplatePool.DIRECT_CODEC,
|
||||||
|
TemplatePoolDataProvider::bootstrap
|
||||||
|
),
|
||||||
new RegistryInfo<>(
|
new RegistryInfo<>(
|
||||||
Registries.BIOME,
|
Registries.BIOME,
|
||||||
Biome.DIRECT_CODEC,
|
Biome.DIRECT_CODEC,
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package org.betterx.datagen.betterend.worldgen;
|
||||||
|
|
||||||
|
import org.betterx.betterend.world.structures.village.VillagePools;
|
||||||
|
|
||||||
|
import net.minecraft.data.worldgen.BootstapContext;
|
||||||
|
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
|
||||||
|
|
||||||
|
public class TemplatePoolDataProvider {
|
||||||
|
|
||||||
|
public static void buildStructures() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void bootstrap(BootstapContext<StructureTemplatePool> ctx) {
|
||||||
|
VillagePools.bootstrap(ctx);
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue