aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel')
-rw-r--r--src/main/java/me/shedaniel/rei/server/DumpHandler.java2
-rw-r--r--src/main/java/me/shedaniel/rei/server/GridCleanHandler.java4
-rw-r--r--src/main/java/me/shedaniel/rei/server/InputSlotCrafter.java15
-rw-r--r--src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java11
-rw-r--r--src/main/java/me/shedaniel/rei/server/StackAccessor.java9
5 files changed, 39 insertions, 2 deletions
diff --git a/src/main/java/me/shedaniel/rei/server/DumpHandler.java b/src/main/java/me/shedaniel/rei/server/DumpHandler.java
index c5e04e12b..8f7a2d94d 100644
--- a/src/main/java/me/shedaniel/rei/server/DumpHandler.java
+++ b/src/main/java/me/shedaniel/rei/server/DumpHandler.java
@@ -34,7 +34,7 @@ public interface DumpHandler<T extends Container> {
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/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java b/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java
index 557675533..4eeb95b79 100644
--- a/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java
+++ b/src/main/java/me/shedaniel/rei/server/GridCleanHandler.java
@@ -38,6 +38,10 @@ public interface GridCleanHandler<T extends Container> {
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/src/main/java/me/shedaniel/rei/server/InputSlotCrafter.java b/src/main/java/me/shedaniel/rei/server/InputSlotCrafter.java
index 4447256e2..ed7ffa2d9 100644
--- a/src/main/java/me/shedaniel/rei/server/InputSlotCrafter.java
+++ b/src/main/java/me/shedaniel/rei/server/InputSlotCrafter.java
@@ -106,6 +106,10 @@ public class InputSlotCrafter<C extends Inventory> implements RecipeGridAligner<
}
takenStack.setCount(1);
+ if (!slot.canPlace(takenStack)) {
+ return;
+ }
+
if (slot.getItemStack().isEmpty()) {
slot.setItemStack(takenStack);
} else {
@@ -158,13 +162,22 @@ public class InputSlotCrafter<C extends Inventory> implements RecipeGridAligner<
}
public int method_7371(ItemStack itemStack) {
+ boolean rejectedModification = false;
for (int i = 0; i < inventoryStacks.size(); i++) {
ItemStack itemStack1 = this.inventoryStacks.get(i).getItemStack();
if (!itemStack1.isEmpty() && areItemsEqual(itemStack, itemStack1) && !itemStack1.isDamaged() && !itemStack1.hasEnchantments() && !itemStack1.hasCustomName()) {
- return i;
+ if (!this.inventoryStacks.get(i).allowModification(player)) {
+ rejectedModification = true;
+ } else {
+ return i;
+ }
}
}
+ if (rejectedModification) {
+ throw new IllegalStateException("Unable to take item from inventory due to slot not allowing modification! Item requested: " + itemStack);
+ }
+
return -1;
}
diff --git a/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java b/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java
index 46b4d7b8b..f0d0e361e 100644
--- a/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java
+++ b/src/main/java/me/shedaniel/rei/server/SlotStackAccessor.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.server;
+import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
@@ -47,4 +48,14 @@ public class SlotStackAccessor implements StackAccessor {
public ItemStack takeStack(int amount) {
return slot.takeStack(amount);
}
+
+ @Override
+ public boolean allowModification(PlayerEntity player) {
+ return slot.canTakeItems(player);
+ }
+
+ @Override
+ public boolean canPlace(ItemStack stack) {
+ return slot.canInsert(stack);
+ }
}
diff --git a/src/main/java/me/shedaniel/rei/server/StackAccessor.java b/src/main/java/me/shedaniel/rei/server/StackAccessor.java
index 65b722a9e..278a75baa 100644
--- a/src/main/java/me/shedaniel/rei/server/StackAccessor.java
+++ b/src/main/java/me/shedaniel/rei/server/StackAccessor.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.server;
+import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
public interface StackAccessor {
@@ -31,4 +32,12 @@ public interface StackAccessor {
void setItemStack(ItemStack stack);
ItemStack takeStack(int amount);
+
+ default boolean allowModification(PlayerEntity player) {
+ return true;
+ }
+
+ default boolean canPlace(ItemStack stack) {
+ return true;
+ }
}