Complete Stage 1: Core Game Loop

- Add GameState enum (LOBBY, ROLE_ASSIGN, IN_GAME, ENDING)
- Add Phase interface with enter/tick/exit/isComplete
- Add GameSession with tick-based phase machine
- Add GameEventBus for internal events
- Add GameManager for session lifecycle
- Add all phases: LobbyPhase, RoleAssignPhase, GameplayPhase, EndgamePhase
- Add role assignment: RoleAssigner, RoleQueue, SpawnPosition
- Add BasePlayer, Survivor, Killer, PlayerState
- Add DBDCommand with /dbd join/leave/create/forcestart/stop
- Update mdbd.java with GameManager and command registration
- Add command definition to paper-plugin.yml
- Mark Stage 1 complete in PLAN.md
This commit is contained in:
loki5512344 2026-05-31 20:43:40 +02:00
parent 53f3f6e9da
commit 82ed455cd2
20 changed files with 884 additions and 8 deletions

View file

@ -0,0 +1,49 @@
package dev.loki.player;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.UUID;
public abstract class BasePlayer {
protected final UUID uuid;
protected PlayerState state;
protected Location spawnLocation;
public BasePlayer(UUID uuid) {
this.uuid = uuid;
this.state = PlayerState.HEALTHY;
}
public UUID getUuid() {
return uuid;
}
public Player getPlayer() {
return Bukkit.getPlayer(uuid);
}
public PlayerState getState() {
return state;
}
public void setState(PlayerState state) {
this.state = state;
}
public Location getSpawnLocation() {
return spawnLocation;
}
public void setSpawnLocation(Location location) {
this.spawnLocation = location;
}
public boolean isOnline() {
Player player = getPlayer();
return player != null && player.isOnline();
}
public abstract boolean isKiller();
}

View file

@ -0,0 +1,25 @@
package dev.loki.player;
import java.util.UUID;
public class Killer extends BasePlayer {
private boolean carrying;
public Killer(UUID uuid) {
super(uuid);
this.carrying = false;
}
@Override
public boolean isKiller() {
return true;
}
public boolean isCarrying() {
return carrying;
}
public void setCarrying(boolean carrying) {
this.carrying = carrying;
}
}

View file

@ -0,0 +1,21 @@
package dev.loki.player;
public enum PlayerState {
HEALTHY("Здоров"),
INJURED("Ранен"),
DOWNED("В нокдауне"),
HOOKED("На крюке"),
CARRIED("Унесен"),
DEAD("Мертв"),
ESCAPED("Сбежал");
private final String displayName;
PlayerState(String displayName) {
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
}

View file

@ -0,0 +1,25 @@
package dev.loki.player;
import java.util.UUID;
public class Survivor extends BasePlayer {
private int hooksTaken;
public Survivor(UUID uuid) {
super(uuid);
this.hooksTaken = 0;
}
@Override
public boolean isKiller() {
return false;
}
public int getHooksTaken() {
return hooksTaken;
}
public void incrementHooks() {
hooksTaken++;
}
}