added playerrace and updated to version 26.2 #14

Merged
jannis merged 17 commits from develop-jannis into develop 2026-07-31 20:04:16 +00:00
3 changed files with 82 additions and 12 deletions
Showing only changes of commit b7e292fe0e - Show all commits
@@ -4,26 +4,25 @@ import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
import eu.mhsl.minenet.minigames.score.LastWinsScore; import eu.mhsl.minenet.minigames.score.LastWinsScore;
import net.minestom.server.coordinate.Pos; import net.minestom.server.coordinate.Pos;
import net.minestom.server.instance.batch.AbsoluteBlockBatch; import net.minestom.server.event.player.PlayerMoveEvent;
import net.minestom.server.instance.block.Block;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.concurrent.CompletableFuture;
public class PlayerRace extends StatelessGame { public class PlayerRace extends StatelessGame {
private final int height = 64;
public PlayerRace() { public PlayerRace() {
super(Dimension.THE_END.key, "PlayerRace", new LastWinsScore()); super(Dimension.THE_END.key, "PlayerRace", new LastWinsScore());
this.setGenerator(new PlayerRaceChunkgenerator(64)); this.setGenerator(new PlayerRaceChunkgenerator(this.height));
}
@Override
protected void onLoad(@NotNull CompletableFuture<Void> callback) {
this.setBlock(0, 100, 0, Block.AMETHYST_BLOCK);
} }
@Override @Override
public Pos getSpawn() { public Pos getSpawn() {
return new Pos(0.5, 101.5, 0.5); return new Pos(8, this.height + 1.5, 8);
} }
Pupsi marked this conversation as resolved Outdated
Outdated
Review

Checkpoints sollten nicht global für alle Spieler gleich sein, sonst werden langsamere Spieler beim herunterfallen nach vorne teleportiert.

Checkpoints sollten nicht global für alle Spieler gleich sein, sonst werden langsamere Spieler beim herunterfallen nach vorne teleportiert.
@Override
protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
var player = playerMoveEvent.getPlayer();
if(playerMoveEvent.getNewPosition().y() < this.height - 5)
Pupsi marked this conversation as resolved Outdated
Outdated
Review

Bei LastWinsScore gewinnt derjenige, der als letztes ins Ziel kommt...

Bei LastWinsScore gewinnt derjenige, der als letztes ins Ziel kommt...
player.teleport(this.getSpawn());
}
} }
@@ -0,0 +1,71 @@
package eu.mhsl.minenet.minigames.instance.game.stateless.types.playerRace.obstacles;
import net.minestom.server.coordinate.Point;
import net.minestom.server.instance.block.Block;
import net.minestom.server.instance.generator.GenerationUnit;
import java.util.Random;
public class LadderWall extends Obstacle{
@Override
public void generate(GenerationUnit unit, Point start) {
int y = start.blockY() + 64;
int width = 16;
int depth = 16;
for(int x = 0; x < width; x++) {
for(int z = 0; z < depth; z++) {
unit.modifier().setRelative(x, y, z, Block.LIGHT_BLUE_CONCRETE);
}
}
this.buildWall(unit, y, 4, 4, false);
this.buildWall(unit, y,10, 8, true);
}
private void buildWall(GenerationUnit unit, int y, int z, int height, boolean lastRow) {
Random random = new Random();
y += 1;
for(int x = 0; x < 16; x++) {
for(int wy = 0; wy <= height; wy++) {
unit.modifier().setRelative(x, y + wy, z, Block.LIGHT_BLUE_CONCRETE);
}
}
if(lastRow) {
for(int wy = 2; wy <= height; wy++) {
int[] noLadder = new int[5];
for(int i = 0; i < 5; i++) {
noLadder[i] = random.nextInt(16);
}
for(int x = 0; x < 16; x++) {
if(!this.isInArray(x, noLadder))
unit.modifier().setRelative(x, y + wy, z - 1, Block.LADDER);
}
}
}else {
for(int wy = 0; wy <= height; wy++) {
int[] noLadder = new int[5];
for(int i = 0; i < 5; i++) {
noLadder[i] = random.nextInt(16);
}
for(int x = 0; x < 16; x++) {
if(!this.isInArray(x, noLadder))
unit.modifier().setRelative(x, y + wy, z - 1, Block.LADDER);
}
for(int x = 7; x < 9; x++) {
unit.modifier().setRelative(x, y + wy, z + 1, Block.LADDER.withProperty("facing", "south"));
}
}
}
}
private boolean isInArray(int number, int[] array) {
for(int value : array) if(value == number) return true;
return false;
}
}
@@ -8,7 +8,7 @@ import java.util.concurrent.ThreadLocalRandom;
public abstract class Obstacle { public abstract class Obstacle {
@SuppressWarnings("StaticInitializerReferencesSubClass") @SuppressWarnings("StaticInitializerReferencesSubClass")
private static final List<Obstacle> obstacles = List.of(new Mudpit()); private static final List<Obstacle> obstacles = List.of(new Mudpit(), new LadderWall());
public abstract void generate(GenerationUnit unit, Point start); public abstract void generate(GenerationUnit unit, Point start);