From 7f9c8d217ed3c795156c7cd5a481078a907d42e3 Mon Sep 17 00:00:00 2001 From: Sczptor Date: Sat, 3 Feb 2024 12:27:50 +0000 Subject: [PATCH] Implemented an event listener that reapplies the effect if the player is orbited and tries to remove it. --- .../dev/plex/extras/command/OrbitCommand.java | 12 +++++++ .../extras/listener/OrbitEffectListener.java | 31 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/dev/plex/extras/listener/OrbitEffectListener.java diff --git a/src/main/java/dev/plex/extras/command/OrbitCommand.java b/src/main/java/dev/plex/extras/command/OrbitCommand.java index 22f4fd2..83e9405 100644 --- a/src/main/java/dev/plex/extras/command/OrbitCommand.java +++ b/src/main/java/dev/plex/extras/command/OrbitCommand.java @@ -13,12 +13,18 @@ import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.UUID; @CommandParameters(name = "orbit", description = "Accelerates the player at a super fast rate", usage = "/ [< | stop>]") @CommandPermissions(permission = "plex.tfmextras.orbit") public class OrbitCommand extends PlexCommand { + + private static final Map isOrbitedMap = new HashMap<>(); + @Override protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, String[] args) { @@ -63,9 +69,15 @@ public class OrbitCommand extends PlexCommand private void startOrbiting(Player player, int strength) { player.setGameMode(org.bukkit.GameMode.SURVIVAL); player.addPotionEffect(new PotionEffect(PotionEffectType.LEVITATION, Integer.MAX_VALUE, strength, false, false)); + isOrbitedMap.put(player.getUniqueId(), true); } private void stopOrbiting(Player player) { player.removePotionEffect(PotionEffectType.LEVITATION); + isOrbitedMap.remove(player.getUniqueId()); + } + + public static boolean isPlayerOrbited(UUID playerId) { + return isOrbitedMap.getOrDefault(playerId, false); } } diff --git a/src/main/java/dev/plex/extras/listener/OrbitEffectListener.java b/src/main/java/dev/plex/extras/listener/OrbitEffectListener.java new file mode 100644 index 0000000..fbb1e8d --- /dev/null +++ b/src/main/java/dev/plex/extras/listener/OrbitEffectListener.java @@ -0,0 +1,31 @@ +package dev.plex.extras.listener; + +import dev.plex.Plex; +import dev.plex.extras.command.OrbitCommand; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import dev.plex.listener.PlexListener; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class OrbitEffectListener extends PlexListener +{ + @EventHandler(priority = EventPriority.LOWEST) + public void onPotionEffectRemove(EntityPotionEffectEvent event) + { + if (event.getEntity() instanceof Player player) + { + if ((event.getAction() == EntityPotionEffectEvent.Action.CLEARED || event.getAction() == EntityPotionEffectEvent.Action.REMOVED) + && event.getModifiedType() == PotionEffectType.LEVITATION) { + if (OrbitCommand.isPlayerOrbited(player.getUniqueId())) + { + Bukkit.getScheduler().runTaskLater(Plex.get(), () -> + player.addPotionEffect(new PotionEffect(PotionEffectType.LEVITATION, Integer.MAX_VALUE, 100, false, false)), 2); + } + } + } + } +} \ No newline at end of file