From 8022d8e9115b65bc822d564238752c76df64a48e Mon Sep 17 00:00:00 2001 From: wizjany Date: Thu, 6 Jun 2019 13:22:18 -0400 Subject: [PATCH] Use ItemInteract for item right clicks in Sponge. They don't fire for InteractBlock. # Conflicts: # worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorldEdit.java --- .../worldedit/sponge/SpongeWorldEdit.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorldEdit.java b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorldEdit.java index f3133fb13..672eed9fe 100644 --- a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorldEdit.java +++ b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorldEdit.java @@ -51,6 +51,7 @@ import org.spongepowered.api.event.game.state.GamePostInitializationEvent; import org.spongepowered.api.event.game.state.GamePreInitializationEvent; import org.spongepowered.api.event.game.state.GameStartedServerEvent; import org.spongepowered.api.event.game.state.GameStoppingServerEvent; +import org.spongepowered.api.event.item.inventory.InteractItemEvent; import org.spongepowered.api.item.ItemType; import org.spongepowered.api.item.inventory.ItemStack; import org.spongepowered.api.plugin.Plugin; @@ -204,6 +205,22 @@ public class SpongeWorldEdit { return this.spongeAdapter; } + @Listener + public void onPlayerItemInteract(InteractItemEvent event, @Root Player spongePlayer) { + if (platform == null) { + return; + } + + if (!platform.isHookingEvents()) return; // We have to be told to catch these events + + WorldEdit we = WorldEdit.getInstance(); + + SpongePlayer player = wrapPlayer(spongePlayer); + if (we.handleRightClick(player)) { + event.setCancelled(true); + } + } + @Listener public void onPlayerInteract(InteractBlockEvent event, @Root Player spongePlayer) { if (platform == null) { @@ -244,26 +261,20 @@ public class SpongeWorldEdit { } } } else if (event instanceof InteractBlockEvent.Secondary) { - if (interactedType != BlockTypes.AIR) { - if (!optLoc.isPresent()) { - return; - } + if (!optLoc.isPresent()) { + return; + } - Location loc = optLoc.get(); - com.sk89q.worldedit.util.Location pos = new com.sk89q.worldedit.util.Location( - world, loc.getX(), loc.getY(), loc.getZ()); + Location loc = optLoc.get(); + com.sk89q.worldedit.util.Location pos = new com.sk89q.worldedit.util.Location( + world, loc.getX(), loc.getY(), loc.getZ()); - if (we.handleBlockRightClick(player, pos)) { - event.setCancelled(true); - } + if (we.handleBlockRightClick(player, pos)) { + event.setCancelled(true); + } - if (we.handleRightClick(player)) { - event.setCancelled(true); - } - } else { - if (we.handleRightClick(player)) { - event.setCancelled(true); - } + if (we.handleRightClick(player)) { + event.setCancelled(true); } } }