From a3f2a06f6a72ddfd456299cd91b9d46f817e8133 Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 8 Oct 2024 21:47:28 +0200 Subject: [PATCH 1/8] added AnvilRun files --- .../minigames/command/PrivilegedCommand.java | 3 +- .../stateless/types/anvilRun/AnvilRun.java | 63 +++++++++++++++++++ .../types/anvilRun/AnvilRunFactory.java | 42 +++++++++++++ .../stateless/types/deathcube/Deathcube.java | 7 +-- 4 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java index 13294f6..22a1700 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java +++ b/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java @@ -27,7 +27,8 @@ public class PrivilegedCommand extends Command { } protected CommandCondition isPrivileged() { - return (sender, commandString) -> sender.hasPermission("admin"); +// return (sender, commandString) -> sender.hasPermission("admin"); + return (sender, commandString) -> true; } protected void addCondition(CommandCondition condition) { diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java new file mode 100644 index 0000000..b9c0870 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java @@ -0,0 +1,63 @@ +package eu.mhsl.minenet.minigames.instance.game.stateless.types.anvilRun; + +import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; +import eu.mhsl.minenet.minigames.score.LastWinsScore; +import eu.mhsl.minenet.minigames.instance.Dimension; +import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.metadata.other.FallingBlockMeta; +import net.minestom.server.event.player.PlayerMoveEvent; +import net.minestom.server.instance.block.Block; +import org.jetbrains.annotations.NotNull; + +import java.util.concurrent.CompletableFuture; + +class AnvilRun extends StatelessGame { + + final int radius; + + public AnvilRun(int radius, int pvpEnabled) { + super(Dimension.THE_END.key, "Deathcube", new LastWinsScore()); + this.radius = radius; + this.setGenerator(new CircularPlateTerrainGenerator(radius).setPlateHeight(50)); + } + + @Override + protected void onLoad(@NotNull CompletableFuture callback) { + for(int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if(new Pos(x, 0, z).distance(new Pos(0, 0, 0)) > radius) continue; + + int height = super.rnd.nextInt(100, 500); + Entity anvil = new Entity(EntityType.FALLING_BLOCK); + ((FallingBlockMeta) anvil.getEntityMeta()).setBlock(Block.ANVIL); + anvil.setNoGravity(true); + + } + } + } + + @Override + protected void onStart() { + super.onStart(); + + // Liste mit anvils + } + + @Override + protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { + super.onPlayerMove(playerMoveEvent); + if(isBeforeBeginning && playerMoveEvent.getNewPosition().y() < 48.5) { + playerMoveEvent.setCancelled(true); + playerMoveEvent.getPlayer().teleport(getSpawn()); + } + if(playerMoveEvent.getNewPosition().y() < 48.5) getScore().insertResult(playerMoveEvent.getPlayer()); + } + + @Override + public Pos getSpawn() { + return new Pos(0, 0, 30); + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java new file mode 100644 index 0000000..9ab4fb3 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java @@ -0,0 +1,42 @@ +package eu.mhsl.minenet.minigames.instance.game.stateless.types.anvilRun; + +import eu.mhsl.minenet.minigames.instance.game.Game; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption; +import eu.mhsl.minenet.minigames.instance.room.Room; +import eu.mhsl.minenet.minigames.message.component.TranslatedComponent; +import net.minestom.server.item.Material; + +import java.util.Map; + +public class AnvilRunFactory implements GameFactory { + @Override + public TranslatedComponent name() { + return TranslatedComponent.byId("game_AnvilRun#name"); + } + + @Override + public TranslatedComponent description() { + return TranslatedComponent.byId("game_AnvilRun#description"); + } + + @Override + public ConfigManager configuration() { + return new ConfigManager() + .addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 10, 20, 30)) + .addOption(new NumericOption("pvpEnabled", Material.STICK, TranslatedComponent.byId("game_Deathcube#optionPvpEnabled"), 1, 0)); + + } + + @Override + public Game manufacture(Room parent, Map> configuration) { + return new AnvilRun(configuration.get("radius").getAsInt(), configuration.get("pvpEnabled").getAsInt()).setParent(parent); + } + + @Override + public Material symbol() { + return Material.ANVIL; + } +} 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 9cd601c..fe95674 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 @@ -6,9 +6,6 @@ import eu.mhsl.minenet.minigames.util.BatchUtil; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.world.BlockPallet; import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; -import io.github.togar2.pvp.config.AttackConfig; -import io.github.togar2.pvp.config.DamageConfig; -import io.github.togar2.pvp.config.PvPConfig; import net.minestom.server.coordinate.Pos; import net.minestom.server.event.player.PlayerMoveEvent; import net.minestom.server.instance.batch.AbsoluteBlockBatch; @@ -27,7 +24,7 @@ class Deathcube extends StatelessGame { this.radius = radius; this.height = height + 49; this.percentage = percentage; - this.setGenerator(new CircularPlateTerrainGenerator(radius+10).setPlateHeight(50)); + this.setGenerator(new CircularPlateTerrainGenerator(radius+10).setPlateHeight(50).setGenerateBorders(true)); // if(pvpEnabled == 1) eventNode().addChild( // TODO update // PvPConfig.emptyBuilder() @@ -66,6 +63,6 @@ class Deathcube extends StatelessGame { @Override public Pos getSpawn() { - return new Pos(0, 50, 30); + return new Pos(0, radius+5, 30); } } From e71dccb98d9add15993bdc3704e0a8c70f46c45f Mon Sep 17 00:00:00 2001 From: lars Date: Wed, 9 Oct 2024 12:55:50 +0200 Subject: [PATCH 2/8] started with tetris --- .../minigames/instance/game/GameList.java | 6 + .../stateless/types/anvilRun/AnvilRun.java | 6 +- .../game/stateless/types/tetris/Tetris.java | 111 ++++++++++++++++++ .../stateless/types/tetris/TetrisFactory.java | 38 ++++++ 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java index 8f9b9d1..df91bce 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java @@ -1,6 +1,7 @@ package eu.mhsl.minenet.minigames.instance.game; import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory; +import eu.mhsl.minenet.minigames.instance.game.stateless.types.anvilRun.AnvilRunFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.bowSpleef.BowSpleefFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.elytraRace.ElytraRaceFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.backrooms.BackroomsFactory; @@ -10,6 +11,7 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube.Deathcu import eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun.MinerunFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.spleef.SpleefFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight.StickFightFactory; +import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.TetrisFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.tntrun.TntRunFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense.TowerdefenseFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace.TrafficLightRaceFactory; @@ -22,6 +24,10 @@ public enum GameList { TOWERDEFENSE(new TowerdefenseFactory(), GameType.PROTOTYPE), BEDWARS(new BedwarsFactory(), GameType.PROTOTYPE), BACKROOMS(new BackroomsFactory(), GameType.PROTOTYPE), + + ANVILRUN(new AnvilRunFactory(), GameType.PROTOTYPE), + TETRIS(new TetrisFactory(), GameType.PROTOTYPE), + TNTRUN(new TntRunFactory(), GameType.OTHER), ACIDRAIN(new AcidRainFactory(), GameType.PVE), ELYTRARACE(new ElytraRaceFactory(), GameType.PVP), diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java index b9c0870..cb5002c 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java @@ -12,11 +12,14 @@ import net.minestom.server.event.player.PlayerMoveEvent; import net.minestom.server.instance.block.Block; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.CompletableFuture; class AnvilRun extends StatelessGame { final int radius; + final List anvils = new ArrayList<>(); public AnvilRun(int radius, int pvpEnabled) { super(Dimension.THE_END.key, "Deathcube", new LastWinsScore()); @@ -35,6 +38,7 @@ class AnvilRun extends StatelessGame { ((FallingBlockMeta) anvil.getEntityMeta()).setBlock(Block.ANVIL); anvil.setNoGravity(true); + anvils.add(anvil); } } } @@ -43,7 +47,7 @@ class AnvilRun extends StatelessGame { protected void onStart() { super.onStart(); - // Liste mit anvils + anvils.forEach(anvil -> anvil.setNoGravity(false)); } @Override diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java new file mode 100644 index 0000000..cb03e4f --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java @@ -0,0 +1,111 @@ +package eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris; + +import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; +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.terrain.CircularPlateTerrainGenerator; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.coordinate.Vec; +import net.minestom.server.entity.Player; +import net.minestom.server.event.player.PlayerMoveEvent; +import net.minestom.server.instance.batch.AbsoluteBlockBatch; +import net.minestom.server.instance.block.Block; +import org.jetbrains.annotations.NotNull; + +import java.util.concurrent.CompletableFuture; + +class Tetris extends StatelessGame { + private final boolean isFast; + private final int width = 9; + private final int height = 20; + + enum Button { + W, + A, + S, + D, + mouseLeft, + mouseRight, + space + } + + public Tetris(boolean isFast) { + super(Dimension.THE_END.key, "Tetris", new FirstWinsScore()); + this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0)); + + this.isFast = isFast; + } + + protected void pressedButton(Button button) { + switch (button) { + case A -> System.out.println("A"); + case S -> System.out.println("S"); + case D -> System.out.println("D"); + case W -> System.out.println("W"); + } + } + + @Override + protected void onLoad(@NotNull CompletableFuture callback) { + AbsoluteBlockBatch batch = new AbsoluteBlockBatch(); + + for(int y = 45; y <= 45+height; y++) { + for(int x = -(width/2)-1; x <= (width/2)+1; x++) { + batch.setBlock(x, y, 0, Block.STONE); + } + } + + for(int y = 45; y <= 45+height; y++) { + batch.setBlock(-(width/2)-1, y, 1, Block.GRAY_CONCRETE); + batch.setBlock((width/2)+1, y, 1, Block.GRAY_CONCRETE); + } + for(int x = -(width/2)-1; x <= (width/2)+1; x++) { + batch.setBlock(x, 45, 1, Block.GRAY_CONCRETE); + } + + BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null)); + } + + @Override + protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { + super.onPlayerMove(playerMoveEvent); + +// if(playerMoveEvent.getNewPosition().z() < getSpawn().z()) { +// pressedButton(Button.W); +// } +// if(playerMoveEvent.getNewPosition().z() > getSpawn().z()) { +// pressedButton(Button.S); +// } +// if(playerMoveEvent.getNewPosition().x() < getSpawn().x()) { +// pressedButton(Button.A); +// } +// if(playerMoveEvent.getNewPosition().x() > getSpawn().x()) { +// pressedButton(Button.D); +// } + +// playerMoveEvent.getNewPosition().asVec(); + + Vec movementVector = playerMoveEvent.getPlayer().getPreviousPosition().asVec().sub(playerMoveEvent.getNewPosition()); + + + + System.out.println(movementVector); + +// if(!(playerMoveEvent.getNewPosition().withYaw(0).withPitch(0) == getSpawn().withYaw(0).withPitch(0))) { + playerMoveEvent.setNewPosition(getSpawn().withView(playerMoveEvent.getNewPosition())); +// return; +// } + } + + @Override + protected boolean onPlayerJoin(Player p) { + p.setNoGravity(true); + return super.onPlayerJoin(p); + } + + @Override + public Pos getSpawn() { + return new Pos(0, 50, 15).withView(180, 0); + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java new file mode 100644 index 0000000..02d6f3c --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java @@ -0,0 +1,38 @@ +package eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris; + +import eu.mhsl.minenet.minigames.instance.game.Game; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager; +import eu.mhsl.minenet.minigames.instance.room.Room; +import eu.mhsl.minenet.minigames.message.component.TranslatedComponent; +import net.minestom.server.item.Material; + +import java.util.Map; + +public class TetrisFactory implements GameFactory { + @Override + public TranslatedComponent name() { + return TranslatedComponent.byId("game_Tetris#name"); + } + + @Override + public TranslatedComponent description() { + return TranslatedComponent.byId("game_Tetris#description"); + } + + @Override + public ConfigManager configuration() { + return new ConfigManager(); + } + + @Override + public Game manufacture(Room parent, Map> configuration) { + return new Tetris(false).setParent(parent); + } + + @Override + public Material symbol() { + return Material.PURPLE_WOOL; + } +} From 40f02449d9a92b14650d6e4d8ec7a4d0d6ace695 Mon Sep 17 00:00:00 2001 From: lars Date: Thu, 10 Oct 2024 15:46:32 +0200 Subject: [PATCH 3/8] finished basic anvil run --- .../minenet/minigames/instance/game/Game.java | 8 ++++- .../stateless/types/anvilRun/AnvilRun.java | 31 ++++++++++++++++--- .../types/anvilRun/AnvilRunFactory.java | 2 +- .../CircularPlateTerrainGenerator.java | 2 +- 4 files changed, 35 insertions(+), 8 deletions(-) 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 e5db049..4f85e16 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 @@ -12,6 +12,7 @@ import eu.mhsl.minenet.minigames.instance.room.Room; import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Player; +import net.minestom.server.event.entity.EntityTickEvent; import net.minestom.server.event.item.ItemDropEvent; import net.minestom.server.event.player.PlayerBlockBreakEvent; import net.minestom.server.event.player.PlayerBlockPlaceEvent; @@ -48,7 +49,8 @@ public abstract class Game extends MineNetInstance implements Spawnable { .addListener(PlayerMoveEvent.class, this::onPlayerMove) .addListener(PlayerBlockBreakEvent.class, this::onBlockBreak) .addListener(PlayerBlockPlaceEvent.class, this::onBlockPlace) - .addListener(ItemDropEvent.class, this::onItemDrop); + .addListener(ItemDropEvent.class, this::onItemDrop) + .addListener(EntityTickEvent.class, this::onEntityTick); } public Game setParent(Room parentRoom) { @@ -119,6 +121,10 @@ public abstract class Game extends MineNetInstance implements Spawnable { protected void onUnload() {} + protected void onEntityTick(@NotNull EntityTickEvent entityTickEvent) { + + } + protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java index cb5002c..1cd2900 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java @@ -3,12 +3,15 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.anvilRun; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; import eu.mhsl.minenet.minigames.score.LastWinsScore; import eu.mhsl.minenet.minigames.instance.Dimension; +import eu.mhsl.minenet.minigames.util.BatchUtil; import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Entity; import net.minestom.server.entity.EntityType; import net.minestom.server.entity.metadata.other.FallingBlockMeta; +import net.minestom.server.event.entity.EntityTickEvent; import net.minestom.server.event.player.PlayerMoveEvent; +import net.minestom.server.instance.batch.AbsoluteBlockBatch; import net.minestom.server.instance.block.Block; import org.jetbrains.annotations.NotNull; @@ -18,17 +21,20 @@ import java.util.concurrent.CompletableFuture; class AnvilRun extends StatelessGame { + final int spawnHeight = 30; final int radius; final List anvils = new ArrayList<>(); public AnvilRun(int radius, int pvpEnabled) { - super(Dimension.THE_END.key, "Deathcube", new LastWinsScore()); + super(Dimension.THE_END.key, "Anvil Run", new LastWinsScore()); this.radius = radius; - this.setGenerator(new CircularPlateTerrainGenerator(radius).setPlateHeight(50)); + this.setGenerator(new CircularPlateTerrainGenerator(radius)); } @Override protected void onLoad(@NotNull CompletableFuture callback) { + AbsoluteBlockBatch batch = new AbsoluteBlockBatch(); + for(int x = -radius; x <= radius; x++) { for (int z = -radius; z <= radius; z++) { if(new Pos(x, 0, z).distance(new Pos(0, 0, 0)) > radius) continue; @@ -37,10 +43,15 @@ class AnvilRun extends StatelessGame { Entity anvil = new Entity(EntityType.FALLING_BLOCK); ((FallingBlockMeta) anvil.getEntityMeta()).setBlock(Block.ANVIL); anvil.setNoGravity(true); + anvil.setInstance(this, new Pos(x+0.5, height, z+0.5)); anvils.add(anvil); + + batch.setBlock(x, spawnHeight-1, z, Block.SNOW_BLOCK); } } + + BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null)); } @Override @@ -53,15 +64,25 @@ class AnvilRun extends StatelessGame { @Override protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { super.onPlayerMove(playerMoveEvent); - if(isBeforeBeginning && playerMoveEvent.getNewPosition().y() < 48.5) { + if(isBeforeBeginning && playerMoveEvent.getNewPosition().y() < spawnHeight - 2) { playerMoveEvent.setCancelled(true); playerMoveEvent.getPlayer().teleport(getSpawn()); + return; } - if(playerMoveEvent.getNewPosition().y() < 48.5) getScore().insertResult(playerMoveEvent.getPlayer()); + if(playerMoveEvent.getNewPosition().y() < spawnHeight - 2) getScore().insertResult(playerMoveEvent.getPlayer()); + } + + @Override + protected void onEntityTick(@NotNull EntityTickEvent entityTickEvent) { + if(!entityTickEvent.getEntity().getEntityType().equals(EntityType.FALLING_BLOCK)) return; + Pos anvilPosition = entityTickEvent.getEntity().getPosition(); + if(anvilPosition.y() > spawnHeight + 0.5) return; + if(this.getBlock(anvilPosition.withY(spawnHeight-1)).isAir()) return; + this.setBlock(anvilPosition.withY(spawnHeight-1), Block.AIR); } @Override public Pos getSpawn() { - return new Pos(0, 0, 30); + return new Pos(0, spawnHeight, 0); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java index 9ab4fb3..403acc0 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java @@ -25,7 +25,7 @@ public class AnvilRunFactory implements GameFactory { @Override public ConfigManager configuration() { return new ConfigManager() - .addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 10, 20, 30)) + .addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 5, 10, 15, 20, 25, 30)) .addOption(new NumericOption("pvpEnabled", Material.STICK, TranslatedComponent.byId("game_Deathcube#optionPvpEnabled"), 1, 0)); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java index 6f97ba5..4b82ea7 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java +++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java @@ -53,7 +53,7 @@ public class CircularPlateTerrainGenerator extends PlateTerrainGenerator { double distance = bottom.distance(new Pos(0, 0, 0)); if(distance <= this.size && generatePlate()) { - unit.modifier().fill(bottom, bottom.add(1, 50, 1), platePallet.rnd()); + unit.modifier().fill(bottom, bottom.add(1, plateHeight, 1), platePallet.rnd()); continue; } From c9ef7197ccb9d5aebd2e8a0d9e982631e670d486 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 12 Oct 2024 17:54:52 +0200 Subject: [PATCH 4/8] added scheduled task for anvil run --- .../game/stateless/StatelessGame.java | 1 + .../stateless/types/anvilRun/AnvilRun.java | 31 ++++++++++++++----- .../types/anvilRun/AnvilRunFactory.java | 5 ++- .../stateless/types/deathcube/Deathcube.java | 14 +++++++-- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java index 2855e20..c9efbb0 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java @@ -23,6 +23,7 @@ public class StatelessGame extends Game { private int timeLimit = 0; private int timePlayed = 0; + public StatelessGame(DynamicRegistry.Key dimensionType, String gameName, Score score) { super(dimensionType); this.score = score; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java index 1cd2900..38e8082 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java @@ -5,6 +5,7 @@ import eu.mhsl.minenet.minigames.score.LastWinsScore; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.util.BatchUtil; 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; import net.minestom.server.entity.EntityType; @@ -13,6 +14,8 @@ import net.minestom.server.event.entity.EntityTickEvent; import net.minestom.server.event.player.PlayerMoveEvent; import net.minestom.server.instance.batch.AbsoluteBlockBatch; import net.minestom.server.instance.block.Block; +import net.minestom.server.timer.Scheduler; +import net.minestom.server.timer.TaskSchedule; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -23,11 +26,13 @@ class AnvilRun extends StatelessGame { final int spawnHeight = 30; final int radius; - final List anvils = new ArrayList<>(); + final int speed; + final List anvilSpawnPositions = new ArrayList<>(); - public AnvilRun(int radius, int pvpEnabled) { + public AnvilRun(int radius, int speed) { super(Dimension.THE_END.key, "Anvil Run", new LastWinsScore()); this.radius = radius; + this.speed = speed; this.setGenerator(new CircularPlateTerrainGenerator(radius)); } @@ -40,12 +45,8 @@ class AnvilRun extends StatelessGame { if(new Pos(x, 0, z).distance(new Pos(0, 0, 0)) > radius) continue; int height = super.rnd.nextInt(100, 500); - Entity anvil = new Entity(EntityType.FALLING_BLOCK); - ((FallingBlockMeta) anvil.getEntityMeta()).setBlock(Block.ANVIL); - anvil.setNoGravity(true); - anvil.setInstance(this, new Pos(x+0.5, height, z+0.5)); - anvils.add(anvil); + anvilSpawnPositions.add(new Pos(x+0.5, height, z+0.5)); batch.setBlock(x, spawnHeight-1, z, Block.SNOW_BLOCK); } @@ -54,11 +55,25 @@ class AnvilRun extends StatelessGame { BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null)); } + protected void spawnAnvil(Pos spawnPosition) { + Entity anvil = new Entity(EntityType.FALLING_BLOCK); + ((FallingBlockMeta) anvil.getEntityMeta()).setBlock(Block.ANVIL); + anvil.setInstance(this, spawnPosition); + } + @Override protected void onStart() { super.onStart(); - anvils.forEach(anvil -> anvil.setNoGravity(false)); + Scheduler scheduler = MinecraftServer.getSchedulerManager(); + scheduler.submitTask(() -> { + if(anvilSpawnPositions.isEmpty()) return TaskSchedule.stop(); + for(int i = 0; i < speed; i++) { + Pos position = anvilSpawnPositions.remove(super.rnd.nextInt(0, anvilSpawnPositions.size()-1)); + spawnAnvil(position); + } + return TaskSchedule.seconds(1); + }); } @Override diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java index 403acc0..5901c68 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java @@ -26,13 +26,12 @@ public class AnvilRunFactory implements GameFactory { public ConfigManager configuration() { return new ConfigManager() .addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 5, 10, 15, 20, 25, 30)) - .addOption(new NumericOption("pvpEnabled", Material.STICK, TranslatedComponent.byId("game_Deathcube#optionPvpEnabled"), 1, 0)); - + .addOption(new NumericOption("speed", Material.STICK, TranslatedComponent.byId("game_Deathcube#speed"), 10, 25, 50, 100, 250, 500)); } @Override public Game manufacture(Room parent, Map> configuration) { - return new AnvilRun(configuration.get("radius").getAsInt(), configuration.get("pvpEnabled").getAsInt()).setParent(parent); + return new AnvilRun(configuration.get("radius").getAsInt(), configuration.get("speed").getAsInt()).setParent(parent); } @Override 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 fe95674..fc79e93 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 @@ -24,7 +24,7 @@ class Deathcube extends StatelessGame { this.radius = radius; this.height = height + 49; this.percentage = percentage; - this.setGenerator(new CircularPlateTerrainGenerator(radius+10).setPlateHeight(50).setGenerateBorders(true)); + this.setGenerator(new CircularPlateTerrainGenerator(radius+10).setPlateHeight(50)); // if(pvpEnabled == 1) eventNode().addChild( // TODO update // PvPConfig.emptyBuilder() @@ -57,12 +57,20 @@ class Deathcube extends StatelessGame { @Override protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { super.onPlayerMove(playerMoveEvent); - if(isBeforeBeginning) if(playerMoveEvent.getNewPosition().y() > 51.5) playerMoveEvent.setCancelled(true); + if(playerMoveEvent.getNewPosition().y() < 48) { + playerMoveEvent.setCancelled(true); + playerMoveEvent.getPlayer().teleport(getSpawn()); + return; + } + if(isBeforeBeginning && playerMoveEvent.getNewPosition().y() > 51.5) { + playerMoveEvent.setCancelled(true); + return; + } if(playerMoveEvent.getNewPosition().y() > height) getScore().insertResult(playerMoveEvent.getPlayer()); } @Override public Pos getSpawn() { - return new Pos(0, radius+5, 30); + return new Pos(0, 50, -(radius+5)); } } From 350cf108dd2fa5535135d1ef8258f95f8f50a34f Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 19 Oct 2024 15:43:00 +0200 Subject: [PATCH 5/8] added game length for anvil run --- .../minenet/minigames/instance/game/Game.java | 9 +---- .../stateless/types/anvilRun/AnvilRun.java | 40 +++++++++++-------- .../types/anvilRun/AnvilRunFactory.java | 4 +- 3 files changed, 27 insertions(+), 26 deletions(-) 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 4f85e16..dfae886 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 @@ -12,7 +12,6 @@ import eu.mhsl.minenet.minigames.instance.room.Room; import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Player; -import net.minestom.server.event.entity.EntityTickEvent; import net.minestom.server.event.item.ItemDropEvent; import net.minestom.server.event.player.PlayerBlockBreakEvent; import net.minestom.server.event.player.PlayerBlockPlaceEvent; @@ -49,8 +48,7 @@ public abstract class Game extends MineNetInstance implements Spawnable { .addListener(PlayerMoveEvent.class, this::onPlayerMove) .addListener(PlayerBlockBreakEvent.class, this::onBlockBreak) .addListener(PlayerBlockPlaceEvent.class, this::onBlockPlace) - .addListener(ItemDropEvent.class, this::onItemDrop) - .addListener(EntityTickEvent.class, this::onEntityTick); + .addListener(ItemDropEvent.class, this::onItemDrop); } public Game setParent(Room parentRoom) { @@ -120,11 +118,6 @@ public abstract class Game extends MineNetInstance implements Spawnable { protected void onStop() {} protected void onUnload() {} - - protected void onEntityTick(@NotNull EntityTickEvent entityTickEvent) { - - } - protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java index 38e8082..1496048 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRun.java @@ -19,6 +19,7 @@ import net.minestom.server.timer.TaskSchedule; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -26,14 +27,18 @@ class AnvilRun extends StatelessGame { final int spawnHeight = 30; final int radius; - final int speed; + int anvilsPerSecond; + final int seconds; + final int anvilHeight = 200; final List anvilSpawnPositions = new ArrayList<>(); - public AnvilRun(int radius, int speed) { - super(Dimension.THE_END.key, "Anvil Run", new LastWinsScore()); + public AnvilRun(int radius, int seconds) { + super(Dimension.OVERWORLD.key, "Anvil Run", new LastWinsScore()); this.radius = radius; - this.speed = speed; + this.seconds = seconds; this.setGenerator(new CircularPlateTerrainGenerator(radius)); + + eventNode().addListener(EntityTickEvent.class, this::onEntityTick); } @Override @@ -44,14 +49,15 @@ class AnvilRun extends StatelessGame { for (int z = -radius; z <= radius; z++) { if(new Pos(x, 0, z).distance(new Pos(0, 0, 0)) > radius) continue; - int height = super.rnd.nextInt(100, 500); - - anvilSpawnPositions.add(new Pos(x+0.5, height, z+0.5)); + anvilSpawnPositions.add(new Pos(x+0.5, anvilHeight, z+0.5)); batch.setBlock(x, spawnHeight-1, z, Block.SNOW_BLOCK); } } + this.anvilsPerSecond = anvilSpawnPositions.size() / this.seconds; + Collections.shuffle(anvilSpawnPositions); + BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null)); } @@ -66,14 +72,16 @@ class AnvilRun extends StatelessGame { super.onStart(); Scheduler scheduler = MinecraftServer.getSchedulerManager(); - scheduler.submitTask(() -> { - if(anvilSpawnPositions.isEmpty()) return TaskSchedule.stop(); - for(int i = 0; i < speed; i++) { - Pos position = anvilSpawnPositions.remove(super.rnd.nextInt(0, anvilSpawnPositions.size()-1)); - spawnAnvil(position); - } - return TaskSchedule.seconds(1); - }); + for(int i=0; i spawnAnvil(this.anvilSpawnPositions.get(j)), + TaskSchedule.millis( + (long) Math.floor((double) i/this.anvilsPerSecond * 1000) + ), + TaskSchedule.stop() + ); + } } @Override @@ -87,11 +95,11 @@ class AnvilRun extends StatelessGame { if(playerMoveEvent.getNewPosition().y() < spawnHeight - 2) getScore().insertResult(playerMoveEvent.getPlayer()); } - @Override protected void onEntityTick(@NotNull EntityTickEvent entityTickEvent) { if(!entityTickEvent.getEntity().getEntityType().equals(EntityType.FALLING_BLOCK)) return; Pos anvilPosition = entityTickEvent.getEntity().getPosition(); if(anvilPosition.y() > spawnHeight + 0.5) return; + if(anvilPosition.y() < spawnHeight - 3) entityTickEvent.getEntity().remove(); if(this.getBlock(anvilPosition.withY(spawnHeight-1)).isAir()) return; this.setBlock(anvilPosition.withY(spawnHeight-1), Block.AIR); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java index 5901c68..a2a4b91 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/anvilRun/AnvilRunFactory.java @@ -26,12 +26,12 @@ public class AnvilRunFactory implements GameFactory { public ConfigManager configuration() { return new ConfigManager() .addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 5, 10, 15, 20, 25, 30)) - .addOption(new NumericOption("speed", Material.STICK, TranslatedComponent.byId("game_Deathcube#speed"), 10, 25, 50, 100, 250, 500)); + .addOption(new NumericOption("seconds", Material.STICK, TranslatedComponent.byId("game_Deathcube#seconds"), 10, 30, 60, 90, 120)); } @Override public Game manufacture(Room parent, Map> configuration) { - return new AnvilRun(configuration.get("radius").getAsInt(), configuration.get("speed").getAsInt()).setParent(parent); + return new AnvilRun(configuration.get("radius").getAsInt(), configuration.get("seconds").getAsInt()).setParent(parent); } @Override From cfbb2688d2f6c5e278979543c0484e89e7a498a6 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 19 Oct 2024 15:54:18 +0200 Subject: [PATCH 6/8] fixed starting platform for elytra race --- .../game/stateless/types/elytraRace/ElytraRace.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/elytraRace/ElytraRace.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/elytraRace/ElytraRace.java index b5fc58c..2206789 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/elytraRace/ElytraRace.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/elytraRace/ElytraRace.java @@ -105,7 +105,7 @@ public class ElytraRace extends StatelessGame { @Override protected void onLoad(@NotNull CompletableFuture callback) { Point spawnpoint = new Pos(vale.getXShiftAtZ(0), -46, 0); - GeneratorUtils.iterateArea(spawnpoint.sub(2, 0, 2), spawnpoint.add(2, 0, 2), point -> { + GeneratorUtils.iterateArea(spawnpoint.sub(5, 0, 5), spawnpoint.add(5, 0, 5), point -> { setBlock(point, BlockPallet.STREET.rnd()); }); @@ -130,6 +130,11 @@ public class ElytraRace extends StatelessGame { Player player = playerMoveEvent.getPlayer(); Point newPos = playerMoveEvent.getNewPosition(); + if(isBeforeBeginning && playerMoveEvent.getNewPosition().y() < getSpawn().y()) { + player.teleport(getSpawn()); + return; + } + playerCheckpoints.putIfAbsent(player, new CheckPointData(ringSpacing, ringSpacing * 2)); if(newPos.z() > generatedUntil - ringSpacing) { From 843fa26c08461468119c17bdca6dd459065d146d Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 19 Oct 2024 16:28:32 +0200 Subject: [PATCH 7/8] removed tetris --- .../minigames/instance/game/GameList.java | 4 - .../game/stateless/types/tetris/Tetris.java | 111 ------------------ .../stateless/types/tetris/TetrisFactory.java | 38 ------ 3 files changed, 153 deletions(-) delete mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java delete mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java index df91bce..0fa51f5 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java @@ -11,7 +11,6 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube.Deathcu import eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun.MinerunFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.spleef.SpleefFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight.StickFightFactory; -import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.TetrisFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.tntrun.TntRunFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense.TowerdefenseFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace.TrafficLightRaceFactory; @@ -24,10 +23,7 @@ public enum GameList { TOWERDEFENSE(new TowerdefenseFactory(), GameType.PROTOTYPE), BEDWARS(new BedwarsFactory(), GameType.PROTOTYPE), BACKROOMS(new BackroomsFactory(), GameType.PROTOTYPE), - ANVILRUN(new AnvilRunFactory(), GameType.PROTOTYPE), - TETRIS(new TetrisFactory(), GameType.PROTOTYPE), - TNTRUN(new TntRunFactory(), GameType.OTHER), ACIDRAIN(new AcidRainFactory(), GameType.PVE), ELYTRARACE(new ElytraRaceFactory(), GameType.PVP), diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java deleted file mode 100644 index cb03e4f..0000000 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java +++ /dev/null @@ -1,111 +0,0 @@ -package eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris; - -import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; -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.terrain.CircularPlateTerrainGenerator; -import net.minestom.server.coordinate.Pos; -import net.minestom.server.coordinate.Vec; -import net.minestom.server.entity.Player; -import net.minestom.server.event.player.PlayerMoveEvent; -import net.minestom.server.instance.batch.AbsoluteBlockBatch; -import net.minestom.server.instance.block.Block; -import org.jetbrains.annotations.NotNull; - -import java.util.concurrent.CompletableFuture; - -class Tetris extends StatelessGame { - private final boolean isFast; - private final int width = 9; - private final int height = 20; - - enum Button { - W, - A, - S, - D, - mouseLeft, - mouseRight, - space - } - - public Tetris(boolean isFast) { - super(Dimension.THE_END.key, "Tetris", new FirstWinsScore()); - this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0)); - - this.isFast = isFast; - } - - protected void pressedButton(Button button) { - switch (button) { - case A -> System.out.println("A"); - case S -> System.out.println("S"); - case D -> System.out.println("D"); - case W -> System.out.println("W"); - } - } - - @Override - protected void onLoad(@NotNull CompletableFuture callback) { - AbsoluteBlockBatch batch = new AbsoluteBlockBatch(); - - for(int y = 45; y <= 45+height; y++) { - for(int x = -(width/2)-1; x <= (width/2)+1; x++) { - batch.setBlock(x, y, 0, Block.STONE); - } - } - - for(int y = 45; y <= 45+height; y++) { - batch.setBlock(-(width/2)-1, y, 1, Block.GRAY_CONCRETE); - batch.setBlock((width/2)+1, y, 1, Block.GRAY_CONCRETE); - } - for(int x = -(width/2)-1; x <= (width/2)+1; x++) { - batch.setBlock(x, 45, 1, Block.GRAY_CONCRETE); - } - - BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null)); - } - - @Override - protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { - super.onPlayerMove(playerMoveEvent); - -// if(playerMoveEvent.getNewPosition().z() < getSpawn().z()) { -// pressedButton(Button.W); -// } -// if(playerMoveEvent.getNewPosition().z() > getSpawn().z()) { -// pressedButton(Button.S); -// } -// if(playerMoveEvent.getNewPosition().x() < getSpawn().x()) { -// pressedButton(Button.A); -// } -// if(playerMoveEvent.getNewPosition().x() > getSpawn().x()) { -// pressedButton(Button.D); -// } - -// playerMoveEvent.getNewPosition().asVec(); - - Vec movementVector = playerMoveEvent.getPlayer().getPreviousPosition().asVec().sub(playerMoveEvent.getNewPosition()); - - - - System.out.println(movementVector); - -// if(!(playerMoveEvent.getNewPosition().withYaw(0).withPitch(0) == getSpawn().withYaw(0).withPitch(0))) { - playerMoveEvent.setNewPosition(getSpawn().withView(playerMoveEvent.getNewPosition())); -// return; -// } - } - - @Override - protected boolean onPlayerJoin(Player p) { - p.setNoGravity(true); - return super.onPlayerJoin(p); - } - - @Override - public Pos getSpawn() { - return new Pos(0, 50, 15).withView(180, 0); - } -} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java deleted file mode 100644 index 02d6f3c..0000000 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/TetrisFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -package eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris; - -import eu.mhsl.minenet.minigames.instance.game.Game; -import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory; -import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option; -import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager; -import eu.mhsl.minenet.minigames.instance.room.Room; -import eu.mhsl.minenet.minigames.message.component.TranslatedComponent; -import net.minestom.server.item.Material; - -import java.util.Map; - -public class TetrisFactory implements GameFactory { - @Override - public TranslatedComponent name() { - return TranslatedComponent.byId("game_Tetris#name"); - } - - @Override - public TranslatedComponent description() { - return TranslatedComponent.byId("game_Tetris#description"); - } - - @Override - public ConfigManager configuration() { - return new ConfigManager(); - } - - @Override - public Game manufacture(Room parent, Map> configuration) { - return new Tetris(false).setParent(parent); - } - - @Override - public Material symbol() { - return Material.PURPLE_WOOL; - } -} From 3f247bfc9031678fd41c0c1c60fee439a4835e98 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 19 Oct 2024 16:32:51 +0200 Subject: [PATCH 8/8] privileged commands only for admins --- .../eu/mhsl/minenet/minigames/command/PrivilegedCommand.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java index 22a1700..13294f6 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java +++ b/src/main/java/eu/mhsl/minenet/minigames/command/PrivilegedCommand.java @@ -27,8 +27,7 @@ public class PrivilegedCommand extends Command { } protected CommandCondition isPrivileged() { -// return (sender, commandString) -> sender.hasPermission("admin"); - return (sender, commandString) -> true; + return (sender, commandString) -> sender.hasPermission("admin"); } protected void addCondition(CommandCondition condition) {