From 036d594012eb15bdd61e65d78ff4b0db3dfa130f Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 12:13:09 +0200 Subject: [PATCH] updated `isFeatureChunk` and `generatePieces` Signatures --- .../mixin/common/EndCityFeatureMixin.java | 9 ++++---- .../features/EternalPortalStructure.java | 23 +++++++++++-------- .../features/FeatureBaseStructure.java | 21 +++++++++-------- .../features/GiantIceStarStructure.java | 15 +++++++----- .../features/MegaLakeSmallStructure.java | 17 ++++++++------ .../features/MegaLakeStructure.java | 17 ++++++++------ .../features/MountainStructure.java | 17 ++++++++------ .../features/PaintedMountainStructure.java | 17 ++++++++------ .../features/SDFStructureFeature.java | 17 ++++++++------ 9 files changed, 88 insertions(+), 65 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index e91f8949..5a054c59 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,5 +1,6 @@ package ru.betterend.mixin.common; +import net.minecraft.world.level.LevelHeightAccessor; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -18,15 +19,15 @@ 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, int i, int j, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, CallbackInfoReturnable info) { + private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, LevelHeightAccessor levelHeightAccessor, CallbackInfoReturnable info) { if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); if (chance == 0) { - info.setReturnValue(getYPositionForFeature(i, j, chunkGenerator) >= 60); + info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); info.cancel(); } else if (chunkRandom.nextInt(chance) == 0){ - info.setReturnValue(getYPositionForFeature(i, j, chunkGenerator) >= 60); + info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); info.cancel(); } else { @@ -37,7 +38,7 @@ public class EndCityFeatureMixin { } @Shadow - private static int getYPositionForFeature(int chunkX, int chunkZ, ChunkGenerator chunkGenerator) { + private static int getYPositionForFeature(ChunkPos pos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { return 0; } } 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 f67a71d4..d137ea66 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -4,6 +4,7 @@ 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; @@ -26,16 +27,16 @@ public class EternalPortalStructure extends FeatureBaseStructure { private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig) { + 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((chunkX << 4) | 8, (chunkZ << 4) | 8, Heightmap.Types.WORLD_SURFACE_WG) < 10) { + if (chunkGenerator.getBaseHeight(pos.getBlockX(8), pos.getBlockX(8), Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor) < 10) { return false; } - return super.isFeatureChunk(chunkGenerator, biomeSource, worldSeed, chunkRandom, chunkX, chunkZ, biome, chunkPos, featureConfig); + return super.isFeatureChunk(chunkGenerator, biomeSource, worldSeed, chunkRandom, pos, biome, chunkPos, featureConfig, levelHeightAccessor); } @Override @@ -44,19 +45,21 @@ public class EternalPortalStructure extends FeatureBaseStructure { } public static class PortalStructureStart extends StructureStart { - public PortalStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public PortalStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { + super(feature, pos, references, seed); } + @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + 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 > 4) { this.pieces.add(new NBTPiece(STRUCTURE_ID, STRUCTURE, new BlockPos(x, y - 4, z), random.nextInt(5), true, random)); } - this.calculateBoundingBox(); + //bbox is calculated lazy on get + //this.calculateBoundingBox(); } } } 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 219ec6f5..64690626 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -3,6 +3,7 @@ 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; @@ -22,12 +23,12 @@ public abstract class FeatureBaseStructure extends StructureFeature= 20; + 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; } - private static int getGenerationHeight(int chunkX, int chunkZ, ChunkGenerator chunkGenerator) { - Random random = new Random((long) (chunkX + chunkZ * 10387313)); + private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { + Random random = new Random((long) (chunkPos.x + chunkPos.z * 10387313)); Rotation blockRotation = Rotation.getRandom(random); int i = 5; int j = 5; @@ -40,12 +41,12 @@ public abstract class FeatureBaseStructure extends StructureFeature { - public StarStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public StarStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { + super(feature, pos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); + 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(); + + //this.calculateBoundingBox(); } } } 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 d4397767..c9e96d74 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; 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; @@ -20,22 +22,23 @@ public class MegaLakeSmallStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + 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(); + + //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 2d554d4c..d536fe46 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; 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; @@ -20,22 +22,23 @@ public class MegaLakeStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + 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(); + + //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 a968c7d1..5be93f26 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; 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; @@ -20,22 +22,23 @@ public class MountainStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + 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(); + + //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 cbb6735a..d78bd5ca 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; 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.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -25,15 +27,15 @@ public class PaintedMountainStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + 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 > 50) { float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); @@ -44,7 +46,8 @@ public class PaintedMountainStructure extends FeatureBaseStructure { } this.pieces.add(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises )); } - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } 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 40e28a3c..cc33b475 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -4,6 +4,8 @@ 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; @@ -26,21 +28,22 @@ public abstract class SDFStructureFeature extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + 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(); + + //this.calculateBoundingBox(); } } }