From a36ddf5a73a96a1386b68eb9a1dba489d009968a Mon Sep 17 00:00:00 2001 From: Nassim Date: Thu, 2 Apr 2020 10:43:49 +0200 Subject: [PATCH] Improved/Fixed experience pickup flag on Paper servers (#1256) * Fixed experience pickup flag * Added since and author javadoc tags Co-authored-by: Florian CUNY --- pom.xml | 9 ++++++++ .../PaperExperiencePickupListener.java | 21 +++++++++++++++++++ .../world/bentobox/bentobox/lists/Flags.java | 7 +++++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/world/bentobox/bentobox/listeners/flags/protection/PaperExperiencePickupListener.java diff --git a/pom.xml b/pom.xml index b03d147c8..4d0697a25 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,8 @@ 3.8.0 1.15.2-R0.1-SNAPSHOT + + 1.15.2-R0.1-SNAPSHOT 1.7 1.7 2.10.5 @@ -190,6 +192,13 @@ ${spigot.version} provided + + + com.destroystokyo.paper + paper-api + ${paper.version} + provided + org.bstats diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/PaperExperiencePickupListener.java b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/PaperExperiencePickupListener.java new file mode 100644 index 000000000..6cc7328ca --- /dev/null +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/PaperExperiencePickupListener.java @@ -0,0 +1,21 @@ +package world.bentobox.bentobox.listeners.flags.protection; + +import com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import world.bentobox.bentobox.lists.Flags; + +/** + * Handles the {@link Flags#EXPERIENCE_PICKUP} flag with a Paper specific pickup event. + * @since 1.13.0 + * @author KennyTV + */ +public class PaperExperiencePickupListener extends ExperiencePickupListener { + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onExperiencePickup(PlayerPickupExperienceEvent e) { + if (!checkIsland(e, e.getPlayer(), e.getExperienceOrb().getLocation(), Flags.EXPERIENCE_PICKUP)) { + e.setCancelled(true); + } + } +} diff --git a/src/main/java/world/bentobox/bentobox/lists/Flags.java b/src/main/java/world/bentobox/bentobox/lists/Flags.java index fd42bced0..b24c8081a 100644 --- a/src/main/java/world/bentobox/bentobox/lists/Flags.java +++ b/src/main/java/world/bentobox/bentobox/lists/Flags.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -29,6 +30,7 @@ import world.bentobox.bentobox.listeners.flags.protection.ItemDropPickUpListener import world.bentobox.bentobox.listeners.flags.protection.LeashListener; import world.bentobox.bentobox.listeners.flags.protection.LecternListener; import world.bentobox.bentobox.listeners.flags.protection.LockAndBanListener; +import world.bentobox.bentobox.listeners.flags.protection.PaperExperiencePickupListener; import world.bentobox.bentobox.listeners.flags.protection.PhysicalInteractionListener; import world.bentobox.bentobox.listeners.flags.protection.PlaceBlocksListener; import world.bentobox.bentobox.listeners.flags.protection.PortalListener; @@ -248,7 +250,8 @@ public final class Flags { public static final Flag ITEM_PICKUP = new Flag.Builder("ITEM_PICKUP", Material.SUGAR_CANE).mode(Flag.Mode.BASIC).build(); // Experience - public static final Flag EXPERIENCE_PICKUP = new Flag.Builder("EXPERIENCE_PICKUP", Material.EXPERIENCE_BOTTLE).listener(new ExperiencePickupListener()).mode(Flag.Mode.ADVANCED).build(); + public static final Flag EXPERIENCE_PICKUP = new Flag.Builder("EXPERIENCE_PICKUP", Material.EXPERIENCE_BOTTLE) + .listener(PaperLib.isPaper() ? new PaperExperiencePickupListener() : new ExperiencePickupListener()).mode(Flag.Mode.ADVANCED).build(); // Command ranks public static final Flag COMMAND_RANKS = new Flag.Builder("COMMAND_RANKS", Material.PLAYER_HEAD) @@ -355,7 +358,7 @@ public final class Flags { public static final Flag GEO_LIMIT_MOBS = new Flag.Builder("GEO_LIMIT_MOBS", Material.CHAINMAIL_CHESTPLATE).type(Type.WORLD_SETTING) .listener(new GeoLimitMobsListener()).clickHandler(new GeoLimitClickListener()).usePanel(true).build(); - + /** * @since 1.12.0 */