Feature API usage
This commit is contained in:
parent
823108aa62
commit
6a6f29bf99
9 changed files with 62 additions and 170 deletions
|
@ -4,6 +4,7 @@ import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import ru.bclib.api.WorldDataAPI;
|
import ru.bclib.api.WorldDataAPI;
|
||||||
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
import ru.bclib.util.Logger;
|
import ru.bclib.util.Logger;
|
||||||
import ru.betterend.api.BetterEndPlugin;
|
import ru.betterend.api.BetterEndPlugin;
|
||||||
import ru.betterend.config.Configs;
|
import ru.betterend.config.Configs;
|
||||||
|
@ -66,6 +67,11 @@ public class BetterEnd implements ModInitializer {
|
||||||
ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L);
|
ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L);
|
||||||
ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y));
|
ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BiomeAPI.registerEndBiomeModification((biomeID, biome) -> {
|
||||||
|
EndStructures.addBiomeStructures(biomeID, biome);
|
||||||
|
EndFeatures.addBiomeFeatures(biomeID, biome);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ResourceLocation makeID(String path) {
|
public static ResourceLocation makeID(String path) {
|
||||||
|
|
|
@ -33,8 +33,8 @@ import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.ServerLevelAccessor;
|
import net.minecraft.world.level.ServerLevelAccessor;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import ru.bclib.api.biomes.BiomeAPI;
|
|
||||||
import ru.bclib.api.TagAPI;
|
import ru.bclib.api.TagAPI;
|
||||||
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
import ru.bclib.util.BlocksHelper;
|
import ru.bclib.util.BlocksHelper;
|
||||||
import ru.bclib.util.MHelper;
|
import ru.bclib.util.MHelper;
|
||||||
import ru.bclib.world.biomes.BCLBiome;
|
import ru.bclib.world.biomes.BCLBiome;
|
||||||
|
|
|
@ -1,12 +1,7 @@
|
||||||
package ru.betterend.integration.byg;
|
package ru.betterend.integration.byg;
|
||||||
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import ru.bclib.api.TagAPI;
|
|
||||||
import ru.bclib.integration.ModIntegration;
|
import ru.bclib.integration.ModIntegration;
|
||||||
import ru.betterend.integration.EndBiomeIntegration;
|
import ru.betterend.integration.EndBiomeIntegration;
|
||||||
import ru.betterend.integration.Integrations;
|
|
||||||
import ru.betterend.integration.byg.biomes.BYGBiomes;
|
|
||||||
import ru.betterend.integration.byg.features.BYGFeatures;
|
|
||||||
|
|
||||||
public class BYGIntegration extends ModIntegration implements EndBiomeIntegration {
|
public class BYGIntegration extends ModIntegration implements EndBiomeIntegration {
|
||||||
public BYGIntegration() {
|
public BYGIntegration() {
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
package ru.betterend.mixin.common;
|
|
||||||
|
|
||||||
import net.minecraft.world.level.biome.BiomeGenerationSettings;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Mixin(BiomeGenerationSettings.class)
|
|
||||||
public interface BiomeGenerationSettingsAccessor {
|
|
||||||
@Accessor("features")
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> be_getFeatures();
|
|
||||||
|
|
||||||
@Accessor("features")
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
void be_setFeatures(List<List<Supplier<ConfiguredFeature<?, ?>>>> features);
|
|
||||||
|
|
||||||
@Accessor("structureStarts")
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
List<Supplier<ConfiguredStructureFeature<?, ?>>> be_getStructures();
|
|
||||||
|
|
||||||
@Accessor("structureStarts")
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
void be_setStructures(List<Supplier<ConfiguredStructureFeature<?, ?>>> structures);
|
|
||||||
}
|
|
|
@ -3,12 +3,11 @@ package ru.betterend.registry;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
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 ru.bclib.api.BiomeAPI;
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
import ru.bclib.world.biomes.BCLBiome;
|
import ru.bclib.world.biomes.BCLBiome;
|
||||||
import ru.bclib.world.generator.BiomeMap;
|
|
||||||
import ru.bclib.world.generator.BiomePicker;
|
import ru.bclib.world.generator.BiomePicker;
|
||||||
|
import ru.bclib.world.generator.map.hex.HexBiomeMap;
|
||||||
import ru.betterend.config.Configs;
|
import ru.betterend.config.Configs;
|
||||||
import ru.betterend.util.FeaturesHelper;
|
|
||||||
import ru.betterend.world.biome.EndBiome;
|
import ru.betterend.world.biome.EndBiome;
|
||||||
import ru.betterend.world.biome.air.BiomeIceStarfield;
|
import ru.betterend.world.biome.air.BiomeIceStarfield;
|
||||||
import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome;
|
import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome;
|
||||||
|
@ -41,7 +40,8 @@ import ru.betterend.world.generator.GeneratorOptions;
|
||||||
|
|
||||||
public class EndBiomes {
|
public class EndBiomes {
|
||||||
public static final BiomePicker CAVE_BIOMES = new BiomePicker();
|
public static final BiomePicker CAVE_BIOMES = new BiomePicker();
|
||||||
private static BiomeMap caveBiomeMap;
|
private static HexBiomeMap caveBiomeMap;
|
||||||
|
private static long lastSeed;
|
||||||
|
|
||||||
// Better End Land
|
// Better End Land
|
||||||
public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new FoggyMushroomlandBiome(), BiomeType.LAND);
|
public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new FoggyMushroomlandBiome(), BiomeType.LAND);
|
||||||
|
@ -79,10 +79,10 @@ public class EndBiomes {
|
||||||
public static void onWorldLoad(long seed, Registry<Biome> registry) {
|
public static void onWorldLoad(long seed, Registry<Biome> registry) {
|
||||||
CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry));
|
CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry));
|
||||||
CAVE_BIOMES.rebuild();
|
CAVE_BIOMES.rebuild();
|
||||||
if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) {
|
if (caveBiomeMap == null || lastSeed != seed) {
|
||||||
caveBiomeMap = new BiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES);
|
caveBiomeMap = new HexBiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES);
|
||||||
|
lastSeed = seed;
|
||||||
}
|
}
|
||||||
FeaturesHelper.addFeatures(registry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
package ru.betterend.registry;
|
package ru.betterend.registry;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
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.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||||
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
||||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.Feature;
|
import net.minecraft.world.level.levelgen.feature.Feature;
|
||||||
import net.minecraft.world.level.levelgen.feature.configurations.CountConfiguration;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
||||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||||
import net.minecraft.world.level.levelgen.placement.FeatureDecorator;
|
import net.minecraft.world.level.levelgen.placement.CountPlacement;
|
||||||
import ru.bclib.api.BiomeAPI;
|
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||||
|
import net.minecraft.world.level.levelgen.placement.PlacementModifier;
|
||||||
|
import ru.bclib.api.biomes.BCLBiomeBuilder;
|
||||||
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
import ru.bclib.world.biomes.BCLBiome;
|
import ru.bclib.world.biomes.BCLBiome;
|
||||||
import ru.bclib.world.biomes.BCLBiomeDef;
|
|
||||||
import ru.bclib.world.features.BCLFeature;
|
import ru.bclib.world.features.BCLFeature;
|
||||||
import ru.bclib.world.features.DefaultFeature;
|
import ru.bclib.world.features.DefaultFeature;
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
|
@ -81,12 +80,8 @@ import ru.betterend.world.features.trees.MossyGlowshroomFeature;
|
||||||
import ru.betterend.world.features.trees.PythadendronTreeFeature;
|
import ru.betterend.world.features.trees.PythadendronTreeFeature;
|
||||||
import ru.betterend.world.features.trees.TenaneaFeature;
|
import ru.betterend.world.features.trees.TenaneaFeature;
|
||||||
import ru.betterend.world.features.trees.UmbrellaTreeFeature;
|
import ru.betterend.world.features.trees.UmbrellaTreeFeature;
|
||||||
import ru.betterend.world.generator.GeneratorOptions;
|
|
||||||
import ru.betterend.world.surface.UmbraSurfaceBuilder;
|
import ru.betterend.world.surface.UmbraSurfaceBuilder;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class EndFeatures {
|
public class EndFeatures {
|
||||||
// Trees //
|
// Trees //
|
||||||
public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3);
|
public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3);
|
||||||
|
@ -295,9 +290,7 @@ public class EndFeatures {
|
||||||
|
|
||||||
private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) {
|
private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) {
|
||||||
OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY);
|
OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY);
|
||||||
ConfiguredFeature<?, ?> configured = layer
|
PlacedFeature configured = layer.configured(FeatureConfiguration.NONE).placed(new PlacementModifier[]{CountPlacement.of(count)});
|
||||||
.configured(FeatureConfiguration.NONE)
|
|
||||||
.decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count)));
|
|
||||||
return new BCLFeature(BetterEnd.makeID(name), layer, GenerationStep.Decoration.UNDERGROUND_ORES, configured);
|
return new BCLFeature(BetterEnd.makeID(name), layer, GenerationStep.Decoration.UNDERGROUND_ORES, configured);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,75 +298,46 @@ public class EndFeatures {
|
||||||
return registerLayer(name, material.stone, radius, minY, maxY, count);
|
return registerLayer(name, material.stone, radius, minY, maxY, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerBiomeFeatures(ResourceLocation id, Biome biome, List<List<Supplier<ConfiguredFeature<?, ?>>>> features) {
|
public static void addBiomeFeatures(ResourceLocation id, Biome biome) {
|
||||||
if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
|
if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GeneratorOptions.removeChorusFromVanillaBiomes()) {
|
BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP);
|
||||||
if (id.getNamespace().equals("minecraft")) {
|
|
||||||
String path = id.getPath();
|
|
||||||
if (path.equals("end_highlands") || path.equals("end_midlands") || path.equals("small_end_islands")) {
|
|
||||||
int pos = GenerationStep.Decoration.VEGETAL_DECORATION.ordinal();
|
|
||||||
if (pos < features.size()) {
|
|
||||||
List<Supplier<ConfiguredFeature<?, ?>>> list = features.get(pos);
|
|
||||||
// If only chorus plants are enabled
|
|
||||||
if (list.size() == 1) {
|
|
||||||
features.get(pos).clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addFeature(FLAVOLITE_LAYER, features);
|
|
||||||
addFeature(THALLASIUM_ORE, features);
|
|
||||||
addFeature(ENDER_ORE, features);
|
|
||||||
addFeature(CRASHED_SHIP, features);
|
|
||||||
|
|
||||||
BCLBiome bclbiome = BiomeAPI.getBiome(id);
|
BCLBiome bclbiome = BiomeAPI.getBiome(id);
|
||||||
boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome);
|
boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome);
|
||||||
if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) {
|
if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) {
|
||||||
if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) {
|
if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) {
|
||||||
addFeature(ROUND_CAVE, features);
|
// TODO replace caves with carvers
|
||||||
addFeature(TUNEL_CAVE, features);
|
BiomeAPI.addBiomeFeatures(biome, ROUND_CAVE, TUNEL_CAVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature();
|
// TODO restore biome structures
|
||||||
|
/*BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature();
|
||||||
if (feature != null) {
|
if (feature != null) {
|
||||||
addFeature(feature, features);
|
addFeature(feature, features);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addDefaultFeatures(BCLBiomeDef def) {
|
public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) {
|
||||||
def.addFeature(FLAVOLITE_LAYER);
|
builder.feature(FLAVOLITE_LAYER);
|
||||||
def.addFeature(THALLASIUM_ORE);
|
builder.feature(THALLASIUM_ORE);
|
||||||
def.addFeature(ENDER_ORE);
|
builder.feature(ENDER_ORE);
|
||||||
def.addFeature(CRASHED_SHIP);
|
builder.feature(CRASHED_SHIP);
|
||||||
|
|
||||||
if (def.getID().getPath().endsWith("_cave")) {
|
if (biomeID.getPath().endsWith("_cave")) {
|
||||||
return;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasCaves = def.getCustomData("has_caves", true);
|
// TODO replace cave features with carvers
|
||||||
hasCaves = Configs.BIOME_CONFIG.getBoolean(def.getID(), "hasCaves", hasCaves);
|
|
||||||
if (hasCaves) {
|
if (hasCaves) {
|
||||||
def.addFeature(ROUND_CAVE);
|
builder.feature(ROUND_CAVE);
|
||||||
def.addFeature(TUNEL_CAVE);
|
builder.feature(TUNEL_CAVE);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addFeature(BCLFeature feature, List<List<Supplier<ConfiguredFeature<?, ?>>>> features) {
|
return builder;
|
||||||
int index = feature.getFeatureStep().ordinal();
|
|
||||||
if (features.size() > index) {
|
|
||||||
features.get(index).add(() -> feature.getFeatureConfigured());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
List<Supplier<ConfiguredFeature<?, ?>>> newFeature = Lists.newArrayList();
|
|
||||||
newFeature.add(() -> feature.getFeatureConfigured());
|
|
||||||
features.add(newFeature);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register() {}
|
public static void register() {}
|
||||||
|
|
|
@ -4,8 +4,8 @@ import net.minecraft.core.Registry;
|
||||||
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.feature.ConfiguredStructureFeature;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.StructurePieceType;
|
import net.minecraft.world.level.levelgen.feature.StructurePieceType;
|
||||||
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
import ru.bclib.world.structures.BCLStructureFeature;
|
import ru.bclib.world.structures.BCLStructureFeature;
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
import ru.betterend.world.structures.features.EternalPortalStructure;
|
import ru.betterend.world.structures.features.EternalPortalStructure;
|
||||||
|
@ -22,22 +22,21 @@ import ru.betterend.world.structures.piece.NBTPiece;
|
||||||
import ru.betterend.world.structures.piece.PaintedMountainPiece;
|
import ru.betterend.world.structures.piece.PaintedMountainPiece;
|
||||||
import ru.betterend.world.structures.piece.VoxelPiece;
|
import ru.betterend.world.structures.piece.VoxelPiece;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
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);
|
||||||
public static final StructurePieceType MOUNTAIN_PIECE = register("mountain_piece", CrystalMountainPiece::new);
|
public static final StructurePieceType MOUNTAIN_PIECE = register("mountain_piece", CrystalMountainPiece::new);
|
||||||
public static final StructurePieceType CAVE_PIECE = register("cave_piece", CavePiece::new);
|
public static final StructurePieceType CAVE_PIECE = register("cave_piece", CavePiece::new);
|
||||||
public static final StructurePieceType LAKE_PIECE = register("lake_piece", LakePiece::new);
|
public static final StructurePieceType LAKE_PIECE = register("lake_piece", LakePiece::new);
|
||||||
public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register(
|
public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register("painted_mountain_piece", PaintedMountainPiece::new);
|
||||||
"painted_mountain_piece",
|
|
||||||
PaintedMountainPiece::new
|
|
||||||
);
|
|
||||||
public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new);
|
public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new);
|
||||||
|
|
||||||
public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature(BetterEnd.makeID(
|
public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature(
|
||||||
"giant_mossy_glowshroom"), new GiantMossyGlowshroomStructure(), Decoration.SURFACE_STRUCTURES, 16, 8);
|
BetterEnd.makeID("giant_mossy_glowshroom"),
|
||||||
|
new GiantMossyGlowshroomStructure(),
|
||||||
|
Decoration.SURFACE_STRUCTURES,
|
||||||
|
16,
|
||||||
|
8
|
||||||
|
);
|
||||||
public static final BCLStructureFeature MEGALAKE = new BCLStructureFeature(
|
public static final BCLStructureFeature MEGALAKE = new BCLStructureFeature(
|
||||||
BetterEnd.makeID("megalake"),
|
BetterEnd.makeID("megalake"),
|
||||||
new MegaLakeStructure(),
|
new MegaLakeStructure(),
|
||||||
|
@ -59,8 +58,13 @@ public class EndStructures {
|
||||||
3,
|
3,
|
||||||
2
|
2
|
||||||
);
|
);
|
||||||
public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature(BetterEnd.makeID(
|
public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature(
|
||||||
"painted_mountain"), new PaintedMountainStructure(), Decoration.RAW_GENERATION, 3, 2);
|
BetterEnd.makeID("painted_mountain"),
|
||||||
|
new PaintedMountainStructure(),
|
||||||
|
Decoration.RAW_GENERATION,
|
||||||
|
3,
|
||||||
|
2
|
||||||
|
);
|
||||||
public static final BCLStructureFeature ETERNAL_PORTAL = new BCLStructureFeature(
|
public static final BCLStructureFeature ETERNAL_PORTAL = new BCLStructureFeature(
|
||||||
BetterEnd.makeID("eternal_portal"),
|
BetterEnd.makeID("eternal_portal"),
|
||||||
new EternalPortalStructure(),
|
new EternalPortalStructure(),
|
||||||
|
@ -76,22 +80,15 @@ public class EndStructures {
|
||||||
8
|
8
|
||||||
);
|
);
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {}
|
||||||
}
|
|
||||||
|
|
||||||
private static StructurePieceType register(String id, StructurePieceType pieceType) {
|
private static StructurePieceType register(String id, StructurePieceType pieceType) {
|
||||||
return Registry.register(Registry.STRUCTURE_PIECE, BetterEnd.makeID(id), pieceType);
|
return Registry.register(Registry.STRUCTURE_PIECE, BetterEnd.makeID(id), pieceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerBiomeStructures(ResourceLocation id, Biome biome, Collection<Supplier<ConfiguredStructureFeature<?, ?>>> structures) {
|
public static void addBiomeStructures(ResourceLocation biomeID, Biome biome) {
|
||||||
if (!id.getPath().contains("mountain") && !id.getPath().contains("lake")) {
|
if (!biomeID.getPath().contains("mountain") && !biomeID.getPath().contains("lake")) {
|
||||||
addStructure(ETERNAL_PORTAL, structures);
|
BiomeAPI.addBiomeStructure(BiomeAPI.getBiomeKey(biome), ETERNAL_PORTAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addStructure(BCLStructureFeature feature, Collection<Supplier<ConfiguredStructureFeature<?, ?>>> structures) {
|
|
||||||
structures.add(() -> {
|
|
||||||
return feature.getFeatureConfigured();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,10 @@ import net.minecraft.world.food.FoodProperties;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.level.biome.Biome;
|
import net.minecraft.world.level.biome.Biome;
|
||||||
import net.minecraft.world.level.biome.Biome.BiomeCategory;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.LeavesBlock;
|
import net.minecraft.world.level.block.LeavesBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour.Properties;
|
import net.minecraft.world.level.block.state.BlockBehaviour.Properties;
|
||||||
import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration;
|
|
||||||
import net.minecraft.world.level.material.Material;
|
import net.minecraft.world.level.material.Material;
|
||||||
import ru.bclib.api.BonemealAPI;
|
import ru.bclib.api.BonemealAPI;
|
||||||
import ru.bclib.api.ComposterAPI;
|
import ru.bclib.api.ComposterAPI;
|
||||||
|
@ -133,8 +131,9 @@ public class EndTags {
|
||||||
TagAPI.addTag(ALLOYING_COPPER, Items.COPPER_ORE, Items.DEEPSLATE_COPPER_ORE, Items.RAW_COPPER);
|
TagAPI.addTag(ALLOYING_COPPER, Items.COPPER_ORE, Items.DEEPSLATE_COPPER_ORE, Items.RAW_COPPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO make getter for biome top blocks
|
||||||
public static void addTerrainTags(Registry<Biome> biomeRegistry) {
|
public static void addTerrainTags(Registry<Biome> biomeRegistry) {
|
||||||
biomeRegistry.forEach((biome) -> {
|
/*biomeRegistry.forEach((biome) -> {
|
||||||
if (biome.getBiomeCategory() == BiomeCategory.THEEND) {
|
if (biome.getBiomeCategory() == BiomeCategory.THEEND) {
|
||||||
SurfaceBuilderConfiguration config = biome.getGenerationSettings().getSurfaceBuilderConfig();
|
SurfaceBuilderConfiguration config = biome.getGenerationSettings().getSurfaceBuilderConfig();
|
||||||
Block under = config.getUnderMaterial().getBlock();
|
Block under = config.getUnderMaterial().getBlock();
|
||||||
|
@ -143,6 +142,6 @@ public class EndTags {
|
||||||
TagAPI.addTag(TagAPI.BLOCK_END_GROUND, surface);
|
TagAPI.addTag(TagAPI.BLOCK_END_GROUND, surface);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround);
|
TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
package ru.betterend.util;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import net.minecraft.core.Registry;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.level.biome.Biome;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
|
||||||
import ru.bclib.api.BiomeAPI;
|
|
||||||
import ru.betterend.config.Configs;
|
|
||||||
import ru.betterend.mixin.common.BiomeGenerationSettingsAccessor;
|
|
||||||
import ru.betterend.registry.EndFeatures;
|
|
||||||
import ru.betterend.registry.EndStructures;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class FeaturesHelper {
|
|
||||||
public static void addFeatures(Registry<Biome> biomeRegistry) {
|
|
||||||
biomeRegistry.forEach((biome) -> {
|
|
||||||
ResourceLocation key = biomeRegistry.getKey(biome);
|
|
||||||
if (BiomeAPI.isEndBiome(key)) {
|
|
||||||
BiomeGenerationSettingsAccessor accessor = (BiomeGenerationSettingsAccessor) biome.getGenerationSettings();
|
|
||||||
List<Supplier<ConfiguredStructureFeature<?, ?>>> structures = Lists.newArrayList(accessor.be_getStructures());
|
|
||||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> preFeatures = accessor.be_getFeatures();
|
|
||||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> features = new ArrayList<>(preFeatures.size());
|
|
||||||
preFeatures.forEach((list) -> features.add(Lists.newArrayList(list)));
|
|
||||||
|
|
||||||
EndFeatures.registerBiomeFeatures(key, biome, features);
|
|
||||||
EndStructures.registerBiomeStructures(key, biome, structures);
|
|
||||||
|
|
||||||
accessor.be_setFeatures(features);
|
|
||||||
accessor.be_setStructures(structures);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Configs.BIOME_CONFIG.saveChanges();
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue