From 6a6f29bf9922ef134719e66bd3442bd7ee82f212 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 06:52:04 +0300 Subject: [PATCH] Feature API usage --- src/main/java/ru/betterend/BetterEnd.java | 6 ++ .../ru/betterend/entity/EndSlimeEntity.java | 2 +- .../integration/byg/BYGIntegration.java | 5 -- .../BiomeGenerationSettingsAccessor.java | 30 ------- .../java/ru/betterend/registry/EndBiomes.java | 14 +-- .../ru/betterend/registry/EndFeatures.java | 86 ++++++------------- .../ru/betterend/registry/EndStructures.java | 43 +++++----- .../java/ru/betterend/registry/EndTags.java | 7 +- .../ru/betterend/util/FeaturesHelper.java | 39 --------- 9 files changed, 62 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java delete mode 100644 src/main/java/ru/betterend/util/FeaturesHelper.java diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 1f0cf42f..531811b2 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -4,6 +4,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; import ru.bclib.api.WorldDataAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; import ru.betterend.api.BetterEndPlugin; 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.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) { diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index 2d995ba0..f44cb34c 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -33,8 +33,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index f5d9fcd8..dff88aed 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -1,12 +1,7 @@ package ru.betterend.integration.byg; -import net.minecraft.world.level.block.Block; -import ru.bclib.api.TagAPI; import ru.bclib.integration.ModIntegration; 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 BYGIntegration() { diff --git a/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java b/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java deleted file mode 100644 index 5ece436d..00000000 --- a/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java +++ /dev/null @@ -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>>> be_getFeatures(); - - @Accessor("features") - @Deprecated(forRemoval = true) - void be_setFeatures(List>>> features); - - @Accessor("structureStarts") - @Deprecated(forRemoval = true) - List>> be_getStructures(); - - @Accessor("structureStarts") - @Deprecated(forRemoval = true) - void be_setStructures(List>> structures); -} diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 455098c3..f40e5eed 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -3,12 +3,11 @@ package ru.betterend.registry; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; 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.generator.BiomeMap; import ru.bclib.world.generator.BiomePicker; +import ru.bclib.world.generator.map.hex.HexBiomeMap; import ru.betterend.config.Configs; -import ru.betterend.util.FeaturesHelper; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.biome.air.BiomeIceStarfield; import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome; @@ -41,7 +40,8 @@ import ru.betterend.world.generator.GeneratorOptions; public class EndBiomes { public static final BiomePicker CAVE_BIOMES = new BiomePicker(); - private static BiomeMap caveBiomeMap; + private static HexBiomeMap caveBiomeMap; + private static long lastSeed; // Better End 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 registry) { CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry)); CAVE_BIOMES.rebuild(); - if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) { - caveBiomeMap = new BiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES); + if (caveBiomeMap == null || lastSeed != seed) { + caveBiomeMap = new HexBiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES); + lastSeed = seed; } - FeaturesHelper.addFeatures(registry); } /** diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index e1aff6ad..afeb127b 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -1,21 +1,20 @@ package ru.betterend.registry; -import com.google.common.collect.Lists; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.GenerationStep; 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.configurations.CountConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.placement.FeatureDecorator; -import ru.bclib.api.BiomeAPI; +import net.minecraft.world.level.levelgen.placement.CountPlacement; +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.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.DefaultFeature; 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.TenaneaFeature; import ru.betterend.world.features.trees.UmbrellaTreeFeature; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.surface.UmbraSurfaceBuilder; -import java.util.List; -import java.util.function.Supplier; - public class EndFeatures { // Trees // 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) { OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY); - ConfiguredFeature configured = layer - .configured(FeatureConfiguration.NONE) - .decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count))); + PlacedFeature configured = layer.configured(FeatureConfiguration.NONE).placed(new PlacementModifier[]{CountPlacement.of(count)}); 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); } - public static void registerBiomeFeatures(ResourceLocation id, Biome biome, List>>> features) { + public static void addBiomeFeatures(ResourceLocation id, Biome biome) { if (id.getNamespace().equals(BetterEnd.MOD_ID)) { return; } - if (GeneratorOptions.removeChorusFromVanillaBiomes()) { - 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>> 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); + BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP); BCLBiome bclbiome = BiomeAPI.getBiome(id); boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome); if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) { if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) { - addFeature(ROUND_CAVE, features); - addFeature(TUNEL_CAVE, features); + // TODO replace caves with carvers + 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) { addFeature(feature, features); - } + }*/ } - public static void addDefaultFeatures(BCLBiomeDef def) { - def.addFeature(FLAVOLITE_LAYER); - def.addFeature(THALLASIUM_ORE); - def.addFeature(ENDER_ORE); - def.addFeature(CRASHED_SHIP); + public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) { + builder.feature(FLAVOLITE_LAYER); + builder.feature(THALLASIUM_ORE); + builder.feature(ENDER_ORE); + builder.feature(CRASHED_SHIP); - if (def.getID().getPath().endsWith("_cave")) { - return; + if (biomeID.getPath().endsWith("_cave")) { + return builder; } - boolean hasCaves = def.getCustomData("has_caves", true); - hasCaves = Configs.BIOME_CONFIG.getBoolean(def.getID(), "hasCaves", hasCaves); + // TODO replace cave features with carvers if (hasCaves) { - def.addFeature(ROUND_CAVE); - def.addFeature(TUNEL_CAVE); - } - } - - private static void addFeature(BCLFeature feature, List>>> features) { - int index = feature.getFeatureStep().ordinal(); - if (features.size() > index) { - features.get(index).add(() -> feature.getFeatureConfigured()); - } - else { - List>> newFeature = Lists.newArrayList(); - newFeature.add(() -> feature.getFeatureConfigured()); - features.add(newFeature); + builder.feature(ROUND_CAVE); + builder.feature(TUNEL_CAVE); } + + return builder; } public static void register() {} diff --git a/src/main/java/ru/betterend/registry/EndStructures.java b/src/main/java/ru/betterend/registry/EndStructures.java index 827db4a4..32edb605 100644 --- a/src/main/java/ru/betterend/registry/EndStructures.java +++ b/src/main/java/ru/betterend/registry/EndStructures.java @@ -4,8 +4,8 @@ import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; 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 ru.bclib.api.biomes.BiomeAPI; import ru.bclib.world.structures.BCLStructureFeature; import ru.betterend.BetterEnd; 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.VoxelPiece; -import java.util.Collection; -import java.util.function.Supplier; - public class EndStructures { 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 CAVE_PIECE = register("cave_piece", CavePiece::new); public static final StructurePieceType LAKE_PIECE = register("lake_piece", LakePiece::new); - public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register( - "painted_mountain_piece", - PaintedMountainPiece::new - ); + public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register("painted_mountain_piece", PaintedMountainPiece::new); public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new); - public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature(BetterEnd.makeID( - "giant_mossy_glowshroom"), new GiantMossyGlowshroomStructure(), Decoration.SURFACE_STRUCTURES, 16, 8); + public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature( + BetterEnd.makeID("giant_mossy_glowshroom"), + new GiantMossyGlowshroomStructure(), + Decoration.SURFACE_STRUCTURES, + 16, + 8 + ); public static final BCLStructureFeature MEGALAKE = new BCLStructureFeature( BetterEnd.makeID("megalake"), new MegaLakeStructure(), @@ -59,8 +58,13 @@ public class EndStructures { 3, 2 ); - public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature(BetterEnd.makeID( - "painted_mountain"), new PaintedMountainStructure(), Decoration.RAW_GENERATION, 3, 2); + public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature( + BetterEnd.makeID("painted_mountain"), + new PaintedMountainStructure(), + Decoration.RAW_GENERATION, + 3, + 2 + ); public static final BCLStructureFeature ETERNAL_PORTAL = new BCLStructureFeature( BetterEnd.makeID("eternal_portal"), new EternalPortalStructure(), @@ -76,22 +80,15 @@ public class EndStructures { 8 ); - public static void register() { - } + public static void register() {} private static StructurePieceType register(String id, StructurePieceType pieceType) { return Registry.register(Registry.STRUCTURE_PIECE, BetterEnd.makeID(id), pieceType); } - public static void registerBiomeStructures(ResourceLocation id, Biome biome, Collection>> structures) { - if (!id.getPath().contains("mountain") && !id.getPath().contains("lake")) { - addStructure(ETERNAL_PORTAL, structures); + public static void addBiomeStructures(ResourceLocation biomeID, Biome biome) { + if (!biomeID.getPath().contains("mountain") && !biomeID.getPath().contains("lake")) { + BiomeAPI.addBiomeStructure(BiomeAPI.getBiomeKey(biome), ETERNAL_PORTAL); } } - - private static void addStructure(BCLStructureFeature feature, Collection>> structures) { - structures.add(() -> { - return feature.getFeatureConfigured(); - }); - } } diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index 1a7c8c0d..569932b9 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -13,12 +13,10 @@ import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; 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.Blocks; import net.minecraft.world.level.block.LeavesBlock; 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 ru.bclib.api.BonemealAPI; 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); } + // TODO make getter for biome top blocks public static void addTerrainTags(Registry biomeRegistry) { - biomeRegistry.forEach((biome) -> { + /*biomeRegistry.forEach((biome) -> { if (biome.getBiomeCategory() == BiomeCategory.THEEND) { SurfaceBuilderConfiguration config = biome.getGenerationSettings().getSurfaceBuilderConfig(); Block under = config.getUnderMaterial().getBlock(); @@ -143,6 +142,6 @@ public class EndTags { TagAPI.addTag(TagAPI.BLOCK_END_GROUND, surface); } }); - TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround); + TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround);*/ } } diff --git a/src/main/java/ru/betterend/util/FeaturesHelper.java b/src/main/java/ru/betterend/util/FeaturesHelper.java deleted file mode 100644 index 5b2d799c..00000000 --- a/src/main/java/ru/betterend/util/FeaturesHelper.java +++ /dev/null @@ -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 biomeRegistry) { - biomeRegistry.forEach((biome) -> { - ResourceLocation key = biomeRegistry.getKey(biome); - if (BiomeAPI.isEndBiome(key)) { - BiomeGenerationSettingsAccessor accessor = (BiomeGenerationSettingsAccessor) biome.getGenerationSettings(); - List>> structures = Lists.newArrayList(accessor.be_getStructures()); - List>>> preFeatures = accessor.be_getFeatures(); - List>>> 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(); - } -} \ No newline at end of file