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
11 changed files with 48 additions and 12 deletions
Showing only changes of commit 2c579f4afe - Show all commits
@@ -3,20 +3,28 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.playerRace;
import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
import eu.mhsl.minenet.minigames.score.LastWinsScore;
import eu.mhsl.minenet.minigames.util.BatchUtil;
import eu.mhsl.minenet.minigames.util.CommonProperties;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.GameMode;
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;
public class PlayerRace extends StatelessGame {
private final int height = 64;
private double zLine = 32;
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.
private double zSpawnPoint = 14.5;
private final int obstacleCount;
public PlayerRace(int obstacleCount) {
super(Dimension.THE_END.key, "PlayerRace", new LastWinsScore());
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...
this.setGenerator(new PlayerRaceChunkgenerator(this.height, obstacleCount));
this.obstacleCount = obstacleCount;
}
@Override
@@ -25,8 +33,28 @@ public class PlayerRace extends StatelessGame {
return false;
}
@Override
protected void onLoad(@NotNull CompletableFuture<Void> callback) {
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
for(int x = 0; x < 16; x++) {
batch.setBlock(x,this.height + 1, 15, Block.OAK_FENCE.withProperties(CommonProperties.fenceEastWest));
}BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null));
}
@Override
protected void onStart() {
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
for(int x = 0; x < 16; x++) {
batch.setBlock(x,this.height + 1, 15, Block.AIR);
}BatchUtil.loadAndApplyBatch(batch, this, () -> {});
}
@Override
public Pos getSpawn() {
return new Pos(8, this.height + 1.5, 8);
}
public Pos getNewSpawn() {
return new Pos(8, this.height + 1.5, this.zSpawnPoint);
}
@@ -34,11 +62,19 @@ public class PlayerRace extends StatelessGame {
protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
var player = playerMoveEvent.getPlayer();
if(playerMoveEvent.getNewPosition().y() < this.height - 5)
player.teleport(this.getSpawn());
player.teleport(this.isBeforeBeginning ? this.getSpawn() : this.getNewSpawn());
if(playerMoveEvent.getNewPosition().z() >= this.zLine) {
if(playerMoveEvent.getNewPosition().z() >= this.zLine && this.isRunning) {
this.zLine += 19;
this.zSpawnPoint += 19;
}
if(playerMoveEvent.getNewPosition().z() >= 16 + this.obstacleCount * 19 && this.isRunning) {
this.getScore().insertResult(player);
player.setGameMode(GameMode.SPECTATOR);
}
if(playerMoveEvent.getNewPosition().z() >= 16 && this.isBeforeBeginning)
player.teleport(this.getSpawn());
}
}
@@ -52,7 +52,7 @@ public class PlayerRaceChunkgenerator extends BaseGenerator {
private static Block groundBlockAt(int z, int finishStart, int finishEnd) {
if(z < 0 || z >= finishEnd) return null;
if(z < START_LENGTH) return Block.AMETHYST_BLOCK;
if(z < START_LENGTH) return BlockPallet.GROUND.rnd();
if(z >= finishStart) return Block.DIAMOND_BLOCK;
int relative = (z - START_LENGTH) % PERIOD;
@@ -13,7 +13,7 @@ import java.util.Random;
*/
class BasaltPillars extends Obstacle {
private final JNoise ground = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.13)
.build();
@@ -13,7 +13,7 @@ import java.util.Random;
*/
class CobwebGrove extends Obstacle {
private final JNoise soil = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.12)
.build();
@@ -13,7 +13,7 @@ import java.util.Random;
*/
class HoneyField extends Obstacle {
private final JNoise sticky = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.2)
.build();
@@ -13,7 +13,7 @@ import java.util.Random;
*/
class IceRink extends Obstacle {
private final JNoise streaks = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.15)
.build();
@@ -14,7 +14,7 @@ import java.util.Random;
*/
class MudPools extends Obstacle {
private final JNoise pools = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.11)
.build();
@@ -7,7 +7,7 @@ import net.minestom.server.instance.generator.GenerationUnit;
class Mudpit extends Obstacle {
private final JNoise curves = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.1)
.build();
@@ -16,7 +16,7 @@ import java.util.Random;
*/
class PowderSnowField extends Obstacle {
private final JNoise drifts = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.14)
.build();
@@ -13,7 +13,7 @@ import java.util.Random;
*/
class SandDunes extends Obstacle {
private final JNoise dunes = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.08)
.build();
@@ -13,7 +13,7 @@ import java.util.Random;
*/
class SlimePatches extends Obstacle {
private final JNoise blobs = JNoise.newBuilder()
.fastSimplex()
.perlin()
.setFrequency(0.18)
.build();