diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java index f8710e3..5edec6e 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java @@ -5,7 +5,7 @@ import eu.mhsl.minenet.minigames.score.FirstWinsScore; import eu.mhsl.minenet.minigames.util.BatchUtil; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.world.generator.BlockPallet; -import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator; +import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; import io.github.bloepiloepi.pvp.config.AttackConfig; import io.github.bloepiloepi.pvp.config.DamageConfig; import io.github.bloepiloepi.pvp.config.PvPConfig; @@ -27,7 +27,7 @@ class Deathcube extends StatelessGame { this.radius = radius; this.height = height + 49; this.percentage = percentage; - this.setGenerator(new CircularTerrainGenerator(radius+10, true)); + this.setGenerator(new CircularPlateTerrainGenerator(radius+10).setPlateHeight(50)); if(pvpEnabled == 1) eventNode().addChild( PvPConfig.emptyBuilder() diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java index 4e60542..4f35b5f 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java @@ -8,7 +8,7 @@ import eu.mhsl.minenet.minigames.util.CommonProperties; import eu.mhsl.minenet.minigames.util.Intersect; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.world.generator.BlockPallet; -import eu.mhsl.minenet.minigames.world.generator.terrain.SquareTerrainGenerator; +import eu.mhsl.minenet.minigames.world.generator.terrain.SquarePlateTerrainGenerator; import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -36,7 +36,7 @@ class Minerun extends StatelessGame { public Minerun(int width, int length, int minePercentage) { super(Dimension.THE_END.DIMENSION, "Minerun", new FirstWinsScore()); - setGenerator(new SquareTerrainGenerator(width, length + preRun + afterFinishLine).withPlate(50)); + setGenerator(new SquarePlateTerrainGenerator(width, length + preRun + afterFinishLine).setPlateHeight(50)); this.width = width; this.length = length; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java index 456388c..58a71c8 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java @@ -6,7 +6,7 @@ import eu.mhsl.minenet.minigames.message.component.TranslatedComponent; import eu.mhsl.minenet.minigames.score.LastWinsScore; import eu.mhsl.minenet.minigames.util.BatchUtil; import eu.mhsl.minenet.minigames.world.generator.BlockPallet; -import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator; +import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.GameMode; import net.minestom.server.event.player.PlayerMoveEvent; @@ -32,7 +32,7 @@ public class Spleef extends StatelessGame { this.radius = radius; this.stackCount = stackCount; - setGenerator(new CircularTerrainGenerator(50, false)); + setGenerator(new CircularPlateTerrainGenerator(50)); eventNode().addListener(PlayerStartDiggingEvent.class, this::destroyBlock); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java index 39d9221..363ae80 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java @@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; import eu.mhsl.minenet.minigames.score.LastWinsScore; import eu.mhsl.minenet.minigames.util.BatchUtil; -import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator; +import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; import io.github.bloepiloepi.pvp.config.*; import io.github.bloepiloepi.pvp.events.FinalAttackEvent; import net.minestom.server.coordinate.Pos; @@ -32,7 +32,7 @@ public class Stickfight extends StatelessGame { ((Player) finalAttackEvent.getTarget()).setHealth(20); }); - setGenerator(new CircularTerrainGenerator(20, false)); + setGenerator(new CircularPlateTerrainGenerator(20)); } @Override diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java index c4f6a02..d1d4425 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java @@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; import eu.mhsl.minenet.minigames.score.LastWinsScore; import eu.mhsl.minenet.minigames.util.BatchUtil; -import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator; +import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Entity; @@ -30,7 +30,7 @@ public class TntRun extends StatelessGame { super(Dimension.OVERWORLD.DIMENSION, "tntRun", new LastWinsScore()); this.radius = radius; this.stackCount = stackCount; - setGenerator(new CircularTerrainGenerator(radius, false)); + setGenerator(new CircularPlateTerrainGenerator(radius)); } @Override diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java index 872aa73..667bc0f 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java @@ -7,7 +7,7 @@ import eu.mhsl.minenet.minigames.util.BatchUtil; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.util.CommonProperties; import eu.mhsl.minenet.minigames.world.generator.BlockPallet; -import eu.mhsl.minenet.minigames.world.generator.terrain.SquareTerrainGenerator; +import eu.mhsl.minenet.minigames.world.generator.terrain.SquarePlateTerrainGenerator; import net.kyori.adventure.sound.Sound; import net.minestom.server.coordinate.Pos; import net.minestom.server.coordinate.Vec; @@ -42,9 +42,9 @@ class TrafficLightRace extends StatelessGame { this.length = length; setGenerator( - new SquareTerrainGenerator(width, length + preRun + afterRun) - .withPlate(50) - .withBorders() + new SquarePlateTerrainGenerator(width, length + preRun + afterRun) + .setPlateHeight(50) + .setGenerateBorders(true) ); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/PlateTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/PlateTerrainGenerator.java new file mode 100644 index 0000000..a0db1a5 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/PlateTerrainGenerator.java @@ -0,0 +1,28 @@ +package eu.mhsl.minenet.minigames.world.generator; + +import net.minestom.server.instance.generator.Generator; + +public abstract class PlateTerrainGenerator implements Generator { + protected int plateHeight = 0; + protected BlockPallet platePallet = BlockPallet.GROUND; + protected boolean generateBorders = false; + + public PlateTerrainGenerator setPlateHeight(int plateHeight) { + this.plateHeight = plateHeight; + return this; + } + + public PlateTerrainGenerator setPlatePallet(BlockPallet platePallet) { + this.platePallet = platePallet; + return this; + } + + public PlateTerrainGenerator setGenerateBorders(boolean generateBorders) { + this.generateBorders = generateBorders; + return this; + } + + public boolean generatePlate() { + return plateHeight > 0; + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java index 199a839..b7298c0 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java @@ -7,6 +7,6 @@ import java.util.Random; public abstract class Structure { protected final Random rnd = new Random(); - public abstract void generateGame(Block.Setter setter); + public abstract void generateStructure(Block.Setter setter); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java index 0caeac9..c453f60 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java @@ -7,12 +7,14 @@ import net.minestom.server.instance.block.Block; public class PeakRock extends Structure { private final Point position; - public PeakRock(Point position) { + private final BlockPallet blockPallet; + public PeakRock(Point position, BlockPallet blockPallet) { this.position = position; + this.blockPallet = blockPallet; } @Override - public void generateGame(Block.Setter setter) { + public void generateStructure(Block.Setter setter) { for (int stoneX = -4; stoneX < 4; stoneX++) { for (int stoneZ = -4; stoneZ < 4; stoneZ++) { @@ -21,7 +23,7 @@ public class PeakRock extends Structure { for (int stoneY = 0; stoneY < 10-(int) distanceToCenter * rnd.nextDouble(2, 5); stoneY++) { Point blockPos = position.add(stoneX, stoneY, stoneZ); - setter.setBlock(blockPos, BlockPallet.STONE.rnd()); + setter.setBlock(blockPos, this.blockPallet.rnd()); } } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/Tree.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/Tree.java new file mode 100644 index 0000000..c8e5ff5 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/Tree.java @@ -0,0 +1,18 @@ +package eu.mhsl.minenet.minigames.world.generator.structures.generatable; + +import eu.mhsl.minenet.minigames.world.generator.structures.Structure; +import net.minestom.server.coordinate.Point; +import net.minestom.server.instance.block.Block; + +public class Tree extends Structure { + private final Point position; + + public Tree(Point position) { + this.position = position; + } + + @Override + public void generateStructure(Block.Setter setter) { + + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java similarity index 87% rename from src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularTerrainGenerator.java rename to src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java index 56da4c8..f0b44bf 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularTerrainGenerator.java +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java @@ -3,26 +3,24 @@ package eu.mhsl.minenet.minigames.world.generator.terrain; import de.articdive.jnoise.JNoise; import eu.mhsl.minenet.minigames.util.RangeMap; import eu.mhsl.minenet.minigames.world.generator.BlockPallet; +import eu.mhsl.minenet.minigames.world.generator.PlateTerrainGenerator; import eu.mhsl.minenet.minigames.world.generator.structures.generatable.PeakRock; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Pos; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.generator.GenerationUnit; -import net.minestom.server.instance.generator.Generator; import org.jetbrains.annotations.NotNull; import java.util.Random; -public class CircularTerrainGenerator implements Generator { +public class CircularPlateTerrainGenerator extends PlateTerrainGenerator { protected final Random rnd = new Random(); private final int size; - private final boolean generatePlate; - - public CircularTerrainGenerator(int size, boolean generatePlate) { + public CircularPlateTerrainGenerator(int size) { this.size = size; - this.generatePlate = generatePlate; } + private final JNoise base = JNoise.newBuilder() .fastSimplex() .setSeed(rnd.nextLong()) @@ -54,8 +52,8 @@ public class CircularTerrainGenerator implements Generator { double distance = bottom.distance(new Pos(0, 0, 0)); - if(distance <= this.size && generatePlate) { - unit.modifier().fill(bottom, bottom.add(1, 50, 1), BlockPallet.GROUND.rnd()); + if(distance <= this.size && generatePlate()) { + unit.modifier().fill(bottom, bottom.add(1, 50, 1), platePallet.rnd()); continue; } @@ -63,7 +61,7 @@ public class CircularTerrainGenerator implements Generator { synchronized (base) { double baseNoise = base.getNoise(bottom.x(), bottom.z()); - double currentHeight = minTwo(RangeMap.map(distance, 0, 400, -(this.size / 5), 200)) + baseNoise * 8; + double currentHeight = minTwo(RangeMap.map(distance, 0, 400, -((double) this.size / 5), 200)) + baseNoise * 8; synchronized (batches) { double elementNoise = batches.getNoise(bottom.x(), bottom.z()); @@ -82,7 +80,7 @@ public class CircularTerrainGenerator implements Generator { if(peakNoise > 0.97 && bottom.distance(new Pos(0, 0, 0)) > (this.size + 20)) { Point center = bottom.add(1, currentHeight-3, 1); - unit.fork(setter -> new PeakRock(center).generateGame(setter)); + unit.fork(setter -> new PeakRock(center, BlockPallet.STONE).generateStructure(setter)); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquareTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquarePlateTerrainGenerator.java similarity index 88% rename from src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquareTerrainGenerator.java rename to src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquarePlateTerrainGenerator.java index c7dadb5..ed6414f 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquareTerrainGenerator.java +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquarePlateTerrainGenerator.java @@ -3,42 +3,30 @@ package eu.mhsl.minenet.minigames.world.generator.terrain; import de.articdive.jnoise.JNoise; import eu.mhsl.minenet.minigames.util.RangeMap; import eu.mhsl.minenet.minigames.world.generator.BlockPallet; +import eu.mhsl.minenet.minigames.world.generator.PlateTerrainGenerator; import eu.mhsl.minenet.minigames.world.generator.structures.generatable.PeakRock; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Pos; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.generator.GenerationUnit; -import net.minestom.server.instance.generator.Generator; import net.minestom.server.world.DimensionType; import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.Random; -public class SquareTerrainGenerator implements Generator { +public class SquarePlateTerrainGenerator extends PlateTerrainGenerator { protected final Random rnd = new Random(); private final int width; private final int length; - private int plateHeight = 0; - private boolean withBorder = false; - public SquareTerrainGenerator(int width, int length) { + public SquarePlateTerrainGenerator(int width, int length) { this.width = width; this.length = length; } - public SquareTerrainGenerator withPlate(int plateHeight) { - this.plateHeight = plateHeight; - return this; - } - - public SquareTerrainGenerator withBorders() { - this.withBorder = true; - return this; - } - private final JNoise base = JNoise.newBuilder() .fastSimplex() .setSeed(rnd.nextLong()) @@ -71,14 +59,14 @@ public class SquareTerrainGenerator implements Generator { for (int z = 0; z < unit.size().z(); z++) { Point bottom = start.add(x, 0, z); - if(plateHeight > 0) { + if(generatePlate()) { if(bottom.x() <= width && bottom.x() >= 0 && bottom.z() <= length && bottom.z() >= 0) { - unit.modifier().fill(bottom, bottom.add(1, plateHeight, 1), BlockPallet.GROUND.rnd()); + unit.modifier().fill(bottom, bottom.add(1, plateHeight, 1), platePallet.rnd()); continue; } } - if(withBorder) { + if(generateBorders) { Runnable generateBorder = () -> unit.modifier().fill(bottom, bottom.add(1, DimensionType.OVERWORLD.getMaxY(), 1), Block.BARRIER); if(bottom.z() <= length+1 && bottom.z() >= -1 && bottom.x() >= -1 && bottom.x() <= width+1) { @@ -121,7 +109,7 @@ public class SquareTerrainGenerator implements Generator { if(peakNoise > 0.97 && bottom.distance(new Pos(0, 0, 0)) > (this.width + 20)) { Point center = bottom.add(1, currentHeight-3, 1); - unit.fork(setter -> new PeakRock(center).generateGame(setter)); + unit.fork(setter -> new PeakRock(center, BlockPallet.STONE).generateStructure(setter)); } }