aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-runtime/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-09-22 12:20:12 +0800
committershedaniel <daniel@shedaniel.me>2020-09-22 12:20:12 +0800
commit72e44a1432f831bdbd42f1c8a574bf22e8b4a481 (patch)
tree42ce881152e2dab8f4378612c45226ea9b0a773a /RoughlyEnoughItems-runtime/src
parentb76420e3bd81886593587c295284b33e57b29cdf (diff)
downloadRoughlyEnoughItems-72e44a1432f831bdbd42f1c8a574bf22e8b4a481.tar.gz
RoughlyEnoughItems-72e44a1432f831bdbd42f1c8a574bf22e8b4a481.tar.bz2
RoughlyEnoughItems-72e44a1432f831bdbd42f1c8a574bf22e8b4a481.zip
Fix #409 and more
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-runtime/src')
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java17
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java15
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java70
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java7
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java4
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java6
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java74
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java30
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java34
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java2
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java16
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java2
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java11
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/TextTransformations.java21
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/widgets/LabelWidget.java23
-rw-r--r--RoughlyEnoughItems-runtime/src/main/resources/fabric.mod.json14
-rw-r--r--RoughlyEnoughItems-runtime/src/main/resources/roughlyenoughitems-runtime.accessWidener3
17 files changed, 218 insertions, 131 deletions
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index 1cb9b885f..a437bdfe1 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -74,7 +74,10 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
@ApiStatus.Internal
public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverlay {
@@ -319,7 +322,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
}
subsetsButtonBounds = getSubsetsButtonBounds();
if (ConfigObject.getInstance().isSubsetsEnabled()) {
- widgets.add(InternalWidgets.wrapLateRenderable(InternalWidgets.wrapTranslate(Widgets.createButton(subsetsButtonBounds, ((ClientHelperImpl) ClientHelper.getInstance()).isAprilFools.get() ? new TranslatableComponent("text.rei.tiny_potato") : new TranslatableComponent("text.rei.subsets"))
+ widgets.add(InternalWidgets.wrapLateRenderable(InternalWidgets.wrapTranslate(Widgets.createButton(subsetsButtonBounds, ClientHelperImpl.getInstance().isAprilFools.get() ? new TranslatableComponent("text.rei.tiny_potato") : new TranslatableComponent("text.rei.subsets"))
.onClick(button -> {
if (subsetsMenu == null) {
wrappedSubsetsMenu = InternalWidgets.wrapTranslate(InternalWidgets.wrapLateRenderable(this.subsetsMenu = Menu.createSubsetsMenuFromRegistry(new Point(this.subsetsButtonBounds.x, this.subsetsButtonBounds.getMaxY()))), 0, 0, 400);
@@ -338,7 +341,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
}).tooltipLine(I18n.get("text.rei.go_back_first_page")).focusable(false).onRender((matrices, label) -> {
label.setClickable(ENTRY_LIST_WIDGET.getTotalPages() > 1);
label.setText(new TextComponent(String.format("%s/%s", ENTRY_LIST_WIDGET.getPage() + 1, Math.max(ENTRY_LIST_WIDGET.getTotalPages(), 1))));
- }));
+ }).rainbow(new Random().nextFloat() < 1.0E-4D || ClientHelperImpl.getInstance().isAprilFools.get()));
}
if (ConfigObject.getInstance().isCraftableFilterEnabled()) {
Rectangle area = getCraftableToggleArea();
@@ -589,10 +592,10 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
public void renderTooltipInner(PoseStack matrices, List<FormattedCharSequence> lines, int mouseX, int mouseY) {
if (lines.isEmpty())
return;
- tooltipWidth = lines.stream().map(font::width).max(Integer::compareTo).get();
- tooltipHeight = lines.size() <= 1 ? 8 : lines.size() * 10;
- tooltipLines = lines;
- ScreenHelper.drawHoveringWidget(matrices, mouseX, mouseY, renderTooltipCallback, tooltipWidth, tooltipHeight, 0);
+ matrices.pushPose();
+ matrices.translate(0, 0, 500);
+ minecraft.screen.renderTooltip(matrices, lines, mouseX, mouseY);
+ matrices.popPose();
}
public void addTooltip(@Nullable Tooltip tooltip) {
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java
index 02499b3e0..f0ba31ad2 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java
@@ -327,17 +327,18 @@ public class FilteringScreen extends Screen {
}
public void updateEntriesPosition() {
+ int entrySize = entrySize();
this.innerBounds = updateInnerBounds(getBounds());
- int width = innerBounds.width / entrySize();
- int pageHeight = innerBounds.height / entrySize();
+ int width = innerBounds.width / entrySize;
+ int pageHeight = innerBounds.height / entrySize;
int slotsToPrepare = Math.max(entryStacks.size() * 3, width * pageHeight * 3);
int currentX = 0;
int currentY = 0;
List<EntryListEntry> entries = Lists.newArrayList();
for (int i = 0; i < slotsToPrepare; i++) {
- int xPos = currentX * entrySize() + innerBounds.x;
- int yPos = currentY * entrySize() + innerBounds.y;
- entries.add(new EntryListEntry(xPos, yPos));
+ int xPos = currentX * entrySize + innerBounds.x;
+ int yPos = currentY * entrySize + innerBounds.y;
+ entries.add(new EntryListEntry(xPos, yPos, entrySize));
currentX++;
if (currentX >= width) {
currentX = 0;
@@ -453,10 +454,10 @@ public class FilteringScreen extends Screen {
private boolean filtered = false;
private boolean dirty = true;
- private EntryListEntry(int x, int y) {
+ private EntryListEntry(int x, int y, int entrySize) {
super(new Point(x, y));
this.backupY = y;
- getBounds().width = getBounds().height = entrySize();
+ getBounds().width = getBounds().height = entrySize;
interactableFavorites(false);
interactable(false);
noHighlight();
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java
index a2eebcd7f..da188dbd8 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java
@@ -25,12 +25,20 @@ package me.shedaniel.rei.gui.credits;
import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
+import me.shedaniel.rei.impl.TextTransformations;
+import net.minecraft.ChatFormatting;
+import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiComponent;
+import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.TextComponent;
+import net.minecraft.sounds.SoundEvents;
import net.minecraft.util.FormattedCharSequence;
import org.jetbrains.annotations.ApiStatus;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.List;
@ApiStatus.Internal
@@ -139,4 +147,66 @@ public class CreditsEntryListWidget extends DynamicNewSmoothScrollingEntryListWi
}
}
+ public static class LinkItem extends CreditsItem {
+ private Component text;
+ private List<FormattedCharSequence> textSplit;
+ private String link;
+ private boolean contains;
+ private boolean rainbow;
+
+ public LinkItem(Component text, String link, int width, boolean rainbow) {
+ this.text = text;
+ this.textSplit = Minecraft.getInstance().font.split(text, width);
+ this.link = link;
+ this.rainbow = rainbow;
+ }
+
+ @Override
+ public void render(PoseStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
+ contains = mouseX >= x && mouseX <= x + entryWidth && mouseY >= y && mouseY <= y + entryHeight;
+ if (contains) {
+ Minecraft.getInstance().screen.renderTooltip(matrices, new TextComponent("Click to open link."), mouseX, mouseY);
+ int yy = y;
+ for (FormattedCharSequence textSp : textSplit) {
+ FormattedCharSequence underlined = characterVisitor -> {
+ return textSp.accept((charIndex, style, codePoint) -> characterVisitor.accept(charIndex, style.applyFormat(ChatFormatting.UNDERLINE), codePoint));
+ };
+ if (rainbow) underlined = TextTransformations.applyRainbow(underlined, x + 5, yy);
+ Minecraft.getInstance().font.drawShadow(matrices, underlined, x + 5, yy, 0xff1fc3ff);
+ yy += 12;
+ }
+ } else {
+ int yy = y;
+ for (FormattedCharSequence textSp : textSplit) {
+ if (rainbow) textSp = TextTransformations.applyRainbow(textSp, x + 5, yy);
+ Minecraft.getInstance().font.drawShadow(matrices, textSp, x + 5, yy, 0xff1fc3ff);
+ yy += 12;
+ }
+ }
+ }
+
+ @Override
+ public int getItemHeight() {
+ return 12 * textSplit.size();
+ }
+
+ @Override
+ public boolean changeFocus(boolean boolean_1) {
+ return false;
+ }
+
+ @Override
+ public boolean mouseClicked(double mouseX, double mouseY, int button) {
+ if (contains && button == 0) {
+ Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
+ try {
+ Util.getPlatform().openUri(new URI(link));
+ return true;
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
+ }
}
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
index 8d62d4bc4..acded0329 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
@@ -31,6 +31,7 @@ import me.shedaniel.rei.impl.ScreenHelper;
import me.shedaniel.rei.utils.ImmutableLiteralText;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.metadata.CustomValue;
+import net.minecraft.client.gui.GuiComponent;
import net.minecraft.client.gui.chat.NarratorChatListener;
import net.minecraft.client.gui.components.AbstractButton;
import net.minecraft.client.gui.screens.Screen;
@@ -112,6 +113,10 @@ public class CreditsScreen extends Screen {
}
} else entryListWidget.creditsAddEntry(new TextCreditsItem(new ImmutableLiteralText(line)));
entryListWidget.creditsAddEntry(new TextCreditsItem(NarratorChatListener.NO_TITLE));
+ entryListWidget.creditsAddEntry(new CreditsEntryListWidget.LinkItem(new ImmutableLiteralText("Visit the project at GitHub."), "https://www.github.com/shedaniel/RoughlyEnoughItems", entryListWidget.getItemWidth(), false));
+ entryListWidget.creditsAddEntry(new CreditsEntryListWidget.LinkItem(new ImmutableLiteralText("Visit the project page at CurseForge."), "https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items", entryListWidget.getItemWidth(), false));
+ entryListWidget.creditsAddEntry(new CreditsEntryListWidget.LinkItem(new ImmutableLiteralText("Support the project via Patreon!"), "https://patreon.com/shedaniel", entryListWidget.getItemWidth(), true));
+ entryListWidget.creditsAddEntry(new TextCreditsItem(NarratorChatListener.NO_TITLE));
children.add(buttonDone = new AbstractButton(width / 2 - 100, height - 26, 200, 20, new TranslatableComponent("gui.done")) {
@Override
public void onPress() {
@@ -133,7 +138,7 @@ public class CreditsScreen extends Screen {
public void render(PoseStack matrices, int int_1, int int_2, float float_1) {
this.renderDirtBackground(0);
this.entryListWidget.render(matrices, int_1, int_2, float_1);
- this.drawCenteredString(matrices, this.font, I18n.get("text.rei.credits"), this.width / 2, 16, 16777215);
+ drawCenteredString(matrices, this.font, I18n.get("text.rei.credits"), this.width / 2, 16, 16777215);
super.render(matrices, int_1, int_2, float_1);
buttonDone.render(matrices, int_1, int_2, float_1);
}
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java
index ca940c704..9f3ff4995 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java
@@ -68,12 +68,12 @@ public class DefaultRuntimePlugin implements REIPluginV0 {
@Override
public boolean isEmpty() {
- return !((ClientHelperImpl) ClientHelper.getInstance()).isAprilFools.get();
+ return !ClientHelperImpl.getInstance().isAprilFools.get();
}
@Override
public @Nullable Tooltip getTooltip(Point point) {
- return Tooltip.create(new TextComponent("Kibby"));
+ return Tooltip.create(new TextComponent("Kirby"), ClientHelper.getInstance().getFormattedModFromModId("Dream Land"));
}
});
}
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java
index 9ab35d8f0..f01e16d37 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java
@@ -31,15 +31,13 @@ import me.shedaniel.rei.api.EntryStack;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.world.item.Item;
-import static me.shedaniel.rei.gui.widget.EntryListWidget.entrySize;
-
public class EntryListEntryWidget extends EntryWidget {
public int backupY;
- protected EntryListEntryWidget(Point point) {
+ protected EntryListEntryWidget(Point point, int entrySize) {
super(point);
this.backupY = point.y;
- getBounds().width = getBounds().height = entrySize();
+ getBounds().width = getBounds().height = entrySize;
}
@Override
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
index eea8a5e30..3142f4517 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
@@ -112,31 +112,42 @@ public class EntryListWidget extends WidgetWithBounds {
return Mth.ceil(SIZE * ConfigObject.getInstance().getEntrySize());
}
- static boolean notSteppingOnExclusionZones(int left, int top, Rectangle listArea) {
+ static boolean notSteppingOnExclusionZones(int left, int top, int width, int height, Rectangle listArea) {
Minecraft instance = Minecraft.getInstance();
for (OverlayDecider decider : DisplayHelper.getInstance().getSortedOverlayDeciders(instance.screen.getClass())) {
- InteractionResult fit = decider.isInZone(left, top);
- if (fit == InteractionResult.FAIL)
- return false;
- InteractionResult fit2 = decider.isInZone(left + 18, top + 18);
- if (fit2 == InteractionResult.FAIL)
- return false;
- if (fit == InteractionResult.SUCCESS && fit2 == InteractionResult.SUCCESS)
- return true;
+ InteractionResult fit = canItemSlotWidgetFit(left, top, width, height, decider);
+ if (fit != InteractionResult.PASS)
+ return fit == InteractionResult.SUCCESS;
}
return true;
}
+ private static InteractionResult canItemSlotWidgetFit(int left, int top, int width, int height, OverlayDecider decider) {
+ InteractionResult fit;
+ fit = decider.isInZone(left, top);
+ if (fit != InteractionResult.PASS)
+ return fit;
+ fit = decider.isInZone(left + width, top);
+ if (fit != InteractionResult.PASS)
+ return fit;
+ fit = decider.isInZone(left, top + height);
+ if (fit != InteractionResult.PASS)
+ return fit;
+ fit = decider.isInZone(left + width, top + height);
+ return fit;
+ }
+
private static Rectangle updateInnerBounds(Rectangle bounds) {
+ int entrySize = entrySize();
if (ConfigObject.getInstance().isEntryListWidgetScrolled()) {
- int width = Math.max(Mth.floor((bounds.width - 2 - 6) / (float) entrySize()), 1);
+ int width = Math.max(Mth.floor((bounds.width - 2 - 6) / (float) entrySize), 1);
if (ConfigObject.getInstance().isLeftHandSidePanel())
- return new Rectangle((int) (bounds.getCenterX() - width * (entrySize() / 2f) + 3), bounds.y, width * entrySize(), bounds.height);
- return new Rectangle((int) (bounds.getCenterX() - width * (entrySize() / 2f) - 3), bounds.y, width * entrySize(), bounds.height);
+ return new Rectangle((int) (bounds.getCenterX() - width * (entrySize / 2f) + 3), bounds.y, width * entrySize, bounds.height);
+ return new Rectangle((int) (bounds.getCenterX() - width * (entrySize / 2f) - 3), bounds.y, width * entrySize, bounds.height);
}
- int width = Math.max(Mth.floor((bounds.width - 2) / (float) entrySize()), 1);
- int height = Math.max(Mth.floor((bounds.height - 2) / (float) entrySize()), 1);
- return new Rectangle((int) (bounds.getCenterX() - width * (entrySize() / 2f)), (int) (bounds.getCenterY() - height * (entrySize() / 2f)), width * entrySize(), height * entrySize());
+ int width = Math.max(Mth.floor((bounds.width - 2) / (float) entrySize), 1);
+ int height = Math.max(Mth.floor((bounds.height - 2) / (float) entrySize), 1);
+ return new Rectangle((int) (bounds.getCenterX() - width * (entrySize / 2f)), (int) (bounds.getCenterY() - height * (entrySize / 2f)), width * entrySize, height * entrySize);
}
@Override
@@ -234,9 +245,11 @@ public class EntryListWidget extends WidgetWithBounds {
blockedCount = 0;
Stream<EntryListEntry> entryStream = this.entries.stream().skip(nextIndex).filter(entry -> {
- entry.getBounds().y = (int) (entry.backupY - scrolling.scrollAmount);
- if (entry.getBounds().y > bounds.getMaxY()) return false;
- if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) {
+ Rectangle entryBounds = entry.getBounds();
+
+ entryBounds.y = (int) (entry.backupY - scrolling.scrollAmount);
+ if (entryBounds.y > this.bounds.getMaxY()) return false;
+ if (notSteppingOnExclusionZones(entryBounds.x, entryBounds.y, entryBounds.width, entryBounds.height, innerBounds)) {
EntryStack stack = allStacks.get(i[0]++);
if (!stack.isEmpty()) {
entry.entry(stack);
@@ -368,17 +381,20 @@ public class EntryListWidget extends WidgetWithBounds {
}
public void updateEntriesPosition() {
+ int entrySize = entrySize();
this.innerBounds = updateInnerBounds(bounds);
if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) {
this.renders = Lists.newArrayList();
page = Math.max(page, 0);
List<EntryListEntry> entries = Lists.newArrayList();
- int width = innerBounds.width / entrySize();
- int height = innerBounds.height / entrySize();
+ int width = innerBounds.width / entrySize;
+ int height = innerBounds.height / entrySize;
for (int currentY = 0; currentY < height; currentY++) {
for (int currentX = 0; currentX < width; currentX++) {
- if (notSteppingOnExclusionZones(currentX * entrySize() + innerBounds.x, currentY * entrySize() + innerBounds.y, innerBounds)) {
- entries.add((EntryListEntry) new EntryListEntry(currentX * entrySize() + innerBounds.x, currentY * entrySize() + innerBounds.y).noBackground());
+ int slotX = currentX * entrySize + innerBounds.x;
+ int slotY = currentY * entrySize + innerBounds.y;
+ if (notSteppingOnExclusionZones(slotX - 1, slotY - 1, entrySize, entrySize, innerBounds)) {
+ entries.add((EntryListEntry) new EntryListEntry(slotX, slotY, entrySize).noBackground());
}
}
}
@@ -393,16 +409,16 @@ public class EntryListWidget extends WidgetWithBounds {
this.widgets.addAll(entries);
} else {
page = 0;
- int width = innerBounds.width / entrySize();
- int pageHeight = innerBounds.height / entrySize();
+ int width = innerBounds.width / entrySize;
+ int pageHeight = innerBounds.height / entrySize;
int slotsToPrepare = Math.max(allStacks.size() * 3, width * pageHeight * 3);
int currentX = 0;
int currentY = 0;
List<EntryListEntry> entries = Lists.newArrayList();
for (int i = 0; i < slotsToPrepare; i++) {
- int xPos = currentX * entrySize() + innerBounds.x;
- int yPos = currentY * entrySize() + innerBounds.y;
- entries.add((EntryListEntry) new EntryListEntry(xPos, yPos).noBackground());
+ int xPos = currentX * entrySize + innerBounds.x;
+ int yPos = currentY * entrySize + innerBounds.y;
+ entries.add((EntryListEntry) new EntryListEntry(xPos, yPos, entrySize).noBackground());
currentX++;
if (currentX >= width) {
currentX = 0;
@@ -531,8 +547,8 @@ public class EntryListWidget extends WidgetWithBounds {
}
private class EntryListEntry extends EntryListEntryWidget {
- private EntryListEntry(int x, int y) {
- super(new Point(x, y));
+ private EntryListEntry(int x, int y, int entrySize) {
+ super(new Point(x, y), entrySize);
}
@Override
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java
index cb9171296..a27adc88d 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java
@@ -84,10 +84,11 @@ public class FavoritesListWidget extends WidgetWithBounds {
private boolean draggingScrollBar = false;
private static Rectangle updateInnerBounds(Rectangle bounds) {
- int width = Math.max(Mth.floor((bounds.width - 2 - 6) / (float) entrySize()), 1);
+ int entrySize = entrySize();
+ int width = Math.max(Mth.floor((bounds.width - 2 - 6) / (float) entrySize), 1);
if (!ConfigObject.getInstance().isLeftHandSidePanel())
- return new Rectangle((int) (bounds.getCenterX() - width * (entrySize() / 2f) + 3), bounds.y, width * entrySize(), bounds.height);
- return new Rectangle((int) (bounds.getCenterX() - width * (entrySize() / 2f) - 3), bounds.y, width * entrySize(), bounds.height);
+ return new Rectangle((int) (bounds.getCenterX() - width * (entrySize / 2f) + 3), bounds.y, width * entrySize, bounds.height);
+ return new Rectangle((int) (bounds.getCenterX() - width * (entrySize / 2f) - 3), bounds.y, width * entrySize, bounds.height);
}
@Override
@@ -119,9 +120,11 @@ public class FavoritesListWidget extends WidgetWithBounds {
blockedCount = 0;
Stream<EntryListEntry> entryStream = this.entries.stream().skip(nextIndex).filter(entry -> {
- entry.getBounds().y = (int) (entry.backupY - scrolling.scrollAmount);
- if (entry.getBounds().y > bounds.getMaxY()) return false;
- if (notSteppingOnExclusionZones(entry.getBounds().x, entry.getBounds().y, innerBounds)) {
+ Rectangle entryBounds = entry.getBounds();
+
+ entryBounds.y = (int) (entry.backupY - scrolling.scrollAmount);
+ if (entryBounds.y > this.bounds.getMaxY()) return false;
+ if (notSteppingOnExclusionZones(entryBounds.x, entryBounds.y, entryBounds.width, entryBounds.height, innerBounds)) {
EntryStack stack = favorites.get(i[0]++);
if (!stack.isEmpty()) {
entry.entry(stack);
@@ -242,17 +245,18 @@ public class FavoritesListWidget extends WidgetWithBounds {
}
public void updateEntriesPosition() {
+ int entrySize = entrySize();
this.innerBounds = updateInnerBounds(bounds);
- int width = innerBounds.width / entrySize();
- int pageHeight = innerBounds.height / entrySize();
+ int width = innerBounds.width / entrySize;
+ int pageHeight = innerBounds.height / entrySize;
int slotsToPrepare = Math.max(favorites.size() * 3, width * pageHeight * 3);
int currentX = 0;
int currentY = 0;
List<EntryListEntry> entries = Lists.newArrayList();
for (int i = 0; i < slotsToPrepare; i++) {
- int xPos = currentX * entrySize() + innerBounds.x;
- int yPos = currentY * entrySize() + innerBounds.y;
- entries.add((EntryListEntry) new EntryListEntry(xPos, yPos).noBackground());
+ int xPos = currentX * entrySize + innerBounds.x;
+ int yPos = currentY * entrySize + innerBounds.y;
+ entries.add((EntryListEntry) new EntryListEntry(xPos, yPos, entrySize).noBackground());
currentX++;
if (currentX >= width) {
currentX = 0;
@@ -295,8 +299,8 @@ public class FavoritesListWidget extends WidgetWithBounds {
}
private class EntryListEntry extends EntryListEntryWidget {
- private EntryListEntry(int x, int y) {
- super(new Point(x, y));
+ private EntryListEntry(int x, int y, int entrySize) {
+ super(new Point(x, y), entrySize);
}
@Override
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
index b07898abe..50da7c39e 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
@@ -40,24 +40,17 @@ import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.metadata.ModMetadata;
-import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.chat.NarratorChatListener;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
-import net.minecraft.core.Registry;
import net.minecraft.network.FriendlyByteBuf;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.LazyLoadedValue;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Inventory;
-import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.item.Items;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -66,7 +59,6 @@ import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import static me.shedaniel.rei.impl.Internals.attachInstance;
@@ -103,29 +95,6 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
}
@Override
- public Component getFormattedModFromItem(Item item) {
- String mod = getModFromItem(item);
- if (mod.isEmpty())
- return NarratorChatListener.NO_TITLE;
- return new TextComponent(mod).withStyle(ChatFormatting.BLUE, ChatFormatting.ITALIC);
- }
-
- @Override
- public Component getFormattedModFromIdentifier(ResourceLocation identifier) {
- String mod = getModFromIdentifier(identifier);
- if (mod.isEmpty())
- return NarratorChatListener.NO_TITLE;
- return new TextComponent(mod).withStyle(ChatFormatting.BLUE, ChatFormatting.ITALIC);
- }
-
- @Override
- public String getModFromItem(Item item) {
- if (item.equals(Items.AIR))
- return "";
- return getModFromIdentifier(Registry.ITEM.getKey(item));
- }
-
- @Override
public String getModFromModId(String modid) {
if (modid == null)
return "";
@@ -296,7 +265,8 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
@Nullable private ResourceLocation preferredOpenedCategory = null;
@Nullable private EntryStack inputNotice;
@Nullable private EntryStack outputNotice;
- @NotNull private final LazyLoadedValue<Map<RecipeCategory<?>, List<RecipeDisplay>>> map = new LazyLoadedValue<>(() -> RecipeHelper.getInstance().buildMapFor(this));
+ @NotNull
+ private final LazyLoadedValue<Map<RecipeCategory<?>, List<RecipeDisplay>>> map = new LazyLoadedValue<>(() -> RecipeHelper.getInstance().buildMapFor(this));
@Override
public ClientHelper.ViewSearchBuilder addCategory(ResourceLocation category) {
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
index 1037f6ac4..0be9b9e12 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
@@ -382,7 +382,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
}
public static class Appearance {
- @UseSpecialRecipeTypeScreen private RecipeScreenType recipeScreenType = RecipeScreenType.UNSET;
+ @UseSpecialRecipeTypeScreen private RecipeScreenType recipeScreenType = RecipeScreenType.ORIGINAL;
@Comment("Declares the appearance of REI windows.") @ConfigEntry.Gui.EnumHandler(option = Con