diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index 1e2819d..b3f34c9 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java +++ b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java @@ -1,9 +1,6 @@ package gent.zeus.mc13dtl.events; -import gent.zeus.mc13dtl.events.catalog.ClimbEvent; -import gent.zeus.mc13dtl.events.catalog.CraftEvent; -import gent.zeus.mc13dtl.events.catalog.KillMobs1Event; -import gent.zeus.mc13dtl.events.catalog.SuicideEvent; +import gent.zeus.mc13dtl.events.catalog.*; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.World; @@ -18,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); + public static List startTimes = List.of(5000, 13000, 1000, 13000, 1000); private long day; @@ -47,6 +44,7 @@ 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); 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 new file mode 100644 index 0000000..a809ac1 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillPlayerEvent.java @@ -0,0 +1,50 @@ +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; + +import java.util.List; + +public class KillPlayerEvent extends Event { + + private Team huntingTeam; + + public KillPlayerEvent(Team team, Difficulty difficulty, int scoreOnSuccess, List teams) { + 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)))) { + huntingTeam = t; + } + } + } + + @Override + public void start() { + super.start(); + MC13DTL.board.sendMessageToTeam(huntingTeam, Component.text("Your team is being hunted by team " + team.getName()).color(NamedTextColor.BLUE)); + } + + @EventHandler + @Override + public void onPlayerDeath(PlayerDeathEvent event) { + if (MC13DTL.board.getPlayers(huntingTeam).contains(event.getPlayer()) && MC13DTL.board.getPlayers(team).contains(event.getDamageSource().getCausingEntity())) { + eventSuccess(); + } else if (MC13DTL.board.getPlayers(team).contains(event.getPlayer())) { + eventFailed(); + } + + } + + @Override + protected String getMessage() { + return "Your team has to kill another player in team " + huntingTeam.getName() + " before dawn"; + } +}