From 7dd08fdffa835fbd0e5f654bfe2e1603472c74be Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Mon, 18 Sep 2023 15:46:14 +0800 Subject: [PATCH] fix mcmmo --- .../compatibility/IntegrationManagerImpl.java | 2 +- ...ldableItem.java => McMMOTreasureImpl.java} | 28 +++++++++++++------ .../compatibility/quest/BetonQuestHook.java | 2 +- .../mechanic/fishing/FishingManagerImpl.java | 2 +- plugin/src/main/resources/config.yml | 4 +-- plugin/src/main/resources/plugin.yml | 1 - 6 files changed, 24 insertions(+), 15 deletions(-) rename plugin/src/main/java/net/momirealms/customfishing/compatibility/item/{McMMOBuildableItem.java => McMMOTreasureImpl.java} (76%) diff --git a/plugin/src/main/java/net/momirealms/customfishing/compatibility/IntegrationManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/compatibility/IntegrationManagerImpl.java index 315c7cd4..4d353b77 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/compatibility/IntegrationManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/compatibility/IntegrationManagerImpl.java @@ -104,7 +104,7 @@ public class IntegrationManagerImpl implements IntegrationManager { } if (plugin.isHookedPluginEnabled("mcMMO")) { try { - plugin.getItemManager().registerCustomItem("item", "mcmmo", new McMMOBuildableItem()); + plugin.getItemManager().registerItemLibrary(new McMMOTreasureImpl()); } catch (ClassNotFoundException | NoSuchMethodException e) { LogUtils.warn("Failed to initialize mcMMO Treasure"); } diff --git a/plugin/src/main/java/net/momirealms/customfishing/compatibility/item/McMMOBuildableItem.java b/plugin/src/main/java/net/momirealms/customfishing/compatibility/item/McMMOTreasureImpl.java similarity index 76% rename from plugin/src/main/java/net/momirealms/customfishing/compatibility/item/McMMOBuildableItem.java rename to plugin/src/main/java/net/momirealms/customfishing/compatibility/item/McMMOTreasureImpl.java index c00427b6..6ca323b7 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/compatibility/item/McMMOBuildableItem.java +++ b/plugin/src/main/java/net/momirealms/customfishing/compatibility/item/McMMOTreasureImpl.java @@ -17,36 +17,44 @@ package net.momirealms.customfishing.compatibility.item; -import net.momirealms.customfishing.api.mechanic.item.BuildableItem; +import net.momirealms.customfishing.api.mechanic.item.ItemLibrary; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Map; -public class McMMOBuildableItem implements BuildableItem { +public class McMMOTreasureImpl implements ItemLibrary { private final Method getMcMMOPlayerMethod; private final Method getFishingManagerMethod; private final Method getFishingTreasureMethod; private final Method getItemStackMethod; - public McMMOBuildableItem() throws ClassNotFoundException, NoSuchMethodException { + public McMMOTreasureImpl() throws ClassNotFoundException, NoSuchMethodException { Class userClass = Class.forName("com.gmail.nossr50.util.player.UserManager"); getMcMMOPlayerMethod = userClass.getMethod("getPlayer", Player.class); Class mcMMOPlayerClass = Class.forName("com.gmail.nossr50.datatypes.player.McMMOPlayer"); getFishingManagerMethod = mcMMOPlayerClass.getMethod("getFishingManager"); Class fishingManagerClass = Class.forName("com.gmail.nossr50.skills.fishing.FishingManager"); getFishingTreasureMethod = fishingManagerClass.getDeclaredMethod("getFishingTreasure"); + getFishingTreasureMethod.setAccessible(true); Class treasureClass = Class.forName("com.gmail.nossr50.datatypes.treasure.Treasure"); getItemStackMethod = treasureClass.getMethod("getDrop"); } @Override - public ItemStack build(Player player, Map placeholders) { + public String identification() { + return "mcMMO"; + } + + @Override + public ItemStack buildItem(Player player, String id) { + if (!id.equals("treasure")) return new ItemStack(Material.AIR); ItemStack itemStack = null; - while (itemStack == null) { + int times = 0; + while (itemStack == null && times < 5) { try { Object mcMMOPlayer = getMcMMOPlayerMethod.invoke(null, player); Object fishingManager = getFishingManagerMethod.invoke(mcMMOPlayer); @@ -56,13 +64,15 @@ public class McMMOBuildableItem implements BuildableItem { } } catch (IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); + } finally { + times++; } } - return itemStack; + return itemStack == null ? new ItemStack(Material.COD) : itemStack; } @Override - public boolean persist() { - return true; + public String getItemID(ItemStack itemStack) { + return null; } } diff --git a/plugin/src/main/java/net/momirealms/customfishing/compatibility/quest/BetonQuestHook.java b/plugin/src/main/java/net/momirealms/customfishing/compatibility/quest/BetonQuestHook.java index 54b15602..15fc7859 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/compatibility/quest/BetonQuestHook.java +++ b/plugin/src/main/java/net/momirealms/customfishing/compatibility/quest/BetonQuestHook.java @@ -42,7 +42,7 @@ import java.util.HashSet; public class BetonQuestHook { public static void register() { - BetonQuest.getInstance().registerObjectives("customfishing_id", IDObjective.class); + BetonQuest.getInstance().registerObjectives("customfishing_loot", IDObjective.class); BetonQuest.getInstance().registerObjectives("customfishing_group", GroupObjective.class); } diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java index 143fa0de..9458a554 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java @@ -554,7 +554,7 @@ public class FishingManagerImpl implements Listener, FishingManager { if (loot.getID().equals("vanilla")) { ItemStack itemStack = vanillaLootMap.remove(player.getUniqueId()); if (itemStack != null) { - fishingPreparation.insertArg("{loot}", ""); + fishingPreparation.insertArg("{nick}", ""); for (int i = 0; i < amount; i++) { plugin.getItemManager().dropItem(hook.getLocation(), player.getLocation(), itemStack.clone()); doSuccessActions(loot, effect, fishingPreparation, player); diff --git a/plugin/src/main/resources/config.yml b/plugin/src/main/resources/config.yml index da00465d..3560deeb 100644 --- a/plugin/src/main/resources/config.yml +++ b/plugin/src/main/resources/config.yml @@ -38,9 +38,9 @@ mechanics: - 'GG!' - 'Good Job!' subtitles: - - 'You caught a {loot}' + - 'You caught a {nick}' - 'Whoa! Nice catch!' - - 'Oh {loot} here we go!' + - 'Oh {nick} here we go!' - 'Let''s see what it is!' fade-in: 20 stay: 30 diff --git a/plugin/src/main/resources/plugin.yml b/plugin/src/main/resources/plugin.yml index 032f4bbc..13968d76 100644 --- a/plugin/src/main/resources/plugin.yml +++ b/plugin/src/main/resources/plugin.yml @@ -27,7 +27,6 @@ softdepend: - BattlePass - ClueScrolls - BetonQuest - - Quests - AdvancedEnchantments - EcoEnchants