fixed minestom-pvp version, made stickfight playable
This commit is contained in:
parent
8d479b69e3
commit
13132eace6
@ -57,7 +57,7 @@ dependencies {
|
|||||||
|
|
||||||
|
|
||||||
//PvP
|
//PvP
|
||||||
implementation 'io.github.TogAr2:MinestomPvP:04180ddf9a'
|
implementation 'io.github.TogAr2:MinestomPvP:PR62-SNAPSHOT'
|
||||||
|
|
||||||
// Hephaestus engine
|
// Hephaestus engine
|
||||||
implementation("team.unnamed:hephaestus-api:0.2.1-SNAPSHOT")
|
implementation("team.unnamed:hephaestus-api:0.2.1-SNAPSHOT")
|
||||||
|
@ -27,7 +27,7 @@ public class JumpDiveFactory implements GameFactory {
|
|||||||
return new ConfigManager()
|
return new ConfigManager()
|
||||||
.addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 5, 8, 10, 12, 14, 16))
|
.addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 5, 8, 10, 12, 14, 16))
|
||||||
.addOption(new NumericOption("height", Material.SCAFFOLDING, TranslatedComponent.byId("optionCommon#height"), 30, 60, 90))
|
.addOption(new NumericOption("height", Material.SCAFFOLDING, TranslatedComponent.byId("optionCommon#height"), 30, 60, 90))
|
||||||
.addOption(new NumericOption("timeLimit", Material.CLOCK, TranslatedComponent.byId("optionCommon#timeLimit"), 60, 120, 180, 240, 300));
|
.addOption(new NumericOption("timeLimit", Material.CLOCK, TranslatedComponent.byId("optionCommon#seconds"), 60, 120, 180, 240, 300));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,20 +3,23 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
|
|||||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
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 eu.mhsl.minenet.minigames.util.BatchUtil;
|
|
||||||
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
|
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
|
||||||
import io.github.togar2.pvp.events.FinalAttackEvent;
|
import io.github.togar2.pvp.events.FinalAttackEvent;
|
||||||
import io.github.togar2.pvp.feature.CombatFeatures;
|
import io.github.togar2.pvp.feature.CombatFeatures;
|
||||||
import net.minestom.server.coordinate.Pos;
|
import net.minestom.server.coordinate.Pos;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
import net.minestom.server.event.player.PlayerMoveEvent;
|
||||||
import net.minestom.server.instance.batch.AbsoluteBlockBatch;
|
|
||||||
import net.minestom.server.instance.block.Block;
|
import net.minestom.server.instance.block.Block;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.WeakHashMap;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class Stickfight extends StatelessGame {
|
public class Stickfight extends StatelessGame {
|
||||||
|
private final double radius = 20;
|
||||||
|
private final WeakHashMap<Player, Pos> spawnPoints = new WeakHashMap<>();
|
||||||
|
|
||||||
public Stickfight() {
|
public Stickfight() {
|
||||||
super(Dimension.OVERWORLD.key, "Stickfight", new LastWinsScore());
|
super(Dimension.OVERWORLD.key, "Stickfight", new LastWinsScore());
|
||||||
|
|
||||||
@ -38,21 +41,56 @@ public class Stickfight extends StatelessGame {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLoad(@NotNull CompletableFuture<Void> callback) {
|
protected void onLoad(@NotNull CompletableFuture<Void> callback) {
|
||||||
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
|
setBlock(0, 50, 0, Block.DIAMOND_BLOCK);
|
||||||
for (int z = -10; z <= 10; z++) {
|
|
||||||
batch.setBlock(0, 50, z, Block.SANDSTONE);
|
|
||||||
}
|
}
|
||||||
batch.setBlock(0, 50, 0, Block.GOLD_BLOCK);
|
|
||||||
|
|
||||||
BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null));
|
@Override
|
||||||
|
protected void start() {
|
||||||
|
List<Player> players = getPlayers().stream().toList();
|
||||||
|
int numPlayers = players.size();
|
||||||
|
|
||||||
|
for (int i = 0; i < numPlayers; i++) {
|
||||||
|
double angle = (2 * Math.PI / numPlayers) * i;
|
||||||
|
int spawnX = (int) (radius * Math.cos(angle));
|
||||||
|
int spawnZ = (int) (radius * Math.sin(angle));
|
||||||
|
int spawnY = 50;
|
||||||
|
|
||||||
|
Pos spawnpoint = new Pos(spawnX, spawnY + 1, spawnZ).add(0.5);
|
||||||
|
spawnPoints.put(players.get(i), spawnpoint.withLookAt(getSpawn()));
|
||||||
|
players.get(i).teleport(spawnpoint);
|
||||||
|
|
||||||
|
generateBridge(spawnX, spawnY, spawnZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
setBlock(0, 50, 0, Block.GOLD_BLOCK);
|
||||||
|
super.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void generateBridge(int startX, int startY, int startZ) {
|
||||||
|
int steps = (int) (radius * 1.5);
|
||||||
|
for (int i = 0; i < steps; i++) {
|
||||||
|
double t = (double) i / steps;
|
||||||
|
int x = (int) (startX * (1 - t));
|
||||||
|
int z = (int) (startZ * (1 - t));
|
||||||
|
setBlock(x, startY, z, Block.SANDSTONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
|
protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
|
||||||
if(isBeforeBeginning) playerMoveEvent.setCancelled(true);
|
if(!spawnPoints.containsKey(playerMoveEvent.getPlayer())) {
|
||||||
|
playerMoveEvent.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isBeforeBeginning) {
|
||||||
|
if(spawnPoints.get(playerMoveEvent.getPlayer()).distance(playerMoveEvent.getNewPosition()) < 1) return;
|
||||||
|
playerMoveEvent.setCancelled(true);
|
||||||
|
playerMoveEvent.getPlayer().teleport(spawnPoints.get(playerMoveEvent.getPlayer()));
|
||||||
|
}
|
||||||
|
|
||||||
if(playerMoveEvent.getNewPosition().y() < 40) {
|
if(playerMoveEvent.getNewPosition().y() < 40) {
|
||||||
playerMoveEvent.getPlayer().teleport(new Pos(0, 51, 0));
|
playerMoveEvent.getPlayer().teleport(spawnPoints.get(playerMoveEvent.getPlayer()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user