diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 47d3362..ae1775f 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java index 7ddb040..4364ac9 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java @@ -137,6 +137,10 @@ public abstract class Game extends MineNetInstance implements Spawnable { }); } + public boolean isRunning() { + return isRunning; + } + public Pos getSpawn() { return new Pos(0,50,0); } 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 596d765..5ffcdfd 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 @@ -1,9 +1,12 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.spleef; +import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; 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 net.minestom.server.coordinate.Pos; import net.minestom.server.entity.GameMode; import net.minestom.server.event.player.PlayerMoveEvent; @@ -11,14 +14,21 @@ import net.minestom.server.event.player.PlayerStartDiggingEvent; import net.minestom.server.instance.batch.AbsoluteBlockBatch; import net.minestom.server.instance.block.Block; import net.minestom.server.item.*; -import net.minestom.server.world.DimensionType; import org.jetbrains.annotations.NotNull; import java.util.concurrent.CompletableFuture; public class Spleef extends StatelessGame { + int size = 30; + int stackCount = 3; + + final int heightPerLevel = 20; + final int totalElevation = 50; + public Spleef() { - super(DimensionType.OVERWORLD, "Spleef", new LastWinsScore()); + super(Dimension.OVERWORLD.DIMENSION, "Spleef", new LastWinsScore(1)); + + setGenerator(new CircularTerrainGenerator(50, false)); eventNode().addListener(PlayerStartDiggingEvent.class, this::destroyBlock); } @@ -27,21 +37,13 @@ public class Spleef extends StatelessGame { protected void onLoad(@NotNull CompletableFuture<Void> callback) { AbsoluteBlockBatch circle = new AbsoluteBlockBatch(); - for(int x = -20; x <= 20; x++) { - for(int z = -20; z <= 20; z++) { - circle.setBlock(x, 10, z, Block.SNOW_BLOCK); - } - } + for (int level = 0; level < stackCount; level++) { + for(int x = -size; x <= size; x++) { + for(int z = -size; z <= size; z++) { + if(new Pos(x, 0, z).distance(new Pos(0, 0, 0)) > size) continue; - for(int x = -20; x <= 20; x++) { - for(int z = -20; z <= 20; z++) { - circle.setBlock(x, 20, z, Block.SNOW_BLOCK); - } - } - - for(int x = -20; x <= 20; x++) { - for(int z = -20; z <= 20; z++) { - circle.setBlock(x, 30, z, Block.SNOW_BLOCK); + circle.setBlock(x, totalElevation + (level * heightPerLevel), z, BlockPallet.WINTER.rnd()); + } } } @@ -70,7 +72,7 @@ public class Spleef extends StatelessGame { @Override protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { - if(playerMoveEvent.getNewPosition().y() < 9) { + if(playerMoveEvent.getNewPosition().y() < totalElevation) { playerMoveEvent.getPlayer().setGameMode(GameMode.SPECTATOR); playerMoveEvent.getPlayer().getInventory().clear(); getScore().addResult(playerMoveEvent.getPlayer()); @@ -83,6 +85,6 @@ public class Spleef extends StatelessGame { @Override public Pos getSpawn() { - return new Pos(0, 33, 0); + return new Pos(0, totalElevation + heightPerLevel * (stackCount-1) + 1, 0); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java index 8e1362d..dc05cf5 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java @@ -17,15 +17,17 @@ public class LastWinsScore extends Score { this.ignoreLastPlayers = ignoreLastPlayers; } - public void setIgnoreLastPlayers(int ignoreLastPlayers) { - this.ignoreLastPlayers = ignoreLastPlayers; - } - @Override protected void checkGameEnd() { if(this.isDone()) return; + if(!instance.isRunning()) return; if(instance.getPlayers().isEmpty()) return; - if(scores.size() >= instance.getPlayers().size() - ignoreLastPlayers) setDone(); + if(scores.size() >= instance.getPlayers().size() - ignoreLastPlayers) { + if(ignoreLastPlayers > 0) { + instance.getPlayers().stream().filter(player -> !scores.contains(player)).forEach(this::addResult); + } + setDone(); + } } @Override diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/BlockPallet.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/BlockPallet.java index d1c93fd..6fae143 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/BlockPallet.java +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/BlockPallet.java @@ -10,6 +10,7 @@ public enum BlockPallet { GROUND(new Block[] {Block.GRAVEL, Block.STONE, Block.DIRT, Block.GRASS_BLOCK, Block.COARSE_DIRT, Block.ROOTED_DIRT}), WOOD(new Block[] {Block.ACACIA_WOOD, Block.BIRCH_WOOD, Block.JUNGLE_WOOD, Block.OAK_WOOD, Block.DARK_OAK_WOOD, Block.SPRUCE_WOOD}), STONE(new Block[] {Block.CHISELED_STONE_BRICKS, Block.STONE_BRICKS, Block.POLISHED_ANDESITE, Block.POLISHED_BLACKSTONE, Block.POLISHED_DIORITE}), + WINTER(new Block[] {Block.SNOW_BLOCK, Block.ICE, Block.PACKED_ICE, Block.BLUE_CONCRETE, Block.SEA_LANTERN}), PRESSURE_PLATES(new Block[] {Block.ACACIA_PRESSURE_PLATE, Block.BIRCH_PRESSURE_PLATE, Block.CRIMSON_PRESSURE_PLATE, Block.JUNGLE_PRESSURE_PLATE, Block.OAK_PRESSURE_PLATE, Block.DARK_OAK_PRESSURE_PLATE, Block.HEAVY_WEIGHTED_PRESSURE_PLATE, Block.HEAVY_WEIGHTED_PRESSURE_PLATE, Block.POLISHED_BLACKSTONE_PRESSURE_PLATE, Block.SPRUCE_PRESSURE_PLATE, Block.STONE_PRESSURE_PLATE, Block.WARPED_PRESSURE_PLATE});