From eb9262991de36ab8e1074d4258e3b6ed119544fa Mon Sep 17 00:00:00 2001 From: Mathieu Strypsteen Date: Sat, 21 Sep 2024 18:00:28 +0200 Subject: [PATCH] Add StructureEvent --- .../gent/zeus/mc13dtl/events/EventRunner.java | 3 +- .../events/catalog/StructureEvent.java | 62 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/main/java/gent/zeus/mc13dtl/events/catalog/StructureEvent.java diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index b3f34c9..5538264 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); + public static List startTimes = List.of(5000, 13000, 1000, 13000, 1000, 500); private long day; @@ -45,6 +45,7 @@ public class EventRunner implements Runnable { case 2 -> new CraftEvent(team, difficulty, getDayScore()); case 3 -> new ClimbEvent(team, difficulty, getDayScore()); case 4 -> new KillPlayerEvent(team, difficulty, getDayScore(), teams); + case 5 -> new StructureEvent(team, difficulty, getDayScore()); default -> throw new IllegalStateException("Unexpected day: " + (int) day); }; event.start(); diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/StructureEvent.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/StructureEvent.java new file mode 100644 index 0000000..fac78ee --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/StructureEvent.java @@ -0,0 +1,62 @@ +package gent.zeus.mc13dtl.events.catalog; + +import gent.zeus.mc13dtl.MC13DTL; +import gent.zeus.mc13dtl.events.Difficulty; +import gent.zeus.mc13dtl.events.Event; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.generator.structure.Structure; +import org.bukkit.scoreboard.Team; +import org.bukkit.util.StructureSearchResult; + +public class StructureEvent extends Event { + + enum StructureType { + RUINED_PORTAL, VILLAGE, PYRAMID, SWAMP_HUT, FORTRESS, END_CITY + } + + private final StructureType structure; + + public StructureEvent(Team team, Difficulty difficulty, int scoreOnSuccess) { + super(team, difficulty, scoreOnSuccess); + structure = switch (difficulty) { + case BABY -> StructureType.RUINED_PORTAL; + case EASY -> StructureType.VILLAGE; + case MEDIUM -> StructureType.PYRAMID; + case HARD -> StructureType.SWAMP_HUT; + case SWEAT -> StructureType.FORTRESS; + case IMPOSSIBLE -> StructureType.END_CITY; + }; + } + + @Override + public void run() { + Structure[] structures = switch (structure) { + case RUINED_PORTAL -> new Structure[] { Structure.RUINED_PORTAL, Structure.RUINED_PORTAL_DESERT, Structure.RUINED_PORTAL_JUNGLE, Structure.RUINED_PORTAL_MOUNTAIN, Structure.RUINED_PORTAL_NETHER, + Structure.RUINED_PORTAL_OCEAN, Structure.RUINED_PORTAL_SWAMP }; + case END_CITY -> new Structure[] { Structure.END_CITY }; + case FORTRESS -> new Structure[] { Structure.FORTRESS }; + case PYRAMID -> new Structure[] { Structure.DESERT_PYRAMID, Structure.JUNGLE_PYRAMID }; + case SWAMP_HUT -> new Structure[] { Structure.SWAMP_HUT }; + case VILLAGE -> new Structure[] { Structure.VILLAGE_DESERT, Structure.VILLAGE_PLAINS, Structure.VILLAGE_SAVANNA, Structure.VILLAGE_SNOWY, Structure.VILLAGE_TAIGA }; + }; + + for (Player player : MC13DTL.board.getPlayers(team)) { + Location pos = player.getLocation(); + for (Structure struct : structures) { + StructureSearchResult res = player.getWorld().locateNearestStructure(pos, struct, 5, false); + if (res != null) { + if (res.getLocation().distance(pos) < 200) { + eventSuccess(); + } + } + } + } + } + + @Override + protected String getMessage() { + return "Find this structure before tomorrow: " + structure.toString(); + } +}