aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-07-22 21:56:36 +0900
committershedaniel <daniel@shedaniel.me>2024-07-22 21:56:36 +0900
commit6da90a5afb428fdb218820a9cfbd0e423bc2558f (patch)
tree515b11c0106da375f13391aa3715a56a147404f0 /runtime
parent81e9c38c8390196b25843d3f3949b5d52477b3a8 (diff)
parente80ca84f1affb91d2388ddb298bfc6b141828cad (diff)
downloadRoughlyEnoughItems-6da90a5afb428fdb218820a9cfbd0e423bc2558f.tar.gz
RoughlyEnoughItems-6da90a5afb428fdb218820a9cfbd0e423bc2558f.tar.bz2
RoughlyEnoughItems-6da90a5afb428fdb218820a9cfbd0e423bc2558f.zip
Merge remote-tracking branch 'refs/remotes/origin/9.x-1.19' into 11.x-1.19.4
Diffstat (limited to 'runtime')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigGroupWidget.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/NewInputSlotCrafter.java3
4 files changed, 28 insertions, 2 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigGroupWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigGroupWidget.java
index 161a38f69..2c9548c85 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigGroupWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigGroupWidget.java
@@ -25,6 +25,7 @@ package me.shedaniel.rei.impl.client.gui.config.components;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.client.REIRuntime;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
@@ -37,6 +38,7 @@ import me.shedaniel.rei.impl.client.gui.config.options.preview.AccessibilityDisp
import me.shedaniel.rei.impl.client.gui.config.options.preview.InterfacePreviewer;
import me.shedaniel.rei.impl.client.gui.config.options.preview.TooltipPreviewer;
import me.shedaniel.rei.impl.client.gui.text.TextTransformations;
+import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiComponent;
import org.apache.commons.lang3.tuple.Pair;
import org.jetbrains.annotations.Nullable;
@@ -66,6 +68,10 @@ public class ConfigGroupWidget {
.withPadding(0, 0, 0, 6);
WidgetWithBounds contents;
+ if (applyPreview) {
+ applyPreview = REIRuntime.getInstance().getPreviousContainerScreen() != null && Minecraft.getInstance().getConnection() != null && Minecraft.getInstance().getConnection().getRecipeManager() != null;
+ }
+
if (applyPreview && SPECIAL_GROUPS.containsKey(entry.getId())) {
Pair<PreviewLocation, SpecialGroupConstructor> pair = SPECIAL_GROUPS.get(entry.getId());
PreviewLocation location = pair.getLeft();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java
index 4f5ffe12d..e4b1faec3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java
@@ -116,6 +116,10 @@ public class PaginatedEntryListWidget extends CollapsingEntryListWidget {
}
public int getTotalPages() {
+ return getTotalPages(entries);
+ }
+
+ public int getTotalPages(List<?> entries) {
return Mth.ceil(stacks.size() / (float) entries.size());
}
@@ -134,7 +138,7 @@ public class PaginatedEntryListWidget extends CollapsingEntryListWidget {
}
}
}
- page = Math.max(Math.min(page, getTotalPages() - 1), 0);
+ page = Mth.clamp(page, 0, getTotalPages(entries) - 1);
int skip = Math.max(0, page * entries.size());
List</*EntryStack<?> | List<EntryStack<?>>*/ Object> subList = stacks.subList(skip, Math.min(stacks.size(), skip + entries.size()));
Int2ObjectMap<CollapsedStack> indexedCollapsedStack = getCollapsedStackIndexed();
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 7cbf4ebcd..52c8d8503 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
@@ -117,6 +117,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 {
@@ -148,13 +152,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.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/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 a2d35f24d..36bd20fd2 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();