diff options
| author | shedaniel <daniel@shedaniel.me> | 2024-07-20 18:39:18 +0900 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-07-22 18:52:22 +0900 |
| commit | e6c8d55feaee1b3d6042e9a5283668d0ab29da53 (patch) | |
| tree | 9d7ad8fb053b5ab5c96de21c33c9f34d59cc310a /RoughlyEnoughItems-api/src/main/java | |
| parent | cd45e2d3a28d44fb52dbdc0eb5b730ecf1ee1133 (diff) | |
| download | RoughlyEnoughItems-e6c8d55feaee1b3d6042e9a5283668d0ab29da53.tar.gz RoughlyEnoughItems-e6c8d55feaee1b3d6042e9a5283668d0ab29da53.tar.bz2 RoughlyEnoughItems-e6c8d55feaee1b3d6042e9a5283668d0ab29da53.zip | |
Check slots before modification
Diffstat (limited to 'RoughlyEnoughItems-api/src/main/java')
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; + } } |
