From 78bf62bdca846b5f7c344022e410589ff34809e4 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 17:58:09 +0200 Subject: [PATCH] Biome Features Updated --- .../java/ru/betterend/item/EndBucketItem.java | 3 ++- .../mixin/common/ShuffelingListMixin.java | 26 +++++++++++++++++++ .../util/ShuffelingListExtended.java | 11 ++++++++ .../world/biome/cave/EndCaveBiome.java | 17 ++++++------ .../features/terrain/EndLakeFeature.java | 7 +++-- .../caves/CaveChunkPopulatorFeature.java | 4 +-- .../terrain/caves/EndCaveFeature.java | 4 +-- .../terrain/caves/TunelCaveFeature.java | 4 +-- 8 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java create mode 100644 src/main/java/ru/betterend/util/ShuffelingListExtended.java diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index bccc0c06..3886a75e 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -1,5 +1,6 @@ package ru.betterend.item; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.MobBucketItem; import net.minecraft.world.level.material.Fluids; @@ -8,6 +9,6 @@ import ru.betterend.registry.EndItems; public class EndBucketItem extends MobBucketItem implements ItemModelProvider { public EndBucketItem(EntityType type) { - super(type, Fluids.WATER, EndItems.makeEndItemSettings().stacksTo(1)); + super(type, Fluids.WATER, SoundEvents.BUCKET_EMPTY, EndItems.makeEndItemSettings().stacksTo(1)); } } diff --git a/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java b/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java new file mode 100644 index 00000000..f1823dbc --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java @@ -0,0 +1,26 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.entity.ai.behavior.ShufflingList; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import ru.betterend.util.ShuffelingListExtended; + +import java.util.List; +import java.util.Random; +import java.util.stream.Stream; + +@Mixin(ShufflingList.class) +public abstract class ShuffelingListMixin implements ShuffelingListExtended { + @Shadow @Final protected List> entries; + + public boolean isEmpty() { + return this.entries.isEmpty(); + } + + @Shadow public abstract ShufflingList shuffle(); + + public U getOne() { + return this.shuffle().stream().findFirst().orElseThrow(RuntimeException::new); + } +} diff --git a/src/main/java/ru/betterend/util/ShuffelingListExtended.java b/src/main/java/ru/betterend/util/ShuffelingListExtended.java new file mode 100644 index 00000000..2e265ff3 --- /dev/null +++ b/src/main/java/ru/betterend/util/ShuffelingListExtended.java @@ -0,0 +1,11 @@ +package ru.betterend.util; + +import net.minecraft.world.entity.ai.behavior.ShufflingList; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Random; + +public interface ShuffelingListExtended { + public boolean isEmpty(); + public U getOne(); +} 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 79af7269..9f19ed15 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.entity.ai.behavior.ShufflingList; import net.minecraft.world.level.biome.Biome.BiomeCategory; @@ -12,12 +10,15 @@ import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; import ru.betterend.BetterEnd; import ru.betterend.registry.EndSounds; +import ru.betterend.util.ShuffelingListExtended; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; +import java.util.Random; + public class EndCaveBiome extends EndBiome { - private ShufflingList> floorFeatures = new ShufflingList>(); - private ShufflingList> ceilFeatures = new ShufflingList>(); + final private ShufflingList> floorFeatures = new ShufflingList<>(); + final private ShufflingList> ceilFeatures = new ShufflingList<>(); public EndCaveBiome(BCLBiomeDef definition) { super(makeDef(definition)); @@ -42,12 +43,12 @@ public class EndCaveBiome extends EndBiome { ceilFeatures.add(feature, weight); } - public Feature getFloorFeature(Random random) { - return floorFeatures.isEmpty() ? null : floorFeatures.getOne(random); + public Feature getFloorFeature() { + return ((ShuffelingListExtended>)floorFeatures).isEmpty() ? null : ((ShuffelingListExtended>)floorFeatures).getOne(); } - public Feature getCeilFeature(Random random) { - return ceilFeatures.isEmpty() ? null : ceilFeatures.getOne(random); + public Feature getCeilFeature() { + return ((ShuffelingListExtended>)ceilFeatures).isEmpty() ? null : ((ShuffelingListExtended>)ceilFeatures).getOne(); } public float getFloorDensity() { 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 54c1b903..3a0e2c25 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,13 +1,10 @@ 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; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; @@ -20,6 +17,8 @@ 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); @@ -28,7 +27,7 @@ public class EndLakeFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { final Random random = featureConfig.random(); - final BlockPos blockPos = featureConfig.origin(); + BlockPos blockPos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(10.0, 20.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); 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 55c9c377..da5274a6 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 @@ -113,7 +113,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { floorPositions.forEach((pos) -> { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(random); + Feature feature = biome.getFloorFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } @@ -129,7 +129,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(random); + Feature feature = biome.getCeilFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(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 9d2bc596..6c6509e1 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 @@ -94,7 +94,7 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(random); + Feature feature = biome.getFloorFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } @@ -110,7 +110,7 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(random); + Feature feature = biome.getCeilFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } 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 42ee724b..c5acfec3 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 @@ -189,7 +189,7 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(random); + Feature feature = biome.getFloorFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } @@ -206,7 +206,7 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(random); + Feature feature = biome.getCeilFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); }