Connect game phases, implement gameplay, add lobby commands, remove perks

- Fix GameSession.determineNextPhase() to cycle through all 4 phases
- Implement GameplayPhase with generator tracking and win/lose conditions
- MapBuilder now uses the game world instead of the first world
- Add /dbd lobby (teleport to lobby) and /dbd setlobby (set lobby spawn)
- Remove all perk classes (IPerk, PerkRegistry, 7 perk implementations)
- Fix HexTotem to not reference removed HexRuinPerk
This commit is contained in:
loki5512344 2026-06-01 22:21:40 +02:00
parent 34e0aebd5d
commit d0ed8a5fe7
18 changed files with 132 additions and 808 deletions

View file

@ -41,6 +41,8 @@ public class DBDCommand implements TabExecutor {
case "create" -> handleCreate(sender);
case "stop" -> handleStop(sender);
case "reload" -> handleReload(sender);
case "lobby" -> handleLobby(sender);
case "setlobby" -> handleSetLobby(sender);
default -> {
sendUsage(sender);
yield true;
@ -116,6 +118,32 @@ public class DBDCommand implements TabExecutor {
return true;
}
private boolean handleLobby(CommandSender sender) {
if (!(sender instanceof Player player)) {
sender.sendMessage(Component.text("Только игроки!", NamedTextColor.RED));
return true;
}
plugin.getLobbyManager().teleportToLobby(player);
player.sendMessage(Component.text("[DBD] Вы телепортированы в лобби!", NamedTextColor.GREEN));
return true;
}
private boolean handleSetLobby(CommandSender sender) {
if (!sender.hasPermission("mdbd.admin")) {
sender.sendMessage(Component.text("Нет прав!", NamedTextColor.RED));
return true;
}
if (!(sender instanceof Player player)) {
sender.sendMessage(Component.text("Только игроки!", NamedTextColor.RED));
return true;
}
plugin.getConfigManager().getLocations().setLobby(player.getLocation());
plugin.getConfigManager().saveConfig("locations.yml",
plugin.getConfigManager().getLocations().getConfig());
player.sendMessage(Component.text("[DBD] Лобби установлено!", NamedTextColor.GREEN));
return true;
}
private boolean handleStop(CommandSender sender) {
if (!sender.hasPermission("mdbd.admin")) {
sender.sendMessage(Component.text("Нет прав!", NamedTextColor.RED));
@ -130,11 +158,14 @@ public class DBDCommand implements TabExecutor {
sender.sendMessage(Component.text("=== DBD Commands ===", NamedTextColor.GOLD));
sender.sendMessage(Component.text("/dbd join - присоединиться", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd leave - покинуть", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd lobby - телепорт в лобби", NamedTextColor.GRAY));
if (sender.hasPermission("mdbd.admin")) {
sender.sendMessage(Component.text("/dbd create - создать игру", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd forcestart - форс старт", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd stop - остановить", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd reload - перезагрузить конфиги", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd lobby - телепорт в лобби", NamedTextColor.GRAY));
sender.sendMessage(Component.text("/dbd setlobby - установить точку лобби", NamedTextColor.GRAY));
}
}
@ -144,7 +175,7 @@ public class DBDCommand implements TabExecutor {
if (args.length == 1) {
List<String> completions = new ArrayList<>(Arrays.asList("join", "leave"));
if (sender.hasPermission("mdbd.admin")) {
completions.addAll(Arrays.asList("create", "forcestart", "stop", "reload"));
completions.addAll(Arrays.asList("create", "forcestart", "stop", "reload", "setlobby"));
}
return completions.stream()
.filter(s -> s.startsWith(args[0].toLowerCase()))