fixen generating problem and finished logic of playerrace

This commit is contained in:
2026-07-19 01:11:56 +02:00
parent 82984cf5cf
commit 2c579f4afe
11 changed files with 48 additions and 12 deletions
@@ -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;
private double zSpawnPoint = 14.5;
private final int obstacleCount;
public PlayerRace(int obstacleCount) {
super(Dimension.THE_END.key, "PlayerRace", new LastWinsScore());
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();