From 7b2d2547c8aa69d5104f46cfc5771190da20393b Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Sun, 11 Aug 2019 21:31:15 -0700 Subject: [PATCH] add a bugworkaround for clicks event doublefiring --- .../main/java/com/denizenscript/denizen/Denizen.java | 2 ++ .../player/PlayerItemTakesDamageScriptEvent.java | 2 +- .../player/PlayerRightClicksEntityScriptEvent.java | 12 +++++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/Denizen.java b/plugin/src/main/java/com/denizenscript/denizen/Denizen.java index bb02129d00..ccc1e437d6 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/Denizen.java +++ b/plugin/src/main/java/com/denizenscript/denizen/Denizen.java @@ -6,6 +6,7 @@ import com.denizenscript.denizen.events.core.CuboidEnterExitSmartEvent; import com.denizenscript.denizen.events.core.FlagSmartEvent; import com.denizenscript.denizen.events.core.NPCNavigationSmartEvent; +import com.denizenscript.denizen.events.player.PlayerRightClicksEntityScriptEvent; import com.denizenscript.denizen.flags.FlagManager; import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.objects.NPCTag; @@ -422,6 +423,7 @@ public void run() { getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { @Override public void run() { + PlayerRightClicksEntityScriptEvent.instance.clickedThisFrame.clear(); DenizenCore.tick(50); // Sadly, minecraft has no delta timing, so a tick is always 50ms. } }, 1, 1); diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerItemTakesDamageScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerItemTakesDamageScriptEvent.java index 7561b8125b..a951386d50 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerItemTakesDamageScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerItemTakesDamageScriptEvent.java @@ -40,7 +40,7 @@ public class PlayerItemTakesDamageScriptEvent extends BukkitScriptEvent implemen // // --> - PlayerItemTakesDamageScriptEvent instance; + public static PlayerItemTakesDamageScriptEvent instance; PlayerItemDamageEvent event; ElementTag damage; ItemTag item; diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerRightClicksEntityScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerRightClicksEntityScriptEvent.java index cffdaaefa2..0c647ecc48 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerRightClicksEntityScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerRightClicksEntityScriptEvent.java @@ -15,6 +15,9 @@ import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.EquipmentSlot; +import java.util.HashSet; +import java.util.UUID; + public class PlayerRightClicksEntityScriptEvent extends BukkitScriptEvent implements Listener { @@ -40,7 +43,7 @@ public class PlayerRightClicksEntityScriptEvent extends BukkitScriptEvent implem // // --> - PlayerRightClicksEntityScriptEvent instance; + public static PlayerRightClicksEntityScriptEvent instance; PlayerInteractEntityEvent event; EntityTag entity; ItemTag item; @@ -120,10 +123,17 @@ public void playerRightClicksEntity(PlayerInteractEntityEvent event) { playerRightClicksEntityHandler(event); } + public HashSet clickedThisFrame = new HashSet<>(); + public void playerRightClicksEntityHandler(PlayerInteractEntityEvent event) { if (event.getHand() == EquipmentSlot.OFF_HAND) { return; } + // Event tends to double-fire, use cooldown to prevent that + if (clickedThisFrame.contains(event.getPlayer().getUniqueId())) { + return; + } + clickedThisFrame.add(event.getPlayer().getUniqueId()); entity = new EntityTag(event.getRightClicked()); item = new ItemTag(event.getPlayer().getItemInHand()); location = new LocationTag(event.getRightClicked().getLocation());