From 6ebb48f7ce41e0ce72e0b746a9f4071952949497 Mon Sep 17 00:00:00 2001 From: Xander Date: Sat, 21 Sep 2024 19:35:12 +0200 Subject: [PATCH] add kill best surviving team event # Conflicts: # src/main/java/gent/zeus/mc13dtl/events/EventRunner.java --- .../gent/zeus/mc13dtl/TeamScoreBoard.java | 2 +- .../gent/zeus/mc13dtl/events/EventRunner.java | 5 +- .../events/catalog/KillPlayerEvent.java | 13 ++--- .../catalog/KillSurvivingTeamEvent.java | 47 +++++++++++++++++++ 4 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 src/main/java/gent/zeus/mc13dtl/events/catalog/KillSurvivingTeamEvent.java diff --git a/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java b/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java index db1b46d..1010ea2 100644 --- a/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java +++ b/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java @@ -97,7 +97,7 @@ public class TeamScoreBoard { List players = new ArrayList<>(); for (String entry : team.getEntries()) { Player player = Bukkit.getPlayer(entry); - if (player != null) { + if (player != null && player.isOnline()) { players.add(player); } } diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index 5538264..f60ad64 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java +++ b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java @@ -15,7 +15,7 @@ import gent.zeus.mc13dtl.MC13DTL; public class EventRunner implements Runnable { static List currentEvents = new ArrayList<>(); - public static List startTimes = List.of(5000, 13000, 1000, 13000, 1000, 500); + public static List startTimes = List.of(5000, 13000, 1000, 13000, 1000, 500, 10000); private long day; @@ -44,8 +44,9 @@ public class EventRunner implements Runnable { case 1 -> new KillMobs1Event(team, difficulty, getDayScore()); case 2 -> new CraftEvent(team, difficulty, getDayScore()); case 3 -> new ClimbEvent(team, difficulty, getDayScore()); - case 4 -> new KillPlayerEvent(team, difficulty, getDayScore(), teams); + case 4 -> new KillPlayerEvent(team, difficulty, getDayScore()); case 5 -> new StructureEvent(team, difficulty, getDayScore()); + case 6 -> new KillSurvivingTeamEvent(team, difficulty, getDayScore()); default -> throw new IllegalStateException("Unexpected day: " + (int) day); }; event.start(); diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/KillPlayerEvent.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillPlayerEvent.java index a809ac1..a3c7741 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/catalog/KillPlayerEvent.java +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillPlayerEvent.java @@ -9,18 +9,19 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.scoreboard.Team; -import java.util.List; - public class KillPlayerEvent extends Event { private Team huntingTeam; - public KillPlayerEvent(Team team, Difficulty difficulty, int scoreOnSuccess, List teams) { + public KillPlayerEvent(Team team, Difficulty difficulty, int scoreOnSuccess) { super(team, difficulty, scoreOnSuccess); - for (Team t : teams) { - if (t != team && (huntingTeam == null || - Math.abs(MC13DTL.board.getScore(t) - MC13DTL.board.getScore(team)) < Math.abs(MC13DTL.board.getScore(huntingTeam) - MC13DTL.board.getScore(team)))) { + for (Team t : MC13DTL.board.getTeams()) { + if (!MC13DTL.board.getPlayers(t).isEmpty() + && t != team + && (huntingTeam == null || + Math.abs(MC13DTL.board.getScore(t) - MC13DTL.board.getScore(team)) < Math.abs(MC13DTL.board.getScore(huntingTeam) - MC13DTL.board.getScore(team)) + )) { huntingTeam = t; } } diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/KillSurvivingTeamEvent.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillSurvivingTeamEvent.java new file mode 100644 index 0000000..b9e0be9 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillSurvivingTeamEvent.java @@ -0,0 +1,47 @@ +package gent.zeus.mc13dtl.events.catalog; + +import gent.zeus.mc13dtl.MC13DTL; +import gent.zeus.mc13dtl.events.Difficulty; +import gent.zeus.mc13dtl.events.Event; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.scoreboard.Team; + +public class KillSurvivingTeamEvent extends Event { + + private Team huntingTeam; + + public KillSurvivingTeamEvent(Team team, Difficulty difficulty, int scoreOnSuccess) { + super(team, difficulty, scoreOnSuccess); + + for (Team t : MC13DTL.board.getTeams()) { + if (!MC13DTL.board.getPlayers(t).isEmpty() + && (huntingTeam == null || MC13DTL.board.getDaysAlive(t) > MC13DTL.board.getDaysAlive(huntingTeam) + )) { + huntingTeam = t; + } + } + } + + @EventHandler + @Override + public void onPlayerDeath(PlayerDeathEvent event) { + if (MC13DTL.board.getPlayers(team).contains(event.getPlayer())) { + eventFailed(); + } else if (MC13DTL.board.getPlayers(huntingTeam).contains(event.getPlayer())) { + eventSuccess(); + } + } + + @Override + protected String getMessage() { + if (team.getName().equals(huntingTeam.getName())) { + return "Your team is being hunted by everyone!!! RUN"; + } else { + return "A member of team " + huntingTeam.getName() + " has to die before dawn because this team has survived the longest (cross teaming is allowed)"; + } + + } +}