aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-api/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-07-20 18:39:18 +0900
committershedaniel <daniel@shedaniel.me>2024-07-22 18:52:22 +0900
commite6c8d55feaee1b3d6042e9a5283668d0ab29da53 (patch)
tree9d7ad8fb053b5ab5c96de21c33c9f34d59cc310a /RoughlyEnoughItems-api/src/main/java
parentcd45e2d3a28d44fb52dbdc0eb5b730ecf1ee1133 (diff)
downloadRoughlyEnoughItems-e6c8d55feaee1b3d6042e9a5283668d0ab29da53.tar.gz
RoughlyEnoughItems-e6c8d55feaee1b3d6042e9a5283668d0ab29da53.tar.bz2
RoughlyEnoughItems-e6c8d55feaee1b3d6042e9a5283668d0ab29da53.zip
Check slots before modification
Diffstat (limited to 'RoughlyEnoughItems-api/src/main/java')
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/DumpHandler.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java4
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java11
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/StackAccessor.java9
4 files changed, 25 insertions, 1 deletions
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/DumpHandler.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/DumpHandler.java
index 9db906ee3..6cc5dac6e 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/DumpHandler.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/DumpHandler.java
@@ -34,7 +34,7 @@ public interface DumpHandler<T extends AbstractContainerMenu> {
static StackAccessor getOccupiedSlotWithRoomForStack(ItemStack stack, List<StackAccessor> inventoryStacks) {
for (StackAccessor inventoryStack : inventoryStacks) {
- if (canStackAddMore(inventoryStack.getItemStack(), stack)) {
+ if (canStackAddMore(inventoryStack.getItemStack(), stack) && inventoryStack.canPlace(stack)) {
return inventoryStack;
}
}
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java
index 6eab52a53..fe83263c9 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java
@@ -38,6 +38,10 @@ public interface GridCleanHandler<T extends AbstractContainerMenu> {
DumpHandler<T> dumpHandler = context.getContainerInfo().getDumpHandler();
ItemStack stackToReturn = stackAccessor.getItemStack();
if (!stackToReturn.isEmpty()) {
+ if (!stackAccessor.allowModification(context.getPlayerEntity())) {
+ error("rei.rei.no.slot.in.inv");
+ }
+
for (; stackToReturn.getCount() > 0; stackAccessor.takeStack(1)) {
ItemStack stackToInsert = stackToReturn.copy();
stackToInsert.setCount(1);
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java
index fd3a47c84..216454cfc 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.server;
+import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
@@ -47,4 +48,14 @@ public class SlotStackAccessor implements StackAccessor {
public ItemStack takeStack(int amount) {
return slot.remove(amount);
}
+
+ @Override
+ public boolean allowModification(Player player) {
+ return slot.mayPickup(player) && slot.mayPlace(getItemStack());
+ }
+
+ @Override
+ public boolean canPlace(ItemStack stack) {
+ return slot.mayPlace(stack);
+ }
}
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/StackAccessor.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/StackAccessor.java
index ba48579a0..d425b3121 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/StackAccessor.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/server/StackAccessor.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.server;
+import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
public interface StackAccessor {
@@ -31,4 +32,12 @@ public interface StackAccessor {
void setItemStack(ItemStack stack);
ItemStack takeStack(int amount);
+
+ default boolean allowModification(Player player) {
+ return true;
+ }
+
+ default boolean canPlace(ItemStack stack) {
+ return true;
+ }
}