diff --git a/src/main/java/gent/zeus/mc13dtl/events/Event.java b/src/main/java/gent/zeus/mc13dtl/events/Event.java index 555bf7f..bc20e3b 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/Event.java +++ b/src/main/java/gent/zeus/mc13dtl/events/Event.java @@ -22,9 +22,12 @@ public abstract class Event implements Listener, Runnable { this.team = team; this.difficulty = difficulty; this.scoreOnSuccess = scoreOnSuccess; + } + public void start() { MC13DTL.board.sendMessageToTeam(team, Component.text("Difficulty is " + this.difficulty.toString())); MC13DTL.board.sendMessageToTeam(team, Component.text(getMessage()).color(NamedTextColor.GRAY).decorate(TextDecoration.ITALIC)); + MC13DTL.instance.getServer().getPluginManager().registerEvents(this, MC13DTL.instance); BukkitScheduler scheduler = MC13DTL.instance.getServer().getScheduler(); taskId = scheduler.runTaskTimer(MC13DTL.instance, this, 0, 20).getTaskId(); diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index ca93ff0..7c0bd29 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java +++ b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java @@ -1,5 +1,6 @@ package gent.zeus.mc13dtl.events; +import gent.zeus.mc13dtl.events.catalog.KillMobs1Event; import gent.zeus.mc13dtl.events.catalog.SuicideEvent; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; @@ -16,7 +17,7 @@ import gent.zeus.mc13dtl.MC13DTL; public class EventRunner implements Runnable { static List currentEvents = new ArrayList<>(); - public static List startTimes = List.of(5000); + public static List startTimes = List.of(5000, 13000); private long day; @@ -40,9 +41,12 @@ public class EventRunner implements Runnable { for (int i = 0; i < teams.size() && i < difficulties.size(); i++) { Team team = teams.get(i); Difficulty difficulty = difficulties.get(i); - switch ((int) day) { + Event event = switch ((int) day) { case 0 -> new SuicideEvent(team, difficulty, getDayScore()); - } + case 1 -> new KillMobs1Event(team, difficulty, getDayScore()); + default -> throw new IllegalStateException("Unexpected day: " + (int) day); + }; + event.start(); } world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, day); } diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java new file mode 100644 index 0000000..1a33459 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java @@ -0,0 +1,53 @@ +package gent.zeus.mc13dtl.events.catalog; + +import com.mojang.datafixers.util.Pair; +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.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.scoreboard.Team; + +import java.util.Map; + +public class KillMobs1Event extends Event implements Listener { + + private int killsLeft; + private final EntityType monster; + + + + public KillMobs1Event(Team team, Difficulty difficulty, int scoreOnSuccess) { + super(team, difficulty, scoreOnSuccess); + Map> monsters = Map.of( + Difficulty.BABY, new Pair<>(EntityType.ZOMBIE, 1), + Difficulty.EASY, new Pair<>(EntityType.ZOMBIE, 3), + Difficulty.MEDIUM, new Pair<>(EntityType.ZOMBIE, 6), + Difficulty.HARD, new Pair<>(EntityType.SKELETON, 5), + Difficulty.IMPOSSIBLE, new Pair<>(EntityType.ENDERMAN, 4) + ); + monster = monsters.get(difficulty).getFirst(); + killsLeft = monsters.get(difficulty).getSecond(); + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent event) { + if (event.getEntity().getType() == monster && MC13DTL.board.getPlayers(team).contains(event.getDamageSource().getCausingEntity())) { + killsLeft--; + if (killsLeft == 0) { + eventSuccess(); + } else { + MC13DTL.board.sendMessageToTeam(team, Component.text(killsLeft + " left.").color(NamedTextColor.BLUE)); + } + } + } + + @Override + protected String getMessage() { + return "Your team has to kill " + killsLeft + " " + monster.toString(); + } +}