diff options
Diffstat (limited to 'bukkit')
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); } |
