aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java17
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java20
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java17
4 files changed, 49 insertions, 11 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 c9d16be5..4dd299d6 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
@@ -20,6 +20,7 @@ import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
+import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.SmithingInventory;
@@ -213,4 +214,9 @@ public interface VersionSpecificHandler {
* @see Goat
*/
boolean isGoat(Entity entity);
+
+ /**
+ * <a href="https://github.com/LMBishop/Quests/issues/787">Reason behind moving it to a version specific handler</a>
+ */
+ int removeItem(Inventory inventory, int slot, int amountToRemove);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java
index 3fe31a0b..0563d2cb 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java
@@ -7,6 +7,8 @@ import org.bukkit.entity.Mule;
import org.bukkit.entity.Player;
import org.bukkit.entity.SkeletonHorse;
import org.bukkit.entity.ZombieHorse;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
public class VersionSpecificHandler11 extends VersionSpecificHandler9 implements VersionSpecificHandler {
@@ -44,4 +46,19 @@ public class VersionSpecificHandler11 extends VersionSpecificHandler9 implements
public boolean isPlayerOnZombieHorse(Player player) {
return player.getVehicle() instanceof ZombieHorse;
}
+
+ @Override
+ public int removeItem(Inventory inventory, int slot, int amountToRemove) {
+ ItemStack item = inventory.getItem(slot);
+
+ if (item == null) {
+ return 0;
+ }
+
+ int amountInStack = item.getAmount();
+ int newAmountInStack = Math.max(0, amountInStack - amountToRemove);
+ item.setAmount(newAmountInStack);
+
+ return amountInStack - newAmountInStack;
+ }
}
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 9846a025..d333b5f1 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
@@ -10,6 +10,7 @@ import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
+import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
@@ -162,4 +163,23 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
public boolean isGoat(Entity entity) {
return false;
}
+
+ @Override
+ public int removeItem(Inventory inventory, int slot, int amountToRemove) {
+ ItemStack item = inventory.getItem(slot);
+
+ if (item == null) {
+ return 0;
+ }
+
+ int amountInStack = item.getAmount();
+ int newAmountInStack = Math.max(0, amountInStack - amountToRemove);
+ item.setAmount(newAmountInStack);
+
+ // It's needed in older versions
+ // https://github.com/LMBishop/Quests/issues/787
+ inventory.setItem(slot, item);
+
+ return amountInStack - newAmountInStack;
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
index 20a8354d..2ac6a5de 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
@@ -28,6 +28,7 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -596,21 +597,15 @@ public class TaskUtils {
}
public static void removeItemsInSlots(Player player, int[] amountPerSlot, int amountToRemove) {
- for (int i = 0; i < 36; i++) {
- if (amountPerSlot[i] == 0) continue;
-
- ItemStack slot = player.getInventory().getItem(i);
- if (slot == null) continue;
+ PlayerInventory inventory = player.getInventory();
- int amountInStack = slot.getAmount();
- int min = Math.max(0, amountInStack - amountToRemove);
- slot.setAmount(min);
- amountToRemove = amountToRemove - amountInStack;
- if (amountToRemove <= 0) break;
+ for (int i = 0; i < 36 && amountToRemove > 0; i++) {
+ if (amountPerSlot[i] != 0) {
+ amountToRemove -= plugin.getVersionSpecificHandler().removeItem(inventory, i, amountToRemove);
+ }
}
}
-
/**
* Returns a config validator which checks if at least one value in the given
* paths exist.