diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/VanillaSlotAccessor.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/VanillaSlotAccessor.java
index 579716dea..4498e3a5a 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/VanillaSlotAccessor.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/VanillaSlotAccessor.java
@@ -55,12 +55,19 @@ public ItemStack takeStack(int amount) {
public Slot getSlot() {
return slot;
}
-
+
+ /**
+ * Since NeoForge implemented slots may not pick up & take when it's empty, although the slot is still modifiable.
+ * A {@link VanillaSlotAccessor#canPlace(ItemStack)} check is performed later on, so this should not cause illegal modification theoretically.
+ *
+ * @see SlotItemHandler::mayPlace,
+ * SlotItemHandler::mayPickup
+ */
@Override
public boolean allowModification(Player player) {
- return slot.allowModification(player);
+ return !slot.hasItem() || slot.allowModification(player);
}
-
+
@Override
public boolean canPlace(ItemStack stack) {
return slot.mayPlace(stack);