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