refactor: generator minigame system (gui + text), fix color codes, holograms, messages, & config
This commit is contained in:
parent
957ab4a5a2
commit
7c7562a8d4
48 changed files with 1628 additions and 733 deletions
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue