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; + } +}