aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java/com/leonardobishop
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2024-06-11 18:48:05 +0200
committerKrakenied <46192742+Krakenied@users.noreply.github.com>2024-08-28 11:37:11 +0200
commit87244bdb1169267cc6171dca2de57c8f3b9fcdbf (patch)
tree880bc16020949dbdb30f293d2e9b134b007a2df8 /bukkit/src/main/java/com/leonardobishop
parenta82c96b60d6a78644d0b74ae4f494a5653d9484d (diff)
PyroFishingPro support improvements
Add dedicated PyroFishingPro item support Use dedicated PyroFishingPro player getter
Diffstat (limited to 'bukkit/src/main/java/com/leonardobishop')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/item/PyroFishingProQuestItem.java61
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java60
3 files changed, 115 insertions, 11 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
index 15513ff6..086569fb 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
@@ -7,6 +7,7 @@ import com.leonardobishop.quests.bukkit.item.ItemsAdderQuestItem;
import com.leonardobishop.quests.bukkit.item.MMOItemsQuestItem;
import com.leonardobishop.quests.bukkit.item.OraxenQuestItem;
import com.leonardobishop.quests.bukkit.item.ParsedQuestItem;
+import com.leonardobishop.quests.bukkit.item.PyroFishingProQuestItem;
import com.leonardobishop.quests.bukkit.item.QuestItem;
import com.leonardobishop.quests.bukkit.item.QuestItemRegistry;
import com.leonardobishop.quests.bukkit.item.SlimefunQuestItem;
@@ -504,6 +505,10 @@ public class BukkitQuestsLoader implements QuestsLoader {
if (!Bukkit.getPluginManager().isPluginEnabled("Oraxen")) return FileVisitResult.CONTINUE;
item = new OraxenQuestItem(id, config.getString("item.id"));
break;
+ case "pyrofishingpro":
+ if (!Bukkit.getPluginManager().isPluginEnabled("PyroFishingPro")) return FileVisitResult.CONTINUE;
+ item = new PyroFishingProQuestItem(id, config.getInt("item.fish-number", -1), config.getString("item.tier"));
+ break;
}
questItemRegistry.registerItem(id, item);
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/item/PyroFishingProQuestItem.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/item/PyroFishingProQuestItem.java
new file mode 100644
index 00000000..16fff5e8
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/item/PyroFishingProQuestItem.java
@@ -0,0 +1,61 @@
+package com.leonardobishop.quests.bukkit.item;
+
+import com.leonardobishop.quests.bukkit.util.NamespacedKeyUtils;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.persistence.PersistentDataContainer;
+import org.bukkit.persistence.PersistentDataType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+
+public final class PyroFishingProQuestItem extends QuestItem {
+
+ private static final NamespacedKey FISH_NUMBER_KEY = NamespacedKeyUtils.fromString("pyrofishingpro:fishnumber");
+ private static final NamespacedKey TIER_KEY = NamespacedKeyUtils.fromString("pyrofishingpro:tier");
+
+ // there is really no way to get the item properly
+ private static final ItemStack ITEM = new ItemStack(Material.COOKED_COD, 1);
+
+ static {
+ final ItemMeta meta = PyroFishingProQuestItem.ITEM.getItemMeta();
+ //noinspection deprecation
+ meta.setDisplayName("This item type cannot be gotten");
+ PyroFishingProQuestItem.ITEM.setItemMeta(meta);
+ }
+
+ private final int fishNumber;
+ private final String tier;
+
+ public PyroFishingProQuestItem(final @NotNull String id, final @Range(from = -1, to = Integer.MAX_VALUE) int fishNumber, final @Nullable String tier) {
+ super("pyrofishingpro", id);
+ this.fishNumber = fishNumber;
+ this.tier = tier;
+ }
+
+ @Override
+ public @NotNull ItemStack getItemStack() {
+ return PyroFishingProQuestItem.ITEM;
+ }
+
+ @Override
+ public boolean compareItemStack(final @NotNull ItemStack other, final boolean exactMatch) {
+ final ItemMeta meta = other.getItemMeta();
+ final PersistentDataContainer pdc = meta.getPersistentDataContainer();
+
+ final int fishNumber = pdc.getOrDefault(PyroFishingProQuestItem.FISH_NUMBER_KEY, PersistentDataType.INTEGER, -1);
+ if (fishNumber == -1) {
+ return false;
+ }
+
+ final String tier = pdc.get(PyroFishingProQuestItem.TIER_KEY, PersistentDataType.STRING);
+ if (tier == null) {
+ return false;
+ }
+
+ return (this.fishNumber == -1 || this.fishNumber == fishNumber)
+ && (this.tier == null || this.tier.equals(tier));
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java
index bbd11c41..483b9635 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java
@@ -12,11 +12,16 @@ import me.arsmagica.API.PyroFishCatchEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerFishEvent;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
public final class PyroFishingProFishingTaskType extends BukkitTaskType {
private final BukkitQuestsPlugin plugin;
+ private Method getPlayerMethod = null;
private Player lastPlayer = null;
public PyroFishingProFishingTaskType(BukkitQuestsPlugin plugin) {
@@ -26,24 +31,57 @@ public final class PyroFishingProFishingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "fish-number"));
+
+ for (Method method : PyroFishCatchEvent.class.getMethods()) {
+ if (method.getReturnType() != Player.class) {
+ continue;
+ }
+
+ if (method.getParameterTypes().length != 0) {
+ continue;
+ }
+
+ if (this.getPlayerMethod != null) {
+ // set it to null and break as there is more than 1 method returning a player
+ this.getPlayerMethod = null;
+ break;
+ } else {
+ this.getPlayerMethod = method;
+ }
+ }
+
+ if (this.getPlayerMethod == null) {
+ this.plugin.getLogger().warning("No valid player getter found for PyroFishCatchEvent, using legacy workaround.");
+ this.plugin.getServer().getPluginManager().registerEvents(new PlayerFishListener(), this.plugin);
+ }
}
- @EventHandler(priority = EventPriority.LOW)
- public void onPlayerFish(PlayerFishEvent event) {
- PlayerFishEvent.State state = event.getState();
- if (state == PlayerFishEvent.State.CAUGHT_FISH) {
- lastPlayer = event.getPlayer();
+ private Player getLastPlayer(PyroFishCatchEvent event) {
+ if (this.getPlayerMethod != null) {
+ try {
+ return (Player) this.getPlayerMethod.invoke(event);
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ return this.lastPlayer;
}
}
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onPyroFishCatch(PyroFishCatchEvent event) {
- if (lastPlayer == null) {
- return;
+ private final class PlayerFishListener implements Listener {
+ @EventHandler(priority = EventPriority.LOW)
+ public void onPlayerFish(PlayerFishEvent event) {
+ PlayerFishEvent.State state = event.getState();
+ if (state == PlayerFishEvent.State.CAUGHT_FISH) {
+ PyroFishingProFishingTaskType.this.lastPlayer = event.getPlayer();
+ }
}
+ }
- Player player = lastPlayer;
- if (player.hasMetadata("NPC")) {
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onPyroFishCatch(PyroFishCatchEvent event) {
+ Player player = getLastPlayer(event);
+ if (player == null || player.hasMetadata("NPC")) {
return;
}