From 2646b965ac338bc91e920bc7e558963410a45464 Mon Sep 17 00:00:00 2001 From: Mathieu Strypsteen Date: Sun, 22 Sep 2024 15:28:49 +0200 Subject: [PATCH] Add EndEvent --- .../gent/zeus/mc13dtl/events/EventRunner.java | 3 +- .../zeus/mc13dtl/events/catalog/EndEvent.java | 76 +++++++++++++++++++ .../mc13dtl/gamestate/GameStateHandler.java | 2 + .../zeus/mc13dtl/gamestate/GameStateUtil.java | 1 - 4 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/main/java/gent/zeus/mc13dtl/events/catalog/EndEvent.java diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index ef97157..11c05ad 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, 100, 1000, 500, 10000); + public static List startTimes = List.of(5000, 13000, 1000, 13000, 100, 1000, 500, 10000, 100); private long day; @@ -48,6 +48,7 @@ public class EventRunner implements Runnable { case 5 -> new KillPlayerEvent(team, difficulty, getDayScore()); case 6 -> new StructureEvent(team, difficulty, getDayScore()); case 7 -> new KillSurvivingTeamEvent(team, difficulty, getDayScore()); + case 8 -> new EndEvent(team, difficulty, getDayScore()); // TODO: Move to last day default -> throw new IllegalStateException("Unexpected day: " + (int) day); }; event.start(); diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/EndEvent.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/EndEvent.java new file mode 100644 index 0000000..ef4dbf9 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/EndEvent.java @@ -0,0 +1,76 @@ +package gent.zeus.mc13dtl.events.catalog; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scoreboard.Team; + +import com.destroystokyo.paper.event.player.PlayerPostRespawnEvent; + +import gent.zeus.mc13dtl.MC13DTL; +import gent.zeus.mc13dtl.events.Difficulty; +import gent.zeus.mc13dtl.events.Event; + +public class EndEvent extends Event { + private PotionEffectType[] effects; + + public EndEvent(Team team, Difficulty difficulty, int scoreOnSuccess) { + super(team, difficulty, scoreOnSuccess); + effects = switch (difficulty) { + case BABY -> new PotionEffectType[] { PotionEffectType.REGENERATION, PotionEffectType.JUMP_BOOST, PotionEffectType.STRENGTH }; + case EASY -> new PotionEffectType[] { PotionEffectType.JUMP_BOOST, PotionEffectType.REGENERATION }; + case MEDIUM -> new PotionEffectType[] {}; + case HARD -> new PotionEffectType[] { PotionEffectType.SLOWNESS }; + case SWEAT -> new PotionEffectType[] { PotionEffectType.HUNGER }; + case IMPOSSIBLE -> new PotionEffectType[] { PotionEffectType.HUNGER, PotionEffectType.WEAKNESS }; + }; + } + + @Override + public void start() { + World end = Bukkit.getWorld("world_the_end"); + for (Player i : MC13DTL.board.getPlayers(team)) { + i.teleport(end.getSpawnLocation()); + for (PotionEffectType j : effects) { + i.addPotionEffect(new PotionEffect(j, -1, 1)); + } + } + super.start(); + } + + @EventHandler + public void onPlayerPostRespawn(PlayerPostRespawnEvent event) { + if (!MC13DTL.board.getPlayers(team).contains(event.getPlayer())) { + return; + } + World end = Bukkit.getWorld("world_the_end"); + Player player = event.getPlayer(); + player.teleport(end.getSpawnLocation()); + for (PotionEffectType j : effects) { + event.getPlayer().addPotionEffect(new PotionEffect(j, -1, 1)); + } + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent event) { + if (event.getEntityType() == EntityType.ENDER_DRAGON) { + eventSuccess(); + } + } + + @Override + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + } + + @Override + protected String getMessage() { + return "Can you free the end in a day?"; + } +} diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateHandler.java b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateHandler.java index 38764d4..78630e0 100644 --- a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateHandler.java +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateHandler.java @@ -1,5 +1,6 @@ package gent.zeus.mc13dtl.gamestate; +import org.bukkit.GameRule; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -22,6 +23,7 @@ public class GameStateHandler implements Listener { @EventHandler public void onWorldLoad(WorldLoadEvent event) { World world = event.getWorld(); + world.setGameRule(GameRule.KEEP_INVENTORY, true); if (!world.getName().equals("world")) { return; } diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java index 1fc30a0..4312938 100644 --- a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java @@ -40,7 +40,6 @@ public class GameStateUtil { gameState = GameState.PAUSED; break; } - world.setGameRule(GameRule.KEEP_INVENTORY, true); if (gameState == GameState.LOBBY) { world.setDifficulty(Difficulty.PEACEFUL); world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);