From 8ed5f8c564138a7eb84864eeb4ebcf8929f21102 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Mon, 22 Aug 2022 00:25:56 +0200 Subject: More crafting task type detection improvements Fixes https://github.com/LMBishop/Quests/issues/430 with ctrl pressed --- .../hook/versionspecific/VersionSpecificHandler.java | 7 +++++++ .../hook/versionspecific/VersionSpecificHandler16.java | 11 +++++++++++ .../hook/versionspecific/VersionSpecificHandler8.java | 16 ++++++++++++++++ .../hook/versionspecific/VersionSpecificHandler9.java | 5 +++++ .../quests/bukkit/tasktype/type/CraftingTaskType.java | 16 +++++++++------- 5 files changed, 48 insertions(+), 7 deletions(-) (limited to 'bukkit/src') 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 69fd029f..7fd1b1e8 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 @@ -1,6 +1,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; @@ -13,7 +14,13 @@ public interface VersionSpecificHandler { boolean isPlayerOnStrider(Player player); + boolean isOffHandSwap(ClickType clickType); + + boolean isOffHandEmpty(Player player); + int getAvailableSpace(Player player, ItemStack newItemStack); boolean isFurnaceInventoryType(InventoryType type); + + boolean isHotbarMoveAndReaddSupported(); } 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 ce9973a4..66ae87e2 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 @@ -2,6 +2,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; public class VersionSpecificHandler16 extends VersionSpecificHandler14 implements VersionSpecificHandler { @@ -14,4 +15,14 @@ public class VersionSpecificHandler16 extends VersionSpecificHandler14 implement public boolean isPlayerOnStrider(Player player) { return player.getVehicle() != null && player.getVehicle().getType() == EntityType.STRIDER; } + + @Override + public boolean isOffHandSwap(ClickType clickType) { + return clickType == ClickType.SWAP_OFFHAND; + } + + @Override + public boolean isOffHandEmpty(Player player) { + return player.getInventory().getItemInOffHand().getAmount() == 0; + } } 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 d382418a..2760a6f8 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 @@ -1,6 +1,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; @@ -24,6 +25,16 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler { return false; } + @Override + public boolean isOffHandSwap(ClickType clickType) { + return false; + } + + @Override + public boolean isOffHandEmpty(Player player) { + return false; + } + @Override public int getAvailableSpace(Player player, ItemStack newItemStack) { int availableSpace = 0; @@ -48,4 +59,9 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler { public boolean isFurnaceInventoryType(InventoryType type) { return type == InventoryType.FURNACE; } + + @Override + public boolean isHotbarMoveAndReaddSupported() { + return true; + } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler9.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler9.java index 80145598..4b1156c1 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler9.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler9.java @@ -37,4 +37,9 @@ public class VersionSpecificHandler9 extends VersionSpecificHandler8 implements return availableSpace; } + + @Override + public boolean isHotbarMoveAndReaddSupported() { + 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 16ae45eb..6a6c3dd5 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 @@ -33,7 +33,6 @@ public final class CraftingTaskType extends BukkitTaskType { super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "item")); super.addConfigValidator(TaskUtils.useItemStackConfigValidator(this, "item")); super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data")); - } @Override @@ -43,12 +42,15 @@ public final class CraftingTaskType extends BukkitTaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onCraftItem(CraftItemEvent event) { - if (event.getAction() == InventoryAction.NOTHING - || event.getCurrentItem() == null + //noinspection DuplicatedCode + if ((event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR) || event.getAction() == InventoryAction.NOTHING - || event.getClick() == ClickType.NUMBER_KEY && event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD - || event.getClick() == ClickType.DROP && event.getAction() == InventoryAction.DROP_ONE_SLOT && event.getCursor() != null - || !(event.getWhoClicked() instanceof Player player)) { + || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD && event.getClick() == ClickType.NUMBER_KEY && !plugin.getVersionSpecificHandler().isHotbarMoveAndReaddSupported() // https://discord.com/channels/211910297810632704/510553623022010371/1011035743331819550 + || event.getAction() == InventoryAction.DROP_ONE_SLOT && event.getClick() == ClickType.DROP && (event.getCursor() != null && event.getCursor().getType() != Material.AIR) // https://github.com/LMBishop/Quests/issues/430 + || event.getAction() == InventoryAction.DROP_ALL_SLOT && event.getClick() == ClickType.CONTROL_DROP && (event.getCursor() != null && event.getCursor().getType() != Material.AIR) // https://github.com/LMBishop/Quests/issues/430 + || event.getAction() == InventoryAction.UNKNOWN && event.getClick() == ClickType.UNKNOWN // for better ViaVersion support + || !(event.getWhoClicked() instanceof Player player) + || plugin.getVersionSpecificHandler().isOffHandSwap(event.getClick()) && !plugin.getVersionSpecificHandler().isOffHandEmpty(player)) { return; } @@ -60,7 +62,7 @@ public final class CraftingTaskType extends BukkitTaskType { ItemStack item = event.getCurrentItem(); int eventAmount = item.getAmount(); - if (event.isShiftClick()) { + if (event.isShiftClick() && event.getClick() != ClickType.CONTROL_DROP) { // https://github.com/LMBishop/Quests/issues/317 int maxAmount = event.getInventory().getMaxStackSize(); ItemStack[] matrix = event.getInventory().getMatrix(); for (ItemStack itemStack : matrix) { -- cgit v1.2.3-70-g09d2