From 92efd5976083c9b0d7fb36e26dd8500b93a8d826 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 5 Mar 2021 15:13:14 -0800 Subject: [PATCH] Better compatibility with other fishing plugins Fixes #4428 --- Changelog.txt | 3 ++ .../McMMOReplaceVanillaTreasureEvent.java | 41 +++++++++++++++++++ .../nossr50/listeners/PlayerListener.java | 13 +++++- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/events/McMMOReplaceVanillaTreasureEvent.java diff --git a/Changelog.txt b/Changelog.txt index 121562136..566a3e035 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -3,10 +3,13 @@ Version 2.1.177 Fixed a bug where mcMMO would fail to update a players name when it detected a name change mcMMO will treat vanished players as if they are offline when using the inspect command on them now (see notes) mcMMO now listens to PlayerFishEvent at HIGH event priority instead of HIGHEST + Changed how vanilla treasures are overridden (AIR instead of SALMON) + (API) Added McMMOReplaceVanillaTreasureEvent -- see notes NOTES: A few changes were made to the inspect command, it used to reject you when used on vanished players, now it will be processed as if they are offline. Additionally if you do inspect a vanished player, it will not use their display name (consistent with offline players) as that would give them away for being online + McMMOReplaceVanillaTreasureEvent is an event which is fired when mcMMO replaces a vanilla treasure with a Salmon if the server config file is set to override vanilla treasures, this causes some issues for other fishing plugins so this event helps those plugins be more compatible Version 2.1.176 Another fix for Double Smelt bringing item stack size to illegal values diff --git a/src/main/java/com/gmail/nossr50/events/McMMOReplaceVanillaTreasureEvent.java b/src/main/java/com/gmail/nossr50/events/McMMOReplaceVanillaTreasureEvent.java new file mode 100644 index 000000000..6553bf1c1 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/events/McMMOReplaceVanillaTreasureEvent.java @@ -0,0 +1,41 @@ +package com.gmail.nossr50.events; + +import org.bukkit.entity.Item; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +public class McMMOReplaceVanillaTreasureEvent extends Event { + private @NotNull ItemStack replacementItemStack; + private final @NotNull Item originalItem; + + public McMMOReplaceVanillaTreasureEvent(@NotNull Item originalItem, @NotNull ItemStack replacementItemStack) { + this.originalItem = originalItem; + this.replacementItemStack = replacementItemStack; + } + + /** Rest of file is required boilerplate for custom events **/ + private static final @NotNull HandlerList handlers = new HandlerList(); + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static @NotNull HandlerList getHandlerList() { + return handlers; + } + + public @NotNull ItemStack getReplacementItemStack() { + return replacementItemStack; + } + + public void setReplacementItemStack(@NotNull ItemStack replacementItemStack) { + this.replacementItemStack = replacementItemStack; + } + + public @NotNull Item getOriginalItem() { + return originalItem; + } +} diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 340c8cac0..707658235 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -8,6 +8,7 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType; +import com.gmail.nossr50.events.McMMOReplaceVanillaTreasureEvent; import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; @@ -291,12 +292,20 @@ public class PlayerListener implements Listener { if(event.getCaught() != null) { Item fishingCatch = (Item) event.getCaught(); - if (Config.getInstance(). getFishingOverrideTreasures() && + if (Config.getInstance().getFishingOverrideTreasures() && fishingCatch.getItemStack().getType() != Material.SALMON && fishingCatch.getItemStack().getType() != Material.COD && fishingCatch.getItemStack().getType() != Material.TROPICAL_FISH && fishingCatch.getItemStack().getType() != Material.PUFFERFISH) { - fishingCatch.setItemStack(new ItemStack(Material.SALMON, 1)); + + ItemStack replacementCatch = new ItemStack(Material.AIR); + + McMMOReplaceVanillaTreasureEvent replaceVanillaTreasureEvent = new McMMOReplaceVanillaTreasureEvent(fishingCatch, replacementCatch); + Bukkit.getPluginManager().callEvent(replaceVanillaTreasureEvent); + + //Replace + replacementCatch = replaceVanillaTreasureEvent.getReplacementItemStack(); + fishingCatch.setItemStack(replacementCatch); } if (Permissions.vanillaXpBoost(player, PrimarySkillType.FISHING)) {