From 20bb6379bf6d55e18e07d85189e4d96632f79bfe Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 7 Oct 2020 03:12:44 +0300 Subject: [PATCH] Fixes --- .../ru/betterend/compat/REIAnvilCategory.java | 3 - .../ru/betterend/compat/REIAnvilDisplay.java | 2 - .../java/ru/betterend/compat/REIPlugin.java | 3 - .../mixin/client/ClientRecipeBookMixin.java | 1 - .../mixin/client/MinecraftClientMixin.java | 3 +- .../mixin/common/AnvilScreenHandlerMixin.java | 1 - .../mixin/common/ChunkGeneratorMixin.java | 7 --- .../common/DefaultBiomeCreatorMixin.java | 12 +--- .../java/ru/betterend/noise/VoronoiNoise.java | 59 +++++++++++++++++++ .../betterend/recipe/AnvilSmithingRecipe.java | 2 - .../registry/DefaultBiomeFeatureRegistry.java | 10 ++++ .../registry/DefaultBiomeFeatures.java | 8 --- .../betterend/registry/FeatureRegistry.java | 1 - .../betterend/registry/ItemTagRegistry.java | 2 - src/main/java/ru/betterend/util/MHelper.java | 20 ++++++- src/main/java/ru/betterend/util/sdf/SDF.java | 31 ++++++---- .../world/features/MountainFeature.java | 1 + .../world/structures/StructureWorld.java | 11 ++++ .../features/SDFStructureFeature.java | 3 + .../StructureGiantMossyGlowshroom.java | 2 - .../features/StructureMountain.java | 33 +++++++++++ .../world/structures/piece/VoxelPiece.java | 2 - 22 files changed, 161 insertions(+), 56 deletions(-) create mode 100644 src/main/java/ru/betterend/noise/VoronoiNoise.java create mode 100644 src/main/java/ru/betterend/registry/DefaultBiomeFeatureRegistry.java delete mode 100644 src/main/java/ru/betterend/registry/DefaultBiomeFeatures.java create mode 100644 src/main/java/ru/betterend/world/structures/features/StructureMountain.java diff --git a/src/main/java/ru/betterend/compat/REIAnvilCategory.java b/src/main/java/ru/betterend/compat/REIAnvilCategory.java index 19f8c51a..956c8716 100644 --- a/src/main/java/ru/betterend/compat/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/compat/REIAnvilCategory.java @@ -8,7 +8,6 @@ import org.jetbrains.annotations.NotNull; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.ints.IntList; - import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.EntryStack; @@ -17,12 +16,10 @@ import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.gui.entries.RecipeEntry; import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; import me.shedaniel.rei.gui.widget.Widget; - import net.minecraft.block.Blocks; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; - import ru.betterend.util.LangUtil; public class REIAnvilCategory implements TransferRecipeCategory { diff --git a/src/main/java/ru/betterend/compat/REIAnvilDisplay.java b/src/main/java/ru/betterend/compat/REIAnvilDisplay.java index 80173a72..894c9af1 100644 --- a/src/main/java/ru/betterend/compat/REIAnvilDisplay.java +++ b/src/main/java/ru/betterend/compat/REIAnvilDisplay.java @@ -9,11 +9,9 @@ import org.jetbrains.annotations.NotNull; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.TransferRecipeDisplay; import me.shedaniel.rei.server.ContainerInfo; - import net.minecraft.recipe.Recipe; import net.minecraft.screen.ScreenHandler; import net.minecraft.util.Identifier; - import ru.betterend.recipe.AnvilSmithingRecipe; public class REIAnvilDisplay implements TransferRecipeDisplay { diff --git a/src/main/java/ru/betterend/compat/REIPlugin.java b/src/main/java/ru/betterend/compat/REIPlugin.java index d2724d49..b7c88782 100644 --- a/src/main/java/ru/betterend/compat/REIPlugin.java +++ b/src/main/java/ru/betterend/compat/REIPlugin.java @@ -3,14 +3,11 @@ package ru.betterend.compat; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.api.plugins.REIPluginV0; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; - import net.minecraft.block.Blocks; import net.minecraft.recipe.BlastingRecipe; import net.minecraft.util.Identifier; - import ru.betterend.BetterEnd; import ru.betterend.recipe.AlloyingRecipe; import ru.betterend.recipe.AnvilSmithingRecipe; diff --git a/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java b/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java index 95f239b7..6841b21f 100644 --- a/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java @@ -8,7 +8,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.client.recipebook.ClientRecipeBook; import net.minecraft.client.recipebook.RecipeBookGroup; import net.minecraft.recipe.Recipe; - import ru.betterend.recipe.AlloyingRecipe; @Mixin(ClientRecipeBook.class) diff --git a/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java b/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java index f76d24ae..61f14958 100644 --- a/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java @@ -16,6 +16,7 @@ import net.minecraft.client.sound.MusicType; import net.minecraft.client.world.ClientWorld; import net.minecraft.sound.MusicSound; import net.minecraft.world.World; +import ru.betterend.util.MHelper; @Mixin(MinecraftClient.class) public class MinecraftClientMixin { @@ -36,7 +37,7 @@ public class MinecraftClientMixin { private void getEndMusic(CallbackInfoReturnable info) { if (!(this.currentScreen instanceof CreditsScreen) && this.player != null) { if (this.player.world.getRegistryKey() == World.END) { - if (this.inGameHud.getBossBarHud().shouldPlayDragonMusic()) { + if (this.inGameHud.getBossBarHud().shouldPlayDragonMusic() && MHelper.lengthSqr(this.player.getX(), this.player.getZ()) < 250000) { info.setReturnValue(MusicType.DRAGON); } else { diff --git a/src/main/java/ru/betterend/mixin/common/AnvilScreenHandlerMixin.java b/src/main/java/ru/betterend/mixin/common/AnvilScreenHandlerMixin.java index 31f6d483..d8eb9ac3 100644 --- a/src/main/java/ru/betterend/mixin/common/AnvilScreenHandlerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/AnvilScreenHandlerMixin.java @@ -19,7 +19,6 @@ import net.minecraft.screen.ScreenHandlerContext; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.tag.BlockTags; import net.minecraft.world.World; - import ru.betterend.recipe.AnvilSmithingRecipe; @Mixin(AnvilScreenHandler.class) diff --git a/src/main/java/ru/betterend/mixin/common/ChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/ChunkGeneratorMixin.java index c1cd1260..b27f1ddd 100644 --- a/src/main/java/ru/betterend/mixin/common/ChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChunkGeneratorMixin.java @@ -1,15 +1,8 @@ package ru.betterend.mixin.common; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.At; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkRegion; -import net.minecraft.world.gen.StructureAccessor; import net.minecraft.world.gen.chunk.ChunkGenerator; -import ru.betterend.registry.DefaultBiomeFeatures; @Mixin(ChunkGenerator.class) public class ChunkGeneratorMixin { diff --git a/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java b/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java index 2a93c3c3..6297be87 100644 --- a/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java @@ -1,17 +1,11 @@ package ru.betterend.mixin.common; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.DefaultBiomeCreator; import net.minecraft.world.biome.GenerationSettings; -import net.minecraft.world.gen.GenerationStep; -import net.minecraft.world.gen.feature.ConfiguredFeatures; -import net.minecraft.world.gen.feature.ConfiguredStructureFeatures; -import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders; -import ru.betterend.registry.DefaultBiomeFeatures; @Mixin(DefaultBiomeCreator.class) public class DefaultBiomeCreatorMixin { @@ -20,13 +14,13 @@ public class DefaultBiomeCreatorMixin { return null; }; - @Overwrite + /*@Overwrite public static Biome createEndHighlands() { GenerationSettings.Builder builder = (new GenerationSettings.Builder()) .surfaceBuilder(ConfiguredSurfaceBuilders.END).structureFeature(ConfiguredStructureFeatures.END_CITY) .feature(GenerationStep.Feature.SURFACE_STRUCTURES, ConfiguredFeatures.END_GATEWAY) .feature(GenerationStep.Feature.VEGETAL_DECORATION, ConfiguredFeatures.CHORUS_PLANT) - .feature(DefaultBiomeFeatures.MOUNTAINS.getFeatureStep(), DefaultBiomeFeatures.MOUNTAINS.getFeatureConfigured()); + .structureFeature(DefaultBiomeFeatureRegistry.MOUNTAINS.getFeatureConfigured()); return composeEndSpawnSettings(builder); - } + }*/ } diff --git a/src/main/java/ru/betterend/noise/VoronoiNoise.java b/src/main/java/ru/betterend/noise/VoronoiNoise.java new file mode 100644 index 00000000..9a601f44 --- /dev/null +++ b/src/main/java/ru/betterend/noise/VoronoiNoise.java @@ -0,0 +1,59 @@ +package ru.betterend.noise; + +import java.util.Random; + +import net.minecraft.util.math.MathHelper; +import ru.betterend.util.MHelper; + +public class VoronoiNoise { + private static final Random RANDOM = new Random(); + final int seed; + final double scale; + final double separation; + + public VoronoiNoise(int seed, double side, double separation) { + this.seed = seed; + this.scale = 1.0 / side; + this.separation = MathHelper.clamp(separation, 0, 1); + } + + private int getSeed(int x, int y, int z) { + int h = seed + x * 374761393 + y * 668265263 + z; + h = (h ^ (h >> 13)) * 1274126177; + return h ^ (h >> 16); + } + + public double sample(float x, float y, float z) { + return sample(MHelper.floor(x), MHelper.floor(y), MHelper.floor(z)); + } + + public double sample(int x, int y, int z) { + double posX = x * scale; + double posY = y * scale; + double posZ = z * scale; + int posXI = MHelper.floor(posX); + int posYI = MHelper.floor(posY); + int posZI = MHelper.floor(posZ); + double distance = Double.MAX_VALUE; + for (int px = -1; px < 2; px++) { + double pointX = posXI + px; + for (int py = -1; py < 2; py++) { + double pointY = posYI + py; + for (int pz = -1; pz < 2; pz++) { + double pointZ = posZI + pz; + RANDOM.setSeed(getSeed(posXI + px, posYI + py, posZI + pz)); + + double posXN = pointX + RANDOM.nextDouble() * separation; + double posYN = pointY + RANDOM.nextDouble() * separation; + double posZN = pointZ + RANDOM.nextDouble() * separation; + + double dist2 = MHelper.lengthSqr(posXN - posX, posYN - posY, posZN - posZ); + if (dist2 < distance) { + distance = dist2; + } + } + } + } + return distance; + } +} diff --git a/src/main/java/ru/betterend/recipe/AnvilSmithingRecipe.java b/src/main/java/ru/betterend/recipe/AnvilSmithingRecipe.java index 9c8ab572..f8c3bb85 100644 --- a/src/main/java/ru/betterend/recipe/AnvilSmithingRecipe.java +++ b/src/main/java/ru/betterend/recipe/AnvilSmithingRecipe.java @@ -4,7 +4,6 @@ import com.google.gson.JsonObject; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; - import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; @@ -19,7 +18,6 @@ import net.minecraft.util.JsonHelper; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; - import ru.betterend.BetterEnd; import ru.betterend.registry.ItemTagRegistry; diff --git a/src/main/java/ru/betterend/registry/DefaultBiomeFeatureRegistry.java b/src/main/java/ru/betterend/registry/DefaultBiomeFeatureRegistry.java new file mode 100644 index 00000000..fe8eaed0 --- /dev/null +++ b/src/main/java/ru/betterend/registry/DefaultBiomeFeatureRegistry.java @@ -0,0 +1,10 @@ +package ru.betterend.registry; + +import net.minecraft.world.gen.GenerationStep.Feature; +import ru.betterend.world.structures.EndStructureFeature; +import ru.betterend.world.structures.features.StructureMountain; + +public class DefaultBiomeFeatureRegistry { + //public static final EndFeature MOUNTAINS = EndFeature.makeChunkFeature("mountains", new MountainFeature()); + public static final EndStructureFeature MOUNTAINS = new EndStructureFeature("mountains", new StructureMountain(), Feature.RAW_GENERATION, 6, 3); +} diff --git a/src/main/java/ru/betterend/registry/DefaultBiomeFeatures.java b/src/main/java/ru/betterend/registry/DefaultBiomeFeatures.java deleted file mode 100644 index 5f1b33b2..00000000 --- a/src/main/java/ru/betterend/registry/DefaultBiomeFeatures.java +++ /dev/null @@ -1,8 +0,0 @@ -package ru.betterend.registry; - -import ru.betterend.world.features.EndFeature; -import ru.betterend.world.features.MountainFeature; - -public class DefaultBiomeFeatures { - public static final EndFeature MOUNTAINS = EndFeature.makeChunkFeature("mountains", new MountainFeature()); -} diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java index 7312db5f..7e453e50 100644 --- a/src/main/java/ru/betterend/registry/FeatureRegistry.java +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -5,7 +5,6 @@ import ru.betterend.world.features.DoublePlantFeature; import ru.betterend.world.features.EndFeature; import ru.betterend.world.features.EndLakeFeature; import ru.betterend.world.features.MossyGlowshroomFeature; -import ru.betterend.world.features.MountainFeature; import ru.betterend.world.features.SinglePlantFeature; import ru.betterend.world.features.VineFeature; diff --git a/src/main/java/ru/betterend/registry/ItemTagRegistry.java b/src/main/java/ru/betterend/registry/ItemTagRegistry.java index c15ec1e6..727520c4 100644 --- a/src/main/java/ru/betterend/registry/ItemTagRegistry.java +++ b/src/main/java/ru/betterend/registry/ItemTagRegistry.java @@ -5,11 +5,9 @@ import java.util.Arrays; import net.fabricmc.fabric.api.tag.TagRegistry; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.handlers.ModdedToolsVanillaBlocksToolHandler; - import net.minecraft.item.Item; import net.minecraft.tag.Tag; import net.minecraft.util.Identifier; - import ru.betterend.BetterEnd; public class ItemTagRegistry { diff --git a/src/main/java/ru/betterend/util/MHelper.java b/src/main/java/ru/betterend/util/MHelper.java index 537e4bf7..1d9011d6 100644 --- a/src/main/java/ru/betterend/util/MHelper.java +++ b/src/main/java/ru/betterend/util/MHelper.java @@ -69,12 +69,28 @@ public class MHelper { return a > b ? a : b; } + public static float lengthSqr(float x, float y, float z) { + return x * x + y * y + z * z; + } + + public static double lengthSqr(double x, double y, double z) { + return x * x + y * y + z * z; + } + public static float length(float x, float y, float z) { - return (float) Math.sqrt(x * x + y * y + z * z); + return (float) Math.sqrt(lengthSqr(x, y, z)); + } + + public static float lengthSqr(float x, float y) { + return x * x + y * y; + } + + public static double lengthSqr(double x, double y) { + return x * x + y * y; } public static float length(float x, float y) { - return (float) Math.sqrt(x * x + y * y); + return (float) Math.sqrt(lengthSqr(x, y)); } public static float dot(float x1, float y1, float z1, float x2, float y2, float z2) { diff --git a/src/main/java/ru/betterend/util/sdf/SDF.java b/src/main/java/ru/betterend/util/sdf/SDF.java index 6e980188..6715f794 100644 --- a/src/main/java/ru/betterend/util/sdf/SDF.java +++ b/src/main/java/ru/betterend/util/sdf/SDF.java @@ -12,6 +12,7 @@ import com.google.common.collect.Sets; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockPos.Mutable; import net.minecraft.util.math.Direction; import net.minecraft.world.ServerWorldAccess; import ru.betterend.util.BlocksHelper; @@ -39,6 +40,7 @@ public abstract class SDF { return this; } + @Deprecated public void fillRecursive(ServerWorldAccess world, BlockPos start, int dx, int dy, int dz) { Map mapWorld = Maps.newHashMap(); Map addInfo = Maps.newHashMap(); @@ -107,17 +109,19 @@ public abstract class SDF { ends.add(new BlockPos(0, 0, 0)); boolean run = true; + Mutable bPos = new Mutable(); + while (run) { for (BlockPos center: ends) { for (Direction dir: Direction.values()) { - BlockPos pos = center.offset(dir); - BlockPos wpos = pos.add(start); + bPos.set(center).move(dir); + BlockPos wpos = bPos.add(start); - if (!blocks.contains(pos) && canReplace.apply(world.getBlockState(wpos))) { - if (this.getDistance(pos.getX(), pos.getY(), pos.getZ()) < 0) { + if (!blocks.contains(bPos) && canReplace.apply(world.getBlockState(wpos))) { + if (this.getDistance(bPos.getX(), bPos.getY(), bPos.getZ()) < 0) { BlockState state = getBlockState(wpos); PosInfo.create(mapWorld, addInfo, wpos).setState(state); - add.add(pos); + add.add(bPos.toImmutable()); } } } @@ -152,6 +156,8 @@ public abstract class SDF { } public void fillRecursive(StructureWorld world, BlockPos start) { + long t = System.currentTimeMillis(); + Map mapWorld = Maps.newHashMap(); Map addInfo = Maps.newHashMap(); Set blocks = Sets.newHashSet(); @@ -160,17 +166,19 @@ public abstract class SDF { ends.add(new BlockPos(0, 0, 0)); boolean run = true; + Mutable bPos = new Mutable(); + while (run) { for (BlockPos center: ends) { for (Direction dir: Direction.values()) { - BlockPos pos = center.offset(dir); - BlockPos wpos = pos.add(start); + bPos.set(center).move(dir); + BlockPos wpos = bPos.add(start); - if (!blocks.contains(pos)) { - if (this.getDistance(pos.getX(), pos.getY(), pos.getZ()) < 0) { + if (!blocks.contains(bPos)) { + if (this.getDistance(bPos.getX(), bPos.getY(), bPos.getZ()) < 0) { BlockState state = getBlockState(wpos); PosInfo.create(mapWorld, addInfo, wpos).setState(state); - add.add(pos); + add.add(bPos.toImmutable()); } } } @@ -198,5 +206,8 @@ public abstract class SDF { BlockState state = postProcess.apply(info); world.setBlock(info.getPos(), state); }); + + t = System.currentTimeMillis() - t; + System.out.println("SDF " + t + " ms"); } } diff --git a/src/main/java/ru/betterend/world/features/MountainFeature.java b/src/main/java/ru/betterend/world/features/MountainFeature.java index e4f66704..193322fd 100644 --- a/src/main/java/ru/betterend/world/features/MountainFeature.java +++ b/src/main/java/ru/betterend/world/features/MountainFeature.java @@ -11,6 +11,7 @@ import net.minecraft.world.gen.feature.DefaultFeatureConfig; import ru.betterend.registry.BiomeRegistry; import ru.betterend.util.BlocksHelper; +@Deprecated public class MountainFeature extends DefaultFeature { private static final Mutable POS = new Mutable(); diff --git a/src/main/java/ru/betterend/world/structures/StructureWorld.java b/src/main/java/ru/betterend/world/structures/StructureWorld.java index eb2d712f..9cd507ae 100644 --- a/src/main/java/ru/betterend/world/structures/StructureWorld.java +++ b/src/main/java/ru/betterend/world/structures/StructureWorld.java @@ -17,6 +17,8 @@ import net.minecraft.world.chunk.Chunk; public class StructureWorld { private Map parts = Maps.newHashMap(); + private ChunkPos lastPos; + private Part lastPart; private int minX = Integer.MAX_VALUE; private int minY = Integer.MAX_VALUE; private int minZ = Integer.MAX_VALUE; @@ -46,6 +48,12 @@ public class StructureWorld { public void setBlock(BlockPos pos, BlockState state) { ChunkPos cPos = new ChunkPos(pos); + + if (cPos.equals(lastPos)) { + lastPart.addBlock(pos, state); + return; + } + Part part = parts.get(cPos); if (part == null) { part = new Part(); @@ -59,6 +67,9 @@ public class StructureWorld { if (pos.getY() < minY) minY = pos.getY(); if (pos.getY() > maxY) maxY = pos.getY(); part.addBlock(pos, state); + + lastPos = cPos; + lastPart = part; } public boolean placeChunk(StructureWorldAccess world, ChunkPos chunkPos) { 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 42a31a73..50d0bb33 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -37,7 +37,10 @@ public abstract class SDFStructureFeature extends StructureFeatureBase { int y = chunkGenerator.getHeight(x, z, Type.WORLD_SURFACE_WG); if (y > 5) { BlockPos start = new BlockPos(x, y, z); + long t = System.currentTimeMillis(); VoxelPiece piece = new VoxelPiece((world) -> { ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); }, random.nextInt()); + t = System.currentTimeMillis() - t; + System.out.println("Structure " + t + " ms"); this.children.add(piece); } this.setBoundingBoxFromChildren(); diff --git a/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java b/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java index 648d23c2..5429c118 100644 --- a/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java +++ b/src/main/java/ru/betterend/world/structures/features/StructureGiantMossyGlowshroom.java @@ -31,8 +31,6 @@ import ru.betterend.util.sdf.primitive.SDFSphere; public class StructureGiantMossyGlowshroom extends SDFStructureFeature { @Override protected SDF getSDF(BlockPos center, Random random) { - System.out.println(center); - SDFCapedCone cone1 = new SDFCapedCone().setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F); SDFCapedCone cone2 = new SDFCapedCone().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/StructureMountain.java b/src/main/java/ru/betterend/world/structures/features/StructureMountain.java new file mode 100644 index 00000000..19c7e468 --- /dev/null +++ b/src/main/java/ru/betterend/world/structures/features/StructureMountain.java @@ -0,0 +1,33 @@ +package ru.betterend.world.structures.features; + +import java.util.Random; + +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import ru.betterend.noise.VoronoiNoise; +import ru.betterend.util.MHelper; +import ru.betterend.util.sdf.SDF; +import ru.betterend.util.sdf.operator.SDFDisplacement; +import ru.betterend.util.sdf.operator.SDFScale; +import ru.betterend.util.sdf.operator.SDFSmoothUnion; +import ru.betterend.util.sdf.operator.SDFTranslate; +import ru.betterend.util.sdf.primitive.SDFCapedCone; + +public class StructureMountain extends SDFStructureFeature { + @Override + protected SDF getSDF(BlockPos center, Random random) { + SDFCapedCone cone1 = new SDFCapedCone().setHeight(20F).setRadius1(40F).setRadius2(0F); + SDFCapedCone cone2 = new SDFCapedCone().setHeight(10F).setRadius1(0F).setRadius2(40F); + cone1.setBlock(Blocks.END_STONE); + cone2.setBlock(Blocks.END_STONE); + SDF mountain = new SDFSmoothUnion().setRadius(15) + .setSourceA(new SDFTranslate().setTranslate(0, 20, 1).setSource(cone1)) + .setSourceB(new SDFTranslate().setTranslate(0, -10, 1).setSource(cone2)); + mountain = new SDFScale().setScale(MHelper.randRange(1F, 2.5F, random)).setSource(mountain); + VoronoiNoise noise = new VoronoiNoise(random.nextInt(), 20, 0.75); + mountain = new SDFDisplacement().setFunction((pos) -> { + return (float) noise.sample(pos.getX(), pos.getY(), pos.getZ()) * 15F; + }).setSource(mountain); + return mountain; + } +} 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 89c63bce..85815a70 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -22,13 +22,11 @@ public class VoxelPiece extends BasePiece { world = new StructureWorld(); function.accept(world); this.boundingBox = world.getBounds(); - System.out.println(this.boundingBox); } public VoxelPiece(StructureManager manager, CompoundTag tag) { super(StructureRegistry.VOXEL_PIECE, tag); this.boundingBox = world.getBounds(); - System.out.println(this.boundingBox); } @Override