aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2022-08-22 00:25:56 +0200
committerKrakenied <Krakenied1@gmail.com>2022-08-22 23:15:32 +0200
commit8ed5f8c564138a7eb84864eeb4ebcf8929f21102 (patch)
treeae890a96c19204cbbf9354f9e330d92758693efb /bukkit
parent3574d277ba30fcde325a5a7a405d70b0b869dec0 (diff)
More crafting task type detection improvements
Fixes https://github.com/LMBishop/Quests/issues/430 with ctrl pressed
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java16
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler9.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java16
5 files changed, 48 insertions, 7 deletions
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;
@@ -25,6 +26,16 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
}
@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;
PlayerInventory inventory = player.getInventory();
@@ -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) {