diff options
| author | shedaniel <daniel@shedaniel.me> | 2024-07-22 20:42:10 +0900 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-07-22 20:42:10 +0900 |
| commit | 3315e4d0560ab3349d8a0513081f91e6a354f181 (patch) | |
| tree | 9aae5d6324866e5b736b47ec9baeb3135ae599bc /api/src/main | |
| parent | 3444fd3bb74cc6f9beb47b89c065849fe11302f5 (diff) | |
| download | RoughlyEnoughItems-6.x-1.17.tar.gz RoughlyEnoughItems-6.x-1.17.tar.bz2 RoughlyEnoughItems-6.x-1.17.zip | |
Check slots before modification6.x-1.17
Diffstat (limited to 'api/src/main')
4 files changed, 25 insertions, 1 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java index 38fac60ce..71521245d 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java @@ -43,6 +43,10 @@ public interface InputCleanHandler<T extends AbstractContainerMenu, D extends Di static <T extends AbstractContainerMenu> void returnSlotsToPlayerInventory(MenuInfoContext<T, ?, ?> context, DumpHandler<T, ?> dumpHandler, SlotAccessor slotAccessor) { ItemStack stackToReturn = slotAccessor.getItemStack(); if (!stackToReturn.isEmpty()) { + if (!slotAccessor.allowModification(context.getPlayerEntity())) { + error("rei.rei.no.slot.in.inv"); + } + for (; stackToReturn.getCount() > 0; slotAccessor.takeStack(1)) { ItemStack stackToInsert = stackToReturn.copy(); stackToInsert.setCount(1); diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/DumpHandler.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/DumpHandler.java index 7e61ef7af..de949c51c 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/DumpHandler.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/DumpHandler.java @@ -35,7 +35,7 @@ public interface DumpHandler<T extends AbstractContainerMenu, D extends Display> static SlotAccessor getOccupiedSlotWithRoomForStack(ItemStack stack, Iterable<SlotAccessor> inventoryStacks) { for (SlotAccessor inventoryStack : inventoryStacks) { - if (canStackAddMore(inventoryStack.getItemStack(), stack)) { + if (canStackAddMore(inventoryStack.getItemStack(), stack) && inventoryStack.canPlace(stack)) { return inventoryStack; } } diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/SlotAccessor.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/SlotAccessor.java index 709656fe6..412af5338 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/SlotAccessor.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/SlotAccessor.java @@ -24,6 +24,7 @@ package me.shedaniel.rei.api.common.transfer.info.stack; import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; @@ -37,6 +38,14 @@ public interface SlotAccessor { ItemStack takeStack(int amount); + default boolean allowModification(Player player) { + return true; + } + + default boolean canPlace(ItemStack stack) { + return true; + } + static SlotAccessor fromSlot(Slot slot) { return new VanillaSlotAccessor(slot); } 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 87ddb1a4a..fba4ca1fe 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 @@ -23,6 +23,7 @@ package me.shedaniel.rei.api.common.transfer.info.stack; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; @@ -50,4 +51,14 @@ public class VanillaSlotAccessor implements SlotAccessor { public ItemStack takeStack(int amount) { return slot.remove(amount); } + + @Override + public boolean allowModification(Player player) { + return slot.allowModification(player); + } + + @Override + public boolean canPlace(ItemStack stack) { + return slot.mayPlace(stack); + } } |
