aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java3
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java30
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmithingTaskType.java34
6 files changed, 92 insertions, 3 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 98ed3f1c..4ec47044 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -301,7 +301,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
case 9, 10 -> versionSpecificHandler = new VersionSpecificHandler9();
case 11, 12, 13, 14, 15 -> versionSpecificHandler = new VersionSpecificHandler11();
case 16 -> versionSpecificHandler = new VersionSpecificHandler16();
- default -> versionSpecificHandler = new VersionSpecificHandler17();
+ case 17, 18, 19 -> versionSpecificHandler = new VersionSpecificHandler17();
+ default -> versionSpecificHandler = new VersionSpecificHandler20();
}
questsConfig.setItemGetter(itemGetter);
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
index 480d0d12..e2395961 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
@@ -3,6 +3,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
+import org.bukkit.event.inventory.SmithItemEvent;
import org.bukkit.inventory.ItemStack;
//TODO move titles, itemgetter, other version specific shite in here
@@ -30,4 +31,8 @@ public interface VersionSpecificHandler {
boolean isCaveVinesPlantWithBerries(BlockData blockData);
ItemStack getItemInMainHand(Player player);
+
+ ItemStack[] getSmithItems(SmithItemEvent event);
+
+ String getSmithMode(SmithItemEvent event);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java
index 6a9a4e0d..438ae592 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java
@@ -3,6 +3,10 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
+import org.bukkit.event.inventory.SmithItemEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.SmithingInventory;
+import org.bukkit.inventory.SmithingRecipe;
public class VersionSpecificHandler16 extends VersionSpecificHandler11 implements VersionSpecificHandler {
@@ -25,4 +29,12 @@ public class VersionSpecificHandler16 extends VersionSpecificHandler11 implement
public boolean isOffHandEmpty(Player player) {
return player.getInventory().getItemInOffHand().getAmount() == 0;
}
+
+ @Override
+ public ItemStack[] getSmithItems(SmithItemEvent event) {
+ return new ItemStack[]{
+ event.getInventory().getInputEquipment(),
+ event.getInventory().getInputMineral()
+ };
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java
new file mode 100644
index 00000000..e27a1652
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java
@@ -0,0 +1,30 @@
+package com.leonardobishop.quests.bukkit.hook.versionspecific;
+
+import org.bukkit.event.inventory.SmithItemEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.Recipe;
+import org.bukkit.inventory.SmithingTransformRecipe;
+import org.bukkit.inventory.SmithingTrimRecipe;
+
+public class VersionSpecificHandler20 extends VersionSpecificHandler17 implements VersionSpecificHandler {
+ @Override
+ public ItemStack[] getSmithItems(SmithItemEvent event) {
+ return new ItemStack[]{
+ event.getInventory().getInputEquipment(),
+ event.getInventory().getInputMineral(),
+ event.getInventory().getInputTemplate()
+ };
+ }
+
+ @Override
+ public String getSmithMode(SmithItemEvent event) {
+ Recipe recipe = event.getInventory().getRecipe();
+ if (recipe instanceof SmithingTransformRecipe) {
+ return "transform";
+ } else if (recipe instanceof SmithingTrimRecipe) {
+ return "trim";
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
index dc552ee6..c2877f1d 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
@@ -4,6 +4,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
+import org.bukkit.event.inventory.SmithItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
@@ -76,4 +77,14 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
public ItemStack getItemInMainHand(Player player) {
return player.getItemInHand();
}
+
+ @Override
+ public ItemStack[] getSmithItems(SmithItemEvent event) {
+ return new ItemStack[0];
+ }
+
+ @Override
+ public String getSmithMode(SmithItemEvent event) {
+ return null;
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmithingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmithingTaskType.java
index 6c0404dc..56101d1e 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmithingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmithingTaskType.java
@@ -20,6 +20,8 @@ import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.SmithItemEvent;
import org.bukkit.inventory.ItemStack;
+import java.util.Arrays;
+
public final class SmithingTaskType extends BukkitTaskType {
private final BukkitQuestsPlugin plugin;
@@ -35,6 +37,10 @@ public final class SmithingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useItemStackConfigValidator(this, "item"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "exact-match"));
+ super.addConfigValidator(TaskUtils.useAcceptedValuesConfigValidator(this, Arrays.asList(
+ "transform",
+ "trim"
+ ), "mode"));
}
@Override
@@ -66,18 +72,28 @@ public final class SmithingTaskType extends BukkitTaskType {
int eventAmount = item.getAmount();
if (event.isShiftClick() && event.getClick() != ClickType.CONTROL_DROP) { // https://github.com/LMBishop/Quests/issues/317
// https://cdn.discordapp.com/attachments/510553623022010371/1011483223446007849/unknown.png
- eventAmount *= Math.min(event.getInventory().getInputEquipment().getAmount(), event.getInventory().getInputMineral().getAmount());
+ eventAmount *= getSmithItemMultiplier(event);
eventAmount = Math.min(eventAmount, plugin.getVersionSpecificHandler().getAvailableSpace(player, item));
if (eventAmount == 0) {
return;
}
}
+ final String recipeType = plugin.getVersionSpecificHandler().getSmithMode(event);
+
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) {
Quest quest = pendingTask.quest();
Task task = pendingTask.task();
TaskProgress taskProgress = pendingTask.taskProgress();
+ if (recipeType != null) {
+ final String mode = (String) task.getConfigValue("mode");
+ if (!recipeType.equals(mode)) {
+ super.debug("Specific mode is required, but the actual mode '" + recipeType + "' does not match, continuing...", quest.getId(), task.getId(), player.getUniqueId());
+ continue;
+ }
+ }
+
QuestItem qi;
if ((qi = fixedQuestItemCache.get(quest.getId(), task.getId())) == null) {
QuestItem fetchedItem = TaskUtils.getConfigQuestItem(task, "item", "data");
@@ -85,7 +101,7 @@ public final class SmithingTaskType extends BukkitTaskType {
qi = fetchedItem;
}
- super.debug("Player smithed " + eventAmount + " of " + item.getType(), quest.getId(), task.getId(), player.getUniqueId());
+ super.debug("Player smithed " + eventAmount + " of " + item.getType(), quest.getId(), task.getId(), player.getUniqueId());
boolean exactMatch = TaskUtils.getConfigBoolean(task, "exact-match", true);
if (!qi.compareItemStack(item, exactMatch)) {
@@ -106,4 +122,18 @@ public final class SmithingTaskType extends BukkitTaskType {
TaskUtils.sendTrackAdvancement(player, quest, taskProgress);
}
}
+
+ private int getSmithItemMultiplier(SmithItemEvent event) {
+ int min = -1;
+ for (ItemStack item : this.plugin.getVersionSpecificHandler().getSmithItems(event)) {
+ if (item == null) {
+ continue;
+ }
+ int amount = item.getAmount();
+ if ((min < 0 && amount > 0) || (min > 0 && amount < min)) {
+ min = amount;
+ }
+ }
+ return Math.max(min, 1);
+ }
}