diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-09-22 12:20:12 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-09-22 12:20:12 +0800 |
| commit | 72e44a1432f831bdbd42f1c8a574bf22e8b4a481 (patch) | |
| tree | 42ce881152e2dab8f4378612c45226ea9b0a773a /RoughlyEnoughItems-runtime/src/main/java | |
| parent | b76420e3bd81886593587c295284b33e57b29cdf (diff) | |
| download | RoughlyEnoughItems-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/main/java')
15 files changed, 207 insertions, 125 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 = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) private AppearanceTheme theme = AppearanceTheme.LIGHT; @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) |
