summaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2022-12-10 01:45:30 +0100
committerKrakenied <Krakenied1@gmail.com>2022-12-17 18:01:30 +0100
commit21520266ddf38c61aa47c76d1ef9d9927b9078ba (patch)
treeafd6a7a6e2407e4e51f6c5469cd2cf93e6e3c18c /bukkit
parent3861112824b8476d12669378e155a9c0e1609b2b (diff)
Bring support for older ShopGUIPlus versions back
Fixes https://github.com/LMBishop/Quests/issues/473
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyTaskType.java53
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellTaskType.java51
3 files changed, 82 insertions, 27 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
index c392f147..45e30454 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -349,8 +349,9 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
}
if (Bukkit.getPluginManager().isPluginEnabled("ShopGUIPlus")) {
// not tested
- taskTypeManager.registerTaskType(new ShopGUIPlusBuyTaskType(this));
- taskTypeManager.registerTaskType(new ShopGUIPlusSellTaskType(this));
+ String shopGUIPlusVersion = Bukkit.getPluginManager().getPlugin("ShopGUIPlus").getDescription().getVersion();
+ taskTypeManager.registerTaskType(new ShopGUIPlusBuyTaskType(this, shopGUIPlusVersion));
+ taskTypeManager.registerTaskType(new ShopGUIPlusSellTaskType(this, shopGUIPlusVersion));
}
if (Bukkit.getPluginManager().isPluginEnabled("FabledSkyblock")) {
// not tested
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyTaskType.java
index 2a5395e2..b4e4c80a 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyTaskType.java
@@ -4,7 +4,6 @@ import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
import com.leonardobishop.quests.common.player.QPlayer;
-import com.leonardobishop.quests.common.player.QPlayerManager;
import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
import com.leonardobishop.quests.common.quest.Quest;
import com.leonardobishop.quests.common.quest.Task;
@@ -12,44 +11,72 @@ import net.brcdev.shopgui.event.ShopPostTransactionEvent;
import net.brcdev.shopgui.shop.Shop;
import net.brcdev.shopgui.shop.ShopManager.ShopAction;
import net.brcdev.shopgui.shop.ShopTransactionResult;
-import net.brcdev.shopgui.shop.item.ShopItem;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
public final class ShopGUIPlusBuyTaskType extends BukkitTaskType {
private final BukkitQuestsPlugin plugin;
+ private Method getShopItemMethod;
+ private Method getShopMethod;
+ private Method getIdMethod;
- public ShopGUIPlusBuyTaskType(BukkitQuestsPlugin plugin) {
- super("shopguiplus_buy", TaskUtils.TASK_ATTRIBUTION_STRING, "Purchase a given item from a ShopGUI+ shop", "shopguiplus_buycertain");
+ public ShopGUIPlusBuyTaskType(BukkitQuestsPlugin plugin, String shopGUIPlusVersion) {
+ super("shopguiplus_buy", TaskUtils.TASK_ATTRIBUTION_STRING, "Purchase a given item from a ShopGUIPlus shop", "shopguiplus_buycertain");
this.plugin = plugin;
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "shop-id"));
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "item-id"));
+
+ try {
+ Class<?> clazz = Class.forName("net.brcdev.shopgui.shop.ShopTransactionResult");
+ this.getShopItemMethod = clazz.getDeclaredMethod("getShopItem");
+
+ Class<?> returnType = this.getShopItemMethod.getReturnType();
+ this.getShopMethod = returnType.getDeclaredMethod("getShop");
+ this.getIdMethod = returnType.getDeclaredMethod("getId");
+
+ return;
+ } catch (ClassNotFoundException | NoSuchMethodException ignored) { }
+
+ plugin.getLogger().severe("Failed to register event handler for ShopGUIPlus task type!");
+ plugin.getLogger().severe("ShopGUIPlus version detected: " + shopGUIPlusVersion);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void afterTransaction(ShopPostTransactionEvent event) {
+ public void onShopPostTransaction(ShopPostTransactionEvent event) {
ShopTransactionResult result = event.getResult();
ShopAction shopAction = result.getShopAction();
if (shopAction != ShopAction.BUY) {
return;
}
-
+
Player player = result.getPlayer();
- QPlayerManager playerManager = this.plugin.getPlayerManager();
- QPlayer qPlayer = playerManager.getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
-
- ShopItem shopItem = result.getShopItem();
- Shop shop = shopItem.getShop();
- String shopId = shop.getId();
- String itemId = shopItem.getId();
+
+ Shop shop;
+ String itemId;
+ String shopId;
+
+ try {
+ Object shopItem = getShopItemMethod.invoke(result);
+ shop = (Shop) getShopMethod.invoke(shopItem);
+ itemId = (String) getIdMethod.invoke(shopItem);
+ shopId = shop.getId();
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ // It should never happen
+ return;
+ }
+
int amountBought = result.getAmount();
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellTaskType.java
index ebef9d10..cb1748b9 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellTaskType.java
@@ -4,7 +4,6 @@ import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
import com.leonardobishop.quests.common.player.QPlayer;
-import com.leonardobishop.quests.common.player.QPlayerManager;
import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
import com.leonardobishop.quests.common.quest.Quest;
import com.leonardobishop.quests.common.quest.Task;
@@ -12,27 +11,46 @@ import net.brcdev.shopgui.event.ShopPostTransactionEvent;
import net.brcdev.shopgui.shop.Shop;
import net.brcdev.shopgui.shop.ShopManager.ShopAction;
import net.brcdev.shopgui.shop.ShopTransactionResult;
-import net.brcdev.shopgui.shop.item.ShopItem;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
public final class ShopGUIPlusSellTaskType extends BukkitTaskType {
private final BukkitQuestsPlugin plugin;
+ private Method getShopItemMethod;
+ private Method getShopMethod;
+ private Method getIdMethod;
- public ShopGUIPlusSellTaskType(BukkitQuestsPlugin plugin) {
- super("shopguiplus_sell", TaskUtils.TASK_ATTRIBUTION_STRING, "Sell a given item to a ShopGUI+ shop", "shopguiplus_sellcertain");
+ public ShopGUIPlusSellTaskType(BukkitQuestsPlugin plugin, String shopGUIPlusVersion) {
+ super("shopguiplus_sell", TaskUtils.TASK_ATTRIBUTION_STRING, "Sell a given item to a ShopGUIPlus shop", "shopguiplus_sellcertain");
this.plugin = plugin;
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "shop-id"));
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "item-id"));
+
+ try {
+ Class<?> clazz = Class.forName("net.brcdev.shopgui.shop.ShopTransactionResult");
+ this.getShopItemMethod = clazz.getDeclaredMethod("getShopItem");
+
+ Class<?> returnType = this.getShopItemMethod.getReturnType();
+ this.getShopMethod = returnType.getDeclaredMethod("getShop");
+ this.getIdMethod = returnType.getDeclaredMethod("getId");
+
+ return;
+ } catch (ClassNotFoundException | NoSuchMethodException ignored) { }
+
+ plugin.getLogger().severe("Failed to register event handler for ShopGUIPlus task type!");
+ plugin.getLogger().severe("ShopGUIPlus version detected: " + shopGUIPlusVersion);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void afterTransaction(ShopPostTransactionEvent event) {
+ public void onShopPostTransaction(ShopPostTransactionEvent event) {
ShopTransactionResult result = event.getResult();
ShopAction shopAction = result.getShopAction();
if (shopAction != ShopAction.SELL && shopAction != ShopAction.SELL_ALL) {
@@ -40,16 +58,25 @@ public final class ShopGUIPlusSellTaskType extends BukkitTaskType {
}
Player player = result.getPlayer();
- QPlayerManager playerManager = this.plugin.getPlayerManager();
- QPlayer qPlayer = playerManager.getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
- ShopItem shopItem = result.getShopItem();
- Shop shop = shopItem.getShop();
- String shopId = shop.getId();
- String itemId = shopItem.getId();
+ Shop shop;
+ String itemId;
+ String shopId;
+
+ try {
+ Object shopItem = getShopItemMethod.invoke(result);
+ shop = (Shop) getShopMethod.invoke(shopItem);
+ itemId = (String) getIdMethod.invoke(shopItem);
+ shopId = shop.getId();
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ // It should never happen
+ return;
+ }
+
int amountBought = result.getAmount();
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) {
@@ -57,7 +84,7 @@ public final class ShopGUIPlusSellTaskType extends BukkitTaskType {
Task task = pendingTask.task();
TaskProgress taskProgress = pendingTask.taskProgress();
- super.debug("Player bought item (shop = " + shopId + ", item id = " + itemId + ")", quest.getId(), task.getId(), player.getUniqueId());
+ super.debug("Player sold item (shop = " + shopId + ", item id = " + itemId + ")", quest.getId(), task.getId(), player.getUniqueId());
String taskShopId = (String) task.getConfigValue("shop-id");
if (taskShopId == null || !taskShopId.equals(shopId)) {