From 6f0c8a8ee266fb9f0bc5a546f4beae68c43cf6b3 Mon Sep 17 00:00:00 2001 From: Stefano Haagmans Date: Tue, 23 Jul 2019 22:22:44 +0200 Subject: [PATCH] Made a fix for: SD-3068 - Changed the vanish command so all mobs stop targeting the vanished player. - Added an listener to cancel target events on vanished players --- .gitignore | 5 +++- .gitlab-ci.yml | 2 +- .../UltimateModeration.java | 1 + .../command/commands/CommandVanish.java | 8 ++++++- .../listeners/MobTargetLister.java | 23 +++++++++++++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/songoda/ultimatemoderation/listeners/MobTargetLister.java diff --git a/.gitignore b/.gitignore index ddb80d3..4ca2828 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,7 @@ hs_err_pid* /build/ /bin/ /target/ -*.iml \ No newline at end of file +*.iml +src/\.DS_Store + +\.DS_Store diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa2f402..c0cb49a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "UltimateModeration" path: "/builds/$CI_PROJECT_PATH" - version: "1.1.7" + version: "1.1.8" build: stage: build diff --git a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java index 0a854a5..d1a9a11 100644 --- a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java +++ b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java @@ -100,6 +100,7 @@ public class UltimateModeration extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new InventoryListener(this), this); Bukkit.getPluginManager().registerEvents(new ChatListener(this), this); Bukkit.getPluginManager().registerEvents(new LoginListener(this), this); + Bukkit.getPluginManager().registerEvents(new MobTargetLister(), this); // Start tasks SlowModeTask.startTask(this); diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandVanish.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandVanish.java index aefcc7f..02d934f 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandVanish.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandVanish.java @@ -11,6 +11,7 @@ import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -51,10 +52,10 @@ public class CommandVanish extends AbstractCommand { } else { inVanish.add(uuid); player.setCanPickupItems(false); - if (instance.isServerVersionAtLeast(ServerVersion.V1_9)) player.setInvulnerable(true); player.sendMessage(Methods.formatText(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.vanish.toggledOn"))); + } if (Setting.VANISH_EFFECTS.getBoolean()) { player.getWorld().playSound(player.getLocation(), Sound.valueOf(Setting.VANISH_SOUND.getString()), 1L, 1L); @@ -84,6 +85,11 @@ public class CommandVanish extends AbstractCommand { else p.showPlayer(player); } + for (Entity e : player.getNearbyEntities(30, 30, 30)) { + if (e instanceof Monster) { + ((Monster) e).setTarget(null); + } + } } public static boolean isVanished(Player player) { diff --git a/src/main/java/com/songoda/ultimatemoderation/listeners/MobTargetLister.java b/src/main/java/com/songoda/ultimatemoderation/listeners/MobTargetLister.java new file mode 100644 index 0000000..02a48d4 --- /dev/null +++ b/src/main/java/com/songoda/ultimatemoderation/listeners/MobTargetLister.java @@ -0,0 +1,23 @@ +package com.songoda.ultimatemoderation.listeners; + +import com.songoda.ultimatemoderation.command.commands.CommandVanish; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityTargetLivingEntityEvent; + +public class MobTargetLister implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onMobTagetEvent(EntityTargetLivingEntityEvent e) { + if (!(e.getTarget() instanceof Player)) return; + if (!(e.getEntity() instanceof Monster)) return; + if (CommandVanish.isVanished(((Player) e.getTarget()).getPlayer())) { + e.setCancelled(true); + } + } + + +}