started with tetris

This commit is contained in:
Lars Neuhaus 2024-10-09 12:55:50 +02:00
parent a3f2a06f6a
commit e71dccb98d
4 changed files with 160 additions and 1 deletions

View File

@ -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),

View File

@ -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<Entity> 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

View File

@ -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<Void> 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);
}
}

View File

@ -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<String, Option<?>> configuration) {
return new Tetris(false).setParent(parent);
}
@Override
public Material symbol() {
return Material.PURPLE_WOOL;
}
}