aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2023-03-08 00:06:44 +0100
committerKrakenied <Krakenied1@gmail.com>2023-03-08 00:06:44 +0100
commit5e552ee3821250831176f68973a2205701629282 (patch)
treedb1b041fed976b7e42bd518360deaa592dfa08a9 /bukkit
parente06d3f0e83fcfdd057aa104ca7e8ebe4667450c0 (diff)
Fix Essentials task types
Closes https://github.com/LMBishop/Quests/issues/488, https://github.com/LMBishop/Quests/issues/468, https://github.com/LMBishop/Quests/issues/457 and https://github.com/LMBishop/Quests/issues/290
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java69
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java36
4 files changed, 77 insertions, 39 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java
index f697523c..f82ba0fe 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java
@@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
@@ -136,8 +137,8 @@ public class QItemStack {
if (parts[1].equals("progress")) {
Object progress = questProgress.getTaskProgress(parts[0]).getProgress();
String str;
- if (progress instanceof Float || progress instanceof Double) {
- str = String.format(String.valueOf(progress), "%.2f");
+ if (progress instanceof Float || progress instanceof Double || progress instanceof BigDecimal) {
+ str = String.format("%.2f", progress);
} else {
str = String.valueOf(progress);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java
index 3f737aff..293bc02d 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java
@@ -13,6 +13,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.math.BigDecimal;
import java.sql.*;
import java.util.*;
import java.util.function.Function;
@@ -194,6 +195,8 @@ public class MySqlStorageProvider implements StorageProvider {
progress = Float.valueOf(encodedProgress);
} else if (type.equals("int")) {
progress = Integer.valueOf(encodedProgress);
+ } else if (type.equals("BigDecimal")) {
+ progress = new BigDecimal(encodedProgress);
} else {
throw new RuntimeException("unknown data type '" + type + "'");
}
@@ -281,6 +284,9 @@ public class MySqlStorageProvider implements StorageProvider {
} else if (progress instanceof Float) {
type = "float";
encodedProgress = String.valueOf(progress);
+ } else if (progress instanceof BigDecimal) {
+ type = "BigDecimal";
+ encodedProgress = String.valueOf(progress);
} else {
plugin.getQuestsLogger().warning("Cannot store progress for task '"
+ taskId + "' in quest '" + questId + "' for player " + uuid
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java
index be47dbd6..f3a80e7f 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java
@@ -1,6 +1,5 @@
package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.earth2me.essentials.Essentials;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
@@ -10,6 +9,7 @@ import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFi
import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
import com.leonardobishop.quests.common.quest.Quest;
import com.leonardobishop.quests.common.quest.Task;
+import net.ess3.api.IEssentials;
import net.ess3.api.events.UserBalanceUpdateEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -34,47 +34,64 @@ public final class EssentialsBalanceTaskType extends BukkitTaskType {
@Override
public void onStart(Quest quest, Task task, UUID playerUUID) {
Player player = Bukkit.getPlayer(playerUUID);
- Essentials ess = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials");
- if (player != null && player.isOnline() && ess != null) {
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(playerUUID);
- if (qPlayer == null) {
- return;
- }
- QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
- QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
- TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
+ if (player == null || !player.isOnline() || player.hasMetadata("NPC")) {
+ return;
+ }
- int earningsNeeded = (int) task.getConfigValue("amount");
- BigDecimal money = ess.getUser(player).getMoney();
- taskProgress.setProgress(money);
- if (money.compareTo(BigDecimal.valueOf(earningsNeeded)) > 0) {
- taskProgress.setCompleted(true);
- }
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
+
+ IEssentials ess = (IEssentials) Bukkit.getPluginManager().getPlugin("Essentials");
+ if (ess == null) {
+ return;
+ }
+
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+ QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
+ TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
+
+ BigDecimal balance = ess.getUser(player).getMoney();
+ super.debug("Player balance updated to " + balance, quest.getId(), task.getId(), player.getUniqueId());
+
+ taskProgress.setProgress(balance);
+ super.debug("Updating task progress (now " + balance + ")", quest.getId(), task.getId(), player.getUniqueId());
+
+ int earningsNeeded = (int) task.getConfigValue("amount");
+ BigDecimal amount = BigDecimal.valueOf(earningsNeeded);
+ if (balance.compareTo(amount) > 0) {
+ super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
+ taskProgress.setCompleted(true);
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onMoneyEarn(UserBalanceUpdateEvent event) {
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
- if (qPlayer == null) {
+ public void onUserBalanceUpdate(UserBalanceUpdateEvent event) {
+ Player player = event.getPlayer();
+ if (player.hasMetadata("NPC")) {
return;
}
- Player player = event.getPlayer();
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) {
Quest quest = pendingTask.quest();
Task task = pendingTask.task();
TaskProgress taskProgress = pendingTask.taskProgress();
- super.debug("Player balance updated to " + event.getNewBalance(), quest.getId(), task.getId(), player.getUniqueId());
+ BigDecimal balance = event.getNewBalance();
+ super.debug("Player balance updated to " + balance, quest.getId(), task.getId(), player.getUniqueId());
- int earningsNeeded = (int) task.getConfigValue("amount");
-
- taskProgress.setProgress(event.getNewBalance());
- super.debug("Updating task progress (now " + event.getNewBalance() + ")", quest.getId(), task.getId(), player.getUniqueId());
+ taskProgress.setProgress(balance);
+ super.debug("Updating task progress (now " + balance + ")", quest.getId(), task.getId(), player.getUniqueId());
- if (event.getNewBalance().compareTo(BigDecimal.valueOf(earningsNeeded)) > 0) {
+ int earningsNeeded = (int) task.getConfigValue("amount");
+ BigDecimal amount = BigDecimal.valueOf(earningsNeeded);
+ if (balance.compareTo(amount) > 0) {
super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
taskProgress.setCompleted(true);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java
index 0e108ba8..df27e925 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java
@@ -7,6 +7,7 @@ import com.leonardobishop.quests.common.player.QPlayer;
import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
import com.leonardobishop.quests.common.quest.Quest;
import com.leonardobishop.quests.common.quest.Task;
+import io.lumine.mythic.bukkit.utils.items.nbt.jnbt.DoubleTag;
import net.ess3.api.events.UserBalanceUpdateEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -27,32 +28,45 @@ public final class EssentialsMoneyEarnTaskType extends BukkitTaskType {
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onMoneyEarn(UserBalanceUpdateEvent event) {
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
- if (qPlayer == null) {
+ public void onUserBalanceUpdate(UserBalanceUpdateEvent event) {
+ Player player = event.getPlayer();
+ if (player.hasMetadata("NPC")) {
return;
}
- Player player = event.getPlayer();
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) {
Quest quest = pendingTask.quest();
Task task = pendingTask.task();
TaskProgress taskProgress = pendingTask.taskProgress();
- super.debug("Player balance updated to " + event.getNewBalance(), quest.getId(), task.getId(), player.getUniqueId());
+ BigDecimal balance = event.getNewBalance();
+ super.debug("Player balance updated to " + balance, quest.getId(), task.getId(), player.getUniqueId());
- int earningsNeeded = (int) task.getConfigValue("amount");
-
- BigDecimal current = (BigDecimal) taskProgress.getProgress();
- if (current == null) {
+ Object progress = taskProgress.getProgress();
+ BigDecimal current;
+ if (progress instanceof Double d) {
+ current = BigDecimal.valueOf(d);
+ } else if (progress != null) {
+ current = (BigDecimal) progress;
+ } else {
current = new BigDecimal(0);
}
- BigDecimal newProgress = current.add(event.getNewBalance().subtract(event.getOldBalance()));
+
+ BigDecimal oldBalance = event.getOldBalance();
+ BigDecimal difference = balance.subtract(oldBalance);
+ BigDecimal newProgress = current.add(difference);
+
taskProgress.setProgress(newProgress);
super.debug("Updating task progress (now " + newProgress + ")", quest.getId(), task.getId(), player.getUniqueId());
- if (newProgress.compareTo(BigDecimal.valueOf(earningsNeeded)) > 0) {
+ int earningsNeeded = (int) task.getConfigValue("amount");
+ BigDecimal amount = BigDecimal.valueOf(earningsNeeded);
+ if (newProgress.compareTo(amount) > 0) {
super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
taskProgress.setCompleted(true);
}