aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorKrakenied <krakenied1@gmail.com>2026-02-01 03:56:30 +0100
committerKrakenied <46192742+Krakenied@users.noreply.github.com>2026-02-03 11:38:38 +0100
commit94cc0bac2c5960d794873d0ba9eab2f015e9cc34 (patch)
tree10ab17305bbfe45ac407262b2a4cf685da686eda /bukkit
parent95ccfdfc14e21b6dba09b64766825043a6053fc1 (diff)
Fix crafting task type Control Drop All on 1.21.1
Related to https://github.com/LMBishop/Quests/issues/317
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java45
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_2.java18
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_6.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_8.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java16
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmithingTaskType.java2
7 files changed, 77 insertions, 23 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 4023c8fb..fe361ebf 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -191,6 +191,7 @@ import java.util.regex.Pattern;
public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
private QuestsLogger questsLogger;
+ private Version serverVersion;
private QuestManager questManager;
private TaskTypeManager taskTypeManager;
private QPlayerManager qPlayerManager;
@@ -233,6 +234,11 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
}
@Override
+ public @NotNull Version getServerVersion() {
+ return serverVersion;
+ }
+
+ @Override
public @NotNull QuestManager getQuestManager() {
return questManager;
}
@@ -279,9 +285,29 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
@Override
public void onEnable() {
- // Initial module initialization
+ // Initialize logger
this.questsLogger = new BukkitQuestsLogger(this);
this.logHistory = new LogHistory(true);
+
+ // Resolve server version
+ Version serverVersion;
+ try {
+ serverVersion = Version.fromString(Bukkit.getBukkitVersion());
+ this.questsLogger.info("Your server is running version " + serverVersion);
+ } catch (final IllegalArgumentException e) {
+ // all server versions supported by Quests fulfill this format,
+ // so we assume that some future version can possibly break it,
+ // and we want to load the latest and not the oldest handler
+ serverVersion = Version.UNKNOWN;
+ this.questsLogger.warning("Failed to resolve server version - some features may not work! (" + e.getMessage() + ")");
+ }
+
+ // Set the latest supported version specific handler
+ this.serverVersion = serverVersion;
+ this.versionSpecificHandler = VersionSpecificHandler.getImplementation(serverVersion);
+ this.questsLogger.info("Using " + this.versionSpecificHandler.getClass().getSimpleName() + " for version compatibility!");
+
+ // Initial module initialization
this.generateConfigurations();
this.questsConfig = new BukkitQuestsConfig(new File(super.getDataFolder() + File.separator + "config.yml"));
this.questManager = new QuestManager();
@@ -335,23 +361,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
// (skulls)
this.setSkullGetter();
- // Resolve server version
- Version serverVersion;
- try {
- serverVersion = Version.fromString(Bukkit.getBukkitVersion());
- this.questsLogger.info("Your server is running version " + serverVersion);
- } catch (final IllegalArgumentException e) {
- // all server versions supported by Quests fulfill this format,
- // so we assume that some future version can possibly break it,
- // and we want to load the latest and not the oldest handler
- serverVersion = Version.UNKNOWN;
- this.questsLogger.warning("Failed to resolve server version - some features may not work! (" + e.getMessage() + ")");
- }
-
- // Set the latest supported version specific handler
- this.versionSpecificHandler = VersionSpecificHandler.getImplementation(serverVersion);
- this.questsLogger.info("Using " + this.versionSpecificHandler.getClass().getSimpleName() + " for version compatibility!");
-
// Instantiate Projectile to ItemStack cache
this.projectile2ItemCache = new Projectile2ItemCache();
this.projectile2ItemCache.registerEvents(this);
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 4875cd2f..676ca15e 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
@@ -49,6 +49,7 @@ import java.util.TreeSet;
/**
* Interface used for implementing version-specific features.
* All information about changes in the API should be documented HERE in the method docs.
+ * Every implementation version must be added to the constant in the interface class.
*/
@SuppressWarnings({"deprecation", "BooleanMethodIsAlwaysInverted"})
@NullMarked
@@ -66,6 +67,7 @@ public interface VersionSpecificHandler {
this.add(Version.V1_19_2);
this.add(Version.V1_20);
this.add(Version.V1_20_4);
+ this.add(Version.V1_21_2);
this.add(Version.V1_21_6);
this.add(Version.V1_21_11);
}});
@@ -267,6 +269,16 @@ public interface VersionSpecificHandler {
boolean isHotbarMoveAndReaddSupported();
/**
+ * Initially, drop key clicking with control pressed on a crafting result resulted in dropping
+ * the recipe amount of an item. Starting with {@code 1.21.2} clicking it results in dropping
+ * the max craftable amount possible - <a href="https://github.com/LMBishop/Quests/issues/317">
+ * related issue</a>.
+ *
+ * @apiNote This method is intended to be used as a check for item crafting related task types.
+ */
+ boolean isCraftingControlDropAllSupported();
+
+ /**
* Cave vines plants were introduced in {@code 1.17}.
*
* @see CaveVinesPlant#isBerries()
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_2.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_2.java
new file mode 100644
index 00000000..0c3026be
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_2.java
@@ -0,0 +1,18 @@
+package com.leonardobishop.quests.bukkit.hook.versionspecific;
+
+import com.leonardobishop.quests.common.versioning.Version;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class VersionSpecificHandler_V1_21_2 extends VersionSpecificHandler_V1_20_4 {
+
+ @Override
+ public Version getMinecraftVersion() {
+ return Version.V1_21_2;
+ }
+
+ @Override
+ public boolean isCraftingControlDropAllSupported() {
+ return true;
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_6.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_6.java
index db4bcb4d..20390261 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_6.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_21_6.java
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import org.jspecify.annotations.NullMarked;
@NullMarked
-public class VersionSpecificHandler_V1_21_6 extends VersionSpecificHandler_V1_20_4 {
+public class VersionSpecificHandler_V1_21_6 extends VersionSpecificHandler_V1_21_2 {
@Override
public Version getMinecraftVersion() {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_8.java
index c462c750..c14ffd35 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_8.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler_V1_8.java
@@ -119,6 +119,11 @@ public class VersionSpecificHandler_V1_8 implements VersionSpecificHandler {
}
@Override
+ public boolean isCraftingControlDropAllSupported() {
+ return false;
+ }
+
+ @Override
public boolean isCaveVinesPlantWithBerries(BlockData blockData) {
return false;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java
index 876ca039..79ea0e8a 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java
@@ -61,21 +61,31 @@ public final class CraftingTaskType extends BukkitTaskType {
}
ItemStack item = event.getCurrentItem();
-
int eventAmount = item.getAmount();
- if (event.isShiftClick() && event.getClick() != ClickType.CONTROL_DROP) { // https://github.com/LMBishop/Quests/issues/317
+
+ boolean shiftCraftToInventory = event.isShiftClick() && event.getClick() != ClickType.CONTROL_DROP;
+ boolean controlCraftDropAll = plugin.getVersionSpecificHandler().isCraftingControlDropAllSupported() && !event.isShiftClick() && event.getClick() == ClickType.CONTROL_DROP;
+
+ if (shiftCraftToInventory || controlCraftDropAll) { // https://github.com/LMBishop/Quests/issues/317
int maxAmount = event.getInventory().getMaxStackSize();
ItemStack[] matrix = event.getInventory().getMatrix();
+
for (ItemStack itemStack : matrix) {
if (itemStack != null && itemStack.getType() != Material.AIR) {
int itemStackAmount = itemStack.getAmount();
+
if (itemStackAmount < maxAmount && itemStackAmount > 0) {
maxAmount = itemStackAmount;
}
}
}
+
eventAmount *= maxAmount;
- eventAmount = Math.min(eventAmount, plugin.getVersionSpecificHandler().getAvailableSpace(player, item));
+
+ if (shiftCraftToInventory) {
+ eventAmount = Math.min(eventAmount, plugin.getVersionSpecificHandler().getAvailableSpace(player, item));
+ }
+
if (eventAmount == 0) {
return;
}
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 fcc1540a..9522a4a3 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
@@ -38,7 +38,7 @@ public final class SmithingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "exact-match"));
- if (plugin.getVersionSpecificHandler().getMinecraftVersion().isLowerThan(Version.V1_20)) {
+ if (plugin.getServerVersion().isLowerThan(Version.V1_20)) {
return;
}