aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-07-22 20:42:10 +0900
committershedaniel <daniel@shedaniel.me>2024-07-22 20:42:10 +0900
commit3315e4d0560ab3349d8a0513081f91e6a354f181 (patch)
tree9aae5d6324866e5b736b47ec9baeb3135ae599bc
parent3444fd3bb74cc6f9beb47b89c065849fe11302f5 (diff)
downloadRoughlyEnoughItems-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
-rw-r--r--.github/workflows/curseforge.yml2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java4
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/DumpHandler.java2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/SlotAccessor.java9
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/stack/VanillaSlotAccessor.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java15
-rwxr-xr-xsettings.gradle8
7 files changed, 44 insertions, 7 deletions
diff --git a/.github/workflows/curseforge.yml b/.github/workflows/curseforge.yml
index 53d4e3620..e52c0ba2a 100644
--- a/.github/workflows/curseforge.yml
+++ b/.github/workflows/curseforge.yml
@@ -25,7 +25,7 @@ jobs:
with:
java-version: 16
- name: Upload to CurseForge
- run: ./gradlew build publish forge:curseforge fabric:curseforge jei-internals-workaround:curseforge --stacktrace
+ run: ./gradlew build publish fabric:curseforge --stacktrace
env:
danielshe_curse_api_key: ${{ secrets.CF_API_KEY }}
BRANCH_NAME: ${{ github.ref }}
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);
+ }
}
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 9555ac4e7..67311bc8c 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
@@ -134,6 +134,10 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
}
takenStack.setCount(1);
+ if (!slot.canPlace(takenStack)) {
+ return;
+ }
+
if (slot.getItemStack().isEmpty()) {
slot.setItemStack(takenStack);
} else {
@@ -167,13 +171,22 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
@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.hasCustomHoverName()) {
- 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/settings.gradle b/settings.gradle
index be97e596c..1d53ebd9e 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/" }
}
}
@@ -13,7 +13,7 @@ include "api"
include "default-plugin"
include "runtime"
include "fabric"
-include "forge"
+//include "forge"
-include "jei-compatibility-layer"
-include "jei-internals-workaround"
+//include "jei-compatibility-layer"
+//include "jei-internals-workaround"