refactor: generator minigame system (gui + text), fix color codes, holograms, messages, & config

This commit is contained in:
loki5512344 2026-06-14 16:04:25 +02:00
parent 957ab4a5a2
commit 7c7562a8d4
48 changed files with 1628 additions and 733 deletions

View file

@ -59,7 +59,8 @@ public class EndgamePhase implements Phase {
// показываем результаты сразу, без геймплея эндгейма
int aliveCount = 0;
for (BasePlayer bp : session.getPlayers().values()) {
if (!bp.isKiller() && bp.getState() != PlayerState.DEAD && bp.getState() != PlayerState.ESCAPED) {
if (!bp.isKiller() && bp.getState() != PlayerState.DEAD && bp.getState() != PlayerState.ESCAPED
&& bp.getState() != PlayerState.DOWNED && bp.getState() != PlayerState.HOOKED) {
aliveCount++;
}
}
@ -122,20 +123,12 @@ public class EndgamePhase implements Phase {
hatch.reset();
}
// Для killer_win: результаты уже показаны и телепорт выполнен в enter(),
// здесь просто останавливаем сессию
if (killerWin) {
session.stop();
return;
}
// Нормальный эндгейм: показываем результаты и телепортируем всех в лобби
announceEndgameEnd(session);
teleportAllToLobby(session);
// exit() НЕ вызывает session.stop() — это делает transitionToNextPhase()
// Телепорт и результаты уже обработаны в enter() или будут в teleportAllToLobby
}
/**
* Телепортирует всех игроков в лобби и останавливает сессию.
* Телепортирует всех игроков в лобби, сбрасывает атрибуты и останавливает сессию.
*/
private void teleportAllToLobby(GameSession session) {
List<BasePlayer> playersToTeleport = new ArrayList<>(session.getPlayers().values());
@ -146,12 +139,7 @@ public class EndgamePhase implements Phase {
for (BasePlayer bp : playersToTeleport) {
Player p = bp.getPlayer();
if (p != null && p.isOnline()) {
p.setGameMode(org.bukkit.GameMode.ADVENTURE);
p.getInventory().clear();
try {
var attr = p.getAttribute(org.bukkit.attribute.Attribute.SCALE);
if (attr != null) attr.setBaseValue(1.0);
} catch (Exception ignored) {}
resetPlayerAttributes(p);
session.getPlugin().getLobbyManager().teleportToLobby(p);
}
}
@ -160,6 +148,34 @@ public class EndgamePhase implements Phase {
}.runTaskLater(session.getPlugin(), 60L);
}
/**
* Сбрасывает все атрибуты игрока на значения по умолчанию.
*/
private void resetPlayerAttributes(Player p) {
p.setGameMode(org.bukkit.GameMode.ADVENTURE);
p.getInventory().clear();
p.setWalkSpeed(0.2f);
p.setFlySpeed(0.1f);
p.setSwimming(false);
p.setSprinting(false);
p.setSneaking(false);
p.setHealth(20.0);
p.setFoodLevel(20);
p.setSaturation(5);
try {
var scale = p.getAttribute(org.bukkit.attribute.Attribute.SCALE);
if (scale != null) scale.setBaseValue(1.0);
} catch (Exception ignored) {}
try {
var maxHp = p.getAttribute(org.bukkit.attribute.Attribute.MAX_HEALTH);
if (maxHp != null) maxHp.setBaseValue(20.0);
} catch (Exception ignored) {}
try {
var moveSpeed = p.getAttribute(org.bukkit.attribute.Attribute.MOVEMENT_SPEED);
if (moveSpeed != null) moveSpeed.setBaseValue(0.1);
} catch (Exception ignored) {}
}
@Override
public boolean isComplete() {
return complete;
@ -233,7 +249,8 @@ public class EndgamePhase implements Phase {
for (BasePlayer player : session.getPlayers().values()) {
if (player.isKiller()) continue;
PlayerState st = player.getState();
if (st != PlayerState.DEAD && st != PlayerState.ESCAPED) {
if (st != PlayerState.DEAD && st != PlayerState.ESCAPED
&& st != PlayerState.DOWNED && st != PlayerState.HOOKED) {
survivorsAlive++;
}
}