From 2367b5d5be09724fe2f18214f8b60b5f44e56591 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 05:51:51 +0300 Subject: [PATCH 01/56] Partial API calls fixes --- README.md | 4 +- .../blocks/entities/PedestalBlockEntity.java | 9 ++-- .../ru/betterend/entity/CubozoaEntity.java | 2 +- .../ru/betterend/entity/EndFishEntity.java | 2 +- .../ru/betterend/entity/EndSlimeEntity.java | 2 +- .../integration/EnderscapeIntegration.java | 2 +- .../integration/byg/BYGIntegration.java | 50 ++----------------- .../mixin/client/MusicTrackerMixin.java | 9 ++-- .../mixin/common/ServerLevelMixin.java | 2 +- 9 files changed, 20 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 120884de..633b9ac2 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ # Better End -Better End Mod for Fabric, MC 1.17.1 +Better End Mod for Fabric, MC 1.18 Importing: * Clone repo * Edit gradle.properties if necessary -* Run command line in folder: gradlew genSources eclipse (or Another-IDE-Name) +* Run command line in folder: gradlew genSources idea (or eclipse) * Import project to IDE Building: diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 75e85049..4a581bcf 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,6 +1,6 @@ package ru.betterend.blocks.entities; -import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; +//import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.Container; @@ -14,7 +14,8 @@ import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndItems; -public class PedestalBlockEntity extends BlockEntity implements Container, BlockEntityClientSerializable { +// TODO Fix client serialisation +public class PedestalBlockEntity extends BlockEntity implements Container/*, BlockEntityClientSerializable*/ { private ItemStack activeItem = ItemStack.EMPTY; private final int maxAge = 314; @@ -110,7 +111,7 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block fromTag(tag); } - @Override + /*@Override public CompoundTag save(CompoundTag tag) { tag.put("active_item", activeItem.save(new CompoundTag())); return super.save(tag); @@ -124,7 +125,7 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block @Override public CompoundTag toClientTag(CompoundTag tag) { return save(tag); - } + }*/ protected void fromTag(CompoundTag tag) { if (tag.contains("active_item")) { diff --git a/src/main/java/ru/betterend/entity/CubozoaEntity.java b/src/main/java/ru/betterend/entity/CubozoaEntity.java index 35937fda..60a6a0f8 100644 --- a/src/main/java/ru/betterend/entity/CubozoaEntity.java +++ b/src/main/java/ru/betterend/entity/CubozoaEntity.java @@ -26,7 +26,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndItems; diff --git a/src/main/java/ru/betterend/entity/EndFishEntity.java b/src/main/java/ru/betterend/entity/EndFishEntity.java index a347030e..a89adfd2 100644 --- a/src/main/java/ru/betterend/entity/EndFishEntity.java +++ b/src/main/java/ru/betterend/entity/EndFishEntity.java @@ -27,7 +27,7 @@ import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndItems; diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index e6339e9e..2d995ba0 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -33,7 +33,7 @@ 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.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; diff --git a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java index c8716469..c1be368b 100644 --- a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java +++ b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java @@ -4,8 +4,8 @@ import net.minecraft.core.MappedRegistry; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.integration.ModIntegration; import ru.bclib.world.features.BCLFeature; diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index 229e3cba..f5d9fcd8 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -15,61 +15,17 @@ public class BYGIntegration extends ModIntegration implements EndBiomeIntegratio @Override public void init() { - Block block = Integrations.BYG.getBlock("ivis_phylium"); + /*Block block = Integrations.BYG.getBlock("ivis_phylium"); if (block != null) { TagAPI.addTags(block, TagAPI.BLOCK_END_GROUND, TagAPI.BLOCK_GEN_TERRAIN); } BYGBlocks.register(); BYGFeatures.register(); - BYGBiomes.register(); + BYGBiomes.register();*/ } @Override public void addBiomes() { - BYGBiomes.addBiomes(); - - //Class biomeClass = this.getClass("corgiaoc.byg.common.world.biome.BYGEndBiome"); - //List biomes = this.getStaticFieldValue(biomeClass, "BYG_END_BIOMES"); - - /*if (biomes != null && biomeClass != null) { - biomes.forEach((obj) -> { - Biome biome = this.getAndExecuteRuntime(biomeClass, obj, "getBiome"); - if (biome != null) { - ResourceLocation biomeID = BuiltinRegistries.BIOME.getKey(biome); - BCLBiome endBiome = BiomeAPI.getBiome(biomeID); - Biome edge = this.getAndExecuteRuntime(biomeClass, obj, "getEdge"); - if (edge != null) { - ResourceLocation edgeID = BuiltinRegistries.BIOME.getKey(edge); - EndBiomes.LAND_BIOMES.removeMutableBiome(edgeID); - EndBiomes.VOID_BIOMES.removeMutableBiome(edgeID); - BCLBiome edgeBiome = BiomeAPI.getBiome(edgeID); - endBiome.setEdge(edgeBiome); - } - else { - Boolean isVoid = this.getAndExecuteRuntime(biomeClass, obj, "isVoid"); - if (isVoid != null && isVoid.booleanValue()) { - EndBiomes.LAND_BIOMES.removeMutableBiome(biomeID); - EndBiomes.VOID_BIOMES.addBiomeMutable(endBiome); - } - ShufflingList subBiomes = this.getAndExecuteRuntime( - biomeClass, - obj, - "getHills" - ); - if (subBiomes != null) { - subBiomes.stream().collect(Collectors.toList()).forEach((id) -> { - BCLBiome subBiome = BiomeAPI.getBiome(id); - EndBiomes.LAND_BIOMES.removeMutableBiome(id); - EndBiomes.VOID_BIOMES.removeMutableBiome(id); - if (!endBiome.containsSubBiome(subBiome)) { - EndBiomes.SUBBIOMES.add(subBiome); - endBiome.addSubBiome(subBiome); - } - }); - } - } - } - }); - }*/ + //BYGBiomes.addBiomes(); } } diff --git a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java index 5a53ce31..b3a31546 100644 --- a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.client.ClientOptions; import ru.betterend.world.biome.EndBiome; @@ -90,9 +90,10 @@ public abstract class MusicTrackerMixin { } private boolean be_shouldChangeSound(Music musicSound) { - return currentMusic != null && !musicSound.getEvent() - .getLocation() - .equals(this.currentMusic.getLocation()) && musicSound.replaceCurrentMusic(); + return currentMusic != null && !musicSound + .getEvent() + .getLocation() + .equals(this.currentMusic.getLocation()) && musicSound.replaceCurrentMusic(); } private boolean be_checkNullSound(Music musicSound) { diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index ecf0c116..b5381cc9 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -23,7 +23,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; From 823108aa62f1254c7c50f5d68507fc12121b8148 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 05:52:24 +0300 Subject: [PATCH 02/56] Gradle change --- settings.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.gradle b/settings.gradle index 8eab6b85..03387e2a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,10 +11,10 @@ pluginManagement { // #### Custom Settings #### //Change the next line to disable local BCLib loading -def allowLocalLibUse = false +def allowLocalLibUse = true //When true, the local BCLib is also used in commandline builds -def allowLocalLibInConsoleMode = false +def allowLocalLibInConsoleMode = true //The path were to look for the local BCLib def BCLibPath = '../BCLib' From 6a6f29bf9922ef134719e66bd3442bd7ee82f212 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 06:52:04 +0300 Subject: [PATCH 03/56] 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 From 64de980cab9b6c0e69a19a8fdba4c8c7278b70d6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 07:04:26 +0300 Subject: [PATCH 04/56] Some feature pieces fixes, changed API calls --- .../ru/betterend/rituals/EternalRitual.java | 22 +++++++++---------- .../world/biome/cave/EndCaveBiome.java | 2 +- .../terrain/FloatingSpireFeature.java | 2 +- .../world/features/terrain/SpireFeature.java | 2 +- .../terrain/caves/EndCaveFeature.java | 2 +- .../terrain/caves/TunelCaveFeature.java | 2 +- .../world/structures/piece/BasePiece.java | 9 ++++++++ .../world/structures/piece/CavePiece.java | 6 ++--- .../piece/CrystalMountainPiece.java | 3 ++- .../world/structures/piece/LakePiece.java | 6 ++--- .../world/structures/piece/MountainPiece.java | 4 ++-- .../world/structures/piece/VoxelPiece.java | 5 ++--- 12 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index c0a2fca1..7bb5e3da 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -8,7 +8,6 @@ import net.minecraft.core.Registry; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.Features; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; @@ -441,7 +440,8 @@ public class EternalRitual { direction = direction.getClockWise(); } } - if (targetWorld.dimension() == Level.END) { + // TODO find island feature + /*if (targetWorld.dimension() == Level.END) { Features.END_ISLAND.place( targetWorld, targetWorld.getChunkSource().getGenerator(), @@ -449,16 +449,16 @@ public class EternalRitual { basePos.below() ); } - else if (targetWorld.dimension() == Level.OVERWORLD) { - basePos.setY(targetWorld.getChunk(basePos) - .getHeight(Heightmap.Types.WORLD_SURFACE, basePos.getX(), basePos.getZ()) + 1); + else */if (targetWorld.dimension() == Level.OVERWORLD) { + basePos.setY(targetWorld.getChunk(basePos).getHeight(Heightmap.Types.WORLD_SURFACE, basePos.getX(), basePos.getZ()) + 1); } - EndFeatures.BIOME_ISLAND.getFeatureConfigured() - .place(targetWorld, - targetWorld.getChunkSource().getGenerator(), - new Random(basePos.asLong()), - basePos.below() - ); + EndFeatures.BIOME_ISLAND + .getPlacedFeature() + .place(targetWorld, + targetWorld.getChunkSource().getGenerator(), + new Random(basePos.asLong()), + basePos.below() + ); generatePortal(targetWorld, basePos, portalAxis, portalId); return basePos.immutable(); } diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index eb22f9f2..339961ce 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -4,7 +4,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.WeightedList; import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index 612fc6e9..d397fe89 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; import ru.bclib.sdf.primitive.SDFSphere; diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index b8eaf7a6..43dd04d7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 7f7d7d36..24d1e9a8 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.interfaces.BiomeSetter; import ru.bclib.util.BlocksHelper; diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 95400bb8..4bd9debf 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.world.biomes.BCLBiome; diff --git a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java index c629d35e..e74a2e92 100644 --- a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java @@ -1,9 +1,11 @@ package ru.betterend.world.structures.piece; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; public abstract class BasePiece extends StructurePiece { protected BasePiece(StructurePieceType type, int i, BoundingBox boundingBox) { @@ -16,4 +18,11 @@ public abstract class BasePiece extends StructurePiece { } protected abstract void fromNbt(CompoundTag tag); + + protected void addAdditionalSaveData(CompoundTag tag) {} + + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext structurePieceSerializationContext, CompoundTag compoundTag) { + addAdditionalSaveData(compoundTag); + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 3de511f7..3f425701 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -38,7 +38,7 @@ public class CavePiece extends BasePiece { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); int x2 = MHelper.min(this.boundingBox.maxX(), blockBox.maxX()); @@ -79,11 +79,11 @@ public class CavePiece extends BasePiece { } } - return true; + return; } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); } diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index 9d16fd65..f2949fe6 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -16,7 +16,8 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; -import ru.bclib.api.BiomeAPI; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index eabc553f..888a27b8 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.material.FluidState; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -63,7 +63,7 @@ public class LakePiece extends BasePiece { } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("depth", depth); @@ -83,7 +83,7 @@ public class LakePiece extends BasePiece { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int minY = this.boundingBox.minY(); int maxY = this.boundingBox.maxY(); int sx = SectionPos.sectionToBlockCoord(chunkPos.x); diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index 7d95ab4b..e20bfe39 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; @@ -52,7 +52,7 @@ public abstract class MountainPiece extends BasePiece { } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("height", height); diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index e876af74..56189f52 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -30,7 +30,7 @@ public class VoxelPiece extends BasePiece { } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("world", world.toBNT()); } @@ -40,8 +40,7 @@ public class VoxelPiece extends BasePiece { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { this.world.placeChunk(world, chunkPos); - return true; } } From 96c65b7bb2c2217cd2cdfe5e54d887c484c1c651 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 02:58:43 +0100 Subject: [PATCH 05/56] fixed liquid tick call --- .../java/ru/betterend/blocks/basis/EndLanternBlock.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index b41a4fea..72f01e29 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks.basis; +import java.util.Map; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -26,8 +28,6 @@ import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; -import java.util.Map; - @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; @@ -101,7 +101,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { Boolean water = state.getValue(WATERLOGGED); if (water) { - world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } if (!canSurvive(state, world, pos)) { return water ? Blocks.WATER.defaultBlockState() : Blocks.AIR.defaultBlockState(); From 016a3048bd940d969a8305e8ac8ffe38088b9c43 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 12:11:08 +0100 Subject: [PATCH 06/56] Converted Biome generation to new BCLib builder --- .../java/ru/betterend/registry/EndBiomes.java | 14 ++-- .../ru/betterend/registry/EndFeatures.java | 8 +- .../ru/betterend/world/biome/EndBiome.java | 62 +++++++++++--- .../world/biome/air/BiomeIceStarfield.java | 36 ++++---- .../biome/cave/EmptyAuroraCaveBiome.java | 56 +++++++++---- .../world/biome/cave/EmptyEndCaveBiome.java | 47 ++++++++--- .../biome/cave/EmptySmaragdantCaveBiome.java | 58 ++++++++----- .../world/biome/cave/EndCaveBiome.java | 61 ++++++++++---- .../world/biome/cave/JadeCaveBiome.java | 61 +++++++++----- .../world/biome/cave/LushAuroraCaveBiome.java | 84 ++++++++++++------- .../biome/cave/LushSmaragdantCaveBiome.java | 60 ++++++++----- .../world/biome/land/AmberLandBiome.java | 56 +++++++------ .../biome/land/BlossomingSpiresBiome.java | 55 ++++++------ .../world/biome/land/ChorusForestBiome.java | 63 +++++++------- .../biome/land/CrystalMountainsBiome.java | 25 +++--- .../biome/land/DragonGraveyardsBiome.java | 49 ++++++----- .../world/biome/land/DryShrublandBiome.java | 38 +++++---- .../world/biome/land/DustWastelandsBiome.java | 33 ++++---- .../biome/land/FoggyMushroomlandBiome.java | 73 ++++++++-------- .../biome/land/GlowingGrasslandsBiome.java | 58 ++++++------- .../world/biome/land/LanternWoodsBiome.java | 58 ++++++------- .../world/biome/land/MegalakeBiome.java | 64 +++++++------- .../world/biome/land/MegalakeGroveBiome.java | 66 ++++++++------- .../world/biome/land/NeonOasisBiome.java | 48 ++++++----- .../biome/land/PaintedMountainsBiome.java | 29 ++++--- .../world/biome/land/ShadowForestBiome.java | 64 +++++++------- .../world/biome/land/SulphurSpringsBiome.java | 61 ++++++++------ .../world/biome/land/UmbraValleyBiome.java | 36 ++++---- .../world/biome/land/UmbrellaJungleBiome.java | 66 ++++++++------- 29 files changed, 871 insertions(+), 618 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index f40e5eed..04407e82 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -88,11 +88,13 @@ public class EndBiomes { /** * Put existing {@link EndBiome} as a sub-biome into selected parent. * - * @param biome - {@link EndBiome} instance + * @param biomeConfig - {@link EndBiome.Config} instance * @param parent - {@link EndBiome} to be linked with * @return registered {@link EndBiome} */ - public static EndBiome registerSubBiome(EndBiome biome, EndBiome parent) { + public static EndBiome registerSubBiome(EndBiome.Config biomeConfig, EndBiome parent) { + final EndBiome biome = EndBiome.create(biomeConfig); + if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerSubBiome(parent, biome); } @@ -102,11 +104,12 @@ public class EndBiomes { /** * Registers {@link EndBiome} and adds it into worldgen. * - * @param biome - {@link EndBiome} instance + * @param biomeConfig - {@link EndBiome.Config} instance * @param type - {@link BiomeType} * @return registered {@link EndBiome} */ - public static EndBiome registerBiome(EndBiome biome, BiomeType type) { + public static EndBiome registerBiome(EndBiome.Config biomeConfig, BiomeType type) { + final EndBiome biome = EndBiome.create(biomeConfig); if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { if (type == BiomeType.LAND) { BiomeAPI.registerEndLandBiome(biome); @@ -146,7 +149,8 @@ public class EndBiomes { } } - public static EndCaveBiome registerCaveBiome(EndCaveBiome biome) { + public static EndCaveBiome registerCaveBiome(EndCaveBiome.Config biomeConfig) { + final EndCaveBiome biome = EndCaveBiome.create(biomeConfig); if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); CAVE_BIOMES.addBiome(biome); diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index afeb127b..4f113998 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -321,16 +321,12 @@ public class EndFeatures { }*/ } - public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) { + public static BCLBiomeBuilder addDefaultFeatures(BCLBiomeBuilder builder, boolean hasCaves) { builder.feature(FLAVOLITE_LAYER); builder.feature(THALLASIUM_ORE); builder.feature(ENDER_ORE); builder.feature(CRASHED_SHIP); - - if (biomeID.getPath().endsWith("_cave")) { - return builder; - } - + // TODO replace cave features with carvers if (hasCaves) { builder.feature(ROUND_CAVE); diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index ad3597e7..5245dc73 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -1,23 +1,63 @@ package ru.betterend.world.biome; +import java.util.function.BiFunction; + +import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.level.biome.Biome; +import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; -import ru.bclib.world.biomes.BCLBiomeDef; +import ru.betterend.BetterEnd; import ru.betterend.registry.EndFeatures; +import ru.betterend.registry.EndSounds; public class EndBiome extends BCLBiome { - public EndBiome(BCLBiomeDef def) { - super(updateDef(def)); + public abstract static class Config { + protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); + + public final ResourceLocation ID; + + protected Config(String name) { + this.ID = BetterEnd.makeID(name); + } + + protected abstract void addCustomBuildData(BCLBiomeBuilder builder); + + public BiFunction getSupplier(){ + return EndBiome::new; + } + + protected boolean hasCaves(){ + return true; + } } - - public EndBiome(ResourceLocation id, Biome biome, float fogDensity, float genChance, boolean hasCaves) { - super(id, biome, fogDensity, genChance); - this.addCustomData("has_caves", hasCaves); + + public EndBiome(ResourceLocation biomeID, Biome biome) { + super(biomeID, biome); } - - private static BCLBiomeDef updateDef(BCLBiomeDef def) { - EndFeatures.addDefaultFeatures(def); - return def; + + public static EndBiome create(Config biomeConfig){ + BCLBiomeBuilder builder = BCLBiomeBuilder + .start(biomeConfig.ID) + .category(Biome.BiomeCategory.THEEND) + .music(SoundEvents.MUSIC_END) + .waterColor(4159204) + .waterFogColor(329011) + .fogColor(0xA080A0) + .skyColor(0) + .mood(EndSounds.AMBIENT_DUST_WASTELANDS) + .temperature(0.5f) + .wetness(0.5f) + .precipitation(Biome.Precipitation.NONE); + + biomeConfig.addCustomBuildData(builder); + EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); + + EndBiome biome = builder.build(biomeConfig.getSupplier()); + biome.addCustomData("has_caves", biomeConfig.hasCaves()); + + return biome; } } diff --git a/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java b/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java index c581095e..1fbd812a 100644 --- a/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java +++ b/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java @@ -1,25 +1,33 @@ package ru.betterend.world.biome.air; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class BiomeIceStarfield extends EndBiome { +public class BiomeIceStarfield extends EndBiome.Config { public BiomeIceStarfield() { - super(new BCLBiomeDef(BetterEnd.makeID("ice_starfield")).addCustomData("has_caves", false) - .addStructureFeature(EndStructures.GIANT_ICE_STAR.getFeatureConfigured()) - .setFogColor(224, 245, 254) - .setTemperature(0F) - .setFogDensity(2.2F) - .setFoliageColor(193, 244, 244) - .setGenChance(0.25F) - .setParticles(EndParticles.SNOWFLAKE, 0.002F) - .addFeature(EndFeatures.ICE_STAR) - .addFeature(EndFeatures.ICE_STAR_SMALL) - .addMobSpawn(EntityType.ENDERMAN, 20, 1, 4)); + super("ice_starfield"); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.GIANT_ICE_STAR.getFeatureConfigured()) + .fogColor(224, 245, 254) + .temperature(0F) + .fogDensity(2.2F) + .foliageColor(193, 244, 244) + .genChance(0.25F) + .particles(EndParticles.SNOWFLAKE, 0.002F) + .feature(EndFeatures.ICE_STAR) + .feature(EndFeatures.ICE_STAR_SMALL) + .spawn(EntityType.ENDERMAN, 20, 1, 4); } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java index 83b371d1..f7031641 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java @@ -1,30 +1,50 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); + + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.01F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class EmptyAuroraCaveBiome extends EndCaveBiome { public EmptyAuroraCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("empty_aurora_cave")).setFogColor(150, 30, 68) - .setFogDensity(2.0F) - .setPlantsColor(108, 25, 46) - .setWaterAndFogColor(186, 77, 237) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F)); - - this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); - - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("empty_aurora_cave"); } - + @Override - public float getFloorDensity() { - return 0.01F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(150, 30, 68) + .fogDensity(2.0F) + .plantsColor(108, 25, 46) + .waterAndFogColor(186, 77, 237) + .particles(EndParticles.GLOWING_SPHERE, 0.001F); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return EmptyAuroraCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java index 151e7475..a9b75604 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java @@ -1,23 +1,44 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndFeatures; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; + +public class EmptyEndCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE, 1); + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.1F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class EmptyEndCaveBiome extends EndCaveBiome { public EmptyEndCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("empty_end_cave")).setFogDensity(2.0F)); - this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE, 1); - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("empty_end_cave"); } - + @Override - public float getFloorDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogDensity(2.0F); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java index b77fd747..ba464371 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java @@ -1,31 +1,51 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class EmptySmaragdantCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); + + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.1F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class EmptySmaragdantCaveBiome extends EndCaveBiome { public EmptySmaragdantCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("empty_smaragdant_cave")).setFogColor(0, 253, 182) - .setFogDensity(2.0F) - .setPlantsColor(0, 131, 145) - .setWaterAndFogColor(31, 167, 212) - .setParticles(EndParticles.SMARAGDANT, 0.001F)); - - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); - - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("empty_smaragdant_cave"); } - + @Override - public float getFloorDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(0, 253, 182) + .fogDensity(2.0F) + .plantsColor(0, 131, 145) + .waterAndFogColor(31, 167, 212) + .particles(EndParticles.SMARAGDANT, 0.001F); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return EmptySmaragdantCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index 339961ce..a9e712ad 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -1,37 +1,60 @@ package ru.betterend.world.biome.cave; +import java.util.Random; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.feature.Feature; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.WeightedList; -import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; import ru.betterend.BetterEnd; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; -import java.util.Random; - public class EndCaveBiome extends EndBiome { + public static abstract class Config extends EndBiome.Config { + protected Config(String name) { + super(name); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + BCLFeature feature = BCLFeature.makeChunkFeature( + BetterEnd.makeID(ID.getPath() + "_cave_populator"), + GenerationStep.Decoration.RAW_GENERATION, + new CaveChunkPopulatorFeature(() -> (EndCaveBiome) BiomeAPI.getBiome(ID)) + ); + + builder.category(BiomeCategory.NONE) + .feature(feature) + .music(EndSounds.MUSIC_CAVES) + .loop(EndSounds.AMBIENT_CAVES); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + public BiFunction getSupplier() { + return EndCaveBiome::new; + } + } + private WeightedList> floorFeatures = new WeightedList>(); private WeightedList> ceilFeatures = new WeightedList>(); - - public EndCaveBiome(BCLBiomeDef definition) { - super(makeDef(definition)); - } - - private static BCLBiomeDef makeDef(BCLBiomeDef definition) { - BCLFeature feature = BCLFeature.makeChunkFeature( - BetterEnd.makeID(definition.getID().getPath() + "_cave_populator"), - new CaveChunkPopulatorFeature(() -> (EndCaveBiome) BiomeAPI.getBiome(definition.getID())) - ); - definition.setCategory(BiomeCategory.NONE).addFeature(feature); - definition.setMusic(EndSounds.MUSIC_CAVES); - definition.setLoop(EndSounds.AMBIENT_CAVES); - return definition; + + public EndCaveBiome(ResourceLocation biomeID, Biome biome) { + super(biomeID, biome); } public void addFloorFeature(Feature feature, float weight) { @@ -65,4 +88,8 @@ public class EndCaveBiome extends EndBiome { public BlockState getWall(BlockPos pos) { return null; } + + public static EndCaveBiome create(EndBiome.Config biomeConfig){ + return (EndCaveBiome) EndBiome.create(biomeConfig); + } } diff --git a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java index be061028..ce01dcc4 100644 --- a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java @@ -1,32 +1,53 @@ package ru.betterend.world.biome.cave; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.BlockState; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import ru.betterend.world.biome.EndBiome; -public class JadeCaveBiome extends EndCaveBiome { - private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); - private static final OpenSimplexNoise DEPTH_NOISE = new OpenSimplexNoise("depth_noise".hashCode()); - private static final BlockState[] JADE = new BlockState[3]; - - public JadeCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("jade_cave")).setFogColor(118, 150, 112) - .setFogDensity(2.0F) - .setWaterAndFogColor(95, 223, 255)); - JADE[0] = EndBlocks.VIRID_JADESTONE.stone.defaultBlockState(); - JADE[1] = EndBlocks.AZURE_JADESTONE.stone.defaultBlockState(); - JADE[2] = EndBlocks.SANDY_JADESTONE.stone.defaultBlockState(); +public class JadeCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); + private static final OpenSimplexNoise DEPTH_NOISE = new OpenSimplexNoise("depth_noise".hashCode()); + private static final BlockState[] JADE = new BlockState[3]; + + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + JADE[0] = EndBlocks.VIRID_JADESTONE.stone.defaultBlockState(); + JADE[1] = EndBlocks.AZURE_JADESTONE.stone.defaultBlockState(); + JADE[2] = EndBlocks.SANDY_JADESTONE.stone.defaultBlockState(); + } + + @Override + public BlockState getWall(BlockPos pos) { + double depth = DEPTH_NOISE.eval(pos.getX() * 0.02, pos.getZ() * 0.02) * 0.2 + 0.5; + int index = Mth.floor((pos.getY() + WALL_NOISE.eval(pos.getX() * 0.2, pos.getZ() * 0.2) * 1.5) * depth + 0.5); + index = Mth.abs(index) % 3; + return JADE[index]; + } } - + + public JadeCaveBiome() { + super("jade_cave"); + } + @Override - public BlockState getWall(BlockPos pos) { - double depth = DEPTH_NOISE.eval(pos.getX() * 0.02, pos.getZ() * 0.02) * 0.2 + 0.5; - int index = Mth.floor((pos.getY() + WALL_NOISE.eval(pos.getX() * 0.2, pos.getZ() * 0.2) * 1.5) * depth + 0.5); - index = Mth.abs(index) % 3; - return JADE[index]; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(118, 150, 112) + .fogDensity(2.0F) + .waterAndFogColor(95, 223, 255); + } + + @Override + public BiFunction getSupplier() { + return JadeCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 2e476aa9..6c7aafeb 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -1,48 +1,68 @@ package ru.betterend.world.biome.cave; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.blocks.BlockProperties; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class LushAuroraCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); + this.addFloorFeature(EndFeatures.CAVE_BUSH, 5); + this.addFloorFeature(EndFeatures.CAVE_GRASS, 40); + this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE_CAVEMOSS, 5); + + this.addCeilFeature(EndFeatures.CAVE_BUSH, 1); + this.addCeilFeature(EndFeatures.CAVE_PUMPKIN, 1); + this.addCeilFeature(EndFeatures.RUBINEA, 3); + this.addCeilFeature(EndFeatures.MAGNULA, 1); + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE_CAVEMOSS, 10); + } + + @Override + public float getFloorDensity() { + return 0.2F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + + @Override + public BlockState getCeil(BlockPos pos) { + return EndBlocks.CAVE_MOSS.defaultBlockState() + .setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP); + } + } -public class LushAuroraCaveBiome extends EndCaveBiome { public LushAuroraCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("lush_aurora_cave")).setFogColor(150, 30, 68) - .setFogDensity(2.0F) - .setPlantsColor(108, 25, 46) - .setWaterAndFogColor(186, 77, 237) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .setSurface(EndBlocks.CAVE_MOSS)); - - this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); - this.addFloorFeature(EndFeatures.CAVE_BUSH, 5); - this.addFloorFeature(EndFeatures.CAVE_GRASS, 40); - this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE_CAVEMOSS, 5); - - this.addCeilFeature(EndFeatures.CAVE_BUSH, 1); - this.addCeilFeature(EndFeatures.CAVE_PUMPKIN, 1); - this.addCeilFeature(EndFeatures.RUBINEA, 3); - this.addCeilFeature(EndFeatures.MAGNULA, 1); - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE_CAVEMOSS, 10); + super("lush_aurora_cave"); } - + @Override - public float getFloorDensity() { - return 0.2F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(150, 30, 68) + .fogDensity(2.0F) + .plantsColor(108, 25, 46) + .waterAndFogColor(186, 77, 237) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .surface(EndBlocks.CAVE_MOSS); } - + @Override - public float getCeilDensity() { - return 0.1F; - } - - @Override - public BlockState getCeil(BlockPos pos) { - return EndBlocks.CAVE_MOSS.defaultBlockState() - .setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP); + public BiFunction getSupplier() { + return LushAuroraCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index f40c33a4..c05d421a 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -1,33 +1,53 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); + + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.1F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class LushSmaragdantCaveBiome extends EndCaveBiome { public LushSmaragdantCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("lush_smaragdant_cave")).setFogColor(0, 253, 182) - .setFogDensity(2.0F) - .setPlantsColor(0, 131, 145) - .setWaterAndFogColor(31, 167, 212) - .setParticles(EndParticles.SMARAGDANT, 0.001F) - .setSurface(EndBlocks.CAVE_MOSS)); - - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); - - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("lush_smaragdant_cave"); } - + @Override - public float getFloorDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(0, 253, 182) + .fogDensity(2.0F) + .plantsColor(0, 131, 145) + .waterAndFogColor(31, 167, 212) + .particles(EndParticles.SMARAGDANT, 0.001F) + .surface(EndBlocks.CAVE_MOSS); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return LushSmaragdantCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 5339973a..905ba52b 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -1,9 +1,7 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -11,30 +9,34 @@ import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class AmberLandBiome extends EndBiome { +public class AmberLandBiome extends EndBiome.Config { public AmberLandBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("amber_land")) - .setFogColor(255, 184, 71) - .setFogDensity(2.0F) - .setPlantsColor(219, 115, 38) - .setWaterAndFogColor(145, 108, 72) - .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_AMBER_LAND) - .setParticles(EndParticles.AMBER_SPHERE, 0.001F) - .setSurface(EndBlocks.AMBER_MOSS) - .addFeature(EndFeatures.AMBER_ORE) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.HELIX_TREE) - .addFeature(EndFeatures.LANCELEAF) - .addFeature(EndFeatures.GLOW_PILLAR) - .addFeature(EndFeatures.AMBER_GRASS) - .addFeature(EndFeatures.AMBER_ROOT) - .addFeature(EndFeatures.BULB_MOSS) - .addFeature(EndFeatures.BULB_MOSS_WOOD) - .addFeature(EndFeatures.CHARNIA_ORANGE) - .addFeature(EndFeatures.CHARNIA_RED) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4) - .addMobSpawn(EndEntities.END_SLIME, 30, 1, 2)); + super("amber_land"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .surface(EndBlocks.AMBER_MOSS) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 8c9ff1ba..5d0b2bf5 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -1,36 +1,43 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class BlossomingSpiresBiome extends EndBiome { +public class BlossomingSpiresBiome extends EndBiome.Config { public BlossomingSpiresBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("blossoming_spires")) - .addCustomData("has_caves", false) - .setFogColor(241, 146, 229) - .setFogDensity(1.7F) - .setPlantsColor(122, 45, 122) - .setSurface(EndBlocks.PINK_MOSS) - .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) - .addFeature(EndFeatures.SPIRE) - .addFeature(EndFeatures.FLOATING_SPIRE) - .addFeature(EndFeatures.TENANEA) - .addFeature(EndFeatures.TENANEA_BUSH) - .addFeature(EndFeatures.BULB_VINE) - .addFeature(EndFeatures.BUSHY_GRASS) - .addFeature(EndFeatures.BUSHY_GRASS_WG) - .addFeature(EndFeatures.BLOSSOM_BERRY) - .addFeature(EndFeatures.TWISTED_MOSS) - .addFeature(EndFeatures.TWISTED_MOSS_WOOD) - .addFeature(EndFeatures.SILK_MOTH_NEST) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4) - .addMobSpawn(EndEntities.SILK_MOTH, 5, 1, 2)); + super("blossoming_spires"); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(241, 146, 229) + .fogDensity(1.7F) + .plantsColor(122, 45, 122) + .surface(EndBlocks.PINK_MOSS) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) + .feature(EndFeatures.SPIRE) + .feature(EndFeatures.FLOATING_SPIRE) + .feature(EndFeatures.TENANEA) + .feature(EndFeatures.TENANEA_BUSH) + .feature(EndFeatures.BULB_VINE) + .feature(EndFeatures.BUSHY_GRASS) + .feature(EndFeatures.BUSHY_GRASS_WG) + .feature(EndFeatures.BLOSSOM_BERRY) + .feature(EndFeatures.TWISTED_MOSS) + .feature(EndFeatures.TWISTED_MOSS_WOOD) + .feature(EndFeatures.SILK_MOTH_NEST) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.SILK_MOTH, 5, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 5881f117..af608a9a 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -1,44 +1,47 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.Features; -import net.minecraft.data.worldgen.StructureFeatures; +import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class ChorusForestBiome extends EndBiome { +public class ChorusForestBiome extends EndBiome.Config { public ChorusForestBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("chorus_forest")) - .setFogColor(87, 26, 87) - .setFogDensity(1.5F) - .setPlantsColor(122, 45, 122) - .setWaterAndFogColor(73, 30, 73) - .setSurface(EndBlocks.CHORUS_NYLIUM) - .setParticles(ParticleTypes.PORTAL, 0.01F) - .setLoop(EndSounds.AMBIENT_CHORUS_FOREST) - .setMusic(EndSounds.MUSIC_DARK) - .addFeature(EndFeatures.VIOLECITE_LAYER) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.PYTHADENDRON_TREE) - .addFeature(EndFeatures.PYTHADENDRON_BUSH) - .addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(Decoration.VEGETAL_DECORATION, Features.CHORUS_PLANT) - .addFeature(Decoration.VEGETAL_DECORATION, Features.CHORUS_PLANT) - .addFeature(EndFeatures.CHORUS_GRASS) - .addFeature(EndFeatures.CHORUS_MUSHROOM) - .addFeature(EndFeatures.TAIL_MOSS) - .addFeature(EndFeatures.TAIL_MOSS_WOOD) - .addFeature(EndFeatures.CHARNIA_PURPLE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EndEntities.END_SLIME, 5, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4)); + super("chorus_forest"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(87, 26, 87) + .fogDensity(1.5F) + .plantsColor(122, 45, 122) + .waterAndFogColor(73, 30, 73) + .surface(EndBlocks.CHORUS_NYLIUM) + .particles(ParticleTypes.PORTAL, 0.01F) + .loop(EndSounds.AMBIENT_CHORUS_FOREST) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.VIOLECITE_LAYER) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.PYTHADENDRON_TREE) + .feature(EndFeatures.PYTHADENDRON_BUSH) + .feature(EndFeatures.PURPLE_POLYPORE) + .feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) + //TODO: 1.18 why was this added twice? + //.feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) + .feature(EndFeatures.CHORUS_GRASS) + .feature(EndFeatures.CHORUS_MUSHROOM) + .feature(EndFeatures.TAIL_MOSS) + .feature(EndFeatures.TAIL_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_PURPLE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 50, 1, 4); } } diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 166fb677..7ca59f31 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -1,23 +1,26 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class CrystalMountainsBiome extends EndBiome { +public class CrystalMountainsBiome extends EndBiome.Config { public CrystalMountainsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("crystal_mountains")) - .addStructureFeature(EndStructures.MOUNTAIN.getFeatureConfigured()) - .setPlantsColor(255, 133, 211) - .setSurface(EndBlocks.CRYSTAL_MOSS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addFeature(EndFeatures.ROUND_CAVE) - .addFeature(EndFeatures.CRYSTAL_GRASS) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("crystal_mountains"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) + .plantsColor(255, 133, 211) + .surface(EndBlocks.CRYSTAL_MOSS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.ROUND_CAVE) + .feature(EndFeatures.CRYSTAL_GRASS) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 73a383f4..6e2cd442 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -1,35 +1,38 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class DragonGraveyardsBiome extends EndBiome { +public class DragonGraveyardsBiome extends EndBiome.Config { public DragonGraveyardsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("dragon_graveyards")) - .setGenChance(0.1F) - .setFogColor(244, 46, 79) - .setFogDensity(1.3F) - .setParticles(EndParticles.FIREFLY, 0.0007F) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .setSurface(EndBlocks.SANGNUM) - .setWaterAndFogColor(203, 59, 167) - .setPlantsColor(244, 46, 79) - .addFeature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) - .addFeature(EndFeatures.DRAGON_BONE_BLOCK_ORE) - .addFeature(EndFeatures.FALLEN_PILLAR) - .addFeature(EndFeatures.OBSIDIAN_BOULDER) - .addFeature(EndFeatures.GIGANTIC_AMARANITA) - .addFeature(EndFeatures.LARGE_AMARANITA) - .addFeature(EndFeatures.SMALL_AMARANITA) - .addFeature(EndFeatures.GLOBULAGUS) - .addFeature(EndFeatures.CLAWFERN) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("dragon_graveyards"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.genChance(0.1f) + .fogColor(244, 46, 79) + .fogDensity(1.3F) + .particles(EndParticles.FIREFLY, 0.0007F) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) + .surface(EndBlocks.SANGNUM) + .waterAndFogColor(203, 59, 167) + .plantsColor(244, 46, 79) + .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) + .feature(EndFeatures.DRAGON_BONE_BLOCK_ORE) + .feature(EndFeatures.FALLEN_PILLAR) + .feature(EndFeatures.OBSIDIAN_BOULDER) + .feature(EndFeatures.GIGANTIC_AMARANITA) + .feature(EndFeatures.LARGE_AMARANITA) + .feature(EndFeatures.SMALL_AMARANITA) + .feature(EndFeatures.GLOBULAGUS) + .feature(EndFeatures.CLAWFERN) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index ffb6b087..4377676a 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -1,29 +1,31 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class DryShrublandBiome extends EndBiome { +public class DryShrublandBiome extends EndBiome.Config { public DryShrublandBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("dry_shrubland")) - .setFogColor(132, 35, 13) - .setFogDensity(1.2F) - .setWaterAndFogColor(113, 88, 53) - .setPlantsColor(237, 122, 66) - .setSurface(EndBlocks.RUTISCUS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addFeature(EndFeatures.LUCERNIA_BUSH_RARE) - .addFeature(EndFeatures.ORANGO) - .addFeature(EndFeatures.AERIDIUM) - .addFeature(EndFeatures.LUTEBUS) - .addFeature(EndFeatures.LAMELLARIUM) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("dry_shrubland"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(132, 35, 13) + .fogDensity(1.2F) + .waterAndFogColor(113, 88, 53) + .plantsColor(237, 122, 66) + .surface(EndBlocks.RUTISCUS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.LUCERNIA_BUSH_RARE) + .feature(EndFeatures.ORANGO) + .feature(EndFeatures.AERIDIUM) + .feature(EndFeatures.LUTEBUS) + .feature(EndFeatures.LAMELLARIUM) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index ec648b46..37f1ef07 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -1,26 +1,29 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class DustWastelandsBiome extends EndBiome { +public class DustWastelandsBiome extends EndBiome.Config { public DustWastelandsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("dust_wastelands")) - .setFogColor(226, 239, 168) - .setFogDensity(2) - .setWaterAndFogColor(192, 180, 131) - .setSurface(EndBlocks.ENDSTONE_DUST) - .setDepth(1.5F) - .setParticles(ParticleTypes.WHITE_ASH, 0.01F) - .setLoop(EndSounds.AMBIENT_DUST_WASTELANDS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("dust_wastelands"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(192, 180, 131) + .surface(EndBlocks.ENDSTONE_DUST) + //TODO: 1.18 removed + //.depth(1.5F) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .music(EndSounds.MUSIC_OPENSPACE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 11ff8227..a587e832 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -1,10 +1,7 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBlocks; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -12,38 +9,42 @@ import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class FoggyMushroomlandBiome extends EndBiome { +public class FoggyMushroomlandBiome extends EndBiome.Config { public FoggyMushroomlandBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("foggy_mushroomland")) - .addStructureFeature(EndStructures.GIANT_MOSSY_GLOWSHROOM - .getFeatureConfigured()) - .setPlantsColor(73, 210, 209) - .setFogColor(41, 122, 173) - .setFogDensity(3) - .setWaterAndFogColor(119, 227, 250) - .setSurface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .setLoop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) - .setMusic(EndSounds.MUSIC_FOREST) - .addFeature(EndFeatures.END_LAKE) - .addFeature(EndFeatures.MOSSY_GLOWSHROOM) - .addFeature(EndFeatures.BLUE_VINE) - .addFeature(EndFeatures.UMBRELLA_MOSS) - .addFeature(EndFeatures.CREEPING_MOSS) - .addFeature(EndFeatures.DENSE_VINE) - //.addFeature(EndFeatures.PEARLBERRY) - .addFeature(EndFeatures.CYAN_MOSS) - .addFeature(EndFeatures.CYAN_MOSS_WOOD) - .addFeature(EndFeatures.END_LILY) - .addFeature(EndFeatures.BUBBLE_CORAL) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EndEntities.DRAGONFLY, 80, 2, 5) - .addMobSpawn(EndEntities.END_FISH, 20, 2, 5) - .addMobSpawn(EndEntities.CUBOZOA, 10, 3, 8) - .addMobSpawn(EndEntities.END_SLIME, 10, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); + super("foggy_mushroomland"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.GIANT_MOSSY_GLOWSHROOM.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(41, 122, 173) + .fogDensity(3) + .waterAndFogColor(119, 227, 250) + //TODO: 1.18 surface Rules + //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) + .music(EndSounds.MUSIC_FOREST) + .feature(EndFeatures.END_LAKE) + .feature(EndFeatures.MOSSY_GLOWSHROOM) + .feature(EndFeatures.BLUE_VINE) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.DENSE_VINE) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CYAN_MOSS) + .feature(EndFeatures.CYAN_MOSS_WOOD) + .feature(EndFeatures.END_LILY) + .feature(EndFeatures.BUBBLE_CORAL) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.DRAGONFLY, 80, 2, 5) + .spawn(EndEntities.END_FISH, 20, 2, 5) + .spawn(EndEntities.CUBOZOA, 10, 3, 8) + .spawn(EndEntities.END_SLIME, 10, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 61cc949c..55d93265 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -1,40 +1,42 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class GlowingGrasslandsBiome extends EndBiome { +public class GlowingGrasslandsBiome extends EndBiome.Config { public GlowingGrasslandsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("glowing_grasslands")) - .setFogColor(99, 228, 247) - .setFogDensity(1.3F) - .setParticles(EndParticles.FIREFLY, 0.001F) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .setSurface(EndBlocks.END_MOSS) - .setWaterAndFogColor(92, 250, 230) - .setPlantsColor(73, 210, 209) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.LUMECORN) - .addFeature(EndFeatures.BLOOMING_COOKSONIA) - .addFeature(EndFeatures.SALTEAGO) - .addFeature(EndFeatures.VAIOLUSH_FERN) - .addFeature(EndFeatures.FRACTURN) - .addFeature(EndFeatures.UMBRELLA_MOSS_RARE) - .addFeature(EndFeatures.CREEPING_MOSS_RARE) - .addFeature(EndFeatures.TWISTED_UMBRELLA_MOSS_RARE) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("glowing_grasslands"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(99, 228, 247) + .fogDensity(1.3F) + .particles(EndParticles.FIREFLY, 0.001F) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) + .surface(EndBlocks.END_MOSS) + .waterAndFogColor(92, 250, 230) + .plantsColor(73, 210, 209) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.LUMECORN) + .feature(EndFeatures.BLOOMING_COOKSONIA) + .feature(EndFeatures.SALTEAGO) + .feature(EndFeatures.VAIOLUSH_FERN) + .feature(EndFeatures.FRACTURN) + .feature(EndFeatures.UMBRELLA_MOSS_RARE) + .feature(EndFeatures.CREEPING_MOSS_RARE) + .feature(EndFeatures.TWISTED_UMBRELLA_MOSS_RARE) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 94dd756b..6ab11658 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -1,40 +1,42 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class LanternWoodsBiome extends EndBiome { +public class LanternWoodsBiome extends EndBiome.Config { public LanternWoodsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("lantern_woods")) - .setFogColor(189, 82, 70) - .setFogDensity(1.1F) - .setWaterAndFogColor(171, 234, 226) - .setPlantsColor(254, 85, 57) - .setSurface(EndBlocks.RUTISCUS) - .setMusic(EndSounds.MUSIC_FOREST) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .addFeature(EndFeatures.END_LAKE_NORMAL) - .addFeature(EndFeatures.FLAMAEA) - .addFeature(EndFeatures.LUCERNIA) - .addFeature(EndFeatures.LUCERNIA_BUSH) - .addFeature(EndFeatures.FILALUX) - .addFeature(EndFeatures.AERIDIUM) - .addFeature(EndFeatures.LAMELLARIUM) - .addFeature(EndFeatures.BOLUX_MUSHROOM) - .addFeature(EndFeatures.AURANT_POLYPORE) - .addFeature(EndFeatures.POND_ANEMONE) - .addFeature(EndFeatures.CHARNIA_ORANGE) - .addFeature(EndFeatures.CHARNIA_RED) - .addFeature(EndFeatures.RUSCUS) - .addFeature(EndFeatures.RUSCUS_WOOD) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("lantern_woods"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(189, 82, 70) + .fogDensity(1.1F) + .waterAndFogColor(171, 234, 226) + .plantsColor(254, 85, 57) + .surface(EndBlocks.RUTISCUS) + .music(EndSounds.MUSIC_FOREST) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .feature(EndFeatures.END_LAKE_NORMAL) + .feature(EndFeatures.FLAMAEA) + .feature(EndFeatures.LUCERNIA) + .feature(EndFeatures.LUCERNIA_BUSH) + .feature(EndFeatures.FILALUX) + .feature(EndFeatures.AERIDIUM) + .feature(EndFeatures.LAMELLARIUM) + .feature(EndFeatures.BOLUX_MUSHROOM) + .feature(EndFeatures.AURANT_POLYPORE) + .feature(EndFeatures.POND_ANEMONE) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .feature(EndFeatures.RUSCUS) + .feature(EndFeatures.RUSCUS_WOOD) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 36027f3d..42400124 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -1,42 +1,46 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBlocks; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class MegalakeBiome extends EndBiome { +public class MegalakeBiome extends EndBiome.Config { public MegalakeBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("megalake")) - .addStructureFeature(EndStructures.MEGALAKE.getFeatureConfigured()) - .setPlantsColor(73, 210, 209) - .setFogColor(178, 209, 248) - .setWaterAndFogColor(96, 163, 255) - .setFogDensity(1.75F) - .setMusic(EndSounds.MUSIC_WATER) - .setLoop(EndSounds.AMBIENT_MEGALAKE) - .setSurface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) - .setDepth(0F) - .addFeature(EndFeatures.END_LOTUS) - .addFeature(EndFeatures.END_LOTUS_LEAF) - .addFeature(EndFeatures.BUBBLE_CORAL_RARE) - .addFeature(EndFeatures.END_LILY_RARE) - .addFeature(EndFeatures.UMBRELLA_MOSS) - .addFeature(EndFeatures.CREEPING_MOSS) - //.addFeature(EndFeatures.PEARLBERRY) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addFeature(EndFeatures.MENGER_SPONGE) - .addMobSpawn(EndEntities.DRAGONFLY, 50, 1, 3) - .addMobSpawn(EndEntities.END_FISH, 50, 3, 8) - .addMobSpawn(EndEntities.CUBOZOA, 50, 3, 8) - .addMobSpawn(EndEntities.END_SLIME, 5, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); + super("megalake"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.MEGALAKE.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(178, 209, 248) + .waterAndFogColor(96, 163, 255) + .fogDensity(1.75F) + .music(EndSounds.MUSIC_WATER) + .loop(EndSounds.AMBIENT_MEGALAKE) + //TODO: 1.18 surface Rules + //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) + //TODO: 1.18 removed + //.depth(0F) + .feature(EndFeatures.END_LOTUS) + .feature(EndFeatures.END_LOTUS_LEAF) + .feature(EndFeatures.BUBBLE_CORAL_RARE) + .feature(EndFeatures.END_LILY_RARE) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .feature(EndFeatures.MENGER_SPONGE) + .spawn(EndEntities.DRAGONFLY, 50, 1, 3) + .spawn(EndEntities.END_FISH, 50, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index c4dd17a9..70fed174 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -1,8 +1,7 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -11,35 +10,40 @@ import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class MegalakeGroveBiome extends EndBiome { +public class MegalakeGroveBiome extends EndBiome.Config { public MegalakeGroveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("megalake_grove")) - .addStructureFeature(EndStructures.MEGALAKE_SMALL.getFeatureConfigured()) - .setPlantsColor(73, 210, 209) - .setFogColor(178, 209, 248) - .setWaterAndFogColor(96, 163, 255) - .setFogDensity(2.0F) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .setMusic(EndSounds.MUSIC_WATER) - .setLoop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .setSurface(EndBlocks.END_MOSS) - .setDepth(0F) - .addFeature(EndFeatures.LACUGROVE) - .addFeature(EndFeatures.END_LOTUS) - .addFeature(EndFeatures.END_LOTUS_LEAF) - .addFeature(EndFeatures.BUBBLE_CORAL_RARE) - .addFeature(EndFeatures.END_LILY_RARE) - .addFeature(EndFeatures.UMBRELLA_MOSS) - //.addFeature(EndFeatures.PEARLBERRY) - .addFeature(EndFeatures.CREEPING_MOSS) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addFeature(EndFeatures.MENGER_SPONGE) - .addMobSpawn(EndEntities.DRAGONFLY, 20, 1, 3) - .addMobSpawn(EndEntities.END_FISH, 20, 3, 8) - .addMobSpawn(EndEntities.CUBOZOA, 50, 3, 8) - .addMobSpawn(EndEntities.END_SLIME, 5, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); + super("megalake_grove"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.MEGALAKE_SMALL.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(178, 209, 248) + .waterAndFogColor(96, 163, 255) + .fogDensity(2.0F) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .music(EndSounds.MUSIC_WATER) + .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) + .surface(EndBlocks.END_MOSS) + //TODO: 1.18 removed + //.depth(0F) + .feature(EndFeatures.LACUGROVE) + .feature(EndFeatures.END_LOTUS) + .feature(EndFeatures.END_LOTUS_LEAF) + .feature(EndFeatures.BUBBLE_CORAL_RARE) + .feature(EndFeatures.END_LILY_RARE) + .feature(EndFeatures.UMBRELLA_MOSS) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .feature(EndFeatures.MENGER_SPONGE) + .spawn(EndEntities.DRAGONFLY, 20, 1, 3) + .spawn(EndEntities.END_FISH, 20, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 10078324..b3d69dc9 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -1,34 +1,36 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBlocks; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class NeonOasisBiome extends EndBiome { +public class NeonOasisBiome extends EndBiome.Config { public NeonOasisBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("neon_oasis")) - .setGenChance(0.5F) - .setFogColor(226, 239, 168) - .setFogDensity(2) - .setWaterAndFogColor(106, 238, 215) - .setSurface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) - .setParticles(ParticleTypes.WHITE_ASH, 0.01F) - .setLoop(EndSounds.AMBIENT_DUST_WASTELANDS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addFeature(EndFeatures.DESERT_LAKE) - .addFeature(EndFeatures.NEON_CACTUS) - .addFeature(EndFeatures.UMBRELLA_MOSS) - .addFeature(EndFeatures.CREEPING_MOSS) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_RED) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("neon_oasis"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.genChance(0.5F) + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(106, 238, 215) + //TODO: 1.18 surface Rules + //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.DESERT_LAKE) + .feature(EndFeatures.NEON_CACTUS) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 6dd98733..5628dac7 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -2,24 +2,27 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class PaintedMountainsBiome extends EndBiome { +public class PaintedMountainsBiome extends EndBiome.Config { public PaintedMountainsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("painted_mountains")) - .addStructureFeature(EndStructures.PAINTED_MOUNTAIN.getFeatureConfigured()) - .setFogColor(226, 239, 168) - .setFogDensity(2) - .setWaterAndFogColor(192, 180, 131) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_DUST_WASTELANDS) - .setSurface(EndBlocks.ENDSTONE_DUST) - .setParticles(ParticleTypes.WHITE_ASH, 0.01F) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("painted_mountains"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.PAINTED_MOUNTAIN.getFeatureConfigured()) + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(192, 180, 131) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .surface(EndBlocks.ENDSTONE_DUST) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 97cf1f6d..b83e742c 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -1,44 +1,46 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class ShadowForestBiome extends EndBiome { +public class ShadowForestBiome extends EndBiome.Config { public ShadowForestBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("shadow_forest")) - .setFogColor(0, 0, 0) - .setFogDensity(2.5F) - .setPlantsColor(45, 45, 45) - .setWaterAndFogColor(42, 45, 80) - .setSurface(EndBlocks.SHADOW_GRASS) - .setParticles(ParticleTypes.MYCELIUM, 0.01F) - .setLoop(EndSounds.AMBIENT_CHORUS_FOREST) - .setMusic(EndSounds.MUSIC_DARK) - .addFeature(EndFeatures.VIOLECITE_LAYER) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.DRAGON_TREE) - .addFeature(EndFeatures.DRAGON_TREE_BUSH) - .addFeature(EndFeatures.SHADOW_PLANT) - .addFeature(EndFeatures.MURKWEED) - .addFeature(EndFeatures.NEEDLEGRASS) - .addFeature(EndFeatures.SHADOW_BERRY) - .addFeature(EndFeatures.TWISTED_VINE) - .addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(EndFeatures.TAIL_MOSS) - .addFeature(EndFeatures.TAIL_MOSS_WOOD) - .addFeature(EndFeatures.CHARNIA_PURPLE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EndEntities.SHADOW_WALKER, 80, 2, 4) - .addMobSpawn(EntityType.ENDERMAN, 40, 1, 4) - .addMobSpawn(EntityType.PHANTOM, 1, 1, 2)); + super("shadow_forest"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(0, 0, 0) + .fogDensity(2.5F) + .plantsColor(45, 45, 45) + .waterAndFogColor(42, 45, 80) + .surface(EndBlocks.SHADOW_GRASS) + .particles(ParticleTypes.MYCELIUM, 0.01F) + .loop(EndSounds.AMBIENT_CHORUS_FOREST) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.VIOLECITE_LAYER) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.DRAGON_TREE) + .feature(EndFeatures.DRAGON_TREE_BUSH) + .feature(EndFeatures.SHADOW_PLANT) + .feature(EndFeatures.MURKWEED) + .feature(EndFeatures.NEEDLEGRASS) + .feature(EndFeatures.SHADOW_BERRY) + .feature(EndFeatures.TWISTED_VINE) + .feature(EndFeatures.PURPLE_POLYPORE) + .feature(EndFeatures.TAIL_MOSS) + .feature(EndFeatures.TAIL_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_PURPLE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.SHADOW_WALKER, 80, 2, 4) + .spawn(EntityType.ENDERMAN, 40, 1, 4) + .spawn(EntityType.PHANTOM, 1, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 490874c1..70415a3b 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,38 +1,47 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -import ru.betterend.world.surface.SurfaceBuilders; -public class SulphurSpringsBiome extends EndBiome { +public class SulphurSpringsBiome extends EndBiome.Config { public SulphurSpringsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("sulphur_springs")) - .addCustomData("has_caves", false) - .setSurface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_SULPHUR_SPRINGS) - .setWaterColor(25, 90, 157) - .setWaterFogColor(30, 65, 61) - .setFogColor(207, 194, 62) - .setFogDensity(1.5F) - .setDepth(0F) - .setParticles(EndParticles.SULPHUR_PARTICLE, 0.001F) - .addFeature(EndFeatures.GEYSER) - .addFeature(EndFeatures.SURFACE_VENT) - .addFeature(EndFeatures.SULPHURIC_LAKE) - .addFeature(EndFeatures.SULPHURIC_CAVE) - .addFeature(EndFeatures.HYDRALUX) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_ORANGE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addMobSpawn(EndEntities.END_FISH, 50, 3, 8) - .addMobSpawn(EndEntities.CUBOZOA, 50, 3, 8) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4)); + super("sulphur_springs"); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder + //TODO: 1.18 surface Rules + //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) + .waterColor(25, 90, 157) + .waterFogColor(30, 65, 61) + .fogColor(207, 194, 62) + .fogDensity(1.5F) + //TODO: 1.18 removed + //.depth(0F) + .particles(EndParticles.SULPHUR_PARTICLE, 0.001F) + .feature(EndFeatures.GEYSER) + .feature(EndFeatures.SURFACE_VENT) + .feature(EndFeatures.SULPHURIC_LAKE) + .feature(EndFeatures.SULPHURIC_CAVE) + .feature(EndFeatures.HYDRALUX) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .spawn(EndEntities.END_FISH, 50, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EntityType.ENDERMAN, 50, 1, 4); } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index efc91e20..02bd2d2e 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,27 +1,29 @@ package ru.betterend.world.biome.land; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -import ru.betterend.world.surface.SurfaceBuilders; -public class UmbraValleyBiome extends EndBiome { +public class UmbraValleyBiome extends EndBiome.Config { public UmbraValleyBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("umbra_valley")) - .setFogColor(100, 100, 100) - .setPlantsColor(172, 189, 190) - .setWaterAndFogColor(69, 104, 134) - .setSurface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .setParticles(EndParticles.AMBER_SPHERE, 0.0001F) - .setLoop(EndSounds.UMBRA_VALLEY) - .setMusic(EndSounds.MUSIC_DARK) - .addFeature(EndFeatures.UMBRALITH_ARCH) - .addFeature(EndFeatures.THIN_UMBRALITH_ARCH) - .addFeature(EndFeatures.INFLEXIA) - .addFeature(EndFeatures.FLAMMALIX) - ); + super("umbra_valley"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + //TODO: 1.18 surface Rules + //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index ae905948..f9b7c9eb 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -1,44 +1,46 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class UmbrellaJungleBiome extends EndBiome { +public class UmbrellaJungleBiome extends EndBiome.Config { public UmbrellaJungleBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("umbrella_jungle")) - .setFogColor(87, 223, 221) - .setWaterAndFogColor(119, 198, 253) - .setFoliageColor(27, 183, 194) - .setFogDensity(2.3F) - .setParticles(EndParticles.JUNGLE_SPORE, 0.001F) - .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .setSurface(EndBlocks.JUNGLE_MOSS) - .addFeature(EndFeatures.END_LAKE) - .addFeature(EndFeatures.UMBRELLA_TREE) - .addFeature(EndFeatures.JELLYSHROOM) - .addFeature(EndFeatures.TWISTED_UMBRELLA_MOSS) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) - .addFeature(EndFeatures.JUNGLE_GRASS) - .addFeature(EndFeatures.CYAN_MOSS) - .addFeature(EndFeatures.CYAN_MOSS_WOOD) - .addFeature(EndFeatures.JUNGLE_FERN_WOOD) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_WALL) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_WOOD) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_CEIL) - .addFeature(EndFeatures.JUNGLE_VINE) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("umbrella_jungle"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(87, 223, 221) + .waterAndFogColor(119, 198, 253) + .foliageColor(27, 183, 194) + .fogDensity(2.3F) + .particles(EndParticles.JUNGLE_SPORE, 0.001F) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) + .surface(EndBlocks.JUNGLE_MOSS) + .feature(EndFeatures.END_LAKE) + .feature(EndFeatures.UMBRELLA_TREE) + .feature(EndFeatures.JELLYSHROOM) + .feature(EndFeatures.TWISTED_UMBRELLA_MOSS) + .feature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) + .feature(EndFeatures.JUNGLE_GRASS) + .feature(EndFeatures.CYAN_MOSS) + .feature(EndFeatures.CYAN_MOSS_WOOD) + .feature(EndFeatures.JUNGLE_FERN_WOOD) + .feature(EndFeatures.SMALL_JELLYSHROOM_WALL) + .feature(EndFeatures.SMALL_JELLYSHROOM_WOOD) + .feature(EndFeatures.SMALL_JELLYSHROOM_CEIL) + .feature(EndFeatures.JUNGLE_VINE) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } \ No newline at end of file From 6a8ad29a70d24a653acfe5590b514ece2556f860 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 12:35:05 +0100 Subject: [PATCH 07/56] BYG-Integration compile fixes --- .../integration/byg/biomes/BYGBiomes.java | 3 +- .../byg/biomes/NightshadeRedwoods.java | 119 +++++++----- .../byg/biomes/OldBulbisGardens.java | 178 +++++++++--------- .../java/ru/betterend/registry/EndBiomes.java | 5 +- 4 files changed, 166 insertions(+), 139 deletions(-) diff --git a/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java b/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java index 013afbe9..9d01f412 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java @@ -1,5 +1,6 @@ package ru.betterend.integration.byg.biomes; +import ru.betterend.BetterEnd; import ru.betterend.integration.Integrations; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.EndBiome; @@ -11,7 +12,7 @@ public class BYGBiomes { //public static final EndBiome ETHERIAL_GROVE = EndBiomes.registerSubBiomeIntegration(new EterialGrove()); public static void register() { - System.out.println("Registered " + OLD_BULBIS_GARDENS); + BetterEnd.LOGGER.info("Registered " + OLD_BULBIS_GARDENS); } public static void addBiomes() { diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index 249b3501..a3b6df63 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -1,69 +1,84 @@ package ru.betterend.integration.byg.biomes; +import java.util.List; + import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSpecialEffects; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import ru.bclib.BCLib; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.integration.Integrations; import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; -import java.util.List; +public class NightshadeRedwoods extends EndBiome.Config { + public NightshadeRedwoods() { + super("nightshade_redwoods"); + } -public class NightshadeRedwoods extends EndBiome { - public NightshadeRedwoods() { - super(makeDef()); - } - - private static BCLBiomeDef makeDef() { - Biome biome = Integrations.BYG.getBiome("nightshade_forest"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); - - BCLBiomeDef def = new BCLBiomeDef(BetterEnd.makeID("nightshade_redwoods")).setFogColor(140, 108, 47) - .setFogDensity(1.5F) - .setWaterAndFogColor(55, 70, 186) - .setFoliageColor(122, 17, 155) - .setParticles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - .setSurface(biome.getGenerationSettings() - .getSurfaceBuilder() - .get()) - .setGrassColor(48, 13, 89) - .setPlantsColor(200, 125, 9) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) - .addFeature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) - .addFeature(BYGFeatures.NIGHTSHADE_MOSS); - - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent().get(); - SoundEvent music = effects.getBackgroundMusic().get().getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings().get().getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings().get().getSoundEvent(); - def.setLoop(loop).setMusic(music).setAdditions(additions).setMood(mood); - } - biome.getGenerationSettings().features().forEach((list) -> { - list.forEach((feature) -> { - def.addFeature(Decoration.VEGETAL_DECORATION, feature.get()); - }); - }); - - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group).unwrap(); - list.forEach((entry) -> { - def.addMobSpawn(entry); - }); - } - - return def; - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("nightshade_forest"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); + + builder.fogColor(140, 108, 47) + .fogDensity(1.5F) + .waterAndFogColor(55, 70, 186) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules +// .setSurface(biome.getGenerationSettings() +// .getSurfaceBuilder() +// .get()) + .grassColor(48, 13, 89) + .plantsColor(200, 125, 9) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) + .feature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) + .feature(BYGFeatures.NIGHTSHADE_MOSS); + + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } + biome.getGenerationSettings() + .features() + .forEach((list) -> { + list.forEach((feature) -> { + builder.feature(Decoration.VEGETAL_DECORATION, feature.get()); + }); + }); + + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } + } } diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index d33d0bfb..d7eb15e4 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -1,107 +1,117 @@ package ru.betterend.integration.byg.biomes; +import java.util.List; +import java.util.function.Supplier; + import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.BuiltinRegistries; -import net.minecraft.data.worldgen.Features; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSpecialEffects; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.ConfiguredDecorator; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; import ru.bclib.BCLib; -import ru.bclib.world.biomes.BCLBiomeDef; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.BetterEnd; import ru.betterend.integration.Integrations; import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; -import java.util.List; -import java.util.function.Supplier; -class FeaturesAccesor extends Features { - static ConfiguredDecorator shadowHEIGHTMAP_SQUARE; - - static { - shadowHEIGHTMAP_SQUARE = Decorators.HEIGHTMAP_SQUARE; - } -} +public class OldBulbisGardens extends EndBiome.Config { + public OldBulbisGardens() { + super("old_bulbis_gardens"); + } -public class OldBulbisGardens extends EndBiome { - public OldBulbisGardens() { - super(makeDef()); - } - - private static BCLBiomeDef makeDef() { - Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); - - Block ivis = Integrations.BYG.getBlock("ivis_phylium"); - Block origin = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial().getBlock(); - BCLBiomeDef def = new BCLBiomeDef(BetterEnd.makeID("old_bulbis_gardens")).setFogColor(215, 132, 207) - .setFogDensity(1.8F) - .setWaterAndFogColor(40, 0, 56) - .setFoliageColor(122, 17, 155) - .setParticles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - .setSurface(ivis, origin) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(BYGFeatures.OLD_BULBIS_TREE); - - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent().get(); - SoundEvent music = effects.getBackgroundMusic().get().getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings().get().getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings().get().getSoundEvent(); - def.setLoop(loop).setMusic(music).setAdditions(additions).setMood(mood); - } - - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group).unwrap(); - list.forEach((entry) -> { - def.addMobSpawn(entry); - }); - } - - List>>> features = biome.getGenerationSettings().features(); - List>> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); - if (vegetal.size() > 2) { - Supplier> getter; - // Trees (first two features) - // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) - for (int i = 0; i < 2; i++) { - getter = vegetal.get(i); - ConfiguredFeature feature = getter.get(); - ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); - feature = Registry.register( - BuiltinRegistries.CONFIGURED_FEATURE, - id, - feature.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) - ); - def.addFeature(Decoration.VEGETAL_DECORATION, feature); - } - // Grasses and other features - for (int i = 2; i < vegetal.size(); i++) { - getter = vegetal.get(i); - ConfiguredFeature feature = getter.get(); - def.addFeature(Decoration.VEGETAL_DECORATION, feature); - } - } - - def.addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(BYGFeatures.IVIS_MOSS_WOOD) - .addFeature(BYGFeatures.IVIS_MOSS) - .addFeature(BYGFeatures.IVIS_VINE) - .addFeature(BYGFeatures.IVIS_SPROUT); - - return def; - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); + + Block ivis = Integrations.BYG.getBlock("ivis_phylium"); +// Block origin = biome.getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial() +// .getBlock(); + builder.fogColor(215, 132, 207) + .fogDensity(1.8F) + .waterAndFogColor(40, 0, 56) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules + //.surface(ivis, origin) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.OLD_BULBIS_TREE); + + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } + + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } + + List>> features = biome.getGenerationSettings() + .features(); + List> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); + if (vegetal.size() > 2) { + Supplier getter; + // Trees (first two features) + // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) + for (int i = 0; i < 2; i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); + feature = Registry.register( + BuiltinRegistries.PLACED_FEATURE, + id, + //TODO: 1.18 Check if this is correct + feature//.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) + ); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + // Grasses and other features + for (int i = 2; i < vegetal.size(); i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + } + + builder.feature(EndFeatures.PURPLE_POLYPORE) + .feature(BYGFeatures.IVIS_MOSS_WOOD) + .feature(BYGFeatures.IVIS_MOSS) + .feature(BYGFeatures.IVIS_VINE) + .feature(BYGFeatures.IVIS_SPROUT); + } } diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 04407e82..a09637e5 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -124,10 +124,11 @@ public class EndBiomes { /** * Put integration sub-biome {@link EndBiome} into subbiomes list and registers it. * - * @param biome - {@link EndBiome} instance + * @param biomeConfig - {@link EndBiome.Config} instance * @return registered {@link EndBiome} */ - public static EndBiome registerSubBiomeIntegration(EndBiome biome) { + public static EndBiome registerSubBiomeIntegration(EndBiome.Config biomeConfig) { + EndBiome biome = EndBiome.create(biomeConfig); if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); } From 6097311ca6c3d342d8668259040a6aeb10a77c67 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 14:38:16 +0100 Subject: [PATCH 08/56] Adapted Feature Classes --- .../features/EternalPortalStructure.java | 116 ++++++++---------- .../features/FeatureBaseStructure.java | 19 ++- .../features/GiantIceStarStructure.java | 71 +++++------ .../GiantMossyGlowshroomStructure.java | 20 ++- .../features/MegaLakeSmallStructure.java | 63 +++++----- .../features/MegaLakeStructure.java | 66 +++++----- .../features/MountainStructure.java | 76 ++++++------ .../features/PaintedMountainStructure.java | 43 ++++--- .../features/SDFStructureFeature.java | 62 +++++----- 9 files changed, 273 insertions(+), 263 deletions(-) diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 4b9d0735..136f49a5 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -1,80 +1,70 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.WorldgenRandom; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.StructureHelper; import ru.betterend.BetterEnd; import ru.betterend.world.structures.piece.NBTPiece; public class EternalPortalStructure extends FeatureBaseStructure { - private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); - private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); - - @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { - long x = (long) chunkPos.x * (long) chunkPos.x; - long z = (long) chunkPos.z * (long) chunkPos.z; - if (x + z < 1024L) { - return false; - } - if (chunkGenerator.getBaseHeight( - pos.getBlockX(8), - pos.getBlockX(8), - Heightmap.Types.WORLD_SURFACE_WG, - levelHeightAccessor - ) < 5) { - return false; - } - return super.isFeatureChunk( - chunkGenerator, - biomeSource, - worldSeed, - chunkRandom, - pos, - biome, - chunkPos, - featureConfig, - levelHeightAccessor - ); - } - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return PortalStructureStart::new; - } - - public static class PortalStructureStart extends StructureStart { - public PortalStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { - super(feature, pos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(8); - int z = chunkPos.getBlockZ(8); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - this.pieces.add(new NBTPiece( - STRUCTURE_ID, - STRUCTURE, - new BlockPos(x, y - 4, z), - random.nextInt(5), - true, - random - )); - } - } + private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); + private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); + + public EternalPortalStructure() { + super(PieceGeneratorSupplier.simple( + EternalPortalStructure::checkLocation, + EternalPortalStructure::generatePieces + )); + } + + protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + long x = (long) chunkPos.x * (long) chunkPos.x; + long z = (long) chunkPos.z * (long) chunkPos.z; + if (x + z < 1024L) { + return false; + } + if (chunkGenerator.getBaseHeight( + chunkPos.getBlockX(8), + chunkPos.getBlockZ(8), + Heightmap.Types.WORLD_SURFACE_WG, + levelHeightAccessor + ) < 5) { + return false; + } + return FeatureBaseStructure.checkLocation(context); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + int x = chunkPos.getBlockX(8); + int z = chunkPos.getBlockZ(8); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + structurePiecesBuilder.addPiece(new NBTPiece( + STRUCTURE_ID, + STRUCTURE, + new BlockPos(x, y - 4, z), + random.nextInt(5), + true, + random + )); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index ff3b5ad5..2a56e2b6 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -1,30 +1,27 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; - -import java.util.Random; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); - public FeatureBaseStructure() { - super(NoneFeatureConfiguration.CODEC); + public FeatureBaseStructure(PieceGeneratorSupplier pieceGeneratorSupplier) { + super(NoneFeatureConfiguration.CODEC, pieceGeneratorSupplier); } - - @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { - return getGenerationHeight(pos, chunkGenerator, levelHeightAccessor) >= 20; + + protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor()) >= 20; } private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { diff --git a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java index 526f567a..fa336cfc 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java @@ -1,17 +1,18 @@ package ru.betterend.world.structures.features; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRotation; import ru.bclib.sdf.operator.SDFTranslate; @@ -21,18 +22,17 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - public class GiantIceStarStructure extends SDFStructureFeature { - private final float minSize = 20; - private final float maxSize = 35; - private final int minCount = 25; - private final int maxCount = 40; - - @Override - protected SDF getSDF(BlockPos pos, Random random) { + private static final float minSize = 20; + private static final float maxSize = 35; + private static final int minCount = 25; + private static final int maxCount = 40; + + public GiantIceStarStructure() { + super(GiantIceStarStructure::generatePieces); + } + + protected static SDF getSDF(BlockPos pos, Random random) { float size = MHelper.randRange(minSize, maxSize, random); int count = MHelper.randRange(minCount, maxCount, random); List points = getFibonacciPoints(count); @@ -90,7 +90,7 @@ public class GiantIceStarStructure extends SDFStructureFeature { }); } - private List getFibonacciPoints(int count) { + private static List getFibonacciPoints(int count) { float max = count - 1; List result = new ArrayList(count); for (int i = 0; i < count; i++) { @@ -103,28 +103,21 @@ public class GiantIceStarStructure extends SDFStructureFeature { } return result; } - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return StarStructureStart::new; - } - - public static class StarStructureStart extends StructureStart { - public StarStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { - super(feature, pos, references, seed); - } - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - BlockPos start = new BlockPos(x, MHelper.randRange(32, 128, random), z); - VoxelPiece piece = new VoxelPiece((world) -> { - ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); - }, random.nextInt()); - this.pieces.add(piece); - - //this.calculateBoundingBox(); - } + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + BlockPos start = new BlockPos(x, MHelper.randRange(32, 128, random), z); + VoxelPiece piece = new VoxelPiece((world) -> { + getSDF(start, random).fillRecursive(world, start); + }, random.nextInt()); + structurePiecesBuilder.addPiece(piece); + + //this.calculateBoundingBox(); } } diff --git a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java index 94607759..99267bf9 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java @@ -1,8 +1,14 @@ package ru.betterend.world.structures.features; +import java.util.List; +import java.util.Random; + import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFBinary; import ru.bclib.sdf.operator.SDFCoordModify; @@ -25,12 +31,16 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.List; -import java.util.Random; - public class GiantMossyGlowshroomStructure extends SDFStructureFeature { - @Override - protected SDF getSDF(BlockPos center, Random random) { + public GiantMossyGlowshroomStructure() { + super(GiantMossyGlowshroomStructure::generatePieces); + } + + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + SDFStructureFeature.generatePieces(structurePiecesBuilder, context, GiantMossyGlowshroomStructure::getSDF); + } + + protected static SDF getSDF(BlockPos center, Random random) { SDFCappedCone cone1 = new SDFCappedCone().setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F); SDFCappedCone cone2 = new SDFCappedCone().setHeight(3F).setRadius1(2.5F).setRadius2(13F); SDF posedCone2 = new SDFTranslate().setTranslate(0, 5, 0).setSource(cone2); diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 118b1f18..55b94dc2 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -1,43 +1,48 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; public class MegaLakeSmallStructure extends FeatureBaseStructure { - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; - } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - float radius = MHelper.randRange(20, 40, random); - float depth = MHelper.randRange(5, 10, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); - } - } + public MegaLakeSmallStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeSmallStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + if (y > 5) { + float radius = MHelper.randRange(20, 40, random); + float depth = MHelper.randRange(5, 10, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index fd19a701..d17dedf1 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -1,43 +1,51 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; public class MegaLakeStructure extends FeatureBaseStructure { - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; - } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - float radius = MHelper.randRange(32, 64, random); - float depth = MHelper.randRange(7, 15, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); - } - } + + + public MegaLakeStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + if (y > 5) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + + float radius = MHelper.randRange(32, 64, random); + float depth = MHelper.randRange(7, 15, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } + } diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index 8f61a6f9..c04f97ea 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -1,49 +1,55 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.CrystalMountainPiece; public class MountainStructure extends FeatureBaseStructure { - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; - } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - float radius = MHelper.randRange(50, 100, random); - float height = radius * MHelper.randRange(0.8F, 1.2F, random); - CrystalMountainPiece piece = new CrystalMountainPiece( - new BlockPos(x, y, z), - radius, - height, - random, - biome - ); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); - } - } + + public MountainStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MountainStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + if (y > 5) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + + float radius = MHelper.randRange(50, 100, random); + float height = radius * MHelper.randRange(0.8F, 1.2F, random); + CrystalMountainPiece piece = new CrystalMountainPiece( + new BlockPos(x, y, z), + radius, + height, + random, + biome + ); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } + diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index d67faea4..0d817205 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -1,7 +1,8 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; @@ -9,33 +10,37 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.PaintedMountainPiece; public class PaintedMountainStructure extends FeatureBaseStructure { private static final BlockState[] VARIANTS; - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; + + public PaintedMountainStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + PaintedMountainStructure::generatePieces + )); } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 50) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); int count = MHelper.floor(height * MHelper.randRange(0.1F, 0.35F, random) + 1); @@ -43,12 +48,12 @@ public class PaintedMountainStructure extends FeatureBaseStructure { for (int i = 0; i < count; i++) { slises[i] = VARIANTS[random.nextInt(VARIANTS.length)]; } - this.pieces.add(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises)); + structurePiecesBuilder.addPiece(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises)); } //this.calculateBoundingBox(); } - } + static { VARIANTS = new BlockState[] { diff --git a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java index 4e4e565e..d2ca8d86 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -1,50 +1,46 @@ package ru.betterend.world.structures.features; +import java.util.Random; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.Random; - public abstract class SDFStructureFeature extends FeatureBaseStructure { - - protected abstract SDF getSDF(BlockPos pos, Random random); - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; + public SDFStructureFeature(PieceGenerator generator) { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + generator + )); } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - BlockPos start = new BlockPos(x, y, z); - VoxelPiece piece = new VoxelPiece((world) -> { - ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); - }, random.nextInt()); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); + + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context, BiFunction sdf) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + if (y > 5) { + BlockPos start = new BlockPos(x, y, z); + VoxelPiece piece = new VoxelPiece((world) -> { + sdf.apply(start, random).fillRecursive(world, start); + }, random.nextInt()); + + structurePiecesBuilder.addPiece(piece); } + + //this.calculateBoundingBox(); } } From dca9f84ccfdd155189ef65457c87b244660abf5d Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 14:53:33 +0100 Subject: [PATCH 09/56] More compiler fixes --- .../blocks/DragonTreeSaplingBlock.java | 5 +-- .../betterend/blocks/EndLotusStemBlock.java | 7 +-- .../blocks/HelixTreeSaplingBlock.java | 3 +- .../blocks/HydrothermalVentBlock.java | 13 +++--- .../blocks/LacugroveSaplingBlock.java | 3 +- .../blocks/LucerniaSaplingBlock.java | 3 +- .../betterend/blocks/LumecornSeedBlock.java | 43 +++++++++++-------- .../blocks/MossyGlowshroomSaplingBlock.java | 3 +- .../blocks/NeonCactusPlantBlock.java | 14 +++--- .../blocks/PythadendronSaplingBlock.java | 9 +--- .../betterend/blocks/SmallAmaranitaBlock.java | 13 +++--- .../blocks/SmallJellyshroomBlock.java | 14 +++--- .../betterend/blocks/TenaneaSaplingBlock.java | 9 +--- .../blocks/UmbrellaTreeSaplingBlock.java | 11 +---- .../blocks/VentBubbleColumnBlock.java | 9 ++-- .../blocks/basis/PottableFeatureSapling.java | 12 ++++-- .../entities/EndStoneSmelterBlockEntity.java | 16 +++---- .../entities/EternalPedestalEntity.java | 4 +- .../entities/InfusionPedestalEntity.java | 4 +- .../complexmaterials/MetalMaterial.java | 2 +- .../mixin/common/EndPodiumFeatureMixin.java | 8 ++-- .../java/ru/betterend/util/BlockFixer.java | 9 ++-- .../features/PaintedMountainStructure.java | 2 +- 23 files changed, 110 insertions(+), 106 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java index 025701f0..d60f262f 100644 --- a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java @@ -13,10 +13,9 @@ public class DragonTreeSaplingBlock extends PottableFeatureSapling { public DragonTreeSaplingBlock() { super(); } - + @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.DRAGON_TREE.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 041f22ff..4eb88dac 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.Map; + import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -29,8 +32,6 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.util.BlocksHelper; -import java.util.Map; - public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, RenderLayerProvider { public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; @@ -88,7 +89,7 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo @SuppressWarnings("deprecation") public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { if (state.getValue(WATERLOGGED)) { - world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } diff --git a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java index 788665b4..fb631a80 100644 --- a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java @@ -11,8 +11,7 @@ import ru.betterend.registry.EndFeatures; public class HelixTreeSaplingBlock extends PottableFeatureSapling { @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.HELIX_TREE.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 30d9be03..780a3551 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -34,15 +38,12 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.registry.EndBlocks; -import java.util.Random; - @SuppressWarnings("deprecation") public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlock, LiquidBlockContainer, SimpleWaterloggedBlock { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; @@ -90,7 +91,8 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo return Blocks.WATER.defaultBlockState(); } else if (state.getValue(WATERLOGGED) && facing == Direction.UP && neighborState.is(Blocks.WATER)) { - world.getBlockTicks().scheduleTick(pos, this, 20); + //TODO: 1.18 see if it still ticks + world./*getBlockTicks().*/scheduleTick(pos, this, 20); } return state; } @@ -118,7 +120,8 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, EndBlocks.VENT_BUBBLE_COLUMN); - world.getBlockTicks().scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); + //TODO: 1.18 see if it still ticks + world./*getBlockTicks().*/scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); } } diff --git a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java index 0f6dd809..fb328c0a 100644 --- a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java @@ -15,8 +15,7 @@ public class LacugroveSaplingBlock extends PottableFeatureSapling { } @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.LACUGROVE.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java index 506d1691..d371ef99 100644 --- a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java @@ -15,8 +15,7 @@ public class LucerniaSaplingBlock extends PottableFeatureSapling { } @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.LUCERNIA.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index efd74d09..c5086774 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -1,30 +1,39 @@ package ru.betterend.blocks; +import java.util.Optional; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; -import java.util.Random; - public class LumecornSeedBlock extends EndPlantWithAgeBlock { - - @Override - public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - EndFeatures.LUMECORN.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); - } - - @Override - protected boolean isTerrain(BlockState state) { - return state.is(EndBlocks.END_MOSS); - } - - @Override - public BlockBehaviour.OffsetType getOffsetType() { - return BlockBehaviour.OffsetType.NONE; - } + + @Override + public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { + ((Feature) (EndFeatures.LUMECORN.getFeature())).place(new FeaturePlaceContext<>( + Optional.empty(), + world, + null, + random, + pos, + (NoneFeatureConfiguration) null)); + } + + @Override + protected boolean isTerrain(BlockState state) { + return state.is(EndBlocks.END_MOSS); + } + + @Override + public BlockBehaviour.OffsetType getOffsetType() { + return BlockBehaviour.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java index 705992f7..6ed74344 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java @@ -15,8 +15,7 @@ public class MossyGlowshroomSaplingBlock extends PottableFeatureSapling { } @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.MOSSY_GLOWSHROOM.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index c7234f0c..c5674904 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -1,7 +1,12 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.List; +import java.util.Random; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -46,10 +51,6 @@ import ru.betterend.blocks.EndBlockProperties.CactusBottom; import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndBlocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - @SuppressWarnings("deprecation") public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, RenderLayerProvider, PottablePlant { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; @@ -115,9 +116,10 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate @Override public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { - world.getBlockTicks().scheduleTick(pos, this, 2); + //TODO: 1.18 Check if this still workd + world./*getBlockTicks().*/scheduleTick(pos, this, 2); if (state.getValue(WATERLOGGED)) { - world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } Direction dir = state.getValue(FACING); BlockState downState = world.getBlockState(pos.relative(dir.getOpposite())); diff --git a/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java b/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java index a965af01..9d6afd70 100644 --- a/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java @@ -4,20 +4,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class PythadendronSaplingBlock extends PottableFeatureSapling { public PythadendronSaplingBlock() { - super(); - } - - @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { - return EndFeatures.PYTHADENDRON_TREE.getFeature(); + super((state)->EndFeatures.PYTHADENDRON_TREE.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java index c0625123..d8303db9 100644 --- a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Optional; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; @@ -7,7 +10,9 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; @@ -16,8 +21,6 @@ import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; -import java.util.Random; - public class SmallAmaranitaBlock extends EndPlantBlock { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 10, 12); @@ -30,8 +33,8 @@ public class SmallAmaranitaBlock extends EndPlantBlock { public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { BlockPos bigPos = growBig(world, pos); if (bigPos != null) { - if (EndFeatures.GIGANTIC_AMARANITA.getFeature() - .place(new FeaturePlaceContext<>(world, null, random, bigPos, null))) { + if (((Feature)EndFeatures.GIGANTIC_AMARANITA.getFeature()) + .place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, bigPos, null))) { replaceMushroom(world, bigPos); replaceMushroom(world, bigPos.south()); replaceMushroom(world, bigPos.east()); @@ -39,7 +42,7 @@ public class SmallAmaranitaBlock extends EndPlantBlock { } return; } - EndFeatures.LARGE_AMARANITA.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); + ((Feature)EndFeatures.LARGE_AMARANITA.getFeature()).place( new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos, null)); } @Override diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index a59f6de1..a2a6ebfc 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -1,7 +1,13 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.List; +import java.util.Optional; +import java.util.Random; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -20,7 +26,9 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; @@ -35,10 +43,6 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndFeatures; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - public class SmallJellyshroomBlock extends BaseAttachedBlock implements RenderLayerProvider, BonemealableBlock, PottablePlant { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); @@ -101,7 +105,7 @@ public class SmallJellyshroomBlock extends BaseAttachedBlock implements RenderLa @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { BlocksHelper.setWithUpdate(world, pos, Blocks.AIR); - EndFeatures.JELLYSHROOM.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); + ((Feature)EndFeatures.JELLYSHROOM.getFeature()).place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos, null)); } @Override diff --git a/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java b/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java index e0c7c295..b56c1cfc 100644 --- a/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java @@ -4,20 +4,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class TenaneaSaplingBlock extends PottableFeatureSapling { public TenaneaSaplingBlock() { - super(); - } - - @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { - return EndFeatures.TENANEA.getFeature(); + super((state)->EndFeatures.TENANEA.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java index 66c76870..0ff48c93 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java @@ -4,7 +4,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.bclib.client.render.BCLRenderLayer; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; @@ -12,15 +11,9 @@ import ru.betterend.registry.EndFeatures; public class UmbrellaTreeSaplingBlock extends PottableFeatureSapling { public UmbrellaTreeSaplingBlock() { - super(); + super((state)-> EndFeatures.UMBRELLA_TREE.getFeature()); } - - @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { - return EndFeatures.UMBRELLA_TREE.getFeature(); - } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.JUNGLE_MOSS); diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index 83babfe1..b0d2ba08 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Optional; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -33,9 +36,6 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Optional; -import java.util.Random; - public class VentBubbleColumnBlock extends Block implements BucketPickup, LiquidBlockContainer { public VentBubbleColumnBlock() { super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).noOcclusion().noCollission().noDrops()); @@ -76,7 +76,8 @@ public class VentBubbleColumnBlock extends Block implements BucketPickup, Liquid BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, this); - world.getBlockTicks().scheduleTick(up, this, 5); + //TODO: 1.18 check if this ticks + world./*getBlockTicks().*/scheduleTick(up, this, 5); } } return state; diff --git a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java index 20f5f24f..22363d30 100644 --- a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java +++ b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java @@ -1,14 +1,18 @@ package ru.betterend.blocks.basis; +import java.util.function.Function; + +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import ru.bclib.blocks.FeatureSaplingBlock; import ru.betterend.interfaces.PottablePlant; public abstract class PottableFeatureSapling extends FeatureSaplingBlock implements PottablePlant { - public PottableFeatureSapling() { - super(); + public PottableFeatureSapling(Function> featureSupplier) { + super(featureSupplier); } - public PottableFeatureSapling(int light) { - super(light); + public PottableFeatureSapling(int light, Function> featureSupplier) { + super(light, featureSupplier); } } diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index 7adad5af..aa585167 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -1,7 +1,12 @@ package ru.betterend.blocks.entities; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.fabric.api.registry.FuelRegistry; @@ -41,10 +46,6 @@ import ru.betterend.client.gui.EndStoneSmelterScreenHandler; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlockEntities; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible { private static final int[] TOP_SLOTS = new int[] {0, 1}; @@ -429,8 +430,9 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme } @Override - public CompoundTag save(CompoundTag tag) { - super.save(tag); + public void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putShort("BurnTime", (short) burnTime); tag.putShort("FuelTime", (short) fuelTime); tag.putShort("SmeltTime", (short) smeltTime); @@ -439,8 +441,6 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme CompoundTag usedRecipes = new CompoundTag(); recipesUsed.forEach((identifier, integer) -> usedRecipes.putInt(identifier.toString(), integer)); tag.put("RecipesUsed", usedRecipes); - - return tag; } public boolean canPlaceItem(int slot, ItemStack stack) { diff --git a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java index 84c2e74d..4546cf14 100644 --- a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java @@ -35,11 +35,11 @@ public class EternalPedestalEntity extends PedestalBlockEntity { } @Override - public CompoundTag save(CompoundTag tag) { + public void saveAdditional(CompoundTag tag) { if (hasRitual()) { tag.put("ritual", linkedRitual.toTag(new CompoundTag())); } - return super.save(tag); + super.saveAdditional(tag); } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java index 6d03ed5c..8d678176 100644 --- a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java @@ -40,11 +40,11 @@ public class InfusionPedestalEntity extends PedestalBlockEntity { } @Override - public CompoundTag save(CompoundTag tag) { + public void saveAdditional(CompoundTag tag) { if (hasRitual()) { tag.put("ritual", linkedRitual.toTag(new CompoundTag())); } - return super.save(tag); + super.saveAdditional(tag); } @Override diff --git a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java index 89736e67..87985bb0 100644 --- a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java +++ b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java @@ -150,7 +150,7 @@ public class MetalMaterial { final int level = material.getLevel(); rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(rawOre, 1, 3, 1)) : null; + ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(()->rawOre, 1, 3, 1)) : null; alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; if (hasOre) { TagAPI.addTag(alloyingOre, ore, rawOre); diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 69720262..71514556 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -1,5 +1,8 @@ package ru.betterend.mixin.common; +import java.util.Optional; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; @@ -23,8 +26,6 @@ import ru.bclib.util.StructureHelper; import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; -import java.util.Random; - @Mixin(EndPodiumFeature.class) public class EndPodiumFeatureMixin { private static BlockPos be_portalPosition; @@ -56,7 +57,8 @@ public class EndPodiumFeatureMixin { private FeaturePlaceContext be_setPosOnGround(FeaturePlaceContext featurePlaceContext) { WorldGenLevel world = featurePlaceContext.level(); BlockPos pos = be_updatePortalPos(world); - return new FeaturePlaceContext<>( + return new FeaturePlaceContext( + Optional.empty(), world, featurePlaceContext.chunkGenerator(), featurePlaceContext.random(), diff --git a/src/main/java/ru/betterend/util/BlockFixer.java b/src/main/java/ru/betterend/util/BlockFixer.java index 89b2bc55..f6fd4b06 100644 --- a/src/main/java/ru/betterend/util/BlockFixer.java +++ b/src/main/java/ru/betterend/util/BlockFixer.java @@ -1,6 +1,10 @@ package ru.betterend.util; +import java.util.Set; +import java.util.stream.IntStream; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -19,9 +23,6 @@ import ru.betterend.blocks.BlueVineBlock; import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; -import java.util.Set; -import java.util.stream.IntStream; - public class BlockFixer { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -75,7 +76,7 @@ public class BlockFixer { for (Direction dir : BlocksHelper.HORIZONTAL) { if (level.isEmptyBlock(POS.relative(dir))) { try { - level.getLiquidTicks().scheduleTick(POS, state.getFluidState().getType(), 0); + level.scheduleTick(POS, state.getFluidState().getType(), 0); } catch (Exception e) {} break; diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index 0d817205..08627346 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -40,7 +40,7 @@ public class PaintedMountainStructure extends FeatureBaseStructure { if (y > 50) { //TODO: 1.18 right way to get biome? Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - + float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); int count = MHelper.floor(height * MHelper.randRange(0.1F, 0.35F, random) + 1); From 78cc82932f11a175dae860c308fdf07ec8de0154 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 16:39:30 +0100 Subject: [PATCH 10/56] removed reading of top/under/underwater material for now --- .../world/features/BiomeIslandFeature.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 22838b86..701f6d35 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -8,8 +8,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; import ru.bclib.sdf.operator.SDFTranslate; @@ -25,21 +23,26 @@ public class BiomeIslandFeature extends DefaultFeature { private static OpenSimplexNoise simplexNoise = new OpenSimplexNoise(412L); private static BlockState topBlock = Blocks.GRASS_BLOCK.defaultBlockState(); private static BlockState underBlock = Blocks.DIRT.defaultBlockState(); - + @Override public boolean place(FeaturePlaceContext featureConfig) { final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); Biome biome = world.getBiome(pos); - SurfaceBuilderConfiguration surfaceConfig = biome.getGenerationSettings().getSurfaceBuilderConfig(); - BlockState topMaterial = surfaceConfig.getTopMaterial(); + int dist = BlocksHelper.downRay(world, pos, 10) + 1; + BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); + BlockState topMaterial = world.getBlockState(surfacePos); + + //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { - topBlock = ((SurfaceBuilderBaseConfiguration) surfaceConfig).getUnderwaterMaterial(); + topBlock = Blocks.GRAVEL.defaultBlockState(); + underBlock = Blocks.STONE.defaultBlockState(); } else { - topBlock = topMaterial; + topBlock = topMaterial.is(Blocks.AIR)?Blocks.GRASS_BLOCK.defaultBlockState():topMaterial; + underBlock = Blocks.DIRT.defaultBlockState(); } - underBlock = surfaceConfig.getUnderMaterial(); + simplexNoise = new OpenSimplexNoise(world.getSeed()); CENTER.set(pos); ISLAND.fillRecursive(world, pos.below()); From 108d2bd710cac0b68d19ebcc84f489aaa11d5ab7 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 16:45:20 +0100 Subject: [PATCH 11/56] Fixed compiler errors for REI --- .../integration/rei/REIAlloyingCategory.java | 19 ++++++++++------- .../integration/rei/REIAnvilCategory.java | 21 +++++++++++-------- .../integration/rei/REIInfusionCategory.java | 19 +++++++---------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index 14d2a1e7..e24c0a1c 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,26 +1,28 @@ package ru.betterend.integration.rei; +import java.text.DecimalFormat; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Lists; + import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; -import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; -import org.jetbrains.annotations.NotNull; import ru.betterend.registry.EndBlocks; -import java.text.DecimalFormat; -import java.util.List; - -public class REIAlloyingCategory implements TransferDisplayCategory { +public class REIAlloyingCategory implements DisplayCategory { private final EntryStack ICON; REIAlloyingCategory(EntryStack icon) { @@ -81,8 +83,9 @@ public class REIAlloyingCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIAlloyingDisplay display, IntList redSlots) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); matrices.pushPose(); diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 2347d512..fa2d0ebb 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,13 +1,20 @@ package ru.betterend.integration.rei; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Lists; + import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; -import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; @@ -18,14 +25,9 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import org.jetbrains.annotations.NotNull; import ru.betterend.blocks.basis.EndAnvilBlock; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class REIAnvilCategory implements TransferDisplayCategory { +public class REIAnvilCategory implements DisplayCategory { private final EntryStack[] ANVILS; REIAnvilCategory(EntryStack[] anvils) { @@ -85,8 +87,9 @@ public class REIAnvilCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIAnvilDisplay display, IntList redSlots) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); matrices.pushPose(); diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 06a456a0..12214fbd 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,27 +1,27 @@ package ru.betterend.integration.rei; +import java.util.ArrayList; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Lists; -import com.mojang.blaze3d.vertex.PoseStack; -import it.unimi.dsi.fastutil.ints.IntList; + import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; -import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; -import java.util.ArrayList; -import java.util.List; - -public class REIInfusionCategory implements TransferDisplayCategory { +public class REIInfusionCategory implements DisplayCategory { private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); private final EntryStack ICON; @@ -109,7 +109,4 @@ public class REIInfusionCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIInfusionDisplay display, IntList redSlots) {} } From 6c89c76c26db9b7c99ad2dc77a8c07048b4fe26b Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 17:42:18 +0100 Subject: [PATCH 12/56] Fixed all remaining compile errors (mind the TODOs, a lot of things are disabled) --- src/main/java/ru/betterend/BetterEnd.java | 2 - .../blocks/DragonTreeSaplingBlock.java | 8 +- .../blocks/HelixTreeSaplingBlock.java | 8 +- .../blocks/LacugroveSaplingBlock.java | 8 +- .../blocks/LucerniaSaplingBlock.java | 10 +- .../blocks/MossyGlowshroomSaplingBlock.java | 10 +- .../betterend/integration/rei/REIPlugin.java | 25 +++-- .../java/ru/betterend/registry/EndBlocks.java | 4 +- .../ru/betterend/registry/EndFeatures.java | 4 +- .../ru/betterend/world/biome/EndBiome.java | 7 ++ .../biome/land/FoggyMushroomlandBiome.java | 3 +- .../world/biome/land/MegalakeBiome.java | 3 +- .../world/biome/land/NeonOasisBiome.java | 3 +- .../features/terrain/DesertLakeFeature.java | 16 ++- .../features/terrain/EndLakeFeature.java | 24 +++-- .../terrain/FloatingSpireFeature.java | 23 ++-- .../world/features/terrain/GeyserFeature.java | 9 +- .../world/features/terrain/SpireFeature.java | 28 +++-- .../terrain/SulphuricCaveFeature.java | 10 +- .../terrain/SulphuricLakeFeature.java | 10 +- .../caves/CaveChunkPopulatorFeature.java | 17 +-- .../terrain/caves/EndCaveFeature.java | 35 +++--- .../terrain/caves/TunelCaveFeature.java | 28 ++--- .../world/generator/TerrainGenerator.java | 44 ++++---- .../world/structures/piece/CavePiece.java | 13 +-- .../piece/CrystalMountainPiece.java | 20 ++-- .../world/structures/piece/LakePiece.java | 47 ++++---- .../world/structures/piece/MountainPiece.java | 10 +- .../world/structures/piece/NBTPiece.java | 14 +-- .../piece/PaintedMountainPiece.java | 18 ++-- .../world/structures/piece/VoxelPiece.java | 10 +- .../surface/SulphuricSurfaceBuilder.java | 100 ------------------ .../world/surface/SurfaceBuilders.java | 50 --------- .../world/surface/UmbraSurfaceBuilder.java | 50 --------- 34 files changed, 241 insertions(+), 430 deletions(-) delete mode 100644 src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java delete mode 100644 src/main/java/ru/betterend/world/surface/SurfaceBuilders.java delete mode 100644 src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 531811b2..66c8da97 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -29,7 +29,6 @@ import ru.betterend.util.BonemealPlants; import ru.betterend.util.LootTableUtil; import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; -import ru.betterend.world.surface.SurfaceBuilders; public class BetterEnd implements ModInitializer { public static final String MOD_ID = "betterend"; @@ -44,7 +43,6 @@ public class BetterEnd implements ModInitializer { EndBlockEntities.register(); EndFeatures.register(); EndEntities.register(); - SurfaceBuilders.register(); EndBiomes.register(); EndTags.register(); EndEnchantments.register(); diff --git a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java index d60f262f..4c34dbde 100644 --- a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java @@ -4,19 +4,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class DragonTreeSaplingBlock extends PottableFeatureSapling { public DragonTreeSaplingBlock() { - super(); - } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.DRAGON_TREE.getFeature(); + super((state)->EndFeatures.DRAGON_TREE.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java index fb631a80..4fea40b2 100644 --- a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java @@ -4,17 +4,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class HelixTreeSaplingBlock extends PottableFeatureSapling { - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.HELIX_TREE.getFeature(); + public HelixTreeSaplingBlock() { + super((state)->EndFeatures.HELIX_TREE.getFeature()); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.AMBER_MOSS); diff --git a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java index fb328c0a..ebb1e3b5 100644 --- a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java @@ -4,19 +4,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class LacugroveSaplingBlock extends PottableFeatureSapling { public LacugroveSaplingBlock() { - super(); - } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.LACUGROVE.getFeature(); + super((state)->EndFeatures.LACUGROVE.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java index d371ef99..e1881306 100644 --- a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java @@ -4,21 +4,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class LucerniaSaplingBlock extends PottableFeatureSapling { public LucerniaSaplingBlock() { - super(); + super((state)->EndFeatures.LUCERNIA.getFeature()); } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.LUCERNIA.getFeature(); - } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.RUTISCUS); diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java index 6ed74344..5e63fdce 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java @@ -4,21 +4,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class MossyGlowshroomSaplingBlock extends PottableFeatureSapling { public MossyGlowshroomSaplingBlock() { - super(7); + super(7, (state)->EndFeatures.MOSSY_GLOWSHROOM.getFeature()); } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.MOSSY_GLOWSHROOM.getFeature(); - } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.END_MOSS) || world.getBlockState(pos.below()) diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index fac1bd48..622b4145 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,16 +1,18 @@ package ru.betterend.integration.rei; +import java.util.List; +import java.util.stream.Collectors; + import com.google.common.collect.Lists; + import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; -import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.plugin.common.DefaultPlugin; -import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.BlastingRecipe; @@ -24,10 +26,6 @@ import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - //https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java public class REIPlugin implements REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); @@ -54,13 +52,14 @@ public class REIPlugin implements REIClientPlugin { registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, REIBlastingDisplay::new); registry.registerRecipeFiller(AnvilRecipe.class, AnvilRecipe.TYPE, REIAnvilDisplay::new); registry.registerRecipeFiller(InfusionRecipe.class, InfusionRecipe.TYPE, REIInfusionDisplay::new); - - FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> { - if (time >= 2000) { - final List list = Collections.singletonList(EntryIngredients.of(item)); - registry.add(new REIAlloyingFuelDisplay(list, time)); - } - }); + + //TODO: 1.18 REI fix this +// FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> { +// if (time >= 2000) { +// final List list = Collections.singletonList(EntryIngredients.of(item)); +// registry.add(new REIAlloyingFuelDisplay(list, time)); +// } +// }); } @Override diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 4e9884cd..41f7c536 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -429,8 +429,8 @@ public class EndBlocks { public static final Block SILK_MOTH_HIVE = registerBlock("silk_moth_hive", new SilkMothHiveBlock()); // Ores // - public static final Block ENDER_ORE = registerBlock("ender_ore", new BaseOreBlock(EndItems.ENDER_SHARD, 1, 3, 5)); - public static final Block AMBER_ORE = registerBlock("amber_ore", new BaseOreBlock(EndItems.RAW_AMBER, 1, 2, 4)); + public static final Block ENDER_ORE = registerBlock("ender_ore", new BaseOreBlock(()->EndItems.ENDER_SHARD, 1, 3, 5)); + public static final Block AMBER_ORE = registerBlock("amber_ore", new BaseOreBlock(()->EndItems.RAW_AMBER, 1, 2, 4)); // Materials // public static final MetalMaterial THALLASIUM = MetalMaterial.makeNormal( diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 4f113998..b41b1f82 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -80,7 +80,6 @@ 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.surface.UmbraSurfaceBuilder; public class EndFeatures { // Trees // @@ -218,7 +217,8 @@ public class EndFeatures { "umbralith_arch", new ArchFeature( EndBlocks.UMBRALITH.stone, - UmbraSurfaceBuilder::getSurfaceState + //TODO: 1.18 this needs to change to a dynamic block + (pos)->Blocks.END_STONE.defaultBlockState() //UmbraSurfaceBuilder::getSurfaceState ), 10); public static final BCLFeature THIN_UMBRALITH_ARCH = registerChanced("thin_umbralith_arch", new ThinArchFeature(EndBlocks.UMBRALITH.stone), 15); diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 5245dc73..17b115a1 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -6,16 +6,23 @@ import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; public class EndBiome extends BCLBiome { public abstract static class Config { protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); + protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(Blocks.END_STONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); + protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); public final ResourceLocation ID; diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index a587e832..c77d9f44 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -21,7 +21,8 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .fogColor(41, 122, 173) .fogDensity(3) .waterAndFogColor(119, 227, 250) - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules + .chancedSurface(END_MOSS, END_MYCELIUM, END_STONE) //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 42400124..346c5ee4 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -22,7 +22,8 @@ public class MegalakeBiome extends EndBiome.Config { .fogDensity(1.75F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules + .chancedSurface(END_MOSS, ENDSTONE_DUST, END_STONE) //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) //TODO: 1.18 removed //.depth(0F) diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index b3d69dc9..5b3e7023 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -18,7 +18,8 @@ public class NeonOasisBiome extends EndBiome.Config { .fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(106, 238, 215) - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules + .chancedSurface(ENDSTONE_DUST, END_MOSS, END_STONE) //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 6f114656..3d3b3021 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -17,8 +19,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; - public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); @@ -123,10 +123,8 @@ public class DesertLakeFeature extends DefaultFeature { } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - state = world.getBiome(pos) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -198,10 +196,8 @@ public class DesertLakeFeature extends DefaultFeature { } else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { - state = world.getBiome(POS) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index b35a60f2..5db2f51a 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -17,8 +19,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; - public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); @@ -123,10 +123,12 @@ public class EndLakeFeature extends DefaultFeature { } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - state = world.getBiome(pos) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); +// state = world.getBiome(pos) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -193,10 +195,12 @@ public class EndLakeFeature extends DefaultFeature { // Make border else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { - state = world.getBiome(POS) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); +// state = world.getBiome(POS) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index d397fe89..be22d4cc 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -1,6 +1,11 @@ package ru.betterend.world.features.terrain; +import java.util.List; +import java.util.Optional; +import java.util.Random; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -17,9 +22,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; -import java.util.List; -import java.util.Random; - public class FloatingSpireFeature extends SpireFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { @@ -62,13 +64,16 @@ public class FloatingSpireFeature extends SpireFeature { if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState();//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - return world.getBiome(info.getPos()) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getUnderMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState(); +// return world.getBiome(info.getPos()) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getUnderMaterial(); } return info.getState(); }); @@ -77,7 +82,7 @@ public class FloatingSpireFeature extends SpireFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { EndFeatures.TENANEA_BUSH.getFeature() - .place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); + .place(new FeaturePlaceContext<>(Optional.empty(), world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index ae0aff33..7e6fd35e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -1,5 +1,9 @@ package ru.betterend.world.features.terrain; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; @@ -37,9 +41,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.util.BlockFixer; -import java.util.Random; -import java.util.function.Function; - public class GeyserFeature extends DefaultFeature { protected static final Function REPLACE1; protected static final Function REPLACE2; @@ -259,7 +260,7 @@ public class GeyserFeature extends DefaultFeature { } EndFeatures.SULPHURIC_LAKE.getFeature() - .place(new FeaturePlaceContext<>(world, chunkGenerator, random, pos, null)); + .place(new FeaturePlaceContext<>(Optional.empty(), world, chunkGenerator, random, pos, null)); double distance = radius1 * 1.7; BlockPos start = pos.offset(-distance, -halfHeight - 15 - distance, -distance); diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index 43dd04d7..e6ec58c7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -1,6 +1,12 @@ package ru.betterend.world.features.terrain; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -11,8 +17,8 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; import ru.bclib.sdf.operator.SDFSmoothUnion; @@ -24,10 +30,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @@ -65,13 +67,17 @@ public class SpireFeature extends DefaultFeature { if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState(); + //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - return world.getBiome(info.getPos()) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getUnderMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState(); +// return world.getBiome(info.getPos()) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getUnderMaterial(); } return info.getState(); }).fillRecursive(world, center); @@ -79,7 +85,7 @@ public class SpireFeature extends DefaultFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { EndFeatures.TENANEA_BUSH.getFeature() - .place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); + .place(new FeaturePlaceContext<>(Optional.empty(), world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index 8402a245..244a6e47 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -1,6 +1,10 @@ package ru.betterend.world.features.terrain; +import java.util.Random; +import java.util.Set; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -22,9 +26,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; -import java.util.Set; - public class SulphuricCaveFeature extends DefaultFeature { private static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -167,7 +168,8 @@ public class SulphuricCaveFeature extends DefaultFeature { state = world.getBlockState(mut); while (state.is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.VENT_BUBBLE_COLUMN.defaultBlockState()); - world.getBlockTicks() + //TODO: 1.18 test ticks + world/*.getBlockTicks()*/ .scheduleTick(mut, EndBlocks.VENT_BUBBLE_COLUMN, MHelper.randRange(8, 32, random)); mut.setY(mut.getY() + 1); state = world.getBlockState(mut); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 7d490631..430259fa 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -1,6 +1,10 @@ package ru.betterend.world.features.terrain; +import java.util.Random; +import java.util.Set; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -19,9 +23,6 @@ import ru.betterend.blocks.SulphurCrystalBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Random; -import java.util.Set; - public class SulphuricLakeFeature extends DefaultFeature { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); @@ -75,7 +76,8 @@ public class SulphuricLakeFeature extends DefaultFeature { else { if (!isAbsoluteBorder(world, POS)) { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); - world.getLiquidTicks().scheduleTick(POS, Fluids.WATER, 0); + //TODO: 1.18 check if this ticks + world./*getLiquidTicks().*/scheduleTick(POS, Fluids.WATER, 0); brimstone.add(POS.below()); if (random.nextBoolean()) { brimstone.add(POS.below(2)); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index 9aa57da0..b82ffbb7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -1,6 +1,12 @@ package ru.betterend.world.features.terrain.caves; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -16,10 +22,6 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.Random; -import java.util.Set; -import java.util.function.Supplier; - public class CaveChunkPopulatorFeature extends DefaultFeature { private Supplier supplier; @@ -40,7 +42,8 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { MutableBlockPos max = new MutableBlockPos().set(pos); fillSets(sx, sz, world.getChunk(pos), floorPositions, ceilPositions, min, max); EndCaveBiome biome = supplier.get(); - BlockState surfaceBlock = biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 This needs to change to a configured material + BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); BlockFixer.fixBlocks(world, min, max); @@ -111,7 +114,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.above(), null)); } } }); @@ -127,7 +130,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 24d1e9a8..436dacae 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -1,7 +1,13 @@ package ru.betterend.world.features.terrain.caves; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.Set; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -14,9 +20,8 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; -import ru.bclib.interfaces.BiomeSetter; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; @@ -25,10 +30,6 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.List; -import java.util.Random; -import java.util.Set; - public abstract class EndCaveFeature extends DefaultFeature { protected static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); protected static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @@ -74,10 +75,9 @@ public abstract class EndCaveFeature extends DefaultFeature { } } }); - BlockState surfaceBlock = biome.getBiome() - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + + //TODO: 1.18 this needs to change to a dynamic block + BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); placeWalls(world, biome, caveBlocks, random); @@ -99,7 +99,7 @@ public abstract class EndCaveFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.above(), null)); } } }); @@ -115,7 +115,7 @@ public abstract class EndCaveFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.below(), null)); } } }); @@ -153,12 +153,13 @@ public abstract class EndCaveFeature extends DefaultFeature { protected void setBiomes(WorldGenLevel world, EndCaveBiome biome, Set blocks) { blocks.forEach((pos) -> setBiome(world, pos, biome)); } - + protected void setBiome(WorldGenLevel world, BlockPos pos, EndCaveBiome biome) { - BiomeSetter array = (BiomeSetter) world.getChunk(pos).getBiomes(); - if (array != null) { - array.bclib_setBiome(biome.getActualBiome(), pos); - } + //TODO: 1.18 No longer implemented in BCLib +// BiomeSetter array = (BiomeSetter) world.getChunk(pos).getBiomes(); +// if (array != null) { +// array.bclib_setBiome(biome.getActualBiome(), pos); +// } } private BlockPos findPos(WorldGenLevel world, BlockPos pos, int radius, Random random) { diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 4bd9debf..0d55a62e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -1,7 +1,14 @@ package ru.betterend.world.features.terrain.caves; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.stream.IntStream; + import com.google.common.collect.Maps; import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -15,19 +22,14 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -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.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - public class TunelCaveFeature extends EndCaveFeature { private Set generate(WorldGenLevel world, BlockPos center, Random random) { int cx = center.getX() >> 4; @@ -166,10 +168,12 @@ public class TunelCaveFeature extends EndCaveFeature { } floorSets.forEach((biome, floorPositions) -> { - BlockState surfaceBlock = biome.getBiome() - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); +// BlockState surfaceBlock = biome.getBiome() +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); }); ceilSets.forEach((biome, ceilPositions) -> { @@ -197,7 +201,7 @@ public class TunelCaveFeature extends EndCaveFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.above(), null)); } } }); @@ -214,7 +218,7 @@ public class TunelCaveFeature extends EndCaveFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index e013b896..d5518706 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -1,19 +1,19 @@ package ru.betterend.world.generator; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import net.minecraft.util.Mth; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import ru.bclib.util.MHelper; -import ru.betterend.noise.OpenSimplexNoise; - import java.awt.Point; import java.util.List; import java.util.Map; import java.util.Random; import java.util.concurrent.locks.ReentrantLock; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import net.minecraft.util.Mth; +import net.minecraft.world.level.biome.BiomeSource; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + public class TerrainGenerator { private static final Map TERRAIN_BOOL_CACHE_MAP = Maps.newHashMap(); private static final ReentrantLock LOCKER = new ReentrantLock(); @@ -83,21 +83,23 @@ public class TerrainGenerator { } private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { - return 0F; - } - float depth = 0F; - for (int i = 0; i < OFFS.length; i++) { - int px = x + OFFS[i].x; - int pz = z + OFFS[i].y; - depth += getBiome(biomeSource, px, pz).getDepth() * COEF[i]; - } - return depth; + //TODO: 1.18 find alternative +// if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { +// return 0F; +// } +// float depth = 0F; +// for (int i = 0; i < OFFS.length; i++) { +// int px = x + OFFS[i].x; +// int pz = z + OFFS[i].y; +// depth += getBiome(biomeSource, px, pz).getDepth() * COEF[i]; +// } +// return depth; + return 0; } - private static Biome getBiome(BiomeSource biomeSource, int x, int z) { - return biomeSource.getNoiseBiome(x, 0, z); - } +// private static Biome getBiome(BiomeSource biomeSource, int x, int z) { +// return biomeSource.getNoiseBiome(x, 0, z); +// } /** * Check if this is land diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 3f425701..39bd6f58 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -1,24 +1,24 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class CavePiece extends BasePiece { private OpenSimplexNoise noise; private BlockPos center; @@ -32,12 +32,13 @@ public class CavePiece extends BasePiece { makeBoundingBox(); } - public CavePiece(ServerLevel serverLevel, CompoundTag tag) { + public CavePiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.CAVE_PIECE, tag); makeBoundingBox(); } - - @Override + + + @Override public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index f2949fe6..c3186d65 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -1,5 +1,7 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -17,34 +19,32 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class CrystalMountainPiece extends MountainPiece { private BlockState top; public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); - top = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + top = Blocks.END_STONE.defaultBlockState(); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } - public CrystalMountainPiece(ServerLevel serverLevel, CompoundTag tag) { - super(EndStructures.MOUNTAIN_PIECE, serverLevel, tag); + public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { + super(EndStructures.MOUNTAIN_PIECE, tag); } @Override protected void fromNbt(CompoundTag tag) { - super.fromNbt(tag); - top = BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block + top = Blocks.END_STONE.defaultBlockState(); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int sx = chunkPos.getMinBlockX(); int sz = chunkPos.getMinBlockZ(); MutableBlockPos pos = new MutableBlockPos(); @@ -139,8 +139,6 @@ public class CrystalMountainPiece extends MountainPiece { } } } - - return true; } private void crystal(ChunkAccess chunk, BlockPos pos, int radius, int height, float fill, Random random) { diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 888a27b8..37733a2b 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -1,6 +1,10 @@ package ru.betterend.world.structures.piece; +import java.util.Map; +import java.util.Random; + import com.google.common.collect.Maps; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -8,7 +12,6 @@ import net.minecraft.core.SectionPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -20,18 +23,16 @@ import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import net.minecraft.world.level.material.FluidState; -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.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; -import java.util.Map; -import java.util.Random; - public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -57,7 +58,7 @@ public class LakePiece extends BasePiece { makeBoundingBox(); } - public LakePiece(ServerLevel serverLevel, CompoundTag tag) { + public LakePiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.LAKE_PIECE, tag); makeBoundingBox(); } @@ -131,10 +132,12 @@ public class LakePiece extends BasePiece { )) { state = chunk.getBlockState(mut.above()); if (state.isAir()) { - state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = ENDSTONE; +// state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); } else { state = state.getFluidState() @@ -147,7 +150,6 @@ public class LakePiece extends BasePiece { } } fixWater(world, chunk, mut, random, sx, sz); - return true; } private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mut, Random random, int sx, int sz) { @@ -167,10 +169,12 @@ public class LakePiece extends BasePiece { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + bState = ENDSTONE; +// bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); } else { bState = bState.getFluidState() @@ -189,10 +193,12 @@ public class LakePiece extends BasePiece { mut.setY(y + 1); BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + bState = ENDSTONE; +// bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); } else { bState = bState.getFluidState() @@ -205,7 +211,8 @@ public class LakePiece extends BasePiece { } } else if (chunk.getBlockState(mut.move(Direction.UP)).isAir()) { - chunk.getLiquidTicks().scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); + //TODO: 1.18 test if this is thr right tick + /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); } } } diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index e20bfe39..0afc39e3 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -1,12 +1,15 @@ package ru.betterend.world.structures.piece; +import java.util.Map; +import java.util.Random; + import com.google.common.collect.Maps; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; @@ -17,9 +20,6 @@ import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Map; -import java.util.Random; - public abstract class MountainPiece extends BasePiece { protected Map heightmap = Maps.newHashMap(); protected OpenSimplexNoise noise1; @@ -46,7 +46,7 @@ public abstract class MountainPiece extends BasePiece { makeBoundingBox(); } - public MountainPiece(StructurePieceType type, ServerLevel serverLevel, CompoundTag tag) { + public MountainPiece(StructurePieceType type, CompoundTag tag) { super(type, tag); makeBoundingBox(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index 061a2b20..c55746f5 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -1,11 +1,12 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -13,14 +14,13 @@ import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class NBTPiece extends BasePiece { private ResourceLocation structureID; private Rotation rotation; @@ -42,13 +42,14 @@ public class NBTPiece extends BasePiece { makeBoundingBox(); } - public NBTPiece(ServerLevel serverLevel, CompoundTag tag) { + public NBTPiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.NBT_PIECE, tag); makeBoundingBox(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); tag.putString("structureID", structureID.toString()); tag.putInt("rotation", rotation.ordinal()); tag.putInt("mirror", mirror.ordinal()); @@ -69,7 +70,7 @@ public class NBTPiece extends BasePiece { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { BoundingBox bounds = BoundingBox.fromCorners(new Vec3i( blockBox.minX(), this.boundingBox.minY(), @@ -90,7 +91,6 @@ public class NBTPiece extends BasePiece { if (cover) { StructureHelper.cover(world, bounds, random); } - return true; } private void makeBoundingBox() { diff --git a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java index 9ff908cc..a5212285 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -1,11 +1,12 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -16,11 +17,10 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.util.MHelper; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class PaintedMountainPiece extends MountainPiece { private BlockState[] slises; @@ -29,13 +29,13 @@ public class PaintedMountainPiece extends MountainPiece { this.slises = slises; } - public PaintedMountainPiece(ServerLevel serverLevel, CompoundTag tag) { - super(EndStructures.PAINTED_MOUNTAIN_PIECE, serverLevel, tag); + public PaintedMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { + super(EndStructures.PAINTED_MOUNTAIN_PIECE, tag); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { - super.addAdditionalSaveData(serverLevel, tag); + protected void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); ListTag slise = new ListTag(); for (BlockState state : slises) { slise.add(NbtUtils.writeBlockState(state)); @@ -54,7 +54,7 @@ public class PaintedMountainPiece extends MountainPiece { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int sx = chunkPos.getMinBlockX(); int sz = chunkPos.getMinBlockZ(); MutableBlockPos pos = new MutableBlockPos(); @@ -101,7 +101,5 @@ public class PaintedMountainPiece extends MountainPiece { } } } - - return true; } } diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index 56189f52..69edcbaa 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -1,19 +1,19 @@ package ru.betterend.world.structures.piece; +import java.util.Random; +import java.util.function.Consumer; + import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.world.structures.StructureWorld; import ru.betterend.registry.EndStructures; -import java.util.Random; -import java.util.function.Consumer; - public class VoxelPiece extends BasePiece { private StructureWorld world; @@ -24,7 +24,7 @@ public class VoxelPiece extends BasePiece { this.boundingBox = world.getBounds(); } - public VoxelPiece(ServerLevel level, CompoundTag tag) { + public VoxelPiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.VOXEL_PIECE, tag); this.boundingBox = world.getBounds(); } diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java deleted file mode 100644 index b692cd39..00000000 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java +++ /dev/null @@ -1,100 +0,0 @@ -package ru.betterend.world.surface; - -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import ru.bclib.util.MHelper; -import ru.betterend.noise.OpenSimplexNoise; - -import java.util.Random; - -public class SulphuricSurfaceBuilder extends SurfaceBuilder { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - - public SulphuricSurfaceBuilder() { - super(SurfaceBuilderBaseConfiguration.CODEC); - } - - @Override - public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) { - double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); - if (value < -0.6) { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.DEFAULT_END_CONFIG - ); - } - else if (value < -0.3) { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.FLAVOLITE_CONFIG - ); - } - else if (value < 0.5) { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.SULFURIC_ROCK_CONFIG - ); - } - else { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.BRIMSTONE_CONFIG - ); - } - } - - /*public static SulphuricSurfaceBuilder register(String name) { - return Registry.register(Registry.SURFACE_BUILDER, name, new SulphuricSurfaceBuilder()); - }*/ -} \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java b/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java deleted file mode 100644 index 3252f12b..00000000 --- a/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.betterend.world.surface; - -import net.minecraft.core.Registry; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import ru.betterend.registry.EndBlocks; - -public class SurfaceBuilders { - public static final SurfaceBuilderBaseConfiguration DEFAULT_END_CONFIG = makeSimpleConfig(Blocks.END_STONE); - public static final SurfaceBuilderBaseConfiguration FLAVOLITE_CONFIG = makeSimpleConfig(EndBlocks.FLAVOLITE.stone); - public static final SurfaceBuilderBaseConfiguration BRIMSTONE_CONFIG = makeSimpleConfig(EndBlocks.BRIMSTONE); - public static final SurfaceBuilderBaseConfiguration SULFURIC_ROCK_CONFIG = makeSimpleConfig(EndBlocks.SULPHURIC_ROCK.stone); - public static final SurfaceBuilderBaseConfiguration UMBRA_SURFACE_CONFIG = makeSimpleConfig(EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_FULL_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_FULL, EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_HEAVY_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_HEAVY, EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_THIN_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_THIN, EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_TINY_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_TINY, EndBlocks.UMBRALITH.stone); - - public static final SurfaceBuilder SULPHURIC_SURFACE = register( - "sulphuric_surface", - new SulphuricSurfaceBuilder() - ); - public static final SurfaceBuilder UMBRA_SURFACE = register( - "umbra_surface", - new UmbraSurfaceBuilder() - ); - - private static SurfaceBuilder register(String name, SurfaceBuilder builder) { - return Registry.register(Registry.SURFACE_BUILDER, name, builder); - } - - private static SurfaceBuilderBaseConfiguration makeSimpleConfig(Block block) { - BlockState state = block.defaultBlockState(); - return new SurfaceBuilderBaseConfiguration(state, state, state); - } - - private static SurfaceBuilderBaseConfiguration makeSurfaceConfig(Block surface, Block under) { - return new SurfaceBuilderBaseConfiguration( - surface.defaultBlockState(), - under.defaultBlockState(), - under.defaultBlockState() - ); - } - - public static void register() { - } -} diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java deleted file mode 100644 index 33636ab6..00000000 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.betterend.world.surface; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import ru.bclib.util.MHelper; -import ru.betterend.noise.OpenSimplexNoise; - -import java.util.Random; - -public class UmbraSurfaceBuilder extends SurfaceBuilder { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); - - public UmbraSurfaceBuilder() { - super(SurfaceBuilderBaseConfiguration.CODEC); - } - - @Override - public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) { - int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60); - SurfaceBuilderBaseConfiguration config = getConfig(x, z, random); - SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config); - } - - public static BlockState getSurfaceState(BlockPos pos) { - return getConfig(pos.getX(), pos.getZ(), MHelper.RANDOM).getTopMaterial(); - } - - private static SurfaceBuilderBaseConfiguration getConfig(int x, int z, Random random) { - float grass = ((float) NOISE.eval(x * 0.03, z * 0.03) + (float) NOISE.eval(x * 0.1, z * 0.1) * 0.6F + random.nextFloat() * 0.2F) - 0.05F; - if (grass > 0.4F) { - return SurfaceBuilders.PALLIDIUM_FULL_SURFACE_CONFIG; - } - else if (grass > 0.15F) { - return SurfaceBuilders.PALLIDIUM_HEAVY_SURFACE_CONFIG; - } - else if (grass > -0.15) { - return SurfaceBuilders.PALLIDIUM_THIN_SURFACE_CONFIG; - } - else if (grass > -0.4F) { - return SurfaceBuilders.PALLIDIUM_TINY_SURFACE_CONFIG; - } - else { - return SurfaceBuilders.UMBRA_SURFACE_CONFIG; - } - } -} \ No newline at end of file From 6b63be32b0b8f7dfc643b7b4cc3306893e15fa44 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 18:12:09 +0100 Subject: [PATCH 13/56] Fixed some bootup errors --- .../interfaces/StructureFeaturesAccessor.java | 9 ++++++ .../mixin/common/EndCityFeatureMixin.java | 32 ++++++++++++------- .../common/NoiseBasedChunkGeneratorMixin.java | 27 ++++++++-------- .../mixin/common/StructureFeaturesMixin.java | 19 +++++++++++ .../ru/betterend/world/biome/EndBiome.java | 3 +- .../resources/betterend.mixins.common.json | 4 +-- 6 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java create mode 100644 src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java diff --git a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java new file mode 100644 index 00000000..4d466609 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java @@ -0,0 +1,9 @@ +package ru.betterend.interfaces; + +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public interface StructureFeaturesAccessor { + ConfiguredStructureFeature> getEND_CITY(); +} diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 6ec5f02f..1895cd72 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,13 +1,17 @@ package ru.betterend.mixin.common; +import java.util.Optional; +import java.util.Random; + import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.LegacyRandomSource; import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -17,20 +21,24 @@ import ru.betterend.world.generator.GeneratorOptions; @Mixin(EndCityFeature.class) public class EndCityFeatureMixin { - @Inject(method = "isFeatureChunk", at = @At("HEAD"), cancellable = true) - private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, LevelHeightAccessor levelHeightAccessor, CallbackInfoReturnable info) { + @Inject(method = "pieceGeneratorSupplier", at = @At("HEAD"), cancellable = true) + private static void be_isFeatureChunk(PieceGeneratorSupplier.Context context, CallbackInfoReturnable>> info) { + final ChunkPos pos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + //TODO: 1.18 that is a different random source! + Random chunkRandom = new WorldgenRandom(new LegacyRandomSource(pos.x*pos.z)); + if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); - if (chance == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); - info.cancel(); - } - else if (chunkRandom.nextInt(chance) == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); - info.cancel(); + if (chance == 0 || chunkRandom.nextInt(chance) == 0) { + if (!(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60)){ + info.cancel(); + info.setReturnValue(Optional.empty()); + } } else { - info.setReturnValue(false); + info.setReturnValue(Optional.empty()); info.cancel(); } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index aa8b7619..4e98411e 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,5 +1,8 @@ package ru.betterend.mixin.common; +import java.util.function.Supplier; + +import net.minecraft.core.Registry; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; @@ -11,11 +14,8 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; -import java.util.function.Supplier; - @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Final @@ -26,16 +26,17 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { super(populationSource, biomeSource, structuresConfig, worldSeed); } - @Inject(method = "(Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void beOnInit(BiomeSource populationSource, BiomeSource biomeSource, long seed, Supplier settings, CallbackInfo info) { + @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) + private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); } - - @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) - private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { - if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { - TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); - info.cancel(); - } - } + + //TODO: 1.18 Find anothe rplace for this +// @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) +// private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { +// if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { +// TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); +// info.cancel(); +// } +// } } diff --git a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java new file mode 100644 index 00000000..bad4c781 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java @@ -0,0 +1,19 @@ +package ru.betterend.mixin.common; + +import net.minecraft.data.worldgen.StructureFeatures; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import ru.betterend.interfaces.StructureFeaturesAccessor; + +@Mixin(StructureFeatures.class) +public class StructureFeaturesMixin implements StructureFeaturesAccessor { + @Shadow @Final private static ConfiguredStructureFeature> END_CITY; + + public ConfiguredStructureFeature> getEND_CITY(){ + return END_CITY; + } +} diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 17b115a1..0aabcfef 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -9,9 +9,9 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; +import ru.betterend.interfaces.StructureFeaturesAccessor; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -62,6 +62,7 @@ public class EndBiome extends BCLBiome { biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); + EndBiome biome = builder.build(biomeConfig.getSupplier()); biome.addCustomData("has_caves", biomeConfig.hasCaves()); diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 3640ff46..006ceeee 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -4,7 +4,6 @@ "package": "ru.betterend.mixin.common", "compatibilityLevel": "JAVA_16", "mixins": [ - "BiomeGenerationSettingsAccessor", "NoiseBasedChunkGeneratorMixin", "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", @@ -25,7 +24,8 @@ "MonsterMixin", "EntityMixin", "PlayerMixin", - "SlimeMixin" + "SlimeMixin", + "StructureFeaturesMixin" ], "injectors": { "defaultRequire": 1 From fb422d07be23fbcaf45bacfddfd93a1e0a3e50c8 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 09:35:45 +0100 Subject: [PATCH 14/56] Make sure enderman ar default spawns --- src/main/java/ru/betterend/world/biome/EndBiome.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 0aabcfef..bab7a4a1 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -5,6 +5,7 @@ import java.util.function.BiFunction; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; @@ -39,6 +40,10 @@ public class EndBiome extends BCLBiome { protected boolean hasCaves(){ return true; } + + protected boolean spawnVanillaMobs(){ + return true; + } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -59,6 +64,10 @@ public class EndBiome extends BCLBiome { .wetness(0.5f) .precipitation(Biome.Precipitation.NONE); + if (biomeConfig.spawnVanillaMobs()){ + builder.spawn(EntityType.ENDERMAN, 10, 1, 4); + } + biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); From a966671e4548287308acf4f626ff5e1df3b1b88c Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 10:45:57 +0100 Subject: [PATCH 15/56] disabled Patchouli until they release a 1.18 version --- build.gradle | 2 +- src/main/java/ru/betterend/item/GuideBookItem.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index ca626f61..f3d07a80 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - useApi "vazkii.patchouli:Patchouli:1.17-${project.patchouli_version}" + // useApi "vazkii.patchouli:Patchouli:1.17-${project.patchouli_version}" println "Using local BCLib: ${local_bclib}" if (local_bclib){ implementation( project(path:":BCLib", configuration: 'dev') ) diff --git a/src/main/java/ru/betterend/item/GuideBookItem.java b/src/main/java/ru/betterend/item/GuideBookItem.java index 39e69ed5..6a1fab05 100644 --- a/src/main/java/ru/betterend/item/GuideBookItem.java +++ b/src/main/java/ru/betterend/item/GuideBookItem.java @@ -1,5 +1,7 @@ package ru.betterend.item; +import java.util.List; + import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -15,9 +17,6 @@ import ru.bclib.items.ModelProviderItem; import ru.betterend.BetterEnd; import ru.betterend.registry.EndItems; import ru.betterend.util.LangUtil; -import vazkii.patchouli.api.PatchouliAPI; - -import java.util.List; public class GuideBookItem extends ModelProviderItem { public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); @@ -33,7 +32,8 @@ public class GuideBookItem extends ModelProviderItem { @Override public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { if (!world.isClientSide && user instanceof ServerPlayer) { - PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); + //TODO: reanable Patchouli once it is available for 1.18 + //PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); return InteractionResultHolder.success(user.getItemInHand(hand)); } return InteractionResultHolder.consume(user.getItemInHand(hand)); From 4ff84c5e869b5a65e0938998babef45ecf12c07f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 8 Dec 2021 17:29:06 +0300 Subject: [PATCH 16/56] Library update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 582b8428..ff288573 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,6 +20,6 @@ archives_base_name=better-end patchouli_version = 55-FABRIC-SNAPSHOT fabric_version = 0.44.0+1.18 -bclib_version = 1.0.1 +bclib_version = 1.0.3 rei_version = 7.0.343 canvas_version = 1.0.+ From 396eb27175dd94f0e4b8cd14326a8eafb522310f Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 16:34:41 +0100 Subject: [PATCH 17/56] Mixin fix --- .../java/ru/betterend/mixin/common/WorldGenRegionMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java index cbd755db..046a2c44 100644 --- a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java +++ b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java @@ -3,6 +3,7 @@ package ru.betterend.mixin.common; import net.minecraft.core.BlockPos; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.ChunkAccess; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -14,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public class WorldGenRegionMixin { @Final @Shadow - private ChunkPos center; + private ChunkAccess center; @Inject(method = "ensureCanWrite", at = @At("HEAD"), cancellable = true) private void be_alterBlockCheck(BlockPos blockPos, CallbackInfoReturnable info) { From b5b8963da4f378cabdd288eaa249925412c64383 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 16:35:20 +0100 Subject: [PATCH 18/56] Minor cleanup --- src/main/java/ru/betterend/world/biome/EndBiome.java | 9 --------- .../world/biome/land/CrystalMountainsBiome.java | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index bab7a4a1..0aabcfef 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -5,7 +5,6 @@ import java.util.function.BiFunction; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; @@ -40,10 +39,6 @@ public class EndBiome extends BCLBiome { protected boolean hasCaves(){ return true; } - - protected boolean spawnVanillaMobs(){ - return true; - } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -64,10 +59,6 @@ public class EndBiome extends BCLBiome { .wetness(0.5f) .precipitation(Biome.Precipitation.NONE); - if (biomeConfig.spawnVanillaMobs()){ - builder.spawn(EntityType.ENDERMAN, 10, 1, 4); - } - biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 7ca59f31..2f977311 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -19,7 +19,7 @@ public class CrystalMountainsBiome extends EndBiome.Config { .plantsColor(255, 133, 211) .surface(EndBlocks.CRYSTAL_MOSS) .music(EndSounds.MUSIC_OPENSPACE) - .feature(EndFeatures.ROUND_CAVE) + //.feature(EndFeatures.ROUND_CAVE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } From df6845642ffd8c04c04c585f4e7a2c0808e8201a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 16:36:10 +0100 Subject: [PATCH 19/56] Fixed call --- .../java/ru/betterend/mixin/common/WorldGenRegionMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java index 046a2c44..fb9c0cf3 100644 --- a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java +++ b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java @@ -19,9 +19,10 @@ public class WorldGenRegionMixin { @Inject(method = "ensureCanWrite", at = @At("HEAD"), cancellable = true) private void be_alterBlockCheck(BlockPos blockPos, CallbackInfoReturnable info) { + ChunkPos cPos = center.getPos(); int x = blockPos.getX() >> 4; int z = blockPos.getZ() >> 4; WorldGenRegion region = (WorldGenRegion) (Object) this; - info.setReturnValue(Math.abs(x - center.x) < 2 && Math.abs(z - center.z) < 2); + info.setReturnValue(Math.abs(x - cPos.x) < 2 && Math.abs(z - cPos.z) < 2); } } From 2c5c030f29ce7456599f4d82a891888013b703ff Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 17:04:24 +0100 Subject: [PATCH 20/56] Added BiomeTest to feature placers --- .../world/structures/features/EternalPortalStructure.java | 3 +++ .../world/structures/features/FeatureBaseStructure.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 136f49a5..c9ab83d8 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplie import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.StructureHelper; +import ru.bclib.world.structures.BCLStructureFeature; import ru.betterend.BetterEnd; import ru.betterend.world.structures.piece.NBTPiece; @@ -30,6 +31,8 @@ public class EternalPortalStructure extends FeatureBaseStructure { } protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + if (!BCLStructureFeature.isValidBiome(context)) return false; + final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index 2a56e2b6..f16cea4f 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -12,6 +12,7 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import ru.bclib.world.structures.BCLStructureFeature; public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); @@ -21,7 +22,7 @@ public abstract class FeatureBaseStructure extends StructureFeature context) { - return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor()) >= 20; + return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor()) >= 20 && BCLStructureFeature.isValidBiome(context); } private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { From 1c79354e13ddef12489d085a7f88b060dbae73ce Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 17:28:09 +0100 Subject: [PATCH 21/56] Removed double features --- .../java/ru/betterend/world/biome/land/ChorusForestBiome.java | 2 -- .../ru/betterend/world/biome/land/CrystalMountainsBiome.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index af608a9a..6337c206 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -32,8 +32,6 @@ public class ChorusForestBiome extends EndBiome.Config { .feature(EndFeatures.PYTHADENDRON_BUSH) .feature(EndFeatures.PURPLE_POLYPORE) .feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) - //TODO: 1.18 why was this added twice? - //.feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) .feature(EndFeatures.CHORUS_GRASS) .feature(EndFeatures.CHORUS_MUSHROOM) .feature(EndFeatures.TAIL_MOSS) diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 2f977311..37da7718 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -19,7 +19,6 @@ public class CrystalMountainsBiome extends EndBiome.Config { .plantsColor(255, 133, 211) .surface(EndBlocks.CRYSTAL_MOSS) .music(EndSounds.MUSIC_OPENSPACE) - //.feature(EndFeatures.ROUND_CAVE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } From e8a40246b4345f24c18ccd561af9fdc221a41a92 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 19:50:26 +0100 Subject: [PATCH 22/56] Example implementation of custom noise for SurfaceRules --- .../ru/betterend/world/biome/EndBiome.java | 3 ++ .../world/biome/land/SulphurSpringsBiome.java | 9 ++++++ .../SulphuricSurfaceNoiseCondition.java | 28 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 0aabcfef..60cd3ef9 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -23,6 +23,9 @@ public class EndBiome extends BCLBiome { protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); + protected static final SurfaceRules.RuleSource FLAVOLITE =SurfaceRules.state(EndBlocks.FLAVOLITE.stone.defaultBlockState()); + protected static final SurfaceRules.RuleSource SULPHURIC_ROCK =SurfaceRules.state(EndBlocks.SULPHURIC_ROCK.stone.defaultBlockState()); + protected static final SurfaceRules.RuleSource BRIMSTONE =SurfaceRules.state(EndBlocks.BRIMSTONE.defaultBlockState()); public final ResourceLocation ID; diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 70415a3b..5cfd8175 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,12 +1,14 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; +import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; public class SulphurSpringsBiome extends EndBiome.Config { public SulphurSpringsBiome() { @@ -23,6 +25,13 @@ public class SulphurSpringsBiome extends EndBiome.Config { builder //TODO: 1.18 surface Rules //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .surface( + SurfaceRules.sequence( + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), END_STONE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), FLAVOLITE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), + BRIMSTONE + )) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) .waterColor(25, 90, 157) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java new file mode 100644 index 00000000..8dd46f45 --- /dev/null +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -0,0 +1,28 @@ +package ru.betterend.world.surface; + +import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + +public class SulphuricSurfaceNoiseCondition extends SurfaceNoiseCondition { + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); + + private final double threshold; + public SulphuricSurfaceNoiseCondition(double threshold){ + this.threshold = threshold; + } + + @Override + public boolean test(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + + return value < threshold; + } +} From 338aee76e949540622f5f006f9715f715222e3ee Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 20:43:03 +0100 Subject: [PATCH 23/56] cache last noise result for rule sequences --- .../world/surface/SulphuricSurfaceNoiseCondition.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 8dd46f45..503875e7 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -13,16 +13,24 @@ public class SulphuricSurfaceNoiseCondition extends SurfaceNoiseCondition { this.threshold = threshold; } + private int lastX = Integer.MIN_VALUE; + private int lastZ = Integer.MIN_VALUE; + private double lastValue = 0; @Override public boolean test(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); + if (lastX==x && lastZ==z) return lastValue < threshold; + double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( -0.1, 0.1, MHelper.RANDOM ); + lastX=x; + lastZ=z; + lastValue=value; return value < threshold; } } From 5c12813b3e2a863be9cd444d1dc822a4063b033c Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 21:11:24 +0100 Subject: [PATCH 24/56] Fixed surface gen in UmbraValleyBiome --- .../ru/betterend/world/biome/EndBiome.java | 5 ++ .../world/biome/land/SulphurSpringsBiome.java | 2 +- .../world/biome/land/UmbraValleyBiome.java | 48 ++++++++++++------- .../SulphuricSurfaceNoiseCondition.java | 7 +-- .../surface/UmbraSurfaceNoiseCondition.java | 39 +++++++++++++++ 5 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 60cd3ef9..3a2b923a 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -26,6 +26,11 @@ public class EndBiome extends BCLBiome { protected static final SurfaceRules.RuleSource FLAVOLITE =SurfaceRules.state(EndBlocks.FLAVOLITE.stone.defaultBlockState()); protected static final SurfaceRules.RuleSource SULPHURIC_ROCK =SurfaceRules.state(EndBlocks.SULPHURIC_ROCK.stone.defaultBlockState()); protected static final SurfaceRules.RuleSource BRIMSTONE =SurfaceRules.state(EndBlocks.BRIMSTONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_FULL =SurfaceRules.state(EndBlocks.PALLIDIUM_FULL.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_HEAVY =SurfaceRules.state(EndBlocks.PALLIDIUM_HEAVY.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_THIN =SurfaceRules.state(EndBlocks.PALLIDIUM_THIN.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_TINY =SurfaceRules.state(EndBlocks.PALLIDIUM_TINY.defaultBlockState()); + protected static final SurfaceRules.RuleSource UMBRALITH =SurfaceRules.state(EndBlocks.UMBRALITH.stone.defaultBlockState()); public final ResourceLocation ID; diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 5cfd8175..ae128e5a 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -23,7 +23,7 @@ public class SulphurSpringsBiome extends EndBiome.Config { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { builder - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) .surface( SurfaceRules.sequence( diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 02bd2d2e..11ef1cce 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,29 +1,41 @@ package ru.betterend.world.biome.land; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; +import ru.betterend.world.surface.UmbraSurfaceNoiseCondition; public class UmbraValleyBiome extends EndBiome.Config { - public UmbraValleyBiome() { - super("umbra_valley"); - } + public UmbraValleyBiome() { + super("umbra_valley"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(100, 100, 100) - .plantsColor(172, 189, 190) - .waterAndFogColor(69, 104, 134) - //TODO: 1.18 surface Rules - //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .particles(EndParticles.AMBER_SPHERE, 0.0001F) - .loop(EndSounds.UMBRA_VALLEY) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.UMBRALITH_ARCH) - .feature(EndFeatures.THIN_UMBRALITH_ARCH) - .feature(EndFeatures.INFLEXIA) - .feature(EndFeatures.FLAMMALIX); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + //TODO: 1.18 check surface Rules + //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .surface( + SurfaceRules.sequence( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), PALLIDIUM_FULL), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) + )), UMBRALITH + ) + ) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); + } } diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 503875e7..b1874078 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -13,9 +13,10 @@ public class SulphuricSurfaceNoiseCondition extends SurfaceNoiseCondition { this.threshold = threshold; } - private int lastX = Integer.MIN_VALUE; - private int lastZ = Integer.MIN_VALUE; - private double lastValue = 0; + private static int lastX = Integer.MIN_VALUE; + private static int lastZ = Integer.MIN_VALUE; + private static double lastValue = 0; + @Override public boolean test(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java new file mode 100644 index 00000000..b146c3c0 --- /dev/null +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -0,0 +1,39 @@ +package ru.betterend.world.surface; + +import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + +public class UmbraSurfaceNoiseCondition extends SurfaceNoiseCondition { + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); + + private final double threshold; + public UmbraSurfaceNoiseCondition(double threshold){ + this.threshold = threshold; + } + + private static int lastX = Integer.MIN_VALUE; + private static int lastZ = Integer.MIN_VALUE; + private static double lastValue = 0; + + @Override + public boolean test(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + if (lastX==x && lastZ==z) return lastValue > threshold; + + double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + + lastX=x; + lastZ=z; + lastValue=value; + return value > threshold; + //int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60); + //SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config); + } +} From 633c5ad55398872e5bec6649780ab7caec9af36a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 23:38:52 +0100 Subject: [PATCH 25/56] Add info about top/underMaterial to BE-biomes --- .../ru/betterend/world/biome/EndBiome.java | 80 ++++++++++++++++++- .../world/biome/land/AmberLandBiome.java | 69 +++++++++------- .../biome/land/BlossomingSpiresBiome.java | 15 +++- .../world/biome/land/ChorusForestBiome.java | 15 +++- .../biome/land/CrystalMountainsBiome.java | 15 +++- .../biome/land/DragonGraveyardsBiome.java | 15 +++- .../world/biome/land/DryShrublandBiome.java | 15 +++- .../world/biome/land/DustWastelandsBiome.java | 15 +++- .../biome/land/FoggyMushroomlandBiome.java | 27 ++++++- .../biome/land/GlowingGrasslandsBiome.java | 15 +++- .../world/biome/land/LanternWoodsBiome.java | 15 +++- .../world/biome/land/MegalakeBiome.java | 25 +++++- .../world/biome/land/MegalakeGroveBiome.java | 15 +++- .../world/biome/land/NeonOasisBiome.java | 25 +++++- .../biome/land/PaintedMountainsBiome.java | 15 +++- .../world/biome/land/ShadowForestBiome.java | 15 +++- .../world/biome/land/SulphurSpringsBiome.java | 23 +++++- .../world/biome/land/UmbraValleyBiome.java | 22 ++++- .../world/biome/land/UmbrellaJungleBiome.java | 15 +++- .../world/features/BiomeIslandFeature.java | 6 +- .../features/terrain/DesertLakeFeature.java | 5 +- .../features/terrain/EndLakeFeature.java | 11 ++- .../terrain/FloatingSpireFeature.java | 5 +- .../world/features/terrain/SpireFeature.java | 5 +- .../piece/CrystalMountainPiece.java | 7 +- .../world/structures/piece/LakePiece.java | 7 +- 26 files changed, 430 insertions(+), 67 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 3a2b923a..0022e24b 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -2,13 +2,18 @@ package ru.betterend.world.biome; import java.util.function.BiFunction; +import net.minecraft.core.BlockPos; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; import ru.betterend.interfaces.StructureFeaturesAccessor; @@ -16,10 +21,30 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; -public class EndBiome extends BCLBiome { +public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { + public static class DefaultSurfaceMaterialProvider implements SurfaceMaterialProvider{ + public static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); + @Override + public BlockState getTopMaterial() { + return END_STONE; + } + + @Override + public BlockState getAltTopMaterial() { + return getTopMaterial(); + } + + @Override + public BlockState getUnderMaterial() { + return END_STONE; + } + } + public abstract static class Config { + public static final SurfaceMaterialProvider DEFAULT_MATERIAL = new DefaultSurfaceMaterialProvider(); + protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); - protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(Blocks.END_STONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(DefaultSurfaceMaterialProvider.END_STONE); protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); @@ -47,6 +72,10 @@ public class EndBiome extends BCLBiome { protected boolean hasCaves(){ return true; } + + protected SurfaceMaterialProvider surfaceMaterial() { + return DEFAULT_MATERIAL; + } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -73,7 +102,54 @@ public class EndBiome extends BCLBiome { EndBiome biome = builder.build(biomeConfig.getSupplier()); biome.addCustomData("has_caves", biomeConfig.hasCaves()); + biome.setSurfaceMaterial(biomeConfig.surfaceMaterial()); return biome; } + + + private SurfaceMaterialProvider surfMatProv = Config.DEFAULT_MATERIAL; + private void setSurfaceMaterial(SurfaceMaterialProvider prov) { + surfMatProv = prov; + } + + @Override + public BlockState getTopMaterial() { + return surfMatProv.getTopMaterial(); + } + + public BlockState getUnderMaterial() { + return surfMatProv.getUnderMaterial(); + } + + @Override + public BlockState getAltTopMaterial() { + return surfMatProv.getAltTopMaterial(); + } + + public static BlockState findTopMaterial(BCLBiome biome){ + if (biome instanceof SurfaceMaterialProvider smp){ + return smp.getTopMaterial(); + } + return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + } + + public static BlockState findTopMaterial(Biome biome){ + return findTopMaterial(BiomeAPI.getBiome(biome)); + } + + public static BlockState findTopMaterial(WorldGenLevel world, BlockPos pos){ + return findTopMaterial(BiomeAPI.getBiome(world.getBiome(pos))); + } + + public static BlockState findUnderMaterial(BCLBiome biome){ + if (biome instanceof SurfaceMaterialProvider smp){ + return smp.getTopMaterial(); + } + return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + } + + public static BlockState findUnderMaterial(WorldGenLevel world, BlockPos pos){ + return findUnderMaterial(BiomeAPI.getBiome(world.getBiome(pos))); + } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 905ba52b..6c203c17 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -10,33 +13,43 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; public class AmberLandBiome extends EndBiome.Config { - public AmberLandBiome() { - super("amber_land"); - } + public AmberLandBiome() { + super("amber_land"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(255, 184, 71) - .fogDensity(2.0F) - .plantsColor(219, 115, 38) - .waterAndFogColor(145, 108, 72) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_AMBER_LAND) - .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(EndBlocks.AMBER_MOSS) - .feature(EndFeatures.AMBER_ORE) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.HELIX_TREE) - .feature(EndFeatures.LANCELEAF) - .feature(EndFeatures.GLOW_PILLAR) - .feature(EndFeatures.AMBER_GRASS) - .feature(EndFeatures.AMBER_ROOT) - .feature(EndFeatures.BULB_MOSS) - .feature(EndFeatures.BULB_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EntityType.ENDERMAN, 50, 1, 4) - .spawn(EndEntities.END_SLIME, 30, 1, 2); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); + } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.AMBER_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 5d0b2bf5..a1528ac0 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -23,7 +26,7 @@ public class BlossomingSpiresBiome extends EndBiome.Config { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(EndBlocks.PINK_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) @@ -40,4 +43,14 @@ public class BlossomingSpiresBiome extends EndBiome.Config { .spawn(EntityType.ENDERMAN, 50, 1, 4) .spawn(EndEntities.SILK_MOTH, 5, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.PINK_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 6337c206..f4d8a3aa 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -3,8 +3,11 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -22,7 +25,7 @@ public class ChorusForestBiome extends EndBiome.Config { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(EndBlocks.CHORUS_NYLIUM) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) @@ -42,4 +45,14 @@ public class ChorusForestBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 50, 1, 4); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CHORUS_NYLIUM.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 37da7718..76c27e34 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -17,9 +20,19 @@ public class CrystalMountainsBiome extends EndBiome.Config { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(EndBlocks.CRYSTAL_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CRYSTAL_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 6e2cd442..83f1a6c6 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -21,7 +24,7 @@ public class DragonGraveyardsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(EndBlocks.SANGNUM) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) @@ -35,4 +38,14 @@ public class DragonGraveyardsBiome extends EndBiome.Config { .feature(EndFeatures.CLAWFERN) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.SANGNUM.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index 4377676a..d1a3dd79 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -18,7 +21,7 @@ public class DryShrublandBiome extends EndBiome.Config { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(EndBlocks.RUTISCUS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) @@ -28,4 +31,14 @@ public class DryShrublandBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.RUTISCUS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 37f1ef07..0c6a8220 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -2,7 +2,10 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; @@ -17,7 +20,7 @@ public class DustWastelandsBiome extends EndBiome.Config { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(EndBlocks.ENDSTONE_DUST) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) @@ -26,4 +29,14 @@ public class DustWastelandsBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index c77d9f44..21c9a203 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -1,7 +1,11 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -22,7 +26,11 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .fogDensity(3) .waterAndFogColor(119, 227, 250) //TODO: 1.18 check surface Rules - .chancedSurface(END_MOSS, END_MYCELIUM, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) @@ -48,4 +56,21 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 10, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.END_MYCELIUM.defaultBlockState(); + } + }; + + + } } diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 55d93265..4ce5cbc3 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -20,7 +23,7 @@ public class GlowingGrasslandsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(EndBlocks.END_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) @@ -39,4 +42,14 @@ public class GlowingGrasslandsBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 6ab11658..b0f17522 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -19,7 +22,7 @@ public class LanternWoodsBiome extends EndBiome.Config { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(EndBlocks.RUTISCUS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) @@ -39,4 +42,14 @@ public class LanternWoodsBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.RUTISCUS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 346c5ee4..807ddb51 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -1,7 +1,11 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -23,7 +27,11 @@ public class MegalakeBiome extends EndBiome.Config { .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) //TODO: 1.18 check surface Rules - .chancedSurface(END_MOSS, ENDSTONE_DUST, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) //TODO: 1.18 removed //.depth(0F) @@ -44,4 +52,19 @@ public class MegalakeBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 70fed174..b5e46944 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -25,7 +28,7 @@ public class MegalakeGroveBiome extends EndBiome.Config { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(EndBlocks.END_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) @@ -46,4 +49,14 @@ public class MegalakeGroveBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 5b3e7023..af0c0fa2 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -2,7 +2,11 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; @@ -19,7 +23,11 @@ public class NeonOasisBiome extends EndBiome.Config { .fogDensity(2) .waterAndFogColor(106, 238, 215) //TODO: 1.18 check surface Rules - .chancedSurface(ENDSTONE_DUST, END_MOSS, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) @@ -34,4 +42,19 @@ public class NeonOasisBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 5628dac7..71cbc689 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -2,7 +2,10 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; @@ -21,8 +24,18 @@ public class PaintedMountainsBiome extends EndBiome.Config { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(EndBlocks.ENDSTONE_DUST) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index b83e742c..eb613ab0 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -2,7 +2,10 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -20,7 +23,7 @@ public class ShadowForestBiome extends EndBiome.Config { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(EndBlocks.SHADOW_GRASS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) @@ -43,4 +46,14 @@ public class ShadowForestBiome extends EndBiome.Config { .spawn(EntityType.ENDERMAN, 40, 1, 4) .spawn(EntityType.PHANTOM, 1, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.SHADOW_GRASS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index ae128e5a..29ba55eb 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,8 +1,12 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -27,8 +31,8 @@ public class SulphurSpringsBiome extends EndBiome.Config { //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) .surface( SurfaceRules.sequence( - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), END_STONE), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), FLAVOLITE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), SurfaceRules.state(surfaceMaterial().getTopMaterial())), SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), BRIMSTONE )) @@ -53,4 +57,19 @@ public class SulphurSpringsBiome extends EndBiome.Config { .spawn(EndEntities.CUBOZOA, 50, 3, 8) .spawn(EntityType.ENDERMAN, 50, 1, 4); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.FLAVOLITE.stone.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return Blocks.END_STONE.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 11ef1cce..ce3cfdc0 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; @@ -23,11 +26,11 @@ public class UmbraValleyBiome extends EndBiome.Config { .surface( SurfaceRules.sequence( SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), PALLIDIUM_FULL), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) - )), UMBRALITH + )), SurfaceRules.state(surfaceMaterial().getTopMaterial()) ) ) .particles(EndParticles.AMBER_SPHERE, 0.0001F) @@ -38,4 +41,19 @@ public class UmbraValleyBiome extends EndBiome.Config { .feature(EndFeatures.INFLEXIA) .feature(EndFeatures.FLAMMALIX); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.UMBRALITH.stone.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index f9b7c9eb..1c007e0c 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -22,7 +25,7 @@ public class UmbrellaJungleBiome extends EndBiome.Config { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(EndBlocks.JUNGLE_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) @@ -43,4 +46,14 @@ public class UmbrellaJungleBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.JUNGLE_MOSS.defaultBlockState(); + } + }; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 701f6d35..4954440c 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -15,6 +15,7 @@ import ru.bclib.sdf.primitive.SDFCappedCone; import ru.bclib.util.BlocksHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; +import ru.betterend.world.biome.EndBiome; public class BiomeIslandFeature extends DefaultFeature { private static final MutableBlockPos CENTER = new MutableBlockPos(); @@ -31,7 +32,7 @@ public class BiomeIslandFeature extends DefaultFeature { Biome biome = world.getBiome(pos); int dist = BlocksHelper.downRay(world, pos, 10) + 1; BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); - BlockState topMaterial = world.getBlockState(surfacePos); + BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { @@ -39,8 +40,7 @@ public class BiomeIslandFeature extends DefaultFeature { underBlock = Blocks.STONE.defaultBlockState(); } else { - topBlock = topMaterial.is(Blocks.AIR)?Blocks.GRASS_BLOCK.defaultBlockState():topMaterial; - underBlock = Blocks.DIRT.defaultBlockState(); + underBlock = EndBiome.findUnderMaterial(world, surfacePos); } simplexNoise = new OpenSimplexNoise(world.getSeed()); diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 3d3b3021..3d5f71b4 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -18,6 +18,7 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @@ -124,7 +125,7 @@ public class DesertLakeFeature extends DefaultFeature { pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + state = EndBiome.findTopMaterial(world, pos); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -197,7 +198,7 @@ public class DesertLakeFeature extends DefaultFeature { else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + state = EndBiome.findTopMaterial(world, pos); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 5db2f51a..6cb91436 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -18,11 +18,16 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); + + public EndLakeFeature(){ + + } @Override public boolean place(FeaturePlaceContext featureConfig) { @@ -124,8 +129,8 @@ public class EndLakeFeature extends DefaultFeature { pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); -// state = world.getBiome(pos) + state = EndBiome.findTopMaterial(world, pos); + //state = world.getBiome(pos) // .getGenerationSettings() // .getSurfaceBuilderConfig() // .getTopMaterial(); @@ -196,7 +201,7 @@ public class EndLakeFeature extends DefaultFeature { else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); + state = EndBiome.findTopMaterial(world, pos); // state = world.getBiome(POS) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index be22d4cc..d03b78f0 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -21,6 +21,7 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; public class FloatingSpireFeature extends SpireFeature { @Override @@ -65,11 +66,11 @@ public class FloatingSpireFeature extends SpireFeature { support.add(info.getPos().above()); } //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState();//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + return EndBiome.findTopMaterial(world, info.getPos());//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index e6ec58c7..efde5ab3 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -29,6 +29,7 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @@ -68,12 +69,12 @@ public class SpireFeature extends DefaultFeature { support.add(info.getPos().above()); } //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findTopMaterial(world, info.getPos()); //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index c3186d65..3970cad8 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -5,7 +5,6 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -20,9 +19,11 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class CrystalMountainPiece extends MountainPiece { private BlockState top; @@ -30,7 +31,7 @@ public class CrystalMountainPiece extends MountainPiece { public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); //TODO: 1.18 this needs to change to a dynamic block - top = Blocks.END_STONE.defaultBlockState(); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + top = EndBiome.findTopMaterial(biome); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { @@ -40,7 +41,7 @@ public class CrystalMountainPiece extends MountainPiece { @Override protected void fromNbt(CompoundTag tag) { super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block - top = Blocks.END_STONE.defaultBlockState(); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + top = EndBiome.findTopMaterial(BiomeAPI.getBiome(biomeID)); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @Override diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 37733a2b..4c01b7b9 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -32,6 +32,7 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); @@ -133,7 +134,7 @@ public class LakePiece extends BasePiece { state = chunk.getBlockState(mut.above()); if (state.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - state = ENDSTONE; + state = EndBiome.findTopMaterial(world, worldPos); // state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) // .getGenerationSettings() // .getSurfaceBuilderConfig() @@ -170,7 +171,7 @@ public class LakePiece extends BasePiece { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - bState = ENDSTONE; + bState = EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() // .getSurfaceBuilderConfig() @@ -194,7 +195,7 @@ public class LakePiece extends BasePiece { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - bState = ENDSTONE; + bState =EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() // .getSurfaceBuilderConfig() From 2a0f58a7296ef902553b1ae6e8515ea1e2016768 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 23:59:53 +0100 Subject: [PATCH 26/56] Fixed surface block setting --- src/main/java/ru/betterend/BetterEnd.java | 66 +++++++++++++++++-- .../world/biome/land/AmberLandBiome.java | 3 +- .../biome/land/BlossomingSpiresBiome.java | 3 +- .../world/biome/land/ChorusForestBiome.java | 2 +- .../biome/land/CrystalMountainsBiome.java | 2 +- .../biome/land/DragonGraveyardsBiome.java | 2 +- .../world/biome/land/DryShrublandBiome.java | 2 +- .../world/biome/land/DustWastelandsBiome.java | 2 +- .../biome/land/GlowingGrasslandsBiome.java | 2 +- .../world/biome/land/LanternWoodsBiome.java | 2 +- .../world/biome/land/MegalakeGroveBiome.java | 2 +- .../biome/land/PaintedMountainsBiome.java | 2 +- .../world/biome/land/ShadowForestBiome.java | 2 +- .../world/biome/land/UmbrellaJungleBiome.java | 2 +- 14 files changed, 73 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 66c8da97..fac7cc0a 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -1,8 +1,28 @@ package ru.betterend; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; + +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import org.apache.commons.lang3.mutable.MutableInt; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; @@ -34,7 +54,7 @@ public class BetterEnd implements ModInitializer { public static final String MOD_ID = "betterend"; public static final Logger LOGGER = new Logger(MOD_ID); public static final boolean RUNS_FALL_FLYING_LIB = FabricLoader.getInstance().getModContainer("fallflyinglib").isPresent(); - + @Override public void onInitialize() { WorldDataAPI.registerModCache(MOD_ID); @@ -60,19 +80,53 @@ public class BetterEnd implements ModInitializer { FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class).forEach(BetterEndPlugin::register); Integrations.init(); Configs.saveConfigs(); - + if (GeneratorOptions.useNewGenerator()) { 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); + //EndStructures.addBiomeStructures(biomeID, biome); + //TODO: 1.18 disabled to test feature-sorting of BE biomes + //EndFeatures.addBiomeFeatures(biomeID, biome); }); + List biomes = new LinkedList<>(); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endBarrens()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endHighlands()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endMidlands()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.theEnd()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.smallEndIslands()); + + List lBiomes = new LinkedList<>(); + lBiomes.add(EndBiomes.FOGGY_MUSHROOMLAND.getBiome()); + lBiomes.add(EndBiomes.CHORUS_FOREST.getBiome()); + lBiomes.add(EndBiomes.DUST_WASTELANDS.getBiome()); + lBiomes.add(EndBiomes.MEGALAKE.getBiome()); + lBiomes.add(EndBiomes.MEGALAKE_GROVE.getBiome()); + lBiomes.add(EndBiomes.CRYSTAL_MOUNTAINS.getBiome()); + lBiomes.add(EndBiomes.PAINTED_MOUNTAINS.getBiome()); + lBiomes.add(EndBiomes.SHADOW_FOREST.getBiome()); + lBiomes.add(EndBiomes.AMBER_LAND.getBiome()); + lBiomes.add(EndBiomes.BLOSSOMING_SPIRES.getBiome()); + lBiomes.add(EndBiomes.SULPHUR_SPRINGS.getBiome()); + lBiomes.add(EndBiomes.UMBRELLA_JUNGLE.getBiome()); + lBiomes.add(EndBiomes.GLOWING_GRASSLANDS.getBiome()); + lBiomes.add(EndBiomes.DRAGON_GRAVEYARDS.getBiome()); + lBiomes.add(EndBiomes.DRY_SHRUBLAND.getBiome()); + lBiomes.add(EndBiomes.LANTERN_WOODS.getBiome()); + lBiomes.add(EndBiomes.NEON_OASIS.getBiome()); + lBiomes.add(EndBiomes.UMBRA_VALLEY.getBiome()); + + lBiomes.forEach(biome -> { + BiomeAPI.sortBiomeFeatures(biome); + }); + biomes.addAll(lBiomes); + + //buildFeaturesPerStep(lBiomes, true); } - public static ResourceLocation makeID(String path) { return new ResourceLocation(MOD_ID, path); } + } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 6c203c17..8fea021b 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -2,7 +2,6 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -26,7 +25,7 @@ public class AmberLandBiome extends EndBiome.Config { .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_AMBER_LAND) .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.AMBER_ORE) .feature(EndFeatures.END_LAKE_RARE) .feature(EndFeatures.HELIX_TREE) diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index a1528ac0..556624ee 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -2,7 +2,6 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -26,7 +25,7 @@ public class BlossomingSpiresBiome extends EndBiome.Config { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index f4d8a3aa..f9d72008 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -25,7 +25,7 @@ public class ChorusForestBiome extends EndBiome.Config { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 76c27e34..23aeb881 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -20,7 +20,7 @@ public class CrystalMountainsBiome extends EndBiome.Config { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 83f1a6c6..7b8ae4a0 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -24,7 +24,7 @@ public class DragonGraveyardsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index d1a3dd79..bcad4896 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -21,7 +21,7 @@ public class DryShrublandBiome extends EndBiome.Config { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 0c6a8220..b667f83f 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -20,7 +20,7 @@ public class DustWastelandsBiome extends EndBiome.Config { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 4ce5cbc3..d851e6d0 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -23,7 +23,7 @@ public class GlowingGrasslandsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index b0f17522..0edc9a72 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -22,7 +22,7 @@ public class LanternWoodsBiome extends EndBiome.Config { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index b5e46944..7e9be0b9 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -28,7 +28,7 @@ public class MegalakeGroveBiome extends EndBiome.Config { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 71cbc689..5bad1e43 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -24,7 +24,7 @@ public class PaintedMountainsBiome extends EndBiome.Config { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index eb613ab0..8db43eaf 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -23,7 +23,7 @@ public class ShadowForestBiome extends EndBiome.Config { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 1c007e0c..89e75437 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -25,7 +25,7 @@ public class UmbrellaJungleBiome extends EndBiome.Config { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) From ef025d05dd37331dbeba2c6605fca131062ad941 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 21:39:12 +0100 Subject: [PATCH 27/56] Fixed BCLib compat --- src/main/java/ru/betterend/registry/EndBiomes.java | 2 +- src/main/java/ru/betterend/world/biome/EndBiome.java | 2 +- .../java/ru/betterend/world/biome/land/AmberLandBiome.java | 2 +- .../ru/betterend/world/biome/land/BlossomingSpiresBiome.java | 2 +- .../java/ru/betterend/world/biome/land/ChorusForestBiome.java | 3 +-- .../ru/betterend/world/biome/land/CrystalMountainsBiome.java | 3 +-- .../ru/betterend/world/biome/land/DragonGraveyardsBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/DryShrublandBiome.java | 3 +-- .../ru/betterend/world/biome/land/DustWastelandsBiome.java | 3 +-- .../ru/betterend/world/biome/land/FoggyMushroomlandBiome.java | 2 +- .../ru/betterend/world/biome/land/GlowingGrasslandsBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/LanternWoodsBiome.java | 3 +-- src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java | 2 +- .../java/ru/betterend/world/biome/land/MegalakeGroveBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/NeonOasisBiome.java | 2 +- .../ru/betterend/world/biome/land/PaintedMountainsBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/ShadowForestBiome.java | 3 +-- .../ru/betterend/world/biome/land/SulphurSpringsBiome.java | 2 +- .../java/ru/betterend/world/biome/land/UmbraValleyBiome.java | 2 +- .../ru/betterend/world/biome/land/UmbrellaJungleBiome.java | 3 +-- .../ru/betterend/world/features/terrain/DesertLakeFeature.java | 2 -- .../ru/betterend/world/features/terrain/EndLakeFeature.java | 2 -- .../betterend/world/features/terrain/FloatingSpireFeature.java | 2 -- .../java/ru/betterend/world/features/terrain/SpireFeature.java | 2 -- .../features/terrain/caves/CaveChunkPopulatorFeature.java | 1 - .../betterend/world/features/terrain/caves/EndCaveFeature.java | 1 - .../world/features/terrain/caves/TunelCaveFeature.java | 1 - .../betterend/world/structures/piece/CrystalMountainPiece.java | 3 +-- .../java/ru/betterend/world/structures/piece/LakePiece.java | 3 --- 29 files changed, 21 insertions(+), 47 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index a09637e5..ec247e54 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -160,6 +160,6 @@ public class EndBiomes { } public static EndCaveBiome getCaveBiome(int x, int z) { - return (EndCaveBiome) caveBiomeMap.getBiome(x, z); + return (EndCaveBiome) caveBiomeMap.getBiome(x, 5, z); } } diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 0022e24b..eae4816c 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; import ru.betterend.interfaces.StructureFeaturesAccessor; diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 8fea021b..d167bb2b 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -3,7 +3,7 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 556624ee..c51f5a18 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -3,7 +3,7 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index f9d72008..1a71d5bf 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -5,9 +5,8 @@ import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 23aeb881..68471a09 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 7b8ae4a0..1824e9fa 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index bcad4896..d72a857e 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index b667f83f..7c520147 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -3,9 +3,8 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 21c9a203..1ecc681d 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index d851e6d0..113625dc 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 0edc9a72..f8a80ba5 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 807ddb51..0c492778 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 7e9be0b9..2615344a 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index af0c0fa2..e74a4a55 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -5,7 +5,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 5bad1e43..33097c7c 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -3,9 +3,8 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 8db43eaf..2b4065db 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -3,9 +3,8 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 29ba55eb..0c0b162e 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -5,7 +5,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index ce3cfdc0..0e95aeea 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -3,7 +3,7 @@ package ru.betterend.world.biome.land; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 89e75437..7af2d045 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -2,9 +2,8 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 3d5f71b4..6b863f95 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -124,7 +124,6 @@ public class DesertLakeFeature extends DefaultFeature { } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) @@ -197,7 +196,6 @@ public class DesertLakeFeature extends DefaultFeature { } else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 6cb91436..7af472fa 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -128,7 +128,6 @@ public class EndLakeFeature extends DefaultFeature { } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); //state = world.getBiome(pos) // .getGenerationSettings() @@ -200,7 +199,6 @@ public class EndLakeFeature extends DefaultFeature { // Make border else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); // state = world.getBiome(POS) // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index d03b78f0..1b04a7f7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -65,11 +65,9 @@ public class FloatingSpireFeature extends SpireFeature { if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findTopMaterial(world, info.getPos());//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index efde5ab3..e52333e2 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -68,12 +68,10 @@ public class SpireFeature extends DefaultFeature { if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findTopMaterial(world, info.getPos()); //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index b82ffbb7..ccb9d5f2 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -42,7 +42,6 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { MutableBlockPos max = new MutableBlockPos().set(pos); fillSets(sx, sz, world.getChunk(pos), floorPositions, ceilPositions, min, max); EndCaveBiome biome = supplier.get(); - //TODO: 1.18 This needs to change to a configured material BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 436dacae..c6a92481 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -76,7 +76,6 @@ public abstract class EndCaveFeature extends DefaultFeature { } }); - //TODO: 1.18 this needs to change to a dynamic block BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 0d55a62e..fbca390c 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -168,7 +168,6 @@ public class TunelCaveFeature extends EndCaveFeature { } floorSets.forEach((biome, floorPositions) -> { - //TODO: 1.18 this needs to change to a dynamic block BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); // BlockState surfaceBlock = biome.getBiome() // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index 3970cad8..2413de9f 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -30,7 +30,6 @@ public class CrystalMountainPiece extends MountainPiece { public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); - //TODO: 1.18 this needs to change to a dynamic block top = EndBiome.findTopMaterial(biome); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @@ -40,7 +39,7 @@ public class CrystalMountainPiece extends MountainPiece { @Override protected void fromNbt(CompoundTag tag) { - super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block + super.fromNbt(tag); top = EndBiome.findTopMaterial(BiomeAPI.getBiome(biomeID)); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 4c01b7b9..7434f1c1 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -133,7 +133,6 @@ public class LakePiece extends BasePiece { )) { state = chunk.getBlockState(mut.above()); if (state.isAir()) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, worldPos); // state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) // .getGenerationSettings() @@ -170,7 +169,6 @@ public class LakePiece extends BasePiece { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - //TODO: 1.18 this needs to change to a dynamic block bState = EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() @@ -194,7 +192,6 @@ public class LakePiece extends BasePiece { mut.setY(y + 1); BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - //TODO: 1.18 this needs to change to a dynamic block bState =EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() From 514749d1211ad32b59decb1df7df50828eb9385f Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 21:52:08 +0100 Subject: [PATCH 28/56] Another BCLib compat fix --- src/main/java/ru/betterend/BetterEnd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index fac7cc0a..e5523188 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -82,7 +82,7 @@ public class BetterEnd implements ModInitializer { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L); + ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes((int)GeneratorOptions.getIslandDistBlock()); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } From 520fca63c34c6b00e79a0675222b8ea674c2ef36 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 22:16:16 +0100 Subject: [PATCH 29/56] reenabled feature add --- src/main/java/ru/betterend/BetterEnd.java | 57 +---------------------- 1 file changed, 2 insertions(+), 55 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index e5523188..98d03696 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -1,28 +1,8 @@ package ru.betterend; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; - -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import org.apache.commons.lang3.mutable.MutableInt; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; @@ -87,43 +67,10 @@ public class BetterEnd implements ModInitializer { } BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { - //EndStructures.addBiomeStructures(biomeID, biome); - //TODO: 1.18 disabled to test feature-sorting of BE biomes - //EndFeatures.addBiomeFeatures(biomeID, biome); + EndStructures.addBiomeStructures(biomeID, biome); + EndFeatures.addBiomeFeatures(biomeID, biome); }); - List biomes = new LinkedList<>(); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endBarrens()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endHighlands()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endMidlands()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.theEnd()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.smallEndIslands()); - List lBiomes = new LinkedList<>(); - lBiomes.add(EndBiomes.FOGGY_MUSHROOMLAND.getBiome()); - lBiomes.add(EndBiomes.CHORUS_FOREST.getBiome()); - lBiomes.add(EndBiomes.DUST_WASTELANDS.getBiome()); - lBiomes.add(EndBiomes.MEGALAKE.getBiome()); - lBiomes.add(EndBiomes.MEGALAKE_GROVE.getBiome()); - lBiomes.add(EndBiomes.CRYSTAL_MOUNTAINS.getBiome()); - lBiomes.add(EndBiomes.PAINTED_MOUNTAINS.getBiome()); - lBiomes.add(EndBiomes.SHADOW_FOREST.getBiome()); - lBiomes.add(EndBiomes.AMBER_LAND.getBiome()); - lBiomes.add(EndBiomes.BLOSSOMING_SPIRES.getBiome()); - lBiomes.add(EndBiomes.SULPHUR_SPRINGS.getBiome()); - lBiomes.add(EndBiomes.UMBRELLA_JUNGLE.getBiome()); - lBiomes.add(EndBiomes.GLOWING_GRASSLANDS.getBiome()); - lBiomes.add(EndBiomes.DRAGON_GRAVEYARDS.getBiome()); - lBiomes.add(EndBiomes.DRY_SHRUBLAND.getBiome()); - lBiomes.add(EndBiomes.LANTERN_WOODS.getBiome()); - lBiomes.add(EndBiomes.NEON_OASIS.getBiome()); - lBiomes.add(EndBiomes.UMBRA_VALLEY.getBiome()); - - lBiomes.forEach(biome -> { - BiomeAPI.sortBiomeFeatures(biome); - }); - biomes.addAll(lBiomes); - - //buildFeaturesPerStep(lBiomes, true); } public static ResourceLocation makeID(String path) { return new ResourceLocation(MOD_ID, path); From 33d8fe86fd41afdc01d60ed578c8e08a39cc0ee5 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 22:30:14 +0100 Subject: [PATCH 30/56] Updated fabric loader --- gradle.properties | 2 +- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index ff288573..c584ccb3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18 yarn_mappings=6 -loader_version=0.12.8 +loader_version=0.12.9 #Loom loom_version=0.10-SNAPSHOT diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7d1697ab..f6bfc8bd 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -42,7 +42,7 @@ ], "depends": { - "fabricloader": ">=0.12.4", + "fabricloader": ">=0.12.9", "fabric": ">=0.42.1", "minecraft": ">=1.17", "bclib": ">=0.5.4" From ef02d0ee5fca0712b73a34d4fac4c96d3e6a0b3a Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 22:35:56 +0100 Subject: [PATCH 31/56] Removed tested ToDo's --- .../java/ru/betterend/blocks/HydrothermalVentBlock.java | 6 ++---- src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java | 3 +-- .../java/ru/betterend/blocks/VentBubbleColumnBlock.java | 3 +-- src/main/java/ru/betterend/mixin/common/EntityMixin.java | 2 -- .../mixin/common/NoiseBasedChunkGeneratorMixin.java | 2 +- .../betterend/world/biome/land/FoggyMushroomlandBiome.java | 2 -- .../java/ru/betterend/world/biome/land/MegalakeBiome.java | 2 -- .../java/ru/betterend/world/biome/land/NeonOasisBiome.java | 2 -- .../ru/betterend/world/biome/land/SulphurSpringsBiome.java | 4 +--- .../ru/betterend/world/biome/land/UmbraValleyBiome.java | 2 -- .../ru/betterend/world/features/BiomeIslandFeature.java | 1 - .../world/features/terrain/SulphuricLakeFeature.java | 3 +-- .../java/ru/betterend/world/structures/piece/LakePiece.java | 3 ++- 13 files changed, 9 insertions(+), 26 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 780a3551..8353cb0c 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -91,8 +91,7 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo return Blocks.WATER.defaultBlockState(); } else if (state.getValue(WATERLOGGED) && facing == Direction.UP && neighborState.is(Blocks.WATER)) { - //TODO: 1.18 see if it still ticks - world./*getBlockTicks().*/scheduleTick(pos, this, 20); + world.scheduleTick(pos, this, 20); } return state; } @@ -120,8 +119,7 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, EndBlocks.VENT_BUBBLE_COLUMN); - //TODO: 1.18 see if it still ticks - world./*getBlockTicks().*/scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); + world.scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); } } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index c5674904..1c55c2f5 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -116,8 +116,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate @Override public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { - //TODO: 1.18 Check if this still workd - world./*getBlockTicks().*/scheduleTick(pos, this, 2); + world.scheduleTick(pos, this, 2); if (state.getValue(WATERLOGGED)) { world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index b0d2ba08..a03fe926 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -76,8 +76,7 @@ public class VentBubbleColumnBlock extends Block implements BucketPickup, Liquid BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, this); - //TODO: 1.18 check if this ticks - world./*getBlockTicks().*/scheduleTick(up, this, 5); + world.scheduleTick(up, this, 5); } } return state; diff --git a/src/main/java/ru/betterend/mixin/common/EntityMixin.java b/src/main/java/ru/betterend/mixin/common/EntityMixin.java index 20d4e1ee..31b3876f 100644 --- a/src/main/java/ru/betterend/mixin/common/EntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EntityMixin.java @@ -66,8 +66,6 @@ public abstract class EntityMixin implements TeleportingEntity { entity.getXRot() ); entity.setDeltaMovement(teleportTarget.speed); - //TODO: check if this works as intended in 1.17 - destination.addDuringTeleport(entity); } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index 4e98411e..5aa420b4 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -31,7 +31,7 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { TerrainGenerator.initNoise(seed); } - //TODO: 1.18 Find anothe rplace for this + //TODO: 1.18 Find another place for this // @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) // private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { // if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 1ecc681d..40720f83 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -25,13 +25,11 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .fogColor(41, 122, 173) .fogDensity(3) .waterAndFogColor(119, 227, 250) - //TODO: 1.18 check surface Rules .chancedSurface( SurfaceRules.state(surfaceMaterial().getTopMaterial()), SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), END_STONE ) - //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) .music(EndSounds.MUSIC_FOREST) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 0c492778..7d1b08e3 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -26,13 +26,11 @@ public class MegalakeBiome extends EndBiome.Config { .fogDensity(1.75F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) - //TODO: 1.18 check surface Rules .chancedSurface( SurfaceRules.state(surfaceMaterial().getTopMaterial()), SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), END_STONE ) - //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.END_LOTUS) diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index e74a4a55..23564790 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -22,13 +22,11 @@ public class NeonOasisBiome extends EndBiome.Config { .fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(106, 238, 215) - //TODO: 1.18 check surface Rules .chancedSurface( SurfaceRules.state(surfaceMaterial().getTopMaterial()), SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), END_STONE ) - //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) .music(EndSounds.MUSIC_OPENSPACE) diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 0c0b162e..7741c5ce 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -27,9 +27,7 @@ public class SulphurSpringsBiome extends EndBiome.Config { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { builder - //TODO: 1.18 check surface Rules - //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .surface( + .surface( SurfaceRules.sequence( SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), SurfaceRules.state(surfaceMaterial().getTopMaterial())), diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 0e95aeea..369fbb64 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -21,8 +21,6 @@ public class UmbraValleyBiome extends EndBiome.Config { builder.fogColor(100, 100, 100) .plantsColor(172, 189, 190) .waterAndFogColor(69, 104, 134) - //TODO: 1.18 check surface Rules - //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) .surface( SurfaceRules.sequence( SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 4954440c..9015529e 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -34,7 +34,6 @@ public class BiomeIslandFeature extends DefaultFeature { BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; - //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { topBlock = Blocks.GRAVEL.defaultBlockState(); underBlock = Blocks.STONE.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 430259fa..62962804 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -76,8 +76,7 @@ public class SulphuricLakeFeature extends DefaultFeature { else { if (!isAbsoluteBorder(world, POS)) { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); - //TODO: 1.18 check if this ticks - world./*getLiquidTicks().*/scheduleTick(POS, Fluids.WATER, 0); + world.scheduleTick(POS, Fluids.WATER, 0); brimstone.add(POS.below()); if (random.nextBoolean()) { brimstone.add(POS.below(2)); diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 7434f1c1..219e3f1e 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -210,7 +210,8 @@ public class LakePiece extends BasePiece { } else if (chunk.getBlockState(mut.move(Direction.UP)).isAir()) { //TODO: 1.18 test if this is thr right tick - /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); + chunk.markPosForPostprocessing(mut.move(Direction.DOWN)); +// /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); } } } From a27f3e35e2726cd2d8efcee9ea754d3a9b058554 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 23:01:08 +0100 Subject: [PATCH 32/56] top Material handling --- .../java/ru/betterend/world/structures/piece/NBTPiece.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index c55746f5..c822913e 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -20,6 +20,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class NBTPiece extends BasePiece { private ResourceLocation structureID; @@ -89,7 +90,7 @@ public class NBTPiece extends BasePiece { StructureHelper.erode(world, bounds, erosion, random); } if (cover) { - StructureHelper.cover(world, bounds, random); + StructureHelper.cover(world, bounds, random, EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } } From f731351a6c568fd89eeafdf0eeef0978dbdc6f26 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 23:03:45 +0100 Subject: [PATCH 33/56] Fixed build errors --- src/main/java/ru/betterend/world/biome/EndBiome.java | 10 ++-------- .../betterend/world/features/CrashedShipFeature.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index eae4816c..cc2a654e 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -128,10 +128,7 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { } public static BlockState findTopMaterial(BCLBiome biome){ - if (biome instanceof SurfaceMaterialProvider smp){ - return smp.getTopMaterial(); - } - return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + return BiomeAPI.findTopMaterial(biome).orElse(EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } public static BlockState findTopMaterial(Biome biome){ @@ -143,10 +140,7 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { } public static BlockState findUnderMaterial(BCLBiome biome){ - if (biome instanceof SurfaceMaterialProvider smp){ - return smp.getTopMaterial(); - } - return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + return BiomeAPI.findUnderMaterial(biome).orElse(EndBiome.Config.DEFAULT_MATERIAL.getUnderMaterial()); } public static BlockState findUnderMaterial(WorldGenLevel world, BlockPos pos){ diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index 185c0901..ff989a45 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.LevelReader; @@ -23,14 +25,17 @@ import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.bclib.world.features.NBTStructureFeature; import ru.betterend.util.BlockFixer; - -import java.util.Random; +import ru.betterend.world.biome.EndBiome; public class CrashedShipFeature extends NBTStructureFeature { private static final StructureProcessor REPLACER; private static final String STRUCTURE_PATH = "/data/minecraft/structures/end_city/ship.nbt"; private StructureTemplate structure; - + + public CrashedShipFeature() { + super(EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); + } + @Override protected StructureTemplate getStructure(WorldGenLevel world, BlockPos pos, Random random) { if (structure == null) { From d11dc97fd9f81f92102516888cd9a2fa9ab0ef94 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 10 Dec 2021 12:51:42 +0100 Subject: [PATCH 34/56] Version update --- gradle.properties | 5 ++--- src/main/resources/fabric.mod.json | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index c584ccb3..39934cd4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,8 +3,8 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=1.18 -yarn_mappings=6 +minecraft_version=1.18.1 +fabric_version = 0.44.0+1.18 loader_version=0.12.9 #Loom @@ -19,7 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -fabric_version = 0.44.0+1.18 bclib_version = 1.0.3 rei_version = 7.0.343 canvas_version = 1.0.+ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f6bfc8bd..7514d2bf 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -43,9 +43,9 @@ "depends": { "fabricloader": ">=0.12.9", - "fabric": ">=0.42.1", - "minecraft": ">=1.17", - "bclib": ">=0.5.4" + "fabric": ">=0.44.0", + "minecraft": ">=1.18.1", + "bclib": ">=1.0.3" }, "suggests": { "byg": ">=1.1.3", From 70e70710218463a33c382a532c58df100722d849 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 13 Dec 2021 18:15:56 +0100 Subject: [PATCH 35/56] New location for parent class --- .../betterend/world/surface/SulphuricSurfaceNoiseCondition.java | 2 +- .../ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index b1874078..1d04bdaf 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -1,6 +1,6 @@ package ru.betterend.world.surface; -import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.api.surface.rules.SurfaceNoiseCondition; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index b146c3c0..6fcae251 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -1,6 +1,6 @@ package ru.betterend.world.surface; -import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.api.surface.rules.SurfaceNoiseCondition; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; From ce727b26332f1d90ad83d27bde0a6af0d3c668a2 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 14 Dec 2021 13:46:45 +0100 Subject: [PATCH 36/56] Updated version --- gradle.properties | 4 ++-- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 39934cd4..858366fb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18.1 fabric_version = 0.44.0+1.18 -loader_version=0.12.9 +loader_version=0.12.11 #Loom loom_version=0.10-SNAPSHOT @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.0.3 +bclib_version = 1.1.0 rei_version = 7.0.343 canvas_version = 1.0.+ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7514d2bf..fd8da63e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": ">=1.18.1", - "bclib": ">=1.0.3" + "bclib": ">=1.1.0" }, "suggests": { "byg": ">=1.1.3", From 65dd58d86f6112803f2509512ae3814ff9141d17 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 10:25:01 +0100 Subject: [PATCH 37/56] Migrated to SurfaceBuilder --- .../ru/betterend/world/biome/EndBiome.java | 33 +++++++++++++++- .../world/biome/cave/LushAuroraCaveBiome.java | 13 ++++++- .../biome/cave/LushSmaragdantCaveBiome.java | 15 ++++++- .../world/biome/land/AmberLandBiome.java | 1 - .../biome/land/BlossomingSpiresBiome.java | 1 - .../world/biome/land/ChorusForestBiome.java | 1 - .../biome/land/CrystalMountainsBiome.java | 1 - .../biome/land/DragonGraveyardsBiome.java | 1 - .../world/biome/land/DryShrublandBiome.java | 1 - .../world/biome/land/DustWastelandsBiome.java | 1 - .../biome/land/FoggyMushroomlandBiome.java | 6 --- .../biome/land/GlowingGrasslandsBiome.java | 1 - .../world/biome/land/LanternWoodsBiome.java | 1 - .../world/biome/land/MegalakeBiome.java | 6 --- .../world/biome/land/MegalakeGroveBiome.java | 1 - .../world/biome/land/NeonOasisBiome.java | 6 --- .../biome/land/PaintedMountainsBiome.java | 1 - .../world/biome/land/ShadowForestBiome.java | 1 - .../world/biome/land/SulphurSpringsBiome.java | 35 +++++++++++++---- .../world/biome/land/UmbraValleyBiome.java | 39 ++++++++++++++----- .../world/biome/land/UmbrellaJungleBiome.java | 1 - .../SulphuricSurfaceNoiseCondition.java | 31 ++++++--------- .../surface/UmbraSurfaceNoiseCondition.java | 34 ++++++---------- 23 files changed, 137 insertions(+), 94 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index cc2a654e..e56ce50f 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.surface.SurfaceRuleBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; @@ -38,6 +39,28 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { public BlockState getUnderMaterial() { return END_STONE; } + + @Override + public boolean generateFloorRule(){ + return true; + } + + @Override + public SurfaceRuleBuilder surface() { + SurfaceRuleBuilder builder = SurfaceRuleBuilder + .start() + .filler(getUnderMaterial()) + ; + + if (generateFloorRule() && getTopMaterial()!=getUnderMaterial()){ + if (getTopMaterial()!=getAltTopMaterial()){ + builder.floor(getTopMaterial()); + } else { + builder.chancedFloor(getTopMaterial(), getAltTopMaterial()); + } + } + return builder; + } } public abstract static class Config { @@ -94,7 +117,8 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { .mood(EndSounds.AMBIENT_DUST_WASTELANDS) .temperature(0.5f) .wetness(0.5f) - .precipitation(Biome.Precipitation.NONE); + .precipitation(Biome.Precipitation.NONE) + .surface(biomeConfig.surfaceMaterial().surface().build()); biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); @@ -118,6 +142,7 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { return surfMatProv.getTopMaterial(); } + @Override public BlockState getUnderMaterial() { return surfMatProv.getUnderMaterial(); } @@ -127,6 +152,12 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { return surfMatProv.getAltTopMaterial(); } + @Override + public boolean generateFloorRule() { return surfMatProv.generateFloorRule(); } + + @Override + public SurfaceRuleBuilder surface() { return surfMatProv.surface(); } + public static BlockState findTopMaterial(BCLBiome biome){ return BiomeAPI.findTopMaterial(biome).orElse(EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 6c7aafeb..6f98a1b1 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -7,6 +7,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.blocks.BlockProperties; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -58,11 +59,21 @@ public class LushAuroraCaveBiome extends EndCaveBiome.Config { .plantsColor(108, 25, 46) .waterAndFogColor(186, 77, 237) .particles(EndParticles.GLOWING_SPHERE, 0.001F) - .surface(EndBlocks.CAVE_MOSS); + ; } @Override public BiFunction getSupplier() { return LushAuroraCaveBiome.Biome::new; } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CAVE_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index c05d421a..af18f335 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -3,7 +3,9 @@ package ru.betterend.world.biome.cave; import java.util.function.BiFunction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -42,12 +44,21 @@ public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { .fogDensity(2.0F) .plantsColor(0, 131, 145) .waterAndFogColor(31, 167, 212) - .particles(EndParticles.SMARAGDANT, 0.001F) - .surface(EndBlocks.CAVE_MOSS); + .particles(EndParticles.SMARAGDANT, 0.001F); } @Override public BiFunction getSupplier() { return LushSmaragdantCaveBiome.Biome::new; } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CAVE_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index d167bb2b..c79a0ada 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -25,7 +25,6 @@ public class AmberLandBiome extends EndBiome.Config { .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_AMBER_LAND) .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.AMBER_ORE) .feature(EndFeatures.END_LAKE_RARE) .feature(EndFeatures.HELIX_TREE) diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index c51f5a18..553e5f7f 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -25,7 +25,6 @@ public class BlossomingSpiresBiome extends EndBiome.Config { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 1a71d5bf..9c4b49b3 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -24,7 +24,6 @@ public class ChorusForestBiome extends EndBiome.Config { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 68471a09..af1624f5 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -19,7 +19,6 @@ public class CrystalMountainsBiome extends EndBiome.Config { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 1824e9fa..e6a47d62 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -23,7 +23,6 @@ public class DragonGraveyardsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index d72a857e..c81b67df 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -20,7 +20,6 @@ public class DryShrublandBiome extends EndBiome.Config { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 7c520147..cd14af8a 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -19,7 +19,6 @@ public class DustWastelandsBiome extends EndBiome.Config { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 40720f83..808bdb0e 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -2,7 +2,6 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -25,11 +24,6 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .fogColor(41, 122, 173) .fogDensity(3) .waterAndFogColor(119, 227, 250) - .chancedSurface( - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - END_STONE - ) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) .music(EndSounds.MUSIC_FOREST) diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 113625dc..90530fc4 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -22,7 +22,6 @@ public class GlowingGrasslandsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index f8a80ba5..b9a4ba45 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -21,7 +21,6 @@ public class LanternWoodsBiome extends EndBiome.Config { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 7d1b08e3..e99aeb20 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -2,7 +2,6 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -26,11 +25,6 @@ public class MegalakeBiome extends EndBiome.Config { .fogDensity(1.75F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) - .chancedSurface( - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - END_STONE - ) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.END_LOTUS) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 2615344a..10705776 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -27,7 +27,6 @@ public class MegalakeGroveBiome extends EndBiome.Config { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 23564790..41f078dc 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -3,7 +3,6 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -22,11 +21,6 @@ public class NeonOasisBiome extends EndBiome.Config { .fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(106, 238, 215) - .chancedSurface( - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - END_STONE - ) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) .music(EndSounds.MUSIC_OPENSPACE) diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 33097c7c..0f5f0494 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -23,7 +23,6 @@ public class PaintedMountainsBiome extends EndBiome.Config { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 2b4065db..2efbe920 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -22,7 +22,6 @@ public class ShadowForestBiome extends EndBiome.Config { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 7741c5ce..35e66a81 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,10 +1,14 @@ package ru.betterend.world.biome.land; +import java.util.List; + import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; +import ru.bclib.api.surface.rules.SwitchRuleSource; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; @@ -27,13 +31,6 @@ public class SulphurSpringsBiome extends EndBiome.Config { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { builder - .surface( - SurfaceRules.sequence( - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), SurfaceRules.state(surfaceMaterial().getTopMaterial())), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), - BRIMSTONE - )) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) .waterColor(25, 90, 157) @@ -68,6 +65,30 @@ public class SulphurSpringsBiome extends EndBiome.Config { public BlockState getAltTopMaterial() { return Blocks.END_STONE.defaultBlockState(); } + + @Override + public boolean generateFloorRule() { + return false; + } + + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .rule( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new SulphuricSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SULPHURIC_ROCK, + BRIMSTONE + ) + ) + ) + ); + } }; } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 369fbb64..d593195b 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,8 +1,12 @@ package ru.betterend.world.biome.land; +import java.util.List; + import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; +import ru.bclib.api.surface.rules.SwitchRuleSource; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; @@ -21,16 +25,6 @@ public class UmbraValleyBiome extends EndBiome.Config { builder.fogColor(100, 100, 100) .plantsColor(172, 189, 190) .waterAndFogColor(69, 104, 134) - .surface( - SurfaceRules.sequence( - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) - )), SurfaceRules.state(surfaceMaterial().getTopMaterial()) - ) - ) .particles(EndParticles.AMBER_SPHERE, 0.0001F) .loop(EndSounds.UMBRA_VALLEY) .music(EndSounds.MUSIC_DARK) @@ -52,6 +46,31 @@ public class UmbraValleyBiome extends EndBiome.Config { public BlockState getAltTopMaterial() { return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); } + + @Override + public boolean generateFloorRule() { + return false; + } + + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .rule( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new UmbraSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + PALLIDIUM_HEAVY, + PALLIDIUM_THIN, + PALLIDIUM_TINY, + SurfaceRules.state(surfaceMaterial().getTopMaterial()) + ) + ) + ) + ); + } }; } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 7af2d045..a14bcec7 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -24,7 +24,6 @@ public class UmbrellaJungleBiome extends EndBiome.Config { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 1d04bdaf..dc7e3f54 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -1,37 +1,28 @@ package ru.betterend.world.surface; -import ru.bclib.api.surface.rules.SurfaceNoiseCondition; +import ru.bclib.interfaces.NumericProvider; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -public class SulphuricSurfaceNoiseCondition extends SurfaceNoiseCondition { +/** + * Noise source that returns a value in [0, 3] + */ +public class SulphuricSurfaceNoiseCondition implements NumericProvider { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - private final double threshold; - public SulphuricSurfaceNoiseCondition(double threshold){ - this.threshold = threshold; - } - - private static int lastX = Integer.MIN_VALUE; - private static int lastZ = Integer.MIN_VALUE; - private static double lastValue = 0; - @Override - public boolean test(SurfaceRulesContextAccessor context) { + public int getNumber(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); - if (lastX==x && lastZ==z) return lastValue < threshold; - - double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( -0.1, 0.1, MHelper.RANDOM ); - - lastX=x; - lastZ=z; - lastValue=value; - return value < threshold; + if (value < -0.6) return 0; + if (value < -0.3) return 1; + if (value < -0.5) return 2; + return 3; } } diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index 6fcae251..845e88c7 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -1,39 +1,29 @@ package ru.betterend.world.surface; -import ru.bclib.api.surface.rules.SurfaceNoiseCondition; +import ru.bclib.interfaces.NumericProvider; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -public class UmbraSurfaceNoiseCondition extends SurfaceNoiseCondition { +/** + * Noise source that returns a value in [0, 4] + */ +public class UmbraSurfaceNoiseCondition implements NumericProvider { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); - private final double threshold; - public UmbraSurfaceNoiseCondition(double threshold){ - this.threshold = threshold; - } - - private static int lastX = Integer.MIN_VALUE; - private static int lastZ = Integer.MIN_VALUE; - private static double lastValue = 0; - @Override - public boolean test(SurfaceRulesContextAccessor context) { + public int getNumber(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); - if (lastX==x && lastZ==z) return lastValue > threshold; - - double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( -0.1, 0.1, MHelper.RANDOM ); - - lastX=x; - lastZ=z; - lastValue=value; - return value > threshold; - //int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60); - //SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config); + if (value > 0.4) return 0; + if (value > 0.15) return 1; + if (value > -0.15) return 2; + if (value > -0.4) return 3; + return 4; } } From 71ecd6d17ed0a5b45f451782a3eea15cb01f7d87 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 10:25:16 +0100 Subject: [PATCH 38/56] Exclude *the_void* biome --- src/main/java/ru/betterend/BetterEnd.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 98d03696..011173df 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -3,6 +3,7 @@ package ru.betterend; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biomes; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; @@ -67,8 +68,10 @@ public class BetterEnd implements ModInitializer { } BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { - EndStructures.addBiomeStructures(biomeID, biome); - EndFeatures.addBiomeFeatures(biomeID, biome); + if (!biomeID.equals(Biomes.THE_VOID.location())) { + EndStructures.addBiomeStructures(biomeID, biome); + EndFeatures.addBiomeFeatures(biomeID, biome); + } }); } From 1593e7dc412235b477a00138078465f769eec72e Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 11:59:01 +0100 Subject: [PATCH 39/56] Fixed priorities in SurfaceRules --- .../java/ru/betterend/world/biome/EndBiome.java | 15 ++++++--------- .../world/biome/land/SulphurSpringsBiome.java | 6 +++--- .../world/biome/land/UmbraValleyBiome.java | 6 +++--- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index e56ce50f..7e0601d4 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; @@ -22,12 +20,14 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; +import java.util.function.BiFunction; + public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { public static class DefaultSurfaceMaterialProvider implements SurfaceMaterialProvider{ public static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @Override public BlockState getTopMaterial() { - return END_STONE; + return getUnderMaterial(); } @Override @@ -47,11 +47,8 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { @Override public SurfaceRuleBuilder surface() { - SurfaceRuleBuilder builder = SurfaceRuleBuilder - .start() - .filler(getUnderMaterial()) - ; - + SurfaceRuleBuilder builder = SurfaceRuleBuilder.start(); + if (generateFloorRule() && getTopMaterial()!=getUnderMaterial()){ if (getTopMaterial()!=getAltTopMaterial()){ builder.floor(getTopMaterial()); @@ -59,7 +56,7 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { builder.chancedFloor(getTopMaterial(), getAltTopMaterial()); } } - return builder; + return builder.filler(getUnderMaterial()); } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 35e66a81..46702131 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.land; -import java.util.List; - import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -18,6 +16,8 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; +import java.util.List; + public class SulphurSpringsBiome extends EndBiome.Config { public SulphurSpringsBiome() { super("sulphur_springs"); @@ -75,7 +75,7 @@ public class SulphurSpringsBiome extends EndBiome.Config { public SurfaceRuleBuilder surface() { return super .surface() - .rule( + .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, new SwitchRuleSource( new SulphuricSurfaceNoiseCondition(), diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index d593195b..b24afe2d 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.land; -import java.util.List; - import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; @@ -15,6 +13,8 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.surface.UmbraSurfaceNoiseCondition; +import java.util.List; + public class UmbraValleyBiome extends EndBiome.Config { public UmbraValleyBiome() { super("umbra_valley"); @@ -56,7 +56,7 @@ public class UmbraValleyBiome extends EndBiome.Config { public SurfaceRuleBuilder surface() { return super .surface() - .rule( + .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, new SwitchRuleSource( new UmbraSurfaceNoiseCondition(), From 19b48a87a4eef7f19bcc8c47370a6f8e5b14bf10 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 11:59:53 +0100 Subject: [PATCH 40/56] Use LifeCycle API --- .../mixin/common/ServerLevelMixin.java | 32 +++++++------------ .../java/ru/betterend/registry/EndBiomes.java | 8 +++-- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index b5381cc9..9ad8f7bd 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -1,21 +1,14 @@ package ru.betterend.mixin.common; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.level.CustomSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -25,32 +18,29 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; -import java.util.List; -import java.util.concurrent.Executor; import java.util.function.Supplier; @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level { - private static String be_lastWorld = null; + //private static String be_lastWorld = null; protected ServerLevelMixin(WritableLevelData writableLevelData, ResourceKey resourceKey, DimensionType dimensionType, Supplier supplier, boolean bl, boolean bl2, long l) { super(writableLevelData, resourceKey, dimensionType, supplier, bl, bl2, l); } - @Inject(method = "*", at = @At("TAIL")) - private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { - if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { - return; - } - - be_lastWorld = session.getLevelId(); - ServerLevel world = ServerLevel.class.cast(this); - EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); - } +// @Inject(method = "*", at = @At("TAIL")) +// private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { +// if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { +// return; +// } +// +// be_lastWorld = session.getLevelId(); +// //ServerLevel world = ServerLevel.class.cast(this); +// //EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); +// } @Inject(method = "getSharedSpawnPos", at = @At("HEAD"), cancellable = true) private void be_getSharedSpawnPos(CallbackInfoReturnable info) { diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index ec247e54..75823c17 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -2,7 +2,9 @@ package ru.betterend.registry; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.biome.Biome; +import ru.bclib.api.LifeCycleAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.generator.BiomePicker; @@ -74,9 +76,11 @@ public class EndBiomes { public static final EndCaveBiome LUSH_AURORA_CAVE = registerCaveBiome(new LushAuroraCaveBiome()); public static final EndCaveBiome JADE_CAVE = registerCaveBiome(new JadeCaveBiome()); - public static void register() {} + public static void register() { + LifeCycleAPI.onLevelLoad(EndBiomes::onWorldLoad); + } - public static void onWorldLoad(long seed, Registry registry) { + private static void onWorldLoad(ServerLevel level, long seed, Registry registry) { CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry)); CAVE_BIOMES.rebuild(); if (caveBiomeMap == null || lastSeed != seed) { From 784834aef8509ecbe9eefbd1a900977d4eb04318 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 12:01:29 +0100 Subject: [PATCH 41/56] Make sure we set the distance as a square --- src/main/java/ru/betterend/BetterEnd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 011173df..8ab9eb71 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -63,7 +63,7 @@ public class BetterEnd implements ModInitializer { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes((int)GeneratorOptions.getIslandDistBlock()); + ru.bclib.world.generator.GeneratorOptions.setFarEndBiomesSqr(GeneratorOptions.getIslandDistBlock()); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } From ae755a6d11a8edd17a3296d106c973b79dee2421 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 15 Dec 2021 17:25:58 +0300 Subject: [PATCH 42/56] Library update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 858366fb..fd5774cc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.0 +bclib_version = 1.1.1 rei_version = 7.0.343 canvas_version = 1.0.+ From e019dc2031ed8045c897a97135e7bd1e06301b08 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 16:02:53 +0100 Subject: [PATCH 43/56] Loader update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 858366fb..586eb7e8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18.1 fabric_version = 0.44.0+1.18 -loader_version=0.12.11 +loader_version=0.12.12 #Loom loom_version=0.10-SNAPSHOT From dd1ef90f7e3d93d8de1117aa90b7030a3e2397f2 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 16:03:35 +0100 Subject: [PATCH 44/56] Dependency update --- src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fd8da63e..e5760f90 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": ">=1.18.1", - "bclib": ">=1.1.0" + "bclib": ">=1.1.1" }, "suggests": { "byg": ">=1.1.3", From e4d534d1c642ada6bc69be60b3525de06ddf209f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 15 Dec 2021 18:51:30 +0300 Subject: [PATCH 45/56] Small distance fix --- src/main/java/ru/betterend/BetterEnd.java | 2 +- .../ru/betterend/world/generator/GeneratorOptions.java | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 8ab9eb71..40e6c306 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -63,7 +63,7 @@ public class BetterEnd implements ModInitializer { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - ru.bclib.world.generator.GeneratorOptions.setFarEndBiomesSqr(GeneratorOptions.getIslandDistBlock()); + ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock()); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } diff --git a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java index 4e404a6f..79f0850d 100644 --- a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java +++ b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java @@ -22,9 +22,9 @@ public class GeneratorOptions { private static BlockPos spawn; private static boolean replacePortal; private static boolean replacePillars; - private static long islandDistBlock; private static int islandDistChunk; private static boolean directSpikeHeight; + private static int circleRadius = 1000; public static void init() { biomeSizeCaves = Configs.GENERATOR_CONFIG.getInt("biomeMap", "biomeSizeCaves", 32); @@ -76,8 +76,7 @@ public class GeneratorOptions { ); replacePortal = Configs.GENERATOR_CONFIG.getBoolean("portal", "customEndPortal", true); replacePillars = Configs.GENERATOR_CONFIG.getBoolean("spikes", "customObsidianSpikes", true); - int circleRadius = Configs.GENERATOR_CONFIG.getInt("customGenerator", "voidRingSize", 1000); - islandDistBlock = (long) circleRadius * (long) circleRadius; + circleRadius = Configs.GENERATOR_CONFIG.getInt("customGenerator", "voidRingSize", 1000); islandDistChunk = (circleRadius >> 3); // Twice bigger than normal } @@ -137,8 +136,8 @@ public class GeneratorOptions { return replacePillars; } - public static long getIslandDistBlock() { - return islandDistBlock; + public static int getIslandDistBlock() { + return circleRadius; } public static int getIslandDistChunk() { From 5460ccba2b7459cdafb72be06613a447701105f4 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 15 Dec 2021 19:03:28 +0300 Subject: [PATCH 46/56] Average depth getter --- .../world/generator/TerrainGenerator.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index d5518706..f8c3bfbb 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -11,7 +11,9 @@ import com.google.common.collect.Maps; import net.minecraft.util.Mth; import net.minecraft.world.level.biome.BiomeSource; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; +import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; public class TerrainGenerator { @@ -83,23 +85,22 @@ public class TerrainGenerator { } private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - //TODO: 1.18 find alternative -// if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { -// return 0F; -// } -// float depth = 0F; -// for (int i = 0; i < OFFS.length; i++) { -// int px = x + OFFS[i].x; -// int pz = z + OFFS[i].y; -// depth += getBiome(biomeSource, px, pz).getDepth() * COEF[i]; -// } -// return depth; - return 0; + if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { + return 0F; + } + float depth = 0F; + for (int i = 0; i < OFFS.length; i++) { + int px = x + OFFS[i].x; + int pz = z + OFFS[i].y; + depth += getBiome(biomeSource, px, pz).getTerrainHeight() * COEF[i]; + } + return depth; } -// private static Biome getBiome(BiomeSource biomeSource, int x, int z) { -// return biomeSource.getNoiseBiome(x, 0, z); -// } + private static BCLBiome getBiome(BiomeSource biomeSource, int x, int z) { + // TODO replace null sampler + return BiomeAPI.getBiome(biomeSource.getNoiseBiome(x, 0, z, null)); + } /** * Check if this is land From 934efc9aeddb55334ccabd0c06b96c83541b719a Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 16 Dec 2021 15:13:25 +0300 Subject: [PATCH 47/56] Land generator (WIP) --- .../common/NoiseBasedChunkGeneratorMixin.java | 146 ++++++++++++++++++ .../mixin/common/NoiseInterpolatorMixin.java | 24 +++ .../world/generator/EndNoiseFiller.java | 67 ++++++++ .../world/generator/TerrainGenerator.java | 46 +++++- .../resources/betterend.mixins.common.json | 3 +- 5 files changed, 283 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java create mode 100644 src/main/java/ru/betterend/world/generator/EndNoiseFiller.java diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index 5aa420b4..e67932ad 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,19 +1,52 @@ package ru.betterend.mixin.common; +import java.util.HashSet; +import java.util.OptionalInt; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.stream.IntStream; +import com.google.common.collect.Sets; +import net.minecraft.Util; import net.minecraft.core.Registry; +import net.minecraft.server.level.WorldGenRegion; +import net.minecraft.util.Mth; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; +import net.minecraft.world.level.NoiseColumn; +import net.minecraft.world.level.StructureFeatureManager; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.levelgen.Beardifier; +import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; +import net.minecraft.world.level.levelgen.NoiseChunk; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.StructureSettings; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.SurfaceSystem; +import net.minecraft.world.level.levelgen.WorldGenerationContext; +import net.minecraft.world.level.levelgen.blending.Blender; +import org.jetbrains.annotations.Nullable; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.betterend.world.generator.EndNoiseFiller; +import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; @Mixin(NoiseBasedChunkGenerator.class) @@ -22,6 +55,14 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Shadow protected Supplier settings; + @Final + @Shadow + protected BlockState defaultBlock; + + @Final + @Shadow + private SurfaceSystem surfaceSystem; + public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { super(populationSource, biomeSource, structuresConfig, worldSeed); } @@ -29,6 +70,9 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); + if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { + EndNoiseFiller.INSTANCE.setBiomeSource(biomeSource); + } } //TODO: 1.18 Find another place for this @@ -39,4 +83,106 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { // info.cancel(); // } // } + + @Inject(method = "buildSurface", at = @At("HEAD"), cancellable = true) + private void be_buildSurface(WorldGenRegion worldGenRegion, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess, CallbackInfo info) { + //NoiseChunk noiseChunk = chunkAccess.getOrCreateNoiseChunk(this.sampler, () -> new Beardifier(structureFeatureManager, chunkAccess), noiseGeneratorSettings, this.globalFluidPicker, Blender.of(worldGenRegion)); + /*WorldGenerationContext worldGenerationContext = new WorldGenerationContext(this, worldGenRegion); + NoiseGeneratorSettings noiseGeneratorSettings = this.settings.get(); + surfaceSystem.buildSurface( + worldGenRegion.getBiomeManager(), + worldGenRegion.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), + noiseGeneratorSettings.useLegacyRandomSource(), + worldGenerationContext, + chunkAccess, + null, + noiseGeneratorSettings.surfaceRule() + );*/ + //System.out.println("Build surface!"); + } + + @Inject(method = "fillFromNoise", at = @At("HEAD"), cancellable = true) + private void be_fillFromNoise(Executor executor, Blender blender, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess2, CallbackInfoReturnable> info) { + info.setReturnValue(CompletableFuture.supplyAsync( + Util.wrapThreadWithTaskName( + "wgen_fill_noise", + () -> this.fill(chunkAccess2) + ), + Util.backgroundExecutor() + )); + } + + private ChunkAccess fill(ChunkAccess chunkAccess) { + ChunkPos chunkPos = chunkAccess.getPos(); + + int px = chunkPos.x << 1; + int pz = chunkPos.z << 1; + double[][][] noiseColumns = new double[3][3][33]; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); + } + } + + // Testing + BlockState grass = Blocks.GRASS_BLOCK.defaultBlockState(); + + Heightmap heightmap = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); + Heightmap heightmap2 = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); + + short maxHeight = (short) (Math.min(127, chunkAccess.getMaxBuildHeight()) - chunkAccess.getMinBuildHeight()); + short start = (short) ((-chunkAccess.getMinBuildHeight()) >> 4); + short end = (short) (maxHeight >> 4); + + //IntStream.range(start, end).parallel().forEach(sectionIndex -> { + for (short sectionIndex = start; sectionIndex <= end; sectionIndex++) { + LevelChunkSection section = chunkAccess.getSection(sectionIndex); + for (byte y = 0; y < 16; y++) { + short iy = (short) ((y >> 2) | ((sectionIndex - start) << 2)); + float dy = (y & 3) / 4F; + for (byte x = 0; x < 16; x++) { + float dx = (x & 7) / 8F; + byte ix = (byte) (x >> 3); + for (byte z = 0; z < 16; z++) { + float dz = (z & 7) / 8F; + byte iz = (byte) (z >> 3); + + float a = (float) noiseColumns[ix][iz][iy]; + float b = (float) noiseColumns[ix + 1][iz][iy]; + float c = (float) noiseColumns[ix][iz][iy + 1]; + float d = (float) noiseColumns[ix + 1][iz][iy + 1]; + + float e = (float) noiseColumns[ix][iz + 1][iy]; + float f = (float) noiseColumns[ix + 1][iz + 1][iy]; + float g = (float) noiseColumns[ix][iz + 1][iy + 1]; + float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; + + a = Mth.lerp(dx, a, b); + b = Mth.lerp(dx, c, d); + c = Mth.lerp(dx, e, f); + d = Mth.lerp(dx, g, h); + + a = Mth.lerp(dy, a, b); + b = Mth.lerp(dy, c, d); + + if (Mth.lerp(dz, a, b) > 0) { + section.setBlockState(x, y, z, defaultBlock); + heightmap.update(x, y, z, defaultBlock); + heightmap2.update(x, y, z, defaultBlock); + } + else if (iy > 0) { + byte py = (byte) ((y - 1) & 15); + LevelChunkSection section2 = y == 0 ? chunkAccess.getSection(sectionIndex - 1) : section; + if (section2.getBlockState(x, py, z).equals(defaultBlock)) { + section2.setBlockState(x, py, z, grass); + } + } + } + } + } + } + //}); + + return chunkAccess; + } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java new file mode 100644 index 00000000..bd4a557f --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java @@ -0,0 +1,24 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.level.levelgen.NoiseChunk; +import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import ru.betterend.world.generator.EndNoiseFiller; + +@Mixin(NoiseChunk.NoiseInterpolator.class) +public class NoiseInterpolatorMixin { + /*@Redirect( + method = "fillSlice([[DI)V", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseInterpolator;noiseFiller:Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseFiller;", + opcode = Opcodes.GETFIELD + ) + ) + private NoiseFiller getFiller(NoiseChunk.NoiseInterpolator interpolator) { + return EndNoiseFiller.INSTANCE; + }*/ +} diff --git a/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java b/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java new file mode 100644 index 00000000..97e445c5 --- /dev/null +++ b/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java @@ -0,0 +1,67 @@ +package ru.betterend.world.generator; + +import net.minecraft.util.Mth; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; + +public class EndNoiseFiller implements NoiseFiller { + public static final EndNoiseFiller INSTANCE = new EndNoiseFiller(); + private double[][][] noiseColumns = new double[3][3][33]; + private BiomeSource biomeSource; + private int chunkX; + private int chunkZ; + + private EndNoiseFiller() {} + + public void setBiomeSource(BiomeSource biomeSource) { + this.biomeSource = biomeSource; + } + + @Override + public double calculateNoise(int x, int y, int z) { + if (y < 0 || y > 127) { + return -10; + } + + int cx = x >> 4; + int cz = z >> 4; + if (chunkX != cx || chunkZ != cz) { + chunkX = cx; + chunkZ = cz; + int px = cx << 1; + int pz = cz << 1; + for (byte i = 0; i < 3; i++) { + for (byte j = 0; j < 3; j++) { + TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); + } + } + } + + byte ix = (byte) ((x & 15) >> 3); + byte iy = (byte) (y >> 2); + byte iz = (byte) ((z & 15) >> 3); + float dx = (x & 7) / 8F; + float dy = (y & 3) / 4F; + float dz = (z & 7) / 8F; + + float a = (float) noiseColumns[ix][iz][iy]; + float b = (float) noiseColumns[ix + 1][iz][iy]; + float c = (float) noiseColumns[ix][iz][iy + 1]; + float d = (float) noiseColumns[ix + 1][iz][iy + 1]; + + float e = (float) noiseColumns[ix][iz + 1][iy]; + float f = (float) noiseColumns[ix + 1][iz + 1][iy]; + float g = (float) noiseColumns[ix][iz + 1][iy + 1]; + float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; + + a = Mth.lerp(dx, a, b); + b = Mth.lerp(dx, c, d); + c = Mth.lerp(dx, e, f); + d = Mth.lerp(dx, g, h); + + a = Mth.lerp(dy, a, b); + b = Mth.lerp(dy, c, d); + + return Mth.lerp(dz, a, b); + } +} diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index f8c3bfbb..3de5c44e 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -84,8 +84,49 @@ public class TerrainGenerator { LOCKER.unlock(); } + public static float getTerrainDensity(int x, int y, int z, BiomeSource biomeSource) { + LOCKER.lock(); + + largeIslands.clearCache(); + mediumIslands.clearCache(); + smallIslands.clearCache(); + + double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval( + x * 0.2, + z * 0.2 + ) * 10 + noise1.eval(x * 0.4, z * 0.4) * 5; + double distortion2 = noise2.eval(x * 0.1, z * 0.1) * 20 + noise1.eval( + x * 0.2, + z * 0.2 + ) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; + double px = (double) x * SCALE_XZ + distortion1; + double pz = (double) z * SCALE_XZ + distortion2; + + largeIslands.updatePositions(px, pz); + mediumIslands.updatePositions(px, pz); + smallIslands.updatePositions(px, pz); + + float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; + + double py = (double) y * SCALE_Y; + float dist = largeIslands.getDensity(px, py, pz, height); + dist = dist > 1 ? dist : MHelper.max(dist, mediumIslands.getDensity(px, py, pz, height)); + dist = dist > 1 ? dist : MHelper.max(dist, smallIslands.getDensity(px, py, pz, height)); + if (dist > -0.5F) { + dist += noise1.eval(px * 0.01, py * 0.01, pz * 0.01) * 0.02 + 0.02; + dist += noise2.eval(px * 0.05, py * 0.05, pz * 0.05) * 0.01 + 0.01; + dist += noise1.eval(px * 0.1, py * 0.1, pz * 0.1) * 0.005 + 0.005; + } + if (py > 100) { + dist = (float) Mth.lerp((py - 100) / 27F, dist, -1); + } + + LOCKER.unlock(); + return dist; + } + private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { + /*if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { return 0F; } float depth = 0F; @@ -94,7 +135,8 @@ public class TerrainGenerator { int pz = z + OFFS[i].y; depth += getBiome(biomeSource, px, pz).getTerrainHeight() * COEF[i]; } - return depth; + return depth;*/ + return 0F; } private static BCLBiome getBiome(BiomeSource biomeSource, int x, int z) { diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 006ceeee..6764b2a1 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -25,7 +25,8 @@ "EntityMixin", "PlayerMixin", "SlimeMixin", - "StructureFeaturesMixin" + "StructureFeaturesMixin", + "NoiseInterpolatorMixin" ], "injectors": { "defaultRequire": 1 From fb19abdc45790a5313a187dcd9130ca0c58a2cc0 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 16 Dec 2021 20:29:16 +0300 Subject: [PATCH 48/56] Library update --- build.gradle | 1 + gradle.properties | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f3d07a80..f2e1ce50 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ repositories { maven { url 'https://maven.blamejared.com' } maven { url "https://maven.shedaniel.me/" } maven { url 'https://jitpack.io' } + maven { url 'https://maven.terraformersmc.com/releases' } } dependencies { diff --git a/gradle.properties b/gradle.properties index fc666431..18c82800 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.1 +bclib_version = 1.1.2 rei_version = 7.0.343 canvas_version = 1.0.+ From c515c3c36707a7b822c7110fd04d96e23d52aa87 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 16 Dec 2021 21:27:43 +0300 Subject: [PATCH 49/56] Library integration update --- .../java/ru/betterend/integration/EnderscapeIntegration.java | 2 +- .../integration/FlamboyantRefabricatedIntegration.java | 2 +- src/main/java/ru/betterend/integration/Integrations.java | 2 +- src/main/java/ru/betterend/integration/NourishIntegration.java | 2 +- src/main/java/ru/betterend/integration/byg/BYGIntegration.java | 2 +- src/main/resources/fabric.mod.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java index c1be368b..19b088ec 100644 --- a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java +++ b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import ru.bclib.api.TagAPI; import ru.bclib.api.biomes.BiomeAPI; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.bclib.world.features.BCLFeature; public class EnderscapeIntegration extends ModIntegration { diff --git a/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java b/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java index c8f45267..f2c7d178 100644 --- a/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java +++ b/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java @@ -2,7 +2,7 @@ package ru.betterend.integration; import com.google.common.collect.Maps; import net.minecraft.world.level.ItemLike; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.bclib.util.ColorUtil; import ru.betterend.blocks.HydraluxPetalColoredBlock; import ru.betterend.complexmaterials.ColoredMaterial; diff --git a/src/main/java/ru/betterend/integration/Integrations.java b/src/main/java/ru/betterend/integration/Integrations.java index 21a7a9aa..837b8fb8 100644 --- a/src/main/java/ru/betterend/integration/Integrations.java +++ b/src/main/java/ru/betterend/integration/Integrations.java @@ -5,7 +5,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import ru.bclib.api.ModIntegrationAPI; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.bclib.recipes.GridRecipe; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; diff --git a/src/main/java/ru/betterend/integration/NourishIntegration.java b/src/main/java/ru/betterend/integration/NourishIntegration.java index cddd6923..4d17a020 100644 --- a/src/main/java/ru/betterend/integration/NourishIntegration.java +++ b/src/main/java/ru/betterend/integration/NourishIntegration.java @@ -3,7 +3,7 @@ package ru.betterend.integration; import net.minecraft.tags.Tag; import net.minecraft.world.item.Item; import ru.bclib.api.TagAPI; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.betterend.registry.EndItems; public class NourishIntegration extends ModIntegration { diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index dff88aed..7d00ea2a 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -1,6 +1,6 @@ package ru.betterend.integration.byg; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.betterend.integration.EndBiomeIntegration; public class BYGIntegration extends ModIntegration implements EndBiomeIntegration { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e5760f90..4c41216d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": ">=1.18.1", - "bclib": ">=1.1.1" + "bclib": ">=1.1.2" }, "suggests": { "byg": ">=1.1.3", From ce88ec23f7d1577ebdf3b8a62f4a2f9c6b0b45be Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 18 Dec 2021 23:57:44 +0300 Subject: [PATCH 50/56] Terrain generator (WIP) --- build.gradle | 4 + .../betterend/blocks/EndLotusStemBlock.java | 5 +- .../blocks/HydrothermalVentBlock.java | 7 +- .../betterend/blocks/LumecornSeedBlock.java | 6 +- .../blocks/NeonCactusPlantBlock.java | 9 +- .../betterend/blocks/SmallAmaranitaBlock.java | 6 +- .../blocks/SmallJellyshroomBlock.java | 11 +- .../blocks/VentBubbleColumnBlock.java | 6 +- .../blocks/basis/EndLanternBlock.java | 4 +- .../blocks/basis/PottableFeatureSapling.java | 4 +- .../entities/EndStoneSmelterBlockEntity.java | 9 +- .../byg/biomes/NightshadeRedwoods.java | 4 +- .../byg/biomes/OldBulbisGardens.java | 6 +- .../integration/rei/REIAlloyingCategory.java | 10 +- .../integration/rei/REIAnvilCategory.java | 12 +- .../integration/rei/REIInfusionCategory.java | 10 +- .../betterend/integration/rei/REIPlugin.java | 7 +- .../betterend/interfaces/TargetChecker.java | 5 + .../java/ru/betterend/item/GuideBookItem.java | 4 +- .../mixin/common/EndCityFeatureMixin.java | 6 +- .../mixin/common/EndPodiumFeatureMixin.java | 6 +- .../common/NoiseBasedChunkGeneratorMixin.java | 168 +----------------- .../mixin/common/NoiseChunkAccessor.java | 24 +++ .../mixin/common/NoiseChunkMixin.java | 28 +++ .../mixin/common/NoiseInterpolatorMixin.java | 60 +++++-- .../java/ru/betterend/util/BlockFixer.java | 7 +- .../biome/cave/EmptyAuroraCaveBiome.java | 4 +- .../world/biome/cave/EmptyEndCaveBiome.java | 4 +- .../biome/cave/EmptySmaragdantCaveBiome.java | 4 +- .../world/biome/cave/EndCaveBiome.java | 6 +- .../world/biome/cave/JadeCaveBiome.java | 4 +- .../world/biome/cave/LushAuroraCaveBiome.java | 4 +- .../biome/cave/LushSmaragdantCaveBiome.java | 4 +- .../world/features/CrashedShipFeature.java | 4 +- .../features/terrain/DesertLakeFeature.java | 4 +- .../features/terrain/EndLakeFeature.java | 4 +- .../terrain/FloatingSpireFeature.java | 9 +- .../world/features/terrain/GeyserFeature.java | 8 +- .../world/features/terrain/SpireFeature.java | 11 +- .../terrain/SulphuricCaveFeature.java | 7 +- .../terrain/SulphuricLakeFeature.java | 7 +- .../caves/CaveChunkPopulatorFeature.java | 11 +- .../terrain/caves/EndCaveFeature.java | 11 +- .../terrain/caves/TunelCaveFeature.java | 13 +- .../world/generator/TerrainGenerator.java | 13 +- .../features/EternalPortalStructure.java | 4 +- .../features/FeatureBaseStructure.java | 4 +- .../features/GiantIceStarStructure.java | 8 +- .../GiantMossyGlowshroomStructure.java | 6 +- .../features/MegaLakeSmallStructure.java | 4 +- .../features/MegaLakeStructure.java | 4 +- .../features/MountainStructure.java | 4 +- .../features/PaintedMountainStructure.java | 4 +- .../features/SDFStructureFeature.java | 6 +- .../world/structures/piece/BasePiece.java | 1 - .../world/structures/piece/CavePiece.java | 4 +- .../piece/CrystalMountainPiece.java | 4 +- .../world/structures/piece/LakePiece.java | 7 +- .../world/structures/piece/MountainPiece.java | 7 +- .../world/structures/piece/NBTPiece.java | 4 +- .../piece/PaintedMountainPiece.java | 4 +- .../world/structures/piece/VoxelPiece.java | 6 +- src/main/resources/betterend.accesswidener | 4 + .../resources/betterend.mixins.common.json | 8 +- src/main/resources/fabric.mod.json | 1 + 65 files changed, 283 insertions(+), 371 deletions(-) create mode 100644 src/main/java/ru/betterend/interfaces/TargetChecker.java create mode 100644 src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java create mode 100644 src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java create mode 100644 src/main/resources/betterend.accesswidener diff --git a/build.gradle b/build.gradle index f2e1ce50..dca83c4c 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,10 @@ repositories { maven { url 'https://maven.terraformersmc.com/releases' } } +loom { + accessWidenerPath = file("src/main/resources/betterend.accesswidener") +} + dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings minecraft.officialMojangMappings() diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 4eb88dac..46244688 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -1,9 +1,6 @@ package ru.betterend.blocks; -import java.util.Map; - import com.google.common.collect.Maps; - import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,6 +29,8 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.util.BlocksHelper; +import java.util.Map; + public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, RenderLayerProvider { public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 8353cb0c..a53a457a 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -1,9 +1,5 @@ package ru.betterend.blocks; -import java.util.Random; - -import org.jetbrains.annotations.Nullable; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -38,12 +34,15 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.registry.EndBlocks; +import java.util.Random; + @SuppressWarnings("deprecation") public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlock, LiquidBlockContainer, SimpleWaterloggedBlock { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index c5086774..2689b870 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -1,8 +1,5 @@ package ru.betterend.blocks; -import java.util.Optional; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -14,6 +11,9 @@ import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; +import java.util.Optional; +import java.util.Random; + public class LumecornSeedBlock extends EndPlantWithAgeBlock { @Override diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index 1c55c2f5..2e428182 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -1,12 +1,7 @@ package ru.betterend.blocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -51,6 +46,10 @@ import ru.betterend.blocks.EndBlockProperties.CactusBottom; import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndBlocks; +import java.util.EnumMap; +import java.util.List; +import java.util.Random; + @SuppressWarnings("deprecation") public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, RenderLayerProvider, PottablePlant { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; diff --git a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java index d8303db9..290b35c1 100644 --- a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java @@ -1,8 +1,5 @@ package ru.betterend.blocks; -import java.util.Optional; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; @@ -21,6 +18,9 @@ import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; +import java.util.Optional; +import java.util.Random; + public class SmallAmaranitaBlock extends EndPlantBlock { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 10, 12); diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index a2a6ebfc..cda6ec18 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -1,13 +1,7 @@ package ru.betterend.blocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Optional; -import java.util.Random; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -43,6 +37,11 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndFeatures; +import java.util.EnumMap; +import java.util.List; +import java.util.Optional; +import java.util.Random; + public class SmallJellyshroomBlock extends BaseAttachedBlock implements RenderLayerProvider, BonemealableBlock, PottablePlant { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index a03fe926..3ea9dc38 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -1,8 +1,5 @@ package ru.betterend.blocks; -import java.util.Optional; -import java.util.Random; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -36,6 +33,9 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; +import java.util.Optional; +import java.util.Random; + public class VentBubbleColumnBlock extends Block implements BucketPickup, LiquidBlockContainer { public VentBubbleColumnBlock() { super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).noOcclusion().noCollission().noDrops()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index 72f01e29..065444ed 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,7 +1,5 @@ package ru.betterend.blocks.basis; -import java.util.Map; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -28,6 +26,8 @@ import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; +import java.util.Map; + @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; diff --git a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java index 22363d30..b8dc1fb4 100644 --- a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java +++ b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java @@ -1,12 +1,12 @@ package ru.betterend.blocks.basis; -import java.util.function.Function; - import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import ru.bclib.blocks.FeatureSaplingBlock; import ru.betterend.interfaces.PottablePlant; +import java.util.function.Function; + public abstract class PottableFeatureSapling extends FeatureSaplingBlock implements PottablePlant { public PottableFeatureSapling(Function> featureSupplier) { super(featureSupplier); diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index aa585167..5325a67f 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -1,12 +1,7 @@ package ru.betterend.blocks.entities; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.fabric.api.registry.FuelRegistry; @@ -46,6 +41,10 @@ import ru.betterend.client.gui.EndStoneSmelterScreenHandler; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlockEntities; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible { private static final int[] TOP_SLOTS = new int[] {0, 1}; diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index a3b6df63..36f0ec4a 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -1,7 +1,5 @@ package ru.betterend.integration.byg.biomes; -import java.util.List; - import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.entity.EntityType; @@ -18,6 +16,8 @@ import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; + public class NightshadeRedwoods extends EndBiome.Config { public NightshadeRedwoods() { super("nightshade_redwoods"); diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index d7eb15e4..a654cc83 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -1,8 +1,5 @@ package ru.betterend.integration.byg.biomes; -import java.util.List; -import java.util.function.Supplier; - import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.BuiltinRegistries; @@ -25,6 +22,9 @@ import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; +import java.util.function.Supplier; + public class OldBulbisGardens extends EndBiome.Config { public OldBulbisGardens() { diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index e24c0a1c..9b9abaec 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,12 +1,6 @@ package ru.betterend.integration.rei; -import java.text.DecimalFormat; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; - import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; @@ -20,8 +14,12 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; +import org.jetbrains.annotations.NotNull; import ru.betterend.registry.EndBlocks; +import java.text.DecimalFormat; +import java.util.List; + public class REIAlloyingCategory implements DisplayCategory { private final EntryStack ICON; diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index fa2d0ebb..ef1220e1 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,13 +1,6 @@ package ru.betterend.integration.rei; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; - import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; @@ -25,8 +18,13 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import org.jetbrains.annotations.NotNull; import ru.betterend.blocks.basis.EndAnvilBlock; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class REIAnvilCategory implements DisplayCategory { private final EntryStack[] ANVILS; diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 12214fbd..0be2955a 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,12 +1,6 @@ package ru.betterend.integration.rei; -import java.util.ArrayList; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; - import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; @@ -18,9 +12,13 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; +import java.util.ArrayList; +import java.util.List; + public class REIInfusionCategory implements DisplayCategory { private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index 622b4145..3371c605 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,10 +1,6 @@ package ru.betterend.integration.rei; -import java.util.List; -import java.util.stream.Collectors; - import com.google.common.collect.Lists; - import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; @@ -26,6 +22,9 @@ import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.stream.Collectors; + //https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java public class REIPlugin implements REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); diff --git a/src/main/java/ru/betterend/interfaces/TargetChecker.java b/src/main/java/ru/betterend/interfaces/TargetChecker.java new file mode 100644 index 00000000..fde54ed2 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/TargetChecker.java @@ -0,0 +1,5 @@ +package ru.betterend.interfaces; + +public interface TargetChecker { + boolean isTarget(); +} diff --git a/src/main/java/ru/betterend/item/GuideBookItem.java b/src/main/java/ru/betterend/item/GuideBookItem.java index 6a1fab05..91971e54 100644 --- a/src/main/java/ru/betterend/item/GuideBookItem.java +++ b/src/main/java/ru/betterend/item/GuideBookItem.java @@ -1,7 +1,5 @@ package ru.betterend.item; -import java.util.List; - import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -18,6 +16,8 @@ import ru.betterend.BetterEnd; import ru.betterend.registry.EndItems; import ru.betterend.util.LangUtil; +import java.util.List; + public class GuideBookItem extends ModelProviderItem { public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); public static final Item GUIDE_BOOK = EndItems.getItemRegistry().register(BOOK_ID, new GuideBookItem()); diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 1895cd72..241e3d00 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,8 +1,5 @@ package ru.betterend.mixin.common; -import java.util.Optional; -import java.util.Random; - import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -19,6 +16,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Optional; +import java.util.Random; + @Mixin(EndCityFeature.class) public class EndCityFeatureMixin { @Inject(method = "pieceGeneratorSupplier", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 71514556..1e838080 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -1,8 +1,5 @@ package ru.betterend.mixin.common; -import java.util.Optional; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; @@ -26,6 +23,9 @@ import ru.bclib.util.StructureHelper; import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Optional; +import java.util.Random; + @Mixin(EndPodiumFeature.class) public class EndPodiumFeatureMixin { private static BlockPos be_portalPosition; diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index e67932ad..392de48e 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,188 +1,26 @@ package ru.betterend.mixin.common; -import java.util.HashSet; -import java.util.OptionalInt; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.IntStream; - -import com.google.common.collect.Sets; -import net.minecraft.Util; import net.minecraft.core.Registry; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.util.Mth; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureFeatureManager; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.levelgen.Beardifier; -import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseChunk; -import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.StructureSettings; -import net.minecraft.world.level.levelgen.SurfaceRules; -import net.minecraft.world.level.levelgen.SurfaceSystem; -import net.minecraft.world.level.levelgen.WorldGenerationContext; -import net.minecraft.world.level.levelgen.blending.Blender; -import org.jetbrains.annotations.Nullable; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.betterend.world.generator.EndNoiseFiller; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; +import java.util.function.Supplier; + @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { - @Final - @Shadow - protected Supplier settings; - - @Final - @Shadow - protected BlockState defaultBlock; - - @Final - @Shadow - private SurfaceSystem surfaceSystem; - public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { super(populationSource, biomeSource, structuresConfig, worldSeed); } @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { + private void be_onInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); - if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { - EndNoiseFiller.INSTANCE.setBiomeSource(biomeSource); - } - } - - //TODO: 1.18 Find another place for this -// @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) -// private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { -// if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { -// TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); -// info.cancel(); -// } -// } - - @Inject(method = "buildSurface", at = @At("HEAD"), cancellable = true) - private void be_buildSurface(WorldGenRegion worldGenRegion, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess, CallbackInfo info) { - //NoiseChunk noiseChunk = chunkAccess.getOrCreateNoiseChunk(this.sampler, () -> new Beardifier(structureFeatureManager, chunkAccess), noiseGeneratorSettings, this.globalFluidPicker, Blender.of(worldGenRegion)); - /*WorldGenerationContext worldGenerationContext = new WorldGenerationContext(this, worldGenRegion); - NoiseGeneratorSettings noiseGeneratorSettings = this.settings.get(); - surfaceSystem.buildSurface( - worldGenRegion.getBiomeManager(), - worldGenRegion.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), - noiseGeneratorSettings.useLegacyRandomSource(), - worldGenerationContext, - chunkAccess, - null, - noiseGeneratorSettings.surfaceRule() - );*/ - //System.out.println("Build surface!"); - } - - @Inject(method = "fillFromNoise", at = @At("HEAD"), cancellable = true) - private void be_fillFromNoise(Executor executor, Blender blender, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess2, CallbackInfoReturnable> info) { - info.setReturnValue(CompletableFuture.supplyAsync( - Util.wrapThreadWithTaskName( - "wgen_fill_noise", - () -> this.fill(chunkAccess2) - ), - Util.backgroundExecutor() - )); - } - - private ChunkAccess fill(ChunkAccess chunkAccess) { - ChunkPos chunkPos = chunkAccess.getPos(); - - int px = chunkPos.x << 1; - int pz = chunkPos.z << 1; - double[][][] noiseColumns = new double[3][3][33]; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); - } - } - - // Testing - BlockState grass = Blocks.GRASS_BLOCK.defaultBlockState(); - - Heightmap heightmap = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - Heightmap heightmap2 = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - - short maxHeight = (short) (Math.min(127, chunkAccess.getMaxBuildHeight()) - chunkAccess.getMinBuildHeight()); - short start = (short) ((-chunkAccess.getMinBuildHeight()) >> 4); - short end = (short) (maxHeight >> 4); - - //IntStream.range(start, end).parallel().forEach(sectionIndex -> { - for (short sectionIndex = start; sectionIndex <= end; sectionIndex++) { - LevelChunkSection section = chunkAccess.getSection(sectionIndex); - for (byte y = 0; y < 16; y++) { - short iy = (short) ((y >> 2) | ((sectionIndex - start) << 2)); - float dy = (y & 3) / 4F; - for (byte x = 0; x < 16; x++) { - float dx = (x & 7) / 8F; - byte ix = (byte) (x >> 3); - for (byte z = 0; z < 16; z++) { - float dz = (z & 7) / 8F; - byte iz = (byte) (z >> 3); - - float a = (float) noiseColumns[ix][iz][iy]; - float b = (float) noiseColumns[ix + 1][iz][iy]; - float c = (float) noiseColumns[ix][iz][iy + 1]; - float d = (float) noiseColumns[ix + 1][iz][iy + 1]; - - float e = (float) noiseColumns[ix][iz + 1][iy]; - float f = (float) noiseColumns[ix + 1][iz + 1][iy]; - float g = (float) noiseColumns[ix][iz + 1][iy + 1]; - float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; - - a = Mth.lerp(dx, a, b); - b = Mth.lerp(dx, c, d); - c = Mth.lerp(dx, e, f); - d = Mth.lerp(dx, g, h); - - a = Mth.lerp(dy, a, b); - b = Mth.lerp(dy, c, d); - - if (Mth.lerp(dz, a, b) > 0) { - section.setBlockState(x, y, z, defaultBlock); - heightmap.update(x, y, z, defaultBlock); - heightmap2.update(x, y, z, defaultBlock); - } - else if (iy > 0) { - byte py = (byte) ((y - 1) & 15); - LevelChunkSection section2 = y == 0 ? chunkAccess.getSection(sectionIndex - 1) : section; - if (section2.getBlockState(x, py, z).equals(defaultBlock)) { - section2.setBlockState(x, py, z, grass); - } - } - } - } - } - } - //}); - - return chunkAccess; } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java new file mode 100644 index 00000000..718caa54 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java @@ -0,0 +1,24 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.level.levelgen.NoiseChunk; +import net.minecraft.world.level.levelgen.NoiseSettings; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(NoiseChunk.class) +public interface NoiseChunkAccessor { + @Accessor("noiseSettings") + NoiseSettings bnv_getNoiseSettings(); + + @Accessor("cellCountXZ") + int bnv_getCellCountXZ(); + + @Accessor("cellCountY") + int bnv_getCellCountY(); + + @Accessor("firstCellZ") + int bnv_getFirstCellZ(); + + @Accessor("cellNoiseMinY") + int bnv_getCellNoiseMinY(); +} diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java new file mode 100644 index 00000000..f01fcb51 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java @@ -0,0 +1,28 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.level.levelgen.Aquifer; +import net.minecraft.world.level.levelgen.NoiseChunk; +import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.NoiseSampler; +import net.minecraft.world.level.levelgen.blending.Blender; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.betterend.interfaces.TargetChecker; + +@Mixin(NoiseChunk.class) +public class NoiseChunkMixin implements TargetChecker { + private boolean bnv_isNetherGenerator; + + @Inject(method = "*", at = @At("TAIL")) + private void bnv_onNoiseChunkInit(int i, int j, int k, NoiseSampler noiseSampler, int l, int m, NoiseFiller noiseFiller, NoiseGeneratorSettings noiseGeneratorSettings, Aquifer.FluidPicker fluidPicker, Blender blender, CallbackInfo info) { + bnv_isNetherGenerator = noiseGeneratorSettings.stable(NoiseGeneratorSettings.END); + } + + @Override + public boolean isTarget() { + return bnv_isNetherGenerator; + } +} diff --git a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java index bd4a557f..24d643dc 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java @@ -1,24 +1,54 @@ package ru.betterend.mixin.common; import net.minecraft.world.level.levelgen.NoiseChunk; -import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; -import org.objectweb.asm.Opcodes; +import net.minecraft.world.level.levelgen.NoiseSettings; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; -import ru.betterend.world.generator.EndNoiseFiller; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.betterend.interfaces.TargetChecker; @Mixin(NoiseChunk.NoiseInterpolator.class) public class NoiseInterpolatorMixin { - /*@Redirect( - method = "fillSlice([[DI)V", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseInterpolator;noiseFiller:Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseFiller;", - opcode = Opcodes.GETFIELD - ) - ) - private NoiseFiller getFiller(NoiseChunk.NoiseInterpolator interpolator) { - return EndNoiseFiller.INSTANCE; - }*/ + @Final + @Shadow(aliases = "this$0") + private NoiseChunk this$0; + + @Inject(method = "fillSlice", at = @At("HEAD"), cancellable = true) + private void be_fillSlice(double[][] data, int x, CallbackInfo info) { + if (!TargetChecker.class.cast(this$0).isTarget()) { + return; + } + + info.cancel(); + + NoiseChunkAccessor accessor = NoiseChunkAccessor.class.cast(this$0); + NoiseSettings noiseSettings = accessor.bnv_getNoiseSettings(); + + final int sizeY = noiseSettings.getCellHeight(); + final int sizeXZ = noiseSettings.getCellWidth(); + final int cellsY = accessor.bnv_getCellCountY() + 1; + final int cellsXZ = accessor.bnv_getCellCountXZ() + 1; + final int firstCellZ = accessor.bnv_getFirstCellZ(); + final int cellNoiseMinY = accessor.bnv_getCellNoiseMinY(); + + x *= sizeXZ; + + for (int cellXZ = 0; cellXZ < cellsXZ; ++cellXZ) { + int z = (firstCellZ + cellXZ) * sizeXZ; + for (int cellY = 0; cellY < cellsY; ++cellY) { + int y = (cellY + cellNoiseMinY) * sizeY; + data[cellXZ][cellY] = be_calculateNoise(x, y, z); + } + } + } + + private float be_calculateNoise(int x, int y, int z) { + float gradient = (64 - y) * 0.1F; + float sinX = (float) Math.sin(x * 0.1); + float sinZ = (float) Math.sin(z * 0.1); + return gradient + sinX + sinZ; + } } diff --git a/src/main/java/ru/betterend/util/BlockFixer.java b/src/main/java/ru/betterend/util/BlockFixer.java index f6fd4b06..76b6de89 100644 --- a/src/main/java/ru/betterend/util/BlockFixer.java +++ b/src/main/java/ru/betterend/util/BlockFixer.java @@ -1,10 +1,6 @@ package ru.betterend.util; -import java.util.Set; -import java.util.stream.IntStream; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -23,6 +19,9 @@ import ru.betterend.blocks.BlueVineBlock; import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; +import java.util.Set; +import java.util.stream.IntStream; + public class BlockFixer { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java index f7031641..b7b0bdc5 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java @@ -1,13 +1,13 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java index a9b75604..4adf3ece 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java @@ -1,12 +1,12 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class EmptyEndCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java index ba464371..38a1b643 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java @@ -1,13 +1,13 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class EmptySmaragdantCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index a9e712ad..0b1a1db3 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -1,8 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.Random; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; @@ -19,6 +16,9 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; +import java.util.Random; +import java.util.function.BiFunction; + public class EndCaveBiome extends EndBiome { public static abstract class Config extends EndBiome.Config { protected Config(String name) { diff --git a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java index ce01dcc4..90382c99 100644 --- a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -11,6 +9,8 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class JadeCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 6f98a1b1..95518656 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; @@ -13,6 +11,8 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class LushAuroraCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index af18f335..6674466b 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; @@ -11,6 +9,8 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index ff989a45..b6301235 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -1,7 +1,5 @@ package ru.betterend.world.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.LevelReader; @@ -27,6 +25,8 @@ import ru.bclib.world.features.NBTStructureFeature; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class CrashedShipFeature extends NBTStructureFeature { private static final StructureProcessor REPLACER; private static final String STRUCTURE_PATH = "/data/minecraft/structures/end_city/ship.nbt"; diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 6b863f95..8774f75c 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -1,7 +1,5 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -20,6 +18,8 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 7af472fa..591c412d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,7 +1,5 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -20,6 +18,8 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index 1b04a7f7..632b5101 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -1,11 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.List; -import java.util.Optional; -import java.util.Random; - import com.google.common.collect.Lists; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -23,6 +18,10 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; +import java.util.Optional; +import java.util.Random; + public class FloatingSpireFeature extends SpireFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index 7e6fd35e..ca9db523 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -1,9 +1,5 @@ package ru.betterend.world.features.terrain; -import java.util.Optional; -import java.util.Random; -import java.util.function.Function; - import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; @@ -41,6 +37,10 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.util.BlockFixer; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + public class GeyserFeature extends DefaultFeature { protected static final Function REPLACE1; protected static final Function REPLACE2; diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index e52333e2..04440416 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -1,12 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.List; -import java.util.Optional; -import java.util.Random; -import java.util.function.Function; - import com.google.common.collect.Lists; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -31,6 +25,11 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index 244a6e47..39c261a1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -1,10 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -26,6 +22,9 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import java.util.Random; +import java.util.Set; + public class SulphuricCaveFeature extends DefaultFeature { private static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 62962804..0962cc36 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -1,10 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -23,6 +19,9 @@ import ru.betterend.blocks.SulphurCrystalBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.Random; +import java.util.Set; + public class SulphuricLakeFeature extends DefaultFeature { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index ccb9d5f2..e092dec8 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -1,12 +1,6 @@ package ru.betterend.world.features.terrain.caves; -import java.util.Optional; -import java.util.Random; -import java.util.Set; -import java.util.function.Supplier; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -22,6 +16,11 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; + public class CaveChunkPopulatorFeature extends DefaultFeature { private Supplier supplier; diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index c6a92481..9505cdae 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -1,13 +1,7 @@ package ru.betterend.world.features.terrain.caves; -import java.util.List; -import java.util.Optional; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Lists; import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -30,6 +24,11 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.Set; + public abstract class EndCaveFeature extends DefaultFeature { protected static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); protected static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index fbca390c..8f95755d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -1,14 +1,7 @@ package ru.betterend.world.features.terrain.caves; -import java.util.Map; -import java.util.Optional; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - import com.google.common.collect.Maps; import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -30,6 +23,12 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.stream.IntStream; + public class TunelCaveFeature extends EndCaveFeature { private Set generate(WorldGenLevel world, BlockPos center, Random random) { int cx = center.getX() >> 4; diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index 3de5c44e..df9f2087 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -1,14 +1,7 @@ package ru.betterend.world.generator; -import java.awt.Point; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.locks.ReentrantLock; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import net.minecraft.util.Mth; import net.minecraft.world.level.biome.BiomeSource; import ru.bclib.api.biomes.BiomeAPI; @@ -16,6 +9,12 @@ import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; +import java.awt.Point; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.locks.ReentrantLock; + public class TerrainGenerator { private static final Map TERRAIN_BOOL_CACHE_MAP = Maps.newHashMap(); private static final ReentrantLock LOCKER = new ReentrantLock(); diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index c9ab83d8..738a67d1 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ChunkPos; @@ -19,6 +17,8 @@ import ru.bclib.world.structures.BCLStructureFeature; import ru.betterend.BetterEnd; import ru.betterend.world.structures.piece.NBTPiece; +import java.util.Random; + public class EternalPortalStructure extends FeatureBaseStructure { private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index f16cea4f..e40adc52 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.block.Blocks; @@ -14,6 +12,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import ru.bclib.world.structures.BCLStructureFeature; +import java.util.Random; + public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java index fa336cfc..737ec6f4 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java @@ -1,9 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -22,6 +18,10 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.VoxelPiece; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + public class GiantIceStarStructure extends SDFStructureFeature { private static final float minSize = 20; private static final float maxSize = 35; diff --git a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java index 99267bf9..691558b1 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java @@ -1,8 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.List; -import java.util.Random; - import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -31,6 +28,9 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; + public class GiantMossyGlowshroomStructure extends SDFStructureFeature { public GiantMossyGlowshroomStructure() { super(GiantMossyGlowshroomStructure::generatePieces); diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 55b94dc2..691c373e 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -15,6 +13,8 @@ import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilde import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; +import java.util.Random; + public class MegaLakeSmallStructure extends FeatureBaseStructure { public MegaLakeSmallStructure() { super(PieceGeneratorSupplier.simple( diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index d17dedf1..d8b4159e 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -15,6 +13,8 @@ import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilde import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; +import java.util.Random; + public class MegaLakeStructure extends FeatureBaseStructure { diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index c04f97ea..642e2eef 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -15,6 +13,8 @@ import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilde import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.CrystalMountainPiece; +import java.util.Random; + public class MountainStructure extends FeatureBaseStructure { public MountainStructure() { diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index 08627346..f9471435 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -18,6 +16,8 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.PaintedMountainPiece; +import java.util.Random; + public class PaintedMountainStructure extends FeatureBaseStructure { private static final BlockState[] VARIANTS; diff --git a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java index d2ca8d86..81af3526 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -1,8 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -16,6 +13,9 @@ import ru.bclib.sdf.SDF; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.VoxelPiece; +import java.util.Random; +import java.util.function.BiFunction; + public abstract class SDFStructureFeature extends FeatureBaseStructure { public SDFStructureFeature(PieceGenerator generator) { super(PieceGeneratorSupplier.simple( diff --git a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java index e74a2e92..9122c8fa 100644 --- a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java @@ -1,7 +1,6 @@ package ru.betterend.world.structures.piece; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructurePiece; diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 39bd6f58..25c91169 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -19,6 +17,8 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndStructures; +import java.util.Random; + public class CavePiece extends BasePiece { private OpenSimplexNoise noise; private BlockPos center; diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index 2413de9f..60acae3b 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -25,6 +23,8 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class CrystalMountainPiece extends MountainPiece { private BlockState top; diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 219e3f1e..2588ddd3 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -1,10 +1,6 @@ package ru.betterend.world.structures.piece; -import java.util.Map; -import java.util.Random; - import com.google.common.collect.Maps; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -34,6 +30,9 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; +import java.util.Map; +import java.util.Random; + public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index 0afc39e3..896f7099 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -1,10 +1,6 @@ package ru.betterend.world.structures.piece; -import java.util.Map; -import java.util.Random; - import com.google.common.collect.Maps; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -20,6 +16,9 @@ import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; +import java.util.Map; +import java.util.Random; + public abstract class MountainPiece extends BasePiece { protected Map heightmap = Maps.newHashMap(); protected OpenSimplexNoise noise1; diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index c822913e..b4112065 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; @@ -22,6 +20,8 @@ import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class NBTPiece extends BasePiece { private ResourceLocation structureID; private Rotation rotation; diff --git a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java index a5212285..4c37167c 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -21,6 +19,8 @@ import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSeriali import ru.bclib.util.MHelper; import ru.betterend.registry.EndStructures; +import java.util.Random; + public class PaintedMountainPiece extends MountainPiece { private BlockState[] slises; diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index 69edcbaa..ae7853c0 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -1,8 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; -import java.util.function.Consumer; - import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.ChunkPos; @@ -14,6 +11,9 @@ import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSeriali import ru.bclib.world.structures.StructureWorld; import ru.betterend.registry.EndStructures; +import java.util.Random; +import java.util.function.Consumer; + public class VoxelPiece extends BasePiece { private StructureWorld world; diff --git a/src/main/resources/betterend.accesswidener b/src/main/resources/betterend.accesswidener new file mode 100644 index 00000000..1c8e98af --- /dev/null +++ b/src/main/resources/betterend.accesswidener @@ -0,0 +1,4 @@ +accessWidener v1 named + +# Classes +accessible class net/minecraft/world/level/levelgen/SurfaceRules$SurfaceRule diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 6764b2a1..d0c31df6 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -8,25 +8,27 @@ "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", "ChorusFlowerBlockMixin", + "StructureFeaturesMixin", + "NoiseInterpolatorMixin", "ChorusPlantBlockMixin", "EndPodiumFeatureMixin", "EndDragonFightMixin", "WorldGenRegionMixin", "BlockBehaviourMixin", + "NoiseChunkAccessor", "DimensionTypeMixin", "CraftingMenuMixin", "LivingEntityMixin", "ServerPlayerMixin", "SpikeFeatureMixin", "ServerLevelMixin", + "NoiseChunkMixin", "EnderManMixin", "EndSpikeMixin", "MonsterMixin", "EntityMixin", "PlayerMixin", - "SlimeMixin", - "StructureFeaturesMixin", - "NoiseInterpolatorMixin" + "SlimeMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 4c41216d..67b2f16d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -35,6 +35,7 @@ "ru.betterend.integration.rei.REIPlugin" ] }, + "accessWidener" : "betterend.accesswidener", "mixins": [ "betterend.mixins.common.json", "betterend.mixins.client.json", From 4256e954cae8a3b870e35f992e6ac2ce4a808fa9 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 19 Dec 2021 00:21:45 +0300 Subject: [PATCH 51/56] Terrain generator fixes --- .../common/NoiseBasedChunkGeneratorMixin.java | 26 --- .../mixin/common/NoiseChunkMixin.java | 8 +- .../mixin/common/NoiseInterpolatorMixin.java | 17 +- .../mixin/common/ServerLevelMixin.java | 17 ++ .../world/generator/EndNoiseFiller.java | 67 ------- .../world/generator/TerrainGenerator.java | 179 ++++-------------- .../resources/betterend.mixins.common.json | 1 - 7 files changed, 66 insertions(+), 249 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java delete mode 100644 src/main/java/ru/betterend/world/generator/EndNoiseFiller.java diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java deleted file mode 100644 index 392de48e..00000000 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.betterend.mixin.common; - -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.StructureSettings; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.betterend.world.generator.TerrainGenerator; - -import java.util.function.Supplier; - -@Mixin(NoiseBasedChunkGenerator.class) -public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { - public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { - super(populationSource, biomeSource, structuresConfig, worldSeed); - } - - @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void be_onInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { - TerrainGenerator.initNoise(seed); - } -} diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java index f01fcb51..5154eaf1 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java @@ -14,15 +14,15 @@ import ru.betterend.interfaces.TargetChecker; @Mixin(NoiseChunk.class) public class NoiseChunkMixin implements TargetChecker { - private boolean bnv_isNetherGenerator; + private boolean be_isEndGenerator; @Inject(method = "*", at = @At("TAIL")) - private void bnv_onNoiseChunkInit(int i, int j, int k, NoiseSampler noiseSampler, int l, int m, NoiseFiller noiseFiller, NoiseGeneratorSettings noiseGeneratorSettings, Aquifer.FluidPicker fluidPicker, Blender blender, CallbackInfo info) { - bnv_isNetherGenerator = noiseGeneratorSettings.stable(NoiseGeneratorSettings.END); + private void be_onNoiseChunkInit(int i, int j, int k, NoiseSampler noiseSampler, int l, int m, NoiseFiller noiseFiller, NoiseGeneratorSettings noiseGeneratorSettings, Aquifer.FluidPicker fluidPicker, Blender blender, CallbackInfo info) { + be_isEndGenerator = noiseGeneratorSettings.stable(NoiseGeneratorSettings.END); } @Override public boolean isTarget() { - return bnv_isNetherGenerator; + return be_isEndGenerator; } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java index 24d643dc..14dcdfe5 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.betterend.interfaces.TargetChecker; +import ru.betterend.world.generator.TerrainGenerator; @Mixin(NoiseChunk.NoiseInterpolator.class) public class NoiseInterpolatorMixin { @@ -29,26 +30,16 @@ public class NoiseInterpolatorMixin { final int sizeY = noiseSettings.getCellHeight(); final int sizeXZ = noiseSettings.getCellWidth(); - final int cellsY = accessor.bnv_getCellCountY() + 1; + //final int cellsY = accessor.bnv_getCellCountY() + 1; final int cellsXZ = accessor.bnv_getCellCountXZ() + 1; final int firstCellZ = accessor.bnv_getFirstCellZ(); - final int cellNoiseMinY = accessor.bnv_getCellNoiseMinY(); + //final int cellNoiseMinY = accessor.bnv_getCellNoiseMinY(); x *= sizeXZ; for (int cellXZ = 0; cellXZ < cellsXZ; ++cellXZ) { int z = (firstCellZ + cellXZ) * sizeXZ; - for (int cellY = 0; cellY < cellsY; ++cellY) { - int y = (cellY + cellNoiseMinY) * sizeY; - data[cellXZ][cellY] = be_calculateNoise(x, y, z); - } + TerrainGenerator.fillTerrainDensity(data[cellXZ], x, z, sizeXZ, sizeY); } } - - private float be_calculateNoise(int x, int y, int z) { - float gradient = (64 - y) * 0.1F; - float sinX = (float) Math.sin(x * 0.1); - float sinZ = (float) Math.sin(z * 0.1); - return gradient + sinX + sinZ; - } } diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index 9ad8f7bd..4cb230da 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -3,12 +3,18 @@ package ru.betterend.mixin.common; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.level.CustomSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelStorageSource.LevelStorageAccess; +import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,7 +26,10 @@ import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; +import ru.betterend.world.generator.TerrainGenerator; +import java.util.List; +import java.util.concurrent.Executor; import java.util.function.Supplier; @Mixin(ServerLevel.class) @@ -42,6 +51,14 @@ public abstract class ServerLevelMixin extends Level { // //EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); // } + @Inject(method = "*", at = @At("TAIL")) + private void be_onServerWorldInit(MinecraftServer minecraftServer, Executor executor, LevelStorageAccess levelStorageAccess, ServerLevelData serverLevelData, ResourceKey resourceKey, DimensionType dimensionType, ChunkProgressListener chunkProgressListener, ChunkGenerator chunkGenerator, boolean bl, long seed, List list, boolean bl2, CallbackInfo ci) { + ServerLevel level = ServerLevel.class.cast(this); + if (level.dimension() == Level.END) { + TerrainGenerator.initNoise(seed, chunkGenerator.getBiomeSource(), chunkGenerator.climateSampler()); + } + } + @Inject(method = "getSharedSpawnPos", at = @At("HEAD"), cancellable = true) private void be_getSharedSpawnPos(CallbackInfoReturnable info) { if (GeneratorOptions.changeSpawn()) { diff --git a/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java b/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java deleted file mode 100644 index 97e445c5..00000000 --- a/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java +++ /dev/null @@ -1,67 +0,0 @@ -package ru.betterend.world.generator; - -import net.minecraft.util.Mth; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; - -public class EndNoiseFiller implements NoiseFiller { - public static final EndNoiseFiller INSTANCE = new EndNoiseFiller(); - private double[][][] noiseColumns = new double[3][3][33]; - private BiomeSource biomeSource; - private int chunkX; - private int chunkZ; - - private EndNoiseFiller() {} - - public void setBiomeSource(BiomeSource biomeSource) { - this.biomeSource = biomeSource; - } - - @Override - public double calculateNoise(int x, int y, int z) { - if (y < 0 || y > 127) { - return -10; - } - - int cx = x >> 4; - int cz = z >> 4; - if (chunkX != cx || chunkZ != cz) { - chunkX = cx; - chunkZ = cz; - int px = cx << 1; - int pz = cz << 1; - for (byte i = 0; i < 3; i++) { - for (byte j = 0; j < 3; j++) { - TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); - } - } - } - - byte ix = (byte) ((x & 15) >> 3); - byte iy = (byte) (y >> 2); - byte iz = (byte) ((z & 15) >> 3); - float dx = (x & 7) / 8F; - float dy = (y & 3) / 4F; - float dz = (z & 7) / 8F; - - float a = (float) noiseColumns[ix][iz][iy]; - float b = (float) noiseColumns[ix + 1][iz][iy]; - float c = (float) noiseColumns[ix][iz][iy + 1]; - float d = (float) noiseColumns[ix + 1][iz][iy + 1]; - - float e = (float) noiseColumns[ix][iz + 1][iy]; - float f = (float) noiseColumns[ix + 1][iz + 1][iy]; - float g = (float) noiseColumns[ix][iz + 1][iy + 1]; - float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; - - a = Mth.lerp(dx, a, b); - b = Mth.lerp(dx, c, d); - c = Mth.lerp(dx, e, f); - d = Mth.lerp(dx, g, h); - - a = Mth.lerp(dy, a, b); - b = Mth.lerp(dy, c, d); - - return Mth.lerp(dz, a, b); - } -} diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index df9f2087..afe82b9c 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -4,6 +4,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.minecraft.util.Mth; import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.biome.Climate.Sampler; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; @@ -29,8 +30,10 @@ public class TerrainGenerator { private static IslandLayer smallIslands; private static OpenSimplexNoise noise1; private static OpenSimplexNoise noise2; + private static BiomeSource biomeSource; + private static Sampler sampler; - public static void initNoise(long seed) { + public static void initNoise(long seed, BiomeSource biomeSource, Sampler sampler) { Random random = new Random(seed); largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions); mediumIslands = new IslandLayer(random.nextInt(), GeneratorOptions.mediumOptions); @@ -38,15 +41,19 @@ public class TerrainGenerator { noise1 = new OpenSimplexNoise(random.nextInt()); noise2 = new OpenSimplexNoise(random.nextInt()); TERRAIN_BOOL_CACHE_MAP.clear(); + TerrainGenerator.biomeSource = biomeSource; + TerrainGenerator.sampler = sampler; } - public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource biomeSource) { + public static void fillTerrainDensity(double[] buffer, int posX, int posZ, int scaleXZ, int scaleY) { LOCKER.lock(); largeIslands.clearCache(); mediumIslands.clearCache(); smallIslands.clearCache(); + int x = Mth.floor(posX / scaleXZ); + int z = Mth.floor(posZ / scaleXZ); double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval( x * 0.2, z * 0.2 @@ -55,17 +62,17 @@ public class TerrainGenerator { x * 0.2, z * 0.2 ) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; - double px = (double) x * SCALE_XZ + distortion1; - double pz = (double) z * SCALE_XZ + distortion2; + double px = (double) x * scaleXZ + distortion1; + double pz = (double) z * scaleXZ + distortion2; largeIslands.updatePositions(px, pz); mediumIslands.updatePositions(px, pz); smallIslands.updatePositions(px, pz); - float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; + float height = getAverageDepth(x << 1, z << 1) * 0.5F; for (int y = 0; y < buffer.length; y++) { - double py = (double) y * SCALE_Y; + double py = (double) y * scaleY; float dist = largeIslands.getDensity(px, py, pz, height); dist = dist > 1 ? dist : MHelper.max(dist, mediumIslands.getDensity(px, py, pz, height)); dist = dist > 1 ? dist : MHelper.max(dist, smallIslands.getDensity(px, py, pz, height)); @@ -83,49 +90,11 @@ public class TerrainGenerator { LOCKER.unlock(); } - public static float getTerrainDensity(int x, int y, int z, BiomeSource biomeSource) { - LOCKER.lock(); - - largeIslands.clearCache(); - mediumIslands.clearCache(); - smallIslands.clearCache(); - - double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval( - x * 0.2, - z * 0.2 - ) * 10 + noise1.eval(x * 0.4, z * 0.4) * 5; - double distortion2 = noise2.eval(x * 0.1, z * 0.1) * 20 + noise1.eval( - x * 0.2, - z * 0.2 - ) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; - double px = (double) x * SCALE_XZ + distortion1; - double pz = (double) z * SCALE_XZ + distortion2; - - largeIslands.updatePositions(px, pz); - mediumIslands.updatePositions(px, pz); - smallIslands.updatePositions(px, pz); - - float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; - - double py = (double) y * SCALE_Y; - float dist = largeIslands.getDensity(px, py, pz, height); - dist = dist > 1 ? dist : MHelper.max(dist, mediumIslands.getDensity(px, py, pz, height)); - dist = dist > 1 ? dist : MHelper.max(dist, smallIslands.getDensity(px, py, pz, height)); - if (dist > -0.5F) { - dist += noise1.eval(px * 0.01, py * 0.01, pz * 0.01) * 0.02 + 0.02; - dist += noise2.eval(px * 0.05, py * 0.05, pz * 0.05) * 0.01 + 0.01; - dist += noise1.eval(px * 0.1, py * 0.1, pz * 0.1) * 0.005 + 0.005; + private static float getAverageDepth(int x, int z) { + if (biomeSource == null) { + return 0; } - if (py > 100) { - dist = (float) Mth.lerp((py - 100) / 27F, dist, -1); - } - - LOCKER.unlock(); - return dist; - } - - private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - /*if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { + if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { return 0F; } float depth = 0F; @@ -134,22 +103,35 @@ public class TerrainGenerator { int pz = z + OFFS[i].y; depth += getBiome(biomeSource, px, pz).getTerrainHeight() * COEF[i]; } - return depth;*/ - return 0F; + return depth; } private static BCLBiome getBiome(BiomeSource biomeSource, int x, int z) { - // TODO replace null sampler - return BiomeAPI.getBiome(biomeSource.getNoiseBiome(x, 0, z, null)); + return BiomeAPI.getBiome(biomeSource.getNoiseBiome(x, 0, z, sampler)); } - /** - * Check if this is land - * - * @param x - biome pos x - * @param z - biome pos z - */ - public static boolean isLand(int x, int z) { + static { + float sum = 0; + List coef = Lists.newArrayList(); + List pos = Lists.newArrayList(); + for (int x = -3; x <= 3; x++) { + for (int z = -3; z <= 3; z++) { + float dist = MHelper.length(x, z) / 3F; + if (dist <= 1) { + sum += dist; + coef.add(dist); + pos.add(new Point(x, z)); + } + } + } + OFFS = pos.toArray(new Point[] {}); + COEF = new float[coef.size()]; + for (int i = 0; i < COEF.length; i++) { + COEF[i] = coef.get(i) / sum; + } + } + + public static Boolean isLand(int x, int z) { int sectionX = TerrainBoolCache.scaleCoordinate(x); int sectionZ = TerrainBoolCache.scaleCoordinate(z); @@ -210,83 +192,4 @@ public class TerrainGenerator { return result; } - - /** - * Get something like height - * - * @param x - block pos x - * @param z - block pos z - */ - public static int getHeight(int x, int z, BiomeSource biomeSource) { - int posX = (x >> 3) << 3; - int posZ = (z >> 3) << 3; - float dx = (x - posX) / 8.0F; - float dz = (z - posZ) / 8.0F; - double[][][] buffer = new double[2][2][32]; - - LOCKER.lock(); - for (int i = 0; i < 4; i++) { - int ix = i & 1; - int iz = i >> 1; - int px = ((ix << 3) + posX) >> 3; - int pz = ((iz << 3) + posZ) >> 3; - fillTerrainDensity(buffer[ix][iz], px, pz, biomeSource); - } - LOCKER.unlock(); - - for (int j = 30; j >= 0; j--) { - float a = (float) buffer[0][0][j]; - float b = (float) buffer[1][0][j]; - float c = (float) buffer[0][1][j]; - float d = (float) buffer[1][1][j]; - - float e = (float) buffer[0][0][j + 1]; - float f = (float) buffer[1][0][j + 1]; - float g = (float) buffer[0][1][j + 1]; - float h = (float) buffer[1][1][j + 1]; - - if (a < 0 && b < 0 && c < 0 && d < 0 && e < 0 && f < 0 && g < 0 && h < 0) { - continue; - } - - a = Mth.lerp(dx, a, b); - b = Mth.lerp(dx, c, d); - c = Mth.lerp(dx, e, f); - d = Mth.lerp(dx, g, h); - - a = Mth.lerp(dz, a, b); - b = Mth.lerp(dz, c, d); - - for (int n = 7; n >= 0; n--) { - float dy = n / 8.0F; - float dens = Mth.lerp(dy, a, b); - if (dens > 0) { - return (j << 3 | n) + 1; - } - } - } - - return -256; - } - - static { - float sum = 0; - List coef = Lists.newArrayList(); - List pos = Lists.newArrayList(); - for (int x = -3; x <= 3; x++) { - for (int z = -3; z <= 3; z++) { - float dist = MHelper.length(x, z) / 3F; - if (dist <= 1) { - sum += dist; - coef.add(dist); - pos.add(new Point(x, z)); - } - } - } - OFFS = pos.toArray(new Point[] {}); - COEF = new float[coef.size()]; - for (int i = 0; i < COEF.length; i++) { - COEF[i] = coef.get(i) / sum; - } - } } diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index d0c31df6..c92e2fc1 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -4,7 +4,6 @@ "package": "ru.betterend.mixin.common", "compatibilityLevel": "JAVA_16", "mixins": [ - "NoiseBasedChunkGeneratorMixin", "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", "ChorusFlowerBlockMixin", From 91e7bab99379678a05336f7a0a6b7f42dc5f7473 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 17:51:48 +0300 Subject: [PATCH 52/56] Library update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 18c82800..e213d265 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.2 +bclib_version = 1.1.4 rei_version = 7.0.343 canvas_version = 1.0.+ From 58310d020c4a3f831ad72cde12a2390f02dcf00e Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:06:48 +0300 Subject: [PATCH 53/56] Replaced spaces, proper biome getter, imports cleanup --- .../betterend/blocks/LumecornSeedBlock.java | 36 +- .../betterend/blocks/basis/PedestalBlock.java | 2 +- .../complexmaterials/MetalMaterial.java | 838 +++++++++--------- .../byg/biomes/NightshadeRedwoods.java | 116 +-- .../byg/biomes/OldBulbisGardens.java | 162 ++-- .../interfaces/StructureFeaturesAccessor.java | 2 +- .../mixin/common/EndPodiumFeatureMixin.java | 2 +- .../mixin/common/StructureFeaturesMixin.java | 8 +- .../ru/betterend/recipe/AnvilRecipes.java | 146 +-- .../ru/betterend/rituals/EternalRitual.java | 12 +- .../world/biome/land/AmberLandBiome.java | 72 +- .../world/biome/land/UmbraValleyBiome.java | 104 +-- .../world/features/BiomeIslandFeature.java | 2 +- .../features/terrain/ThinArchFeature.java | 100 +-- .../features/EternalPortalStructure.java | 90 +- .../features/MegaLakeSmallStructure.java | 49 +- .../features/MegaLakeStructure.java | 47 +- .../features/MountainStructure.java | 60 +- .../world/structures/piece/CavePiece.java | 2 +- .../SulphuricSurfaceNoiseCondition.java | 30 +- .../surface/UmbraSurfaceNoiseCondition.java | 32 +- .../rendering/v1/ArmorRenderingRegistry.java | 40 +- .../rendering/ArmorProviderExtensions.java | 2 +- .../rendering/ArmorRenderingRegistryImpl.java | 2 +- .../rendering/MixinArmorFeatureRenderer.java | 2 +- .../mixin/client/rendering/MixinItem.java | 2 +- 26 files changed, 979 insertions(+), 981 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index 2689b870..31363dee 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -16,24 +16,24 @@ import java.util.Random; public class LumecornSeedBlock extends EndPlantWithAgeBlock { - @Override - public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - ((Feature) (EndFeatures.LUMECORN.getFeature())).place(new FeaturePlaceContext<>( - Optional.empty(), - world, - null, - random, - pos, - (NoneFeatureConfiguration) null)); - } + @Override + public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { + ((Feature) (EndFeatures.LUMECORN.getFeature())).place(new FeaturePlaceContext<>( + Optional.empty(), + world, + null, + random, + pos, + (NoneFeatureConfiguration) null)); + } - @Override - protected boolean isTerrain(BlockState state) { - return state.is(EndBlocks.END_MOSS); - } + @Override + protected boolean isTerrain(BlockState state) { + return state.is(EndBlocks.END_MOSS); + } - @Override - public BlockBehaviour.OffsetType getOffsetType() { - return BlockBehaviour.OffsetType.NONE; - } + @Override + public BlockBehaviour.OffsetType getOffsetType() { + return BlockBehaviour.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index e7b131cd..784377f5 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -82,7 +82,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { /** * Register new Pedestal block with specified mod id. * - * @param id pedestal id + * @param id pedestal id * @param source source block * @return new Pedestal block with specified id. */ diff --git a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java index 87985bb0..53183d2d 100644 --- a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java +++ b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java @@ -48,452 +48,452 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; public class MetalMaterial { - public final Block ore; - public final Block block; - public final Block tile; - public final Block bars; - public final Block pressurePlate; - public final Block door; - public final Block trapdoor; - public final Block chain; - public final Block stairs; - public final Block slab; + public final Block ore; + public final Block block; + public final Block tile; + public final Block bars; + public final Block pressurePlate; + public final Block door; + public final Block trapdoor; + public final Block chain; + public final Block stairs; + public final Block slab; - public final Block chandelier; - public final Block bulb_lantern; - public final ColoredMaterial bulb_lantern_colored; + public final Block chandelier; + public final Block bulb_lantern; + public final ColoredMaterial bulb_lantern_colored; - public final Block anvilBlock; + public final Block anvilBlock; - public final Item rawOre; - public final Item nugget; - public final Item ingot; + public final Item rawOre; + public final Item nugget; + public final Item ingot; - public final Item shovelHead; - public final Item pickaxeHead; - public final Item axeHead; - public final Item hoeHead; - public final Item swordBlade; - public final Item swordHandle; + public final Item shovelHead; + public final Item pickaxeHead; + public final Item axeHead; + public final Item hoeHead; + public final Item swordBlade; + public final Item swordHandle; - public final Item shovel; - public final Item sword; - public final Item pickaxe; - public final Item axe; - public final Item hoe; - public final Item hammer; + public final Item shovel; + public final Item sword; + public final Item pickaxe; + public final Item axe; + public final Item hoe; + public final Item hammer; - public final Item forgedPlate; - public final Item helmet; - public final Item chestplate; - public final Item leggings; - public final Item boots; + public final Item forgedPlate; + public final Item helmet; + public final Item chestplate; + public final Item leggings; + public final Item boots; - public final Tag.Named alloyingOre; + public final Tag.Named alloyingOre; - public static MetalMaterial makeNormal(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - true, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeNormal(String name, MaterialColor color, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + true, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - public static MetalMaterial makeNormal(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - true, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) - .mapColor(color) - .hardness(hardness) - .resistance(resistance), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeNormal(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + true, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) + .mapColor(color) + .hardness(hardness) + .resistance(resistance), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - public static MetalMaterial makeOreless(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - false, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeOreless(String name, MaterialColor color, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + false, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - public static MetalMaterial makeOreless(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - false, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) - .mapColor(color) - .hardness(hardness) - .resistance(resistance), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeOreless(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + false, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) + .mapColor(color) + .hardness(hardness) + .resistance(resistance), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, Properties itemSettings, Tier material, ArmorMaterial armor) { - BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings) - .hardness(1) - .resistance(1) - .luminance(15) - .sound(SoundType.LANTERN); - final int level = material.getLevel(); + private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, Properties itemSettings, Tier material, ArmorMaterial armor) { + BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings) + .hardness(1) + .resistance(1) + .luminance(15) + .sound(SoundType.LANTERN); + final int level = material.getLevel(); - rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(()->rawOre, 1, 3, 1)) : null; - alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; - if (hasOre) { - TagAPI.addTag(alloyingOre, ore, rawOre); - } + rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; + ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(()->rawOre, 1, 3, 1)) : null; + alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; + if (hasOre) { + TagAPI.addTag(alloyingOre, ore, rawOre); + } - block = EndBlocks.registerBlock(name + "_block", new BaseBlock(settings)); - tile = EndBlocks.registerBlock(name + "_tile", new BaseBlock(settings)); - stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(tile)); - slab = EndBlocks.registerBlock(name + "_slab", new BaseSlabBlock(tile)); - door = EndBlocks.registerBlock(name + "_door", new BaseDoorBlock(block)); - trapdoor = EndBlocks.registerBlock(name + "_trapdoor", new BaseTrapdoorBlock(block)); - bars = EndBlocks.registerBlock(name + "_bars", new BaseMetalBarsBlock(block)); - chain = EndBlocks.registerBlock(name + "_chain", new BaseChainBlock(block.defaultMaterialColor())); - pressurePlate = EndBlocks.registerBlock(name + "_plate", new WoodenPressurePlateBlock(block)); + block = EndBlocks.registerBlock(name + "_block", new BaseBlock(settings)); + tile = EndBlocks.registerBlock(name + "_tile", new BaseBlock(settings)); + stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(tile)); + slab = EndBlocks.registerBlock(name + "_slab", new BaseSlabBlock(tile)); + door = EndBlocks.registerBlock(name + "_door", new BaseDoorBlock(block)); + trapdoor = EndBlocks.registerBlock(name + "_trapdoor", new BaseTrapdoorBlock(block)); + bars = EndBlocks.registerBlock(name + "_bars", new BaseMetalBarsBlock(block)); + chain = EndBlocks.registerBlock(name + "_chain", new BaseChainBlock(block.defaultMaterialColor())); + pressurePlate = EndBlocks.registerBlock(name + "_plate", new WoodenPressurePlateBlock(block)); - chandelier = EndBlocks.registerBlock(name + "_chandelier", new ChandelierBlock(block)); - bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); - bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); + chandelier = EndBlocks.registerBlock(name + "_chandelier", new ChandelierBlock(block)); + bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); + bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); - nugget = EndItems.registerEndItem(name + "_nugget", new ModelProviderItem(itemSettings)); - ingot = EndItems.registerEndItem(name + "_ingot", new ModelProviderItem(itemSettings)); + nugget = EndItems.registerEndItem(name + "_nugget", new ModelProviderItem(itemSettings)); + ingot = EndItems.registerEndItem(name + "_ingot", new ModelProviderItem(itemSettings)); - shovelHead = EndItems.registerEndItem(name + "_shovel_head"); - pickaxeHead = EndItems.registerEndItem(name + "_pickaxe_head"); - axeHead = EndItems.registerEndItem(name + "_axe_head"); - hoeHead = EndItems.registerEndItem(name + "_hoe_head"); - swordBlade = EndItems.registerEndItem(name + "_sword_blade"); - swordHandle = EndItems.registerEndItem(name + "_sword_handle"); + shovelHead = EndItems.registerEndItem(name + "_shovel_head"); + pickaxeHead = EndItems.registerEndItem(name + "_pickaxe_head"); + axeHead = EndItems.registerEndItem(name + "_axe_head"); + hoeHead = EndItems.registerEndItem(name + "_hoe_head"); + swordBlade = EndItems.registerEndItem(name + "_sword_blade"); + swordHandle = EndItems.registerEndItem(name + "_sword_handle"); - shovel = EndItems.registerEndTool(name + "_shovel", new BaseShovelItem(material, 1.5F, -3.0F, itemSettings)); - sword = EndItems.registerEndTool(name + "_sword", new BaseSwordItem(material, 3, -2.4F, itemSettings)); - pickaxe = EndItems.registerEndTool(name + "_pickaxe", new EndPickaxe(material, 1, -2.8F, itemSettings)); - axe = EndItems.registerEndTool(name + "_axe", new BaseAxeItem(material, 6.0F, -3.0F, itemSettings)); - hoe = EndItems.registerEndTool(name + "_hoe", new BaseHoeItem(material, -3, 0.0F, itemSettings)); - hammer = EndItems.registerEndTool( - name + "_hammer", - new EndHammerItem(material, 5.0F, -3.2F, 0.3D, itemSettings) - ); + shovel = EndItems.registerEndTool(name + "_shovel", new BaseShovelItem(material, 1.5F, -3.0F, itemSettings)); + sword = EndItems.registerEndTool(name + "_sword", new BaseSwordItem(material, 3, -2.4F, itemSettings)); + pickaxe = EndItems.registerEndTool(name + "_pickaxe", new EndPickaxe(material, 1, -2.8F, itemSettings)); + axe = EndItems.registerEndTool(name + "_axe", new BaseAxeItem(material, 6.0F, -3.0F, itemSettings)); + hoe = EndItems.registerEndTool(name + "_hoe", new BaseHoeItem(material, -3, 0.0F, itemSettings)); + hammer = EndItems.registerEndTool( + name + "_hammer", + new EndHammerItem(material, 5.0F, -3.2F, 0.3D, itemSettings) + ); - forgedPlate = EndItems.registerEndItem(name + "_forged_plate"); - helmet = EndItems.registerEndItem(name + "_helmet", new EndArmorItem(armor, EquipmentSlot.HEAD, itemSettings)); - chestplate = EndItems.registerEndItem( - name + "_chestplate", - new EndArmorItem(armor, EquipmentSlot.CHEST, itemSettings) - ); - leggings = EndItems.registerEndItem( - name + "_leggings", - new EndArmorItem(armor, EquipmentSlot.LEGS, itemSettings) - ); - boots = EndItems.registerEndItem(name + "_boots", new EndArmorItem(armor, EquipmentSlot.FEET, itemSettings)); + forgedPlate = EndItems.registerEndItem(name + "_forged_plate"); + helmet = EndItems.registerEndItem(name + "_helmet", new EndArmorItem(armor, EquipmentSlot.HEAD, itemSettings)); + chestplate = EndItems.registerEndItem( + name + "_chestplate", + new EndArmorItem(armor, EquipmentSlot.CHEST, itemSettings) + ); + leggings = EndItems.registerEndItem( + name + "_leggings", + new EndArmorItem(armor, EquipmentSlot.LEGS, itemSettings) + ); + boots = EndItems.registerEndItem(name + "_boots", new EndArmorItem(armor, EquipmentSlot.FEET, itemSettings)); - anvilBlock = EndBlocks.registerBlock( - name + "_anvil", - new EndAnvilBlock(this, block.defaultMaterialColor(), level) - ); + anvilBlock = EndBlocks.registerBlock( + name + "_anvil", + new EndAnvilBlock(this, block.defaultMaterialColor(), level) + ); - if (hasOre) { - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_ore", ore, ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_ingot") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_raw", rawOre, ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_ingot") - .buildWithBlasting(); - AlloyingRecipe.Builder.create(name + "_ingot_alloy") - .setInput(alloyingOre, alloyingOre) - .setOutput(ingot, 3) - .setExpiriense(2.1F) - .build(); - } + if (hasOre) { + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_ore", ore, ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_ingot") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_raw", rawOre, ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_ingot") + .buildWithBlasting(); + AlloyingRecipe.Builder.create(name + "_ingot_alloy") + .setInput(alloyingOre, alloyingOre) + .setOutput(ingot, 3) + .setExpiriense(2.1F) + .build(); + } - // Basic recipes - GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_nuggets", ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "###", "###") - .addMaterial('#', nugget) - .setGroup("end_metal_ingots_nug") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_nuggets_from_ingot", nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(9) - .setList("#") - .addMaterial('#', ingot) - .setGroup("end_metal_nuggets_ing") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_block", block) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "###", "###") - .addMaterial('#', ingot) - .setGroup("end_metal_blocks") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_block", ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(9) - .setList("#") - .addMaterial('#', block) - .setGroup("end_metal_ingots") - .build(); + // Basic recipes + GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_nuggets", ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "###", "###") + .addMaterial('#', nugget) + .setGroup("end_metal_ingots_nug") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_nuggets_from_ingot", nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(9) + .setList("#") + .addMaterial('#', ingot) + .setGroup("end_metal_nuggets_ing") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_block", block) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "###", "###") + .addMaterial('#', ingot) + .setGroup("end_metal_blocks") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_block", ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(9) + .setList("#") + .addMaterial('#', block) + .setGroup("end_metal_ingots") + .build(); - // Block recipes - GridRecipe.make(BetterEnd.MOD_ID, name + "_tile", tile) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(4) - .setShape("##", "##") - .addMaterial('#', block) - .setGroup("end_metal_tiles") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_bars", bars) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(16) - .setShape("###", "###") - .addMaterial('#', ingot) - .setGroup("end_metal_bars") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_pressure_plate", pressurePlate) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("##") - .addMaterial('#', ingot) - .setGroup("end_metal_plates") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_door", door) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(3) - .setShape("##", "##", "##") - .addMaterial('#', ingot) - .setGroup("end_metal_doors") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_trapdoor", trapdoor) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("##", "##") - .addMaterial('#', ingot) - .setGroup("end_metal_trapdoors") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(4) - .setShape("# ", "## ", "###") - .addMaterial('#', block, tile) - .setGroup("end_metal_stairs") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_slab", slab) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(6) - .setShape("###") - .addMaterial('#', block, tile) - .setGroup("end_metal_slabs") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_chain", chain) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("N", "#", "N") - .addMaterial('#', ingot) - .addMaterial('N', nugget) - .setGroup("end_metal_chain") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_anvil", anvilBlock) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", " I ", "III") - .addMaterial('#', block, tile) - .addMaterial('I', ingot) - .setGroup("end_metal_anvil") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_bulb_lantern", bulb_lantern) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("C", "I", "#") - .addMaterial('C', chain) - .addMaterial('I', ingot) - .addMaterial('#', EndItems.GLOWING_BULB) - .build(); + // Block recipes + GridRecipe.make(BetterEnd.MOD_ID, name + "_tile", tile) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(4) + .setShape("##", "##") + .addMaterial('#', block) + .setGroup("end_metal_tiles") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_bars", bars) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(16) + .setShape("###", "###") + .addMaterial('#', ingot) + .setGroup("end_metal_bars") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_pressure_plate", pressurePlate) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("##") + .addMaterial('#', ingot) + .setGroup("end_metal_plates") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_door", door) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(3) + .setShape("##", "##", "##") + .addMaterial('#', ingot) + .setGroup("end_metal_doors") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_trapdoor", trapdoor) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("##", "##") + .addMaterial('#', ingot) + .setGroup("end_metal_trapdoors") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(4) + .setShape("# ", "## ", "###") + .addMaterial('#', block, tile) + .setGroup("end_metal_stairs") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_slab", slab) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(6) + .setShape("###") + .addMaterial('#', block, tile) + .setGroup("end_metal_slabs") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_chain", chain) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("N", "#", "N") + .addMaterial('#', ingot) + .addMaterial('N', nugget) + .setGroup("end_metal_chain") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_anvil", anvilBlock) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", " I ", "III") + .addMaterial('#', block, tile) + .addMaterial('I', ingot) + .setGroup("end_metal_anvil") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_bulb_lantern", bulb_lantern) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("C", "I", "#") + .addMaterial('C', chain) + .addMaterial('I', ingot) + .addMaterial('#', EndItems.GLOWING_BULB) + .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_chandelier", chandelier) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("I#I", " # ") - .addMaterial('#', ingot) - .addMaterial('I', EndItems.LUMECORN_ROD) - .setGroup("end_metal_chandelier") - .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_chandelier", chandelier) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("I#I", " # ") + .addMaterial('#', ingot) + .addMaterial('I', EndItems.LUMECORN_ROD) + .setGroup("end_metal_chandelier") + .build(); - // Tools & armor into nuggets - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_axe_nugget", axe, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hoe_nugget", hoe, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_pickaxe_nugget", pickaxe, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_sword_nugget", sword, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hammer_nugget", hammer, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_helmet_nugget", helmet, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_chestplate_nugget", chestplate, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_leggings_nugget", leggings, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_boots_nugget", boots, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); + // Tools & armor into nuggets + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_axe_nugget", axe, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hoe_nugget", hoe, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_pickaxe_nugget", pickaxe, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_sword_nugget", sword, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hammer_nugget", hammer, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_helmet_nugget", helmet, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_chestplate_nugget", chestplate, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_leggings_nugget", leggings, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_boots_nugget", boots, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); - // Tool parts from ingots - AnvilRecipe.create(name + "_shovel_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setOutput(shovelHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_pickaxe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setInputCount(3) - .setOutput(pickaxeHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_axe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setInputCount(3) - .setOutput(axeHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_hoe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setInputCount(2) - .setOutput(hoeHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_sword_blade") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setOutput(swordBlade) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_forged_plate") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setOutput(forgedPlate) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); + // Tool parts from ingots + AnvilRecipe.create(name + "_shovel_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setOutput(shovelHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_pickaxe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setInputCount(3) + .setOutput(pickaxeHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_axe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setInputCount(3) + .setOutput(axeHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_hoe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setInputCount(2) + .setOutput(hoeHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_sword_blade") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setOutput(swordBlade) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_forged_plate") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setOutput(forgedPlate) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); - // Tools from parts - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hammer") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(hammer) - .setBase(block) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_axe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(axe) - .setBase(axeHead) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_pickaxe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(pickaxe) - .setBase(pickaxeHead) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hoe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(hoe) - .setBase(hoeHead) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword_handle") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(swordHandle) - .setBase(ingot) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(sword) - .setBase(swordBlade) - .setAddition(swordHandle) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_shovel") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(shovel) - .setBase(shovelHead) - .setAddition(Items.STICK) - .build(); + // Tools from parts + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hammer") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(hammer) + .setBase(block) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_axe") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(axe) + .setBase(axeHead) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_pickaxe") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(pickaxe) + .setBase(pickaxeHead) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hoe") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(hoe) + .setBase(hoeHead) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword_handle") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(swordHandle) + .setBase(ingot) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(sword) + .setBase(swordBlade) + .setAddition(swordHandle) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_shovel") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(shovel) + .setBase(shovelHead) + .setAddition(Items.STICK) + .build(); - // Armor crafting - GridRecipe.make(BetterEnd.MOD_ID, name + "_helmet", helmet) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "# #") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_helmets") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_chestplate", chestplate) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("# #", "###", "###") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_chestplates") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_leggings", leggings) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "# #", "# #") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_leggings") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_boots", boots) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("# #", "# #") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_boots") - .build(); + // Armor crafting + GridRecipe.make(BetterEnd.MOD_ID, name + "_helmet", helmet) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "# #") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_helmets") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_chestplate", chestplate) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("# #", "###", "###") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_chestplates") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_leggings", leggings) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "# #", "# #") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_leggings") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_boots", boots) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("# #", "# #") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_boots") + .build(); - TagAPI.addTag(BlockTags.ANVIL, anvilBlock); - TagAPI.addTag(BlockTags.BEACON_BASE_BLOCKS, block); - TagAPI.addTag(ItemTags.BEACON_PAYMENT_ITEMS, ingot); - TagAPI.addTag(TagAPI.BLOCK_DRAGON_IMMUNE, ore, bars); - TagAPI.addTag(TagAPI.ITEM_HAMMERS, hammer); - } + TagAPI.addTag(BlockTags.ANVIL, anvilBlock); + TagAPI.addTag(BlockTags.BEACON_BASE_BLOCKS, block); + TagAPI.addTag(ItemTags.BEACON_PAYMENT_ITEMS, ingot); + TagAPI.addTag(TagAPI.BLOCK_DRAGON_IMMUNE, ore, bars); + TagAPI.addTag(TagAPI.ITEM_HAMMERS, hammer); + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index 36f0ec4a..c3471b12 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -19,66 +19,66 @@ import ru.betterend.world.biome.EndBiome; import java.util.List; public class NightshadeRedwoods extends EndBiome.Config { - public NightshadeRedwoods() { - super("nightshade_redwoods"); - } + public NightshadeRedwoods() { + super("nightshade_redwoods"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - Biome biome = Integrations.BYG.getBiome("nightshade_forest"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("nightshade_forest"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); - builder.fogColor(140, 108, 47) - .fogDensity(1.5F) - .waterAndFogColor(55, 70, 186) - .foliageColor(122, 17, 155) - .particles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - //TODO: 1.18 surface rules -// .setSurface(biome.getGenerationSettings() -// .getSurfaceBuilder() -// .get()) - .grassColor(48, 13, 89) - .plantsColor(200, 125, 9) - .feature(EndFeatures.END_LAKE_RARE) - .feature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) - .feature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) - .feature(BYGFeatures.NIGHTSHADE_MOSS); + builder.fogColor(140, 108, 47) + .fogDensity(1.5F) + .waterAndFogColor(55, 70, 186) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules +// .setSurface(biome.getGenerationSettings() +// .getSurfaceBuilder() +// .get()) + .grassColor(48, 13, 89) + .plantsColor(200, 125, 9) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) + .feature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) + .feature(BYGFeatures.NIGHTSHADE_MOSS); - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent() - .get(); - SoundEvent music = effects.getBackgroundMusic() - .get() - .getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings() - .get() - .getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings() - .get() - .getSoundEvent(); - builder.loop(loop) - .music(music) - .additions(additions) - .mood(mood); - } - biome.getGenerationSettings() - .features() - .forEach((list) -> { - list.forEach((feature) -> { - builder.feature(Decoration.VEGETAL_DECORATION, feature.get()); - }); - }); + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } + biome.getGenerationSettings() + .features() + .forEach((list) -> { + list.forEach((feature) -> { + builder.feature(Decoration.VEGETAL_DECORATION, feature.get()); + }); + }); - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings() - .getMobs(group) - .unwrap(); - list.forEach((entry) -> { - builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); - }); - } - } + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } + } } diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index a654cc83..ac724454 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -27,91 +27,91 @@ import java.util.function.Supplier; public class OldBulbisGardens extends EndBiome.Config { - public OldBulbisGardens() { - super("old_bulbis_gardens"); - } + public OldBulbisGardens() { + super("old_bulbis_gardens"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); - Block ivis = Integrations.BYG.getBlock("ivis_phylium"); -// Block origin = biome.getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial() -// .getBlock(); - builder.fogColor(215, 132, 207) - .fogDensity(1.8F) - .waterAndFogColor(40, 0, 56) - .foliageColor(122, 17, 155) - .particles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - //TODO: 1.18 surface rules - //.surface(ivis, origin) - .feature(EndFeatures.END_LAKE_RARE) - .feature(BYGFeatures.OLD_BULBIS_TREE); + Block ivis = Integrations.BYG.getBlock("ivis_phylium"); +// Block origin = biome.getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial() +// .getBlock(); + builder.fogColor(215, 132, 207) + .fogDensity(1.8F) + .waterAndFogColor(40, 0, 56) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules + //.surface(ivis, origin) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.OLD_BULBIS_TREE); - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent() - .get(); - SoundEvent music = effects.getBackgroundMusic() - .get() - .getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings() - .get() - .getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings() - .get() - .getSoundEvent(); - builder.loop(loop) - .music(music) - .additions(additions) - .mood(mood); - } + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings() - .getMobs(group) - .unwrap(); - list.forEach((entry) -> { - builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); - }); - } + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } - List>> features = biome.getGenerationSettings() - .features(); - List> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); - if (vegetal.size() > 2) { - Supplier getter; - // Trees (first two features) - // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) - for (int i = 0; i < 2; i++) { - getter = vegetal.get(i); - PlacedFeature feature = getter.get(); - ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); - feature = Registry.register( - BuiltinRegistries.PLACED_FEATURE, - id, - //TODO: 1.18 Check if this is correct - feature//.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) - ); - builder.feature(Decoration.VEGETAL_DECORATION, feature); - } - // Grasses and other features - for (int i = 2; i < vegetal.size(); i++) { - getter = vegetal.get(i); - PlacedFeature feature = getter.get(); - builder.feature(Decoration.VEGETAL_DECORATION, feature); - } - } + List>> features = biome.getGenerationSettings() + .features(); + List> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); + if (vegetal.size() > 2) { + Supplier getter; + // Trees (first two features) + // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) + for (int i = 0; i < 2; i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); + feature = Registry.register( + BuiltinRegistries.PLACED_FEATURE, + id, + //TODO: 1.18 Check if this is correct + feature//.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) + ); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + // Grasses and other features + for (int i = 2; i < vegetal.size(); i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + } - builder.feature(EndFeatures.PURPLE_POLYPORE) - .feature(BYGFeatures.IVIS_MOSS_WOOD) - .feature(BYGFeatures.IVIS_MOSS) - .feature(BYGFeatures.IVIS_VINE) - .feature(BYGFeatures.IVIS_SPROUT); - } + builder.feature(EndFeatures.PURPLE_POLYPORE) + .feature(BYGFeatures.IVIS_MOSS_WOOD) + .feature(BYGFeatures.IVIS_MOSS) + .feature(BYGFeatures.IVIS_VINE) + .feature(BYGFeatures.IVIS_SPROUT); + } } diff --git a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java index 4d466609..2813474b 100644 --- a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java +++ b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java @@ -5,5 +5,5 @@ import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public interface StructureFeaturesAccessor { - ConfiguredStructureFeature> getEND_CITY(); + ConfiguredStructureFeature> getEND_CITY(); } diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 1e838080..5dbf4f2b 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -58,7 +58,7 @@ public class EndPodiumFeatureMixin { WorldGenLevel world = featurePlaceContext.level(); BlockPos pos = be_updatePortalPos(world); return new FeaturePlaceContext( - Optional.empty(), + Optional.empty(), world, featurePlaceContext.chunkGenerator(), featurePlaceContext.random(), diff --git a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java index bad4c781..c3126b2d 100644 --- a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java +++ b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java @@ -11,9 +11,9 @@ import ru.betterend.interfaces.StructureFeaturesAccessor; @Mixin(StructureFeatures.class) public class StructureFeaturesMixin implements StructureFeaturesAccessor { - @Shadow @Final private static ConfiguredStructureFeature> END_CITY; + @Shadow @Final private static ConfiguredStructureFeature> END_CITY; - public ConfiguredStructureFeature> getEND_CITY(){ - return END_CITY; - } + public ConfiguredStructureFeature> getEND_CITY(){ + return END_CITY; + } } diff --git a/src/main/java/ru/betterend/recipe/AnvilRecipes.java b/src/main/java/ru/betterend/recipe/AnvilRecipes.java index dde61edb..55bc83d4 100644 --- a/src/main/java/ru/betterend/recipe/AnvilRecipes.java +++ b/src/main/java/ru/betterend/recipe/AnvilRecipes.java @@ -7,78 +7,78 @@ import ru.betterend.item.material.EndToolMaterial; import ru.betterend.registry.EndItems; public class AnvilRecipes { - public static void register() { - AnvilRecipe.create("ender_pearl_to_dust") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(Items.ENDER_PEARL) - .setOutput(EndItems.ENDER_DUST) - .setToolLevel(4) - .setDamage(5) - .build(); - AnvilRecipe.create("ender_shard_to_dust") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.ENDER_SHARD) - .setOutput(EndItems.ENDER_DUST) - .setToolLevel(0) - .setDamage(3) - .build(); + public static void register() { + AnvilRecipe.create("ender_pearl_to_dust") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(Items.ENDER_PEARL) + .setOutput(EndItems.ENDER_DUST) + .setToolLevel(4) + .setDamage(5) + .build(); + AnvilRecipe.create("ender_shard_to_dust") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.ENDER_SHARD) + .setOutput(EndItems.ENDER_DUST) + .setToolLevel(0) + .setDamage(3) + .build(); - int anvilLevel = EndToolMaterial.AETERNIUM.getLevel(); - AnvilRecipe.create("aeternium_axe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_AXE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_pickaxe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_PICKAXE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_shovel_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_SHOVEL_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_hoe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_HOE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_hammer_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_HAMMER_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(EndToolMaterial.THALLASIUM.getLevel()) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_sword_blade") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_SWORD_BLADE) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_forged_plate") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_FORGED_PLATE) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - } + int anvilLevel = EndToolMaterial.AETERNIUM.getLevel(); + AnvilRecipe.create("aeternium_axe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_AXE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_pickaxe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_PICKAXE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_shovel_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_SHOVEL_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_hoe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_HOE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_hammer_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_HAMMER_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(EndToolMaterial.THALLASIUM.getLevel()) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_sword_blade") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_SWORD_BLADE) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_forged_plate") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_FORGED_PLATE) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + } } diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index 7bb5e3da..e10973f8 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -694,9 +694,9 @@ public class EternalRitual { } /** - * @param world World for search - * @param checkPos Start search position - * @param radius Search radius + * @param world World for search + * @param checkPos Start search position + * @param radius Search radius * @param searchBlock Target block * @param condition Predicate for test block states in the chunk section * @return Position of the first found block or null. @@ -733,9 +733,9 @@ public class EternalRitual { } /** - * @param world World for search - * @param checkPos Start search position - * @param radius Search radius + * @param world World for search + * @param checkPos Start search position + * @param radius Search radius * @param searchBlock Target block * @param condition Predicate for test block states in the chunk section * @return List of positions of the all found blocks or empty list. diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index c79a0ada..b1d14021 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -12,42 +12,42 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; public class AmberLandBiome extends EndBiome.Config { - public AmberLandBiome() { - super("amber_land"); - } + public AmberLandBiome() { + super("amber_land"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(255, 184, 71) - .fogDensity(2.0F) - .plantsColor(219, 115, 38) - .waterAndFogColor(145, 108, 72) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_AMBER_LAND) - .particles(EndParticles.AMBER_SPHERE, 0.001F) - .feature(EndFeatures.AMBER_ORE) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.HELIX_TREE) - .feature(EndFeatures.LANCELEAF) - .feature(EndFeatures.GLOW_PILLAR) - .feature(EndFeatures.AMBER_GRASS) - .feature(EndFeatures.AMBER_ROOT) - .feature(EndFeatures.BULB_MOSS) - .feature(EndFeatures.BULB_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EntityType.ENDERMAN, 50, 1, 4) - .spawn(EndEntities.END_SLIME, 30, 1, 2); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); + } - @Override - protected SurfaceMaterialProvider surfaceMaterial() { - return new EndBiome.DefaultSurfaceMaterialProvider() { - @Override - public BlockState getTopMaterial() { - return EndBlocks.AMBER_MOSS.defaultBlockState(); - } - }; - } + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.AMBER_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index b24afe2d..5bea07bb 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -16,61 +16,61 @@ import ru.betterend.world.surface.UmbraSurfaceNoiseCondition; import java.util.List; public class UmbraValleyBiome extends EndBiome.Config { - public UmbraValleyBiome() { - super("umbra_valley"); - } + public UmbraValleyBiome() { + super("umbra_valley"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(100, 100, 100) - .plantsColor(172, 189, 190) - .waterAndFogColor(69, 104, 134) - .particles(EndParticles.AMBER_SPHERE, 0.0001F) - .loop(EndSounds.UMBRA_VALLEY) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.UMBRALITH_ARCH) - .feature(EndFeatures.THIN_UMBRALITH_ARCH) - .feature(EndFeatures.INFLEXIA) - .feature(EndFeatures.FLAMMALIX); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); + } - @Override - protected SurfaceMaterialProvider surfaceMaterial() { - return new EndBiome.DefaultSurfaceMaterialProvider() { - @Override - public BlockState getTopMaterial() { - return EndBlocks.UMBRALITH.stone.defaultBlockState(); - } + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.UMBRALITH.stone.defaultBlockState(); + } - @Override - public BlockState getAltTopMaterial() { - return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); - } + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); + } - @Override - public boolean generateFloorRule() { - return false; - } + @Override + public boolean generateFloorRule() { + return false; + } - @Override - public SurfaceRuleBuilder surface() { - return super - .surface() - .rule(2, - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, - new SwitchRuleSource( - new UmbraSurfaceNoiseCondition(), - List.of( - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - PALLIDIUM_HEAVY, - PALLIDIUM_THIN, - PALLIDIUM_TINY, - SurfaceRules.state(surfaceMaterial().getTopMaterial()) - ) - ) - ) - ); - } - }; - } + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .rule(2, + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new UmbraSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + PALLIDIUM_HEAVY, + PALLIDIUM_THIN, + PALLIDIUM_TINY, + SurfaceRules.state(surfaceMaterial().getTopMaterial()) + ) + ) + ) + ); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 9015529e..95e7c05e 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -30,7 +30,7 @@ public class BiomeIslandFeature extends DefaultFeature { final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); Biome biome = world.getBiome(pos); - int dist = BlocksHelper.downRay(world, pos, 10) + 1; + int dist = BlocksHelper.downRay(world, pos, 10) + 1; BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; diff --git a/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java b/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java index c85eb980..95bb6edb 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java @@ -23,55 +23,55 @@ import ru.betterend.noise.OpenSimplexNoise; import java.util.Random; public class ThinArchFeature extends DefaultFeature { - private Block block; - - public ThinArchFeature(Block block) { - this.block = block; - } - - @Override - public boolean place(FeaturePlaceContext featurePlaceContext) { - final WorldGenLevel world = featurePlaceContext.level(); - BlockPos origin = featurePlaceContext.origin(); - Random random = featurePlaceContext.random(); + private Block block; + + public ThinArchFeature(Block block) { + this.block = block; + } + + @Override + public boolean place(FeaturePlaceContext featurePlaceContext) { + final WorldGenLevel world = featurePlaceContext.level(); + BlockPos origin = featurePlaceContext.origin(); + Random random = featurePlaceContext.random(); - BlockPos pos = getPosOnSurfaceWG(world, new BlockPos((origin.getX() & 0xFFFFFFF0) | 7, 0, (origin.getZ() & 0xFFFFFFF0) | 7)); - if (!world.getBlockState(pos.below(5)).is(TagAPI.BLOCK_GEN_TERRAIN)) { - return false; - } - - SDF sdf = null; - float bigRadius = MHelper.randRange(15F, 20F, random); - float variation = bigRadius * 0.3F; - int count = MHelper.randRange(2, 4, random); - - for (int i = 0; i < count; i++) { - float smallRadius = MHelper.randRange(0.6F, 1.3F, random); - SDF arch = new SDFTorus().setBigRadius(bigRadius - random.nextFloat() * variation).setSmallRadius(smallRadius).setBlock(block); - float angle = (i - count * 0.5F) * 0.3F + random.nextFloat() * 0.05F + (float) Math.PI * 0.5F; - arch = new SDFRotation().setRotation(Vector3f.XP, angle).setSource(arch); - sdf = sdf == null ? arch : new SDFUnion().setSourceA(sdf).setSourceB(arch); - } - - sdf = new SDFRotation().setRotation(MHelper.randomHorizontal(random), random.nextFloat() * MHelper.PI2).setSource(sdf); - - OpenSimplexNoise noise = new OpenSimplexNoise(random.nextLong()); - sdf = new SDFCoordModify().setFunction(vec -> { - float dx = (float) noise.eval(vec.y() * 0.02, vec.z() * 0.02); - float dy = (float) noise.eval(vec.x() * 0.02, vec.z() * 0.02); - float dz = (float) noise.eval(vec.x() * 0.02, vec.y() * 0.02); - vec.add(dx * 10, dy * 10, dz * 10); - }).setSource(sdf); - sdf = new SDFDisplacement().setFunction(vec -> { - float offset = vec.y() / bigRadius - 0.5F; - return Mth.clamp(offset * 3, -10F, 0F); - }).setSource(sdf); - - float side = (bigRadius + 2.5F) * 2; - if (side > 47) { - side = 47; - } - sdf.fillArea(world, pos, AABB.ofSize(Vec3.atCenterOf(pos), side, side, side)); - return true; - } + BlockPos pos = getPosOnSurfaceWG(world, new BlockPos((origin.getX() & 0xFFFFFFF0) | 7, 0, (origin.getZ() & 0xFFFFFFF0) | 7)); + if (!world.getBlockState(pos.below(5)).is(TagAPI.BLOCK_GEN_TERRAIN)) { + return false; + } + + SDF sdf = null; + float bigRadius = MHelper.randRange(15F, 20F, random); + float variation = bigRadius * 0.3F; + int count = MHelper.randRange(2, 4, random); + + for (int i = 0; i < count; i++) { + float smallRadius = MHelper.randRange(0.6F, 1.3F, random); + SDF arch = new SDFTorus().setBigRadius(bigRadius - random.nextFloat() * variation).setSmallRadius(smallRadius).setBlock(block); + float angle = (i - count * 0.5F) * 0.3F + random.nextFloat() * 0.05F + (float) Math.PI * 0.5F; + arch = new SDFRotation().setRotation(Vector3f.XP, angle).setSource(arch); + sdf = sdf == null ? arch : new SDFUnion().setSourceA(sdf).setSourceB(arch); + } + + sdf = new SDFRotation().setRotation(MHelper.randomHorizontal(random), random.nextFloat() * MHelper.PI2).setSource(sdf); + + OpenSimplexNoise noise = new OpenSimplexNoise(random.nextLong()); + sdf = new SDFCoordModify().setFunction(vec -> { + float dx = (float) noise.eval(vec.y() * 0.02, vec.z() * 0.02); + float dy = (float) noise.eval(vec.x() * 0.02, vec.z() * 0.02); + float dz = (float) noise.eval(vec.x() * 0.02, vec.y() * 0.02); + vec.add(dx * 10, dy * 10, dz * 10); + }).setSource(sdf); + sdf = new SDFDisplacement().setFunction(vec -> { + float offset = vec.y() / bigRadius - 0.5F; + return Mth.clamp(offset * 3, -10F, 0F); + }).setSource(sdf); + + float side = (bigRadius + 2.5F) * 2; + if (side > 47) { + side = 47; + } + sdf.fillArea(world, pos, AABB.ofSize(Vec3.atCenterOf(pos), side, side, side)); + return true; + } } diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 738a67d1..dd27ed41 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -20,54 +20,54 @@ import ru.betterend.world.structures.piece.NBTPiece; import java.util.Random; public class EternalPortalStructure extends FeatureBaseStructure { - private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); - private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); + private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); + private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); - public EternalPortalStructure() { - super(PieceGeneratorSupplier.simple( - EternalPortalStructure::checkLocation, - EternalPortalStructure::generatePieces - )); - } + public EternalPortalStructure() { + super(PieceGeneratorSupplier.simple( + EternalPortalStructure::checkLocation, + EternalPortalStructure::generatePieces + )); + } - protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { - if (!BCLStructureFeature.isValidBiome(context)) return false; + protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + if (!BCLStructureFeature.isValidBiome(context)) return false; - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - long x = (long) chunkPos.x * (long) chunkPos.x; - long z = (long) chunkPos.z * (long) chunkPos.z; - if (x + z < 1024L) { - return false; - } - if (chunkGenerator.getBaseHeight( - chunkPos.getBlockX(8), - chunkPos.getBlockZ(8), - Heightmap.Types.WORLD_SURFACE_WG, - levelHeightAccessor - ) < 5) { - return false; - } - return FeatureBaseStructure.checkLocation(context); - } + long x = (long) chunkPos.x * (long) chunkPos.x; + long z = (long) chunkPos.z * (long) chunkPos.z; + if (x + z < 1024L) { + return false; + } + if (chunkGenerator.getBaseHeight( + chunkPos.getBlockX(8), + chunkPos.getBlockZ(8), + Heightmap.Types.WORLD_SURFACE_WG, + levelHeightAccessor + ) < 5) { + return false; + } + return FeatureBaseStructure.checkLocation(context); + } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - int x = chunkPos.getBlockX(8); - int z = chunkPos.getBlockZ(8); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - structurePiecesBuilder.addPiece(new NBTPiece( - STRUCTURE_ID, - STRUCTURE, - new BlockPos(x, y - 4, z), - random.nextInt(5), - true, - random - )); - } + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + int x = chunkPos.getBlockX(8); + int z = chunkPos.getBlockZ(8); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + structurePiecesBuilder.addPiece(new NBTPiece( + STRUCTURE_ID, + STRUCTURE, + new BlockPos(x, y - 4, z), + random.nextInt(5), + true, + random + )); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 691c373e..5db2baca 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -16,33 +16,32 @@ import ru.betterend.world.structures.piece.LakePiece; import java.util.Random; public class MegaLakeSmallStructure extends FeatureBaseStructure { - public MegaLakeSmallStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MegaLakeSmallStructure::generatePieces - )); - } + public MegaLakeSmallStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeSmallStructure::generatePieces + )); + } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + Biome biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + if (y > 5) { + float radius = MHelper.randRange(20, 40, random); + float depth = MHelper.randRange(5, 10, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - if (y > 5) { - float radius = MHelper.randRange(20, 40, random); - float depth = MHelper.randRange(5, 10, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - structurePiecesBuilder.addPiece(piece); - } - - //this.calculateBoundingBox(); - } + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index d8b4159e..c26342a3 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -18,34 +18,33 @@ import java.util.Random; public class MegaLakeStructure extends FeatureBaseStructure { - public MegaLakeStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MegaLakeStructure::generatePieces - )); - } + public MegaLakeStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeStructure::generatePieces + )); + } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + if (y > 5) { + Biome biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); - float radius = MHelper.randRange(32, 64, random); - float depth = MHelper.randRange(7, 15, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - structurePiecesBuilder.addPiece(piece); - } + float radius = MHelper.randRange(32, 64, random); + float depth = MHelper.randRange(7, 15, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } - //this.calculateBoundingBox(); - } + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index 642e2eef..fa75499d 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -17,39 +17,39 @@ import java.util.Random; public class MountainStructure extends FeatureBaseStructure { - public MountainStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MountainStructure::generatePieces - )); - } + public MountainStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MountainStructure::generatePieces + )); + } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + if (y > 5) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - float radius = MHelper.randRange(50, 100, random); - float height = radius * MHelper.randRange(0.8F, 1.2F, random); - CrystalMountainPiece piece = new CrystalMountainPiece( - new BlockPos(x, y, z), - radius, - height, - random, - biome - ); - structurePiecesBuilder.addPiece(piece); - } + float radius = MHelper.randRange(50, 100, random); + float height = radius * MHelper.randRange(0.8F, 1.2F, random); + CrystalMountainPiece piece = new CrystalMountainPiece( + new BlockPos(x, y, z), + radius, + height, + random, + biome + ); + structurePiecesBuilder.addPiece(piece); + } - //this.calculateBoundingBox(); - } + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 25c91169..bd9ecbbf 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -38,7 +38,7 @@ public class CavePiece extends BasePiece { } - @Override + @Override public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index dc7e3f54..3e4da424 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -9,20 +9,20 @@ import ru.betterend.noise.OpenSimplexNoise; * Noise source that returns a value in [0, 3] */ public class SulphuricSurfaceNoiseCondition implements NumericProvider { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - @Override - public int getNumber(SurfaceRulesContextAccessor context) { - final int x = context.getBlockX(); - final int z = context.getBlockZ(); - final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); - if (value < -0.6) return 0; - if (value < -0.3) return 1; - if (value < -0.5) return 2; - return 3; - } + @Override + public int getNumber(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + if (value < -0.6) return 0; + if (value < -0.3) return 1; + if (value < -0.5) return 2; + return 3; + } } diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index 845e88c7..dfa847eb 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -9,21 +9,21 @@ import ru.betterend.noise.OpenSimplexNoise; * Noise source that returns a value in [0, 4] */ public class UmbraSurfaceNoiseCondition implements NumericProvider { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); - @Override - public int getNumber(SurfaceRulesContextAccessor context) { - final int x = context.getBlockX(); - final int z = context.getBlockZ(); - final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); - if (value > 0.4) return 0; - if (value > 0.15) return 1; - if (value > -0.15) return 2; - if (value > -0.4) return 3; - return 4; - } + @Override + public int getNumber(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + if (value > 0.4) return 0; + if (value > 0.15) return 1; + if (value > -0.15) return 2; + if (value > -0.4) return 3; + return 4; + } } diff --git a/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java b/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java index 76d6ad88..fa1783e6 100644 --- a/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java +++ b/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -56,7 +56,7 @@ public final class ArmorRenderingRegistry { * Registers a provider for custom armor models for an item. * * @param provider the provider for the model - * @param items the items to be registered for + * @param items the items to be registered for */ public static void registerModel(@Nullable ModelProvider provider, Item... items) { registerModel(provider, Arrays.asList(items)); @@ -66,7 +66,7 @@ public final class ArmorRenderingRegistry { * Registers a provider for custom armor models for an item. * * @param provider the provider for the model - * @param items the items to be registered for + * @param items the items to be registered for */ public static void registerModel(@Nullable ModelProvider provider, Iterable items) { ArmorRenderingRegistryImpl.registerModel(provider, items); @@ -76,7 +76,7 @@ public final class ArmorRenderingRegistry { * Registers a provider for custom texture models for an item. * * @param provider the provider for the texture - * @param items the items to be registered for + * @param items the items to be registered for */ public static void registerTexture(@Nullable TextureProvider provider, Item... items) { registerTexture(provider, Arrays.asList(items)); @@ -86,7 +86,7 @@ public final class ArmorRenderingRegistry { * Registers a provider for custom texture models for an item. * * @param provider the provider for the texture - * @param items the items to be registered for + * @param items the items to be registered for */ public static void registerTexture(@Nullable TextureProvider provider, Iterable items) { ArmorRenderingRegistryImpl.registerTexture(provider, items); @@ -96,7 +96,7 @@ public final class ArmorRenderingRegistry { * Register simple armor items to use the vanilla armor file name under the mods namespace. * * @param identifier The namespace + path to use for the armor texture location. - * @param items the items to be registered + * @param items the items to be registered */ public static void registerSimpleTexture(ResourceLocation identifier, Item... items) { registerTexture((entity, stack, slot, secondLayer, suffix, defaultTexture) -> { @@ -110,9 +110,9 @@ public final class ArmorRenderingRegistry { /** * Gets the model of the armor piece. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in * @param defaultModel The default model that vanilla provides * @return The model of the armor piece. */ @@ -124,11 +124,11 @@ public final class ArmorRenderingRegistry { /** * Gets the armor texture {@link net.minecraft.resources.ResourceLocation}. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in - * @param secondLayer True if using the second texture layer - * @param suffix The texture suffix, used in vanilla by {@link net.minecraft.world.item.DyeableArmorItem} + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in + * @param secondLayer True if using the second texture layer + * @param suffix The texture suffix, used in vanilla by {@link net.minecraft.world.item.DyeableArmorItem} * @param defaultTexture The default vanilla texture identifier * @return the custom armor texture identifier, return null to use the vanilla ones. Defaulted to the item's registry id. */ @@ -143,9 +143,9 @@ public final class ArmorRenderingRegistry { /** * Gets the model of the armor piece. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in * @param defaultModel The default vanilla armor model * @return The model of the armor piece. Should never be null. */ @@ -158,9 +158,9 @@ public final class ArmorRenderingRegistry { /** * Gets the armor texture {@link net.minecraft.resources.ResourceLocation}. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in * @param defaultTexture The default vanilla texture identifier * @return the custom armor texture identifier. Should never be null. */ diff --git a/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java b/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java index 5c96d4ad..ccb6a838 100644 --- a/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java +++ b/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java b/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java index 4c4f6e88..5e23e5c4 100644 --- a/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java +++ b/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java index 62e9adc5..7a26ae46 100644 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java index 719b8f92..32ed410e 100644 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, From c2ab690d370ce649e3d2db8f3f00ffb3f54ee579 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:11:01 +0300 Subject: [PATCH 54/56] End city new random --- .../ru/betterend/mixin/common/EndCityFeatureMixin.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 241e3d00..e7581297 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -3,8 +3,8 @@ package ru.betterend.mixin.common; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.LegacyRandomSource; import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.XoroshiroRandomSource; import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; @@ -26,9 +26,8 @@ public class EndCityFeatureMixin { final ChunkPos pos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - //TODO: 1.18 that is a different random source! - Random chunkRandom = new WorldgenRandom(new LegacyRandomSource(pos.x*pos.z)); - + Random chunkRandom = new WorldgenRandom(new XoroshiroRandomSource(pos.x, pos.z)); + if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); if (chance == 0 || chunkRandom.nextInt(chance) == 0) { From 6840225f1d767a5dc58341e28a69c17bb0adcfb3 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:12:31 +0300 Subject: [PATCH 55/56] Updated Enderscape integration --- .../java/ru/betterend/integration/EnderscapeIntegration.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java index 19b088ec..83099d0c 100644 --- a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java +++ b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java @@ -36,7 +36,9 @@ public class EnderscapeIntegration extends ModIntegration { BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { if (!biomeID.getNamespace().equals("enderscape")) { - BiomeAPI.addBiomeFeatures(biome, scatteredShadowQuartzOre, voidNebuliteOre, nebuliteOre); + BiomeAPI.addBiomeFeature(biome, scatteredShadowQuartzOre); + BiomeAPI.addBiomeFeature(biome, voidNebuliteOre); + BiomeAPI.addBiomeFeature(biome, nebuliteOre); } }); From 1300e1a09b1e887cbacc3f52f873c45174222f63 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:18:14 +0300 Subject: [PATCH 56/56] Cave feature adding fix --- src/main/java/ru/betterend/registry/EndFeatures.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index b41b1f82..50f1d2eb 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -303,14 +303,18 @@ public class EndFeatures { return; } - BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP); + BiomeAPI.addBiomeFeature(biome, FLAVOLITE_LAYER); + BiomeAPI.addBiomeFeature(biome, THALLASIUM_ORE); + BiomeAPI.addBiomeFeature(biome, ENDER_ORE); + BiomeAPI.addBiomeFeature(biome, 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)) { // TODO replace caves with carvers - BiomeAPI.addBiomeFeatures(biome, ROUND_CAVE, TUNEL_CAVE); + BiomeAPI.addBiomeFeature(biome, ROUND_CAVE); + BiomeAPI.addBiomeFeature(biome, TUNEL_CAVE); } }