diff options
| author | shedaniel <daniel@shedaniel.me> | 2024-07-22 21:23:30 +0900 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-07-22 22:19:57 +0900 |
| commit | c5a04154d45e58893ae14ee3daa52c61562079e9 (patch) | |
| tree | 93cbe3b3e7a15b079d2ef19828f8ae5b8e574db4 | |
| parent | de36cf8cbce35d6fc5f879651c057fa143e72d89 (diff) | |
| parent | 559ce07496aac9b974abbc03583bf70e19c862fd (diff) | |
| download | RoughlyEnoughItems-c5a04154d45e58893ae14ee3daa52c61562079e9.tar.gz RoughlyEnoughItems-c5a04154d45e58893ae14ee3daa52c61562079e9.tar.bz2 RoughlyEnoughItems-c5a04154d45e58893ae14ee3daa52c61562079e9.zip | |
Merge remote-tracking branch 'refs/remotes/origin/14.x-1.20.4' into 15.x-1.20.5
# Conflicts:
# runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java
9 files changed, 54 insertions, 4 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 82071f4c6..afc71033e 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 @@ -44,6 +44,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 = slotAccessor.getItemStack()).isEmpty(); 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 dda6344df..72a8ed55e 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 @@ -36,7 +36,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/ContainerSlotAccessor.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/ContainerSlotAccessor.java index b2ff12a3e..467c4b06e 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/ContainerSlotAccessor.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/ContainerSlotAccessor.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.item.ItemStack; /** @@ -53,4 +54,14 @@ public class ContainerSlotAccessor implements SlotAccessor { public ItemStack takeStack(int amount) { return this.container.removeItem(index, amount); } + + @Override + public boolean allowModification(Player player) { + return canPlace(getItemStack()); + } + + @Override + public boolean canPlace(ItemStack stack) { + return this.container.canPlaceItem(index, stack); + } } 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 79513fe40..f2dd1c4e5 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 @@ -41,6 +41,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 6e3c97134..579716dea 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; @@ -54,4 +55,14 @@ public class VanillaSlotAccessor implements SlotAccessor { public Slot getSlot() { return slot; } + + @Override + public boolean allowModification(Player player) { + return slot.allowModification(player); + } + + @Override + public boolean canPlace(ItemStack stack) { + return slot.mayPlace(stack); + } } diff --git a/gradle.properties b/gradle.properties index 6ecca1199..96d747436 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ org.gradle.jvmargs=-Xmx6G base_version=15.0 unstable=false -supported_version=1.20.5 +supported_version=1.20.5/6 minecraft_version=1.20.5 platforms=fabric,neoforge forge_version=49.0.3 diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java index 07a2db41d..19557779c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java @@ -118,6 +118,10 @@ public abstract class InputSlotCrafter<T extends AbstractContainerMenu, C extend } takenStack.setCount(1); + if (!slot.canPlace(takenStack)) { + return; + } + if (slot.getItemStack().isEmpty()) { slot.setItemStack(takenStack); } else { @@ -149,13 +153,22 @@ public abstract class InputSlotCrafter<T extends AbstractContainerMenu, C extend @Nullable public SlotAccessor takeInventoryStack(ItemStack itemStack) { + boolean rejectedModification = false; for (SlotAccessor inventoryStack : inventoryStacks) { ItemStack itemStack1 = inventoryStack.getItemStack(); if (!itemStack1.isEmpty() && areItemsEqual(itemStack, itemStack1) && !itemStack1.isDamaged() && !itemStack1.isEnchanted() && !itemStack1.has(DataComponents.CUSTOM_NAME)) { - return inventoryStack; + if (!inventoryStack.allowModification(player)) { + rejectedModification = true; + } else { + return inventoryStack; + } } } + if (rejectedModification) { + throw new IllegalStateException("Unable to take item from inventory due to slot not allowing modification! Item requested: " + itemStack); + } + return null; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/NewInputSlotCrafter.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/NewInputSlotCrafter.java index a7965324f..653e52d48 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/NewInputSlotCrafter.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/NewInputSlotCrafter.java @@ -77,6 +77,9 @@ public class NewInputSlotCrafter<T extends AbstractContainerMenu, C extends Cont protected void cleanInputs() { for (SlotAccessor slot : getInputSlots()) { ItemStack stackToReturn = slot.getItemStack(); + if (!slot.allowModification(player)) { + throw new IllegalStateException("Slot " + slot + " is not modifiable!"); + } if (!stackToReturn.isEmpty()) { for (; !(stackToReturn = slot.getItemStack()).isEmpty(); slot.takeStack(1)) { ItemStack stackToInsert = stackToReturn.copy(); diff --git a/settings.gradle b/settings.gradle index 4a2b62aaa..9d2f80904 100755 --- a/settings.gradle +++ b/settings.gradle @@ -2,8 +2,8 @@ pluginManagement { repositories { maven { url "https://maven.shedaniel.me/" } maven { url "https://maven.fabricmc.net/" } - maven { url "https://files.minecraftforge.net/maven/" } gradlePluginPortal() + maven { url "https://files.minecraftforge.net/maven/" } } } |
