diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-03-08 17:49:29 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-03-08 17:49:29 +0800 |
| commit | 2e42d6872548241691e28d913681ff6950a4aba9 (patch) | |
| tree | febee27d24f43b74765684269edae240456a6b74 /src/main/java/me | |
| parent | 20a0d31befa8120688b77faf189748ca4c0b9e07 (diff) | |
| download | RoughlyEnoughItems-2e42d6872548241691e28d913681ff6950a4aba9.tar.gz RoughlyEnoughItems-2e42d6872548241691e28d913681ff6950a4aba9.tar.bz2 RoughlyEnoughItems-2e42d6872548241691e28d913681ff6950a4aba9.zip | |
Catch StackOverflow
Diffstat (limited to 'src/main/java/me')
14 files changed, 144 insertions, 104 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 2cac1d50e..497b4e391 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -6,6 +6,7 @@ import me.shedaniel.rei.api.PluginDisabler; import me.shedaniel.rei.api.REIPlugin; import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.client.*; +import me.shedaniel.rei.gui.widget.ItemListOverlay; import me.shedaniel.rei.plugin.DefaultPlugin; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; @@ -98,7 +99,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer(); ItemStack stack = packetByteBuf.readItemStack(); if (player.inventory.insertStack(stack.copy())) - player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", stack.copy().getDisplayName().getFormattedText()).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false); + player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", ItemListOverlay.tryGetItemStackName(stack.copy())).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false); else player.addChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), false); }); diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index ad14db62f..660fa8709 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -77,7 +77,7 @@ public class ClientHelper implements ClientModInitializer { } public static void sendDeletePacket() { - if (GuiHelper.getLastContainerScreen() instanceof CreativePlayerInventoryScreen) { + if (ScreenHelper.getLastContainerScreen() instanceof CreativePlayerInventoryScreen) { MinecraftClient.getInstance().player.inventory.setCursorStack(ItemStack.EMPTY); return; } @@ -107,14 +107,14 @@ public class ClientHelper implements ClientModInitializer { } } - public static boolean executeRecipeKeyBind(ContainerScreenOverlay overlay, ItemStack stack) { + public static boolean executeRecipeKeyBind(ItemStack stack) { Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack); if (map.keySet().size() > 0) MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map)); return map.keySet().size() > 0; } - public static boolean executeUsageKeyBind(ContainerScreenOverlay overlay, ItemStack stack) { + public static boolean executeUsageKeyBind(ItemStack stack) { Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack); if (map.keySet().size() > 0) MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map)); @@ -135,7 +135,7 @@ public class ClientHelper implements ClientModInitializer { return inventoryStacks; } - public static boolean executeViewAllRecipesKeyBind(ContainerScreenOverlay lastOverlay) { + public static boolean executeViewAllRecipesKeyBind() { Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getAllRecipes(); if (map.keySet().size() > 0) MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map)); diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java index 329753add..057f3a4e4 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java @@ -5,6 +5,8 @@ import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.widget.TextFieldWidget; import me.shedaniel.rei.listeners.ContainerScreenHooks; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.event.client.ClientTickCallback; import net.minecraft.client.gui.ContainerScreen; import net.minecraft.client.gui.InputListener; import net.minecraft.client.gui.widget.ButtonWidget; @@ -13,7 +15,7 @@ import net.minecraft.item.ItemStack; import java.util.List; -public class GuiHelper { +public class ScreenHelper implements ClientModInitializer { public static TextFieldWidget searchField; public static List<ItemStack> inventoryStacks = Lists.newArrayList(); @@ -56,11 +58,19 @@ public class GuiHelper { } public static void setLastContainerScreen(ContainerScreen lastContainerScreen) { - GuiHelper.lastContainerScreen = lastContainerScreen; + ScreenHelper.lastContainerScreen = lastContainerScreen; } public static ContainerScreenHooks getLastContainerScreenHooks() { return (ContainerScreenHooks) lastContainerScreen; } + @Override + public void onInitializeClient() { + ClientTickCallback.EVENT.register(client -> { + if (lastContainerScreen != client.currentScreen && client.currentScreen instanceof ContainerScreen) + lastContainerScreen = (ContainerScreen) client.currentScreen; + }); + } + } diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 015d9747a..b295039a7 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -4,7 +4,7 @@ import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.client.Weather; import me.shedaniel.rei.gui.credits.CreditsScreen; import me.shedaniel.rei.gui.widget.*; @@ -80,7 +80,7 @@ public class ContainerScreenOverlay extends ScreenComponent { ClientHelper.setCheating(!ClientHelper.isCheating()); return; } - ClientHelper.openConfigWindow(GuiHelper.getLastContainerScreen()); + ClientHelper.openConfigWindow(ScreenHelper.getLastContainerScreen()); } @Override @@ -107,7 +107,7 @@ public class ContainerScreenOverlay extends ScreenComponent { widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 50 : 10, window.getScaledHeight() - 30, 40, 20, I18n.translate("text.rei.credits")) { @Override public void onPressed(int button, double mouseX, double mouseY) { - MinecraftClient.getInstance().openScreen(new CreditsScreen(GuiHelper.getLastContainerScreen())); + MinecraftClient.getInstance().openScreen(new CreditsScreen(ScreenHelper.getLastContainerScreen())); } }); if (RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons) { @@ -160,8 +160,8 @@ public class ContainerScreenOverlay extends ScreenComponent { itemListOverlay.updateList(getItemListArea(), page, searchTerm); } }); - if (GuiHelper.searchField == null) - GuiHelper.searchField = new TextFieldWidget(0, 0, 0, 0) { + if (ScreenHelper.searchField == null) + ScreenHelper.searchField = new TextFieldWidget(0, 0, 0, 0) { @Override public boolean mouseClicked(double double_1, double double_2, int int_1) { if (isVisible() && getBounds().contains(double_1, double_2) && int_1 == 1) { @@ -171,13 +171,13 @@ public class ContainerScreenOverlay extends ScreenComponent { return super.mouseClicked(double_1, double_2, int_1); } }; - GuiHelper.searchField.setChangedListener(s -> { + ScreenHelper.searchField.setChangedListener(s -> { searchTerm = s; itemListOverlay.updateList(getItemListArea(), page, searchTerm); }); - GuiHelper.searchField.getBounds().setBounds(getTextFieldArea()); - this.widgets.add(GuiHelper.searchField); - GuiHelper.searchField.setText(searchTerm); + ScreenHelper.searchField.getBounds().setBounds(getTextFieldArea()); + this.widgets.add(ScreenHelper.searchField); + ScreenHelper.searchField.setText(searchTerm); if (RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton) this.widgets.add(new CraftableToggleButtonWidget(getCraftableToggleArea()) { @Override @@ -263,7 +263,7 @@ public class ContainerScreenOverlay extends ScreenComponent { RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18); } - return new Rectangle(GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastContainerScreenHooks().rei_getContainerWidth() - widthRemoved, 18); + return new Rectangle(ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft(), window.getScaledHeight() - 22, ScreenHelper.getLastContainerScreenHooks().rei_getContainerWidth() - widthRemoved, 18); } private Rectangle getCraftableToggleArea() { @@ -289,8 +289,8 @@ public class ContainerScreenOverlay extends ScreenComponent { List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes(); if (getLeft() != lastLeft) onInitialized(); - else if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && (!hasSameListContent(new LinkedList<>(GuiHelper.inventoryStacks), currentStacks) || (currentStacks.size() != GuiHelper.inventoryStacks.size()))) { - GuiHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes(); + else if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && (!hasSameListContent(new LinkedList<>(ScreenHelper.inventoryStacks), currentStacks) || (currentStacks.size() != ScreenHelper.inventoryStacks.size()))) { + ScreenHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes(); itemListOverlay.updateList(getItemListArea(), page, searchTerm); } GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -306,15 +306,15 @@ public class ContainerScreenOverlay extends ScreenComponent { private boolean hasSameListContent(List<ItemStack> list1, List<ItemStack> list2) { Collections.sort(list1, (itemStack, t1) -> { - return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText()); + return ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1)); }); Collections.sort(list2, (itemStack, t1) -> { - return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText()); + return ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1)); }); String lastString = String.join("", list1.stream().map(itemStack -> { - return itemStack.getDisplayName().getFormattedText(); + return ItemListOverlay.tryGetItemStackName(itemStack); }).collect(Collectors.toList())), currentString = String.join("", list2.stream().map(itemStack -> { - return itemStack.getDisplayName().getFormattedText(); + return ItemListOverlay.tryGetItemStackName(itemStack); }).collect(Collectors.toList())); return lastString.equals(currentString); } @@ -324,7 +324,7 @@ public class ContainerScreenOverlay extends ScreenComponent { } public void draw(int int_1, int int_2, float float_1) { - if (!GuiHelper.isOverlayVisible()) + if (!ScreenHelper.isOverlayVisible()) return; buttonLeft.enabled = itemListOverlay.getWidgets().size() > 0; buttonRight.enabled = itemListOverlay.getWidgets().size() > 0; @@ -337,7 +337,7 @@ public class ContainerScreenOverlay extends ScreenComponent { private Rectangle calculateBoundary() { if (!RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel) { - int startX = GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft() + GuiHelper.getLastContainerScreenHooks().rei_getContainerWidth() + 10; + int startX = ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft() + ScreenHelper.getLastContainerScreenHooks().rei_getContainerWidth() + 10; int width = window.getScaledWidth() - startX; if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; @@ -355,8 +355,8 @@ public class ContainerScreenOverlay extends ScreenComponent { return widget.getBounds().x; } if (MinecraftClient.getInstance().player.getRecipeBook().isGuiOpen()) - return GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft() - 147 - 30; - return GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft(); + return ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft() - 147 - 30; + return ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft(); } private int getTotalPage() { @@ -365,7 +365,7 @@ public class ContainerScreenOverlay extends ScreenComponent { @Override public boolean mouseScrolled(double amount) { - if (!GuiHelper.isOverlayVisible()) + if (!ScreenHelper.isOverlayVisible()) return false; if (rectangle.contains(ClientHelper.getMouseLocation())) { if (amount > 0 && buttonLeft.enabled) @@ -388,10 +388,10 @@ public class ContainerScreenOverlay extends ScreenComponent { if (listener.keyPressed(int_1, int_2, int_3)) return true; if (ClientHelper.HIDE.matchesKey(int_1, int_2)) { - GuiHelper.toggleOverlayVisible(); + ScreenHelper.toggleOverlayVisible(); return true; } - if (!GuiHelper.isOverlayVisible()) + if (!ScreenHelper.isOverlayVisible()) return false; Point point = ClientHelper.getMouseLocation(); ItemStack itemStack = null; @@ -402,27 +402,27 @@ public class ContainerScreenOverlay extends ScreenComponent { } if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreen recipeViewingWidget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; - for(InputListener listener : recipeViewingWidget.getInputListeners()) - if (listener instanceof ItemSlotWidget && ((HighlightableWidget) listener).isHighlighted(point.x, point.y)) { - itemStack = ((ItemSlotWidget) listener).getCurrentStack(); + for(IWidget widget : recipeViewingWidget.getWidgets()) + if (widget instanceof ItemSlotWidget && ((HighlightableWidget) widget).isHighlighted(point.x, point.y)) { + itemStack = ((ItemSlotWidget) widget).getCurrentStack(); break; } } if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof ContainerScreen) - if (GuiHelper.getLastContainerScreenHooks().rei_getHoveredSlot() != null) - itemStack = GuiHelper.getLastContainerScreenHooks().rei_getHoveredSlot().getStack(); + if (ScreenHelper.getLastContainerScreenHooks().rei_getHoveredSlot() != null) + itemStack = ScreenHelper.getLastContainerScreenHooks().rei_getHoveredSlot().getStack(); if (itemStack != null && !itemStack.isEmpty()) { if (ClientHelper.RECIPE.matchesKey(int_1, int_2)) - return ClientHelper.executeRecipeKeyBind(this, itemStack); + return ClientHelper.executeRecipeKeyBind(itemStack); else if (ClientHelper.USAGE.matchesKey(int_1, int_2)) - return ClientHelper.executeUsageKeyBind(this, itemStack); + return ClientHelper.executeUsageKeyBind(itemStack); } return false; } @Override public boolean charTyped(char char_1, int int_1) { - if (!GuiHelper.isOverlayVisible()) + if (!ScreenHelper.isOverlayVisible()) return false; for(InputListener listener : getInputListeners()) if (listener.charTyped(char_1, int_1)) @@ -437,7 +437,7 @@ public class ContainerScreenOverlay extends ScreenComponent { @Override public boolean mouseClicked(double double_1, double double_2, int int_1) { - if (!GuiHelper.isOverlayVisible()) + if (!ScreenHelper.isOverlayVisible()) return false; return super.mouseClicked(double_1, double_2, int_1); } diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 2948870f7..32a9455a4 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -5,7 +5,7 @@ import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.*; import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.gui.widget.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.audio.PositionedSoundInstance; @@ -79,8 +79,8 @@ public class RecipeViewingScreen extends Screen { return true; } if ((int_1 == 256 || this.client.options.keyInventory.matchesKey(int_1, int_2)) && this.doesEscapeKeyClose()) { - MinecraftClient.getInstance().openScreen(GuiHelper.getLastContainerScreen()); - GuiHelper.getLastOverlay().onInitialized(); + MinecraftClient.getInstance().openScreen(ScreenHelper.getLastContainerScreen()); + ScreenHelper.getLastOverlay().onInitialized(); return true; } if (choosePageActivated) { @@ -103,7 +103,7 @@ public class RecipeViewingScreen extends Screen { public void onInitialized() { super.onInitialized(); this.tabs.clear(); - this.widgets.clear(); + this.widgets = Lists.newLinkedList(); this.largestWidth = window.getScaledWidth() - 100; this.largestHeight = window.getScaledHeight() - 40; this.guiWidth = MathHelper.clamp(getCurrentDisplayed().stream().map(display -> selectedCategory.getDisplayWidth(display)).max(Integer::compareTo).orElse(150) + 30, 0, largestWidth); @@ -120,6 +120,7 @@ public class RecipeViewingScreen extends Screen { currentCategoryIndex = categories.size() - 1; selectedCategory = categories.get(currentCategoryIndex); categoryPages = MathHelper.floor(currentCategoryIndex / 6d); + page = 0; RecipeViewingScreen.this.onInitialized(); } }); @@ -132,6 +133,7 @@ public class RecipeViewingScreen extends Screen { currentCategoryIndex = 0; selectedCategory = categories.get(currentCategoryIndex); categoryPages = MathHelper.floor(currentCategoryIndex / 6d); + page = 0; RecipeViewingScreen.this.onInitialized(); } }); @@ -165,13 +167,13 @@ public class RecipeViewingScreen extends Screen { this.text = selectedCategory.getCategoryName(); super.draw(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) - GuiHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n"))); + ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n"))); } @Override public void onLabelClicked() { MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); - ClientHelper.executeViewAllRecipesKeyBind(GuiHelper.getLastOverlay()); + ClientHelper.executeViewAllRecipesKeyBind(); } }); widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "") { @@ -180,7 +182,7 @@ public class RecipeViewingScreen extends Screen { this.text = String.format("%d/%d", page + 1, getTotalPages(selectedCategory)); super.draw(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) - GuiHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n"))); + ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n"))); } @Override @@ -213,14 +215,12 @@ public class RecipeViewingScreen extends Screen { } } Optional<ButtonAreaSupplier> supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(selectedCategory); - final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(GuiHelper.getLastContainerScreen(), selectedCategory); + final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(ScreenHelper.getLastContainerScreen(), selectedCategory); int recipeHeight = selectedCategory.getDisplayHeight(); List<RecipeDisplay> currentDisplayed = getCurrentDisplayed(); for(int i = 0; i < currentDisplayed.size(); i++) { int finalI = i; - final Supplier<RecipeDisplay> displaySupplier = () -> { - return currentDisplayed.get(finalI); - }; + final Supplier<RecipeDisplay> displaySupplier = () -> currentDisplayed.get(finalI); int displayWidth = selectedCategory.getDisplayWidth(displaySupplier.get()); final Rectangle displayBounds = new Rectangle((int) getBounds().getCenterX() - displayWidth / 2, getBounds().y + 40 + recipeHeight * i + 7 * i, displayWidth, recipeHeight); widgets.addAll(selectedCategory.setupDisplay(displaySupplier, displayBounds)); @@ -232,12 +232,16 @@ public class RecipeViewingScreen extends Screen { else recipeChoosePageWidget = null; - GuiHelper.getLastOverlay().onInitialized(); + ScreenHelper.getLastOverlay().onInitialized(); listeners.addAll(tabs); - listeners.add(GuiHelper.getLastOverlay()); + listeners.add(ScreenHelper.getLastOverlay()); listeners.addAll(widgets); } + public List<IWidget> getWidgets() { + return widgets; + } + public List<RecipeDisplay> getCurrentDisplayed() { List<RecipeDisplay> list = Lists.newArrayList(); int recipesPerPage = getRecipesPerPage(); @@ -293,7 +297,7 @@ public class RecipeViewingScreen extends Screen { GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, delta)); - GuiHelper.getLastOverlay().drawOverlay(mouseX, mouseY, delta); + ScreenHelper.getLastOverlay().drawOverlay(mouseX, mouseY, delta); if (choosePageActivated) { zOffset = 500.0f; this.drawGradientRect(0, 0, this.screenWidth, this.screenHeight, -1072689136, -804253680); diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java index 01f40f9aa..32624584a 100644 --- a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java @@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.config; import com.google.common.collect.Lists; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.client.ItemListOrdering; import me.shedaniel.rei.gui.widget.QueuedTooltip; import me.shedaniel.rei.gui.widget.TextFieldWidget; @@ -35,7 +35,7 @@ public class ConfigScreen extends Screen { public boolean keyPressed(int int_1, int int_2, int int_3) { if (int_1 == 256 && this.doesEscapeKeyClose()) { MinecraftClient.getInstance().openScreen(parent); - GuiHelper.getLastOverlay().onInitialized(); + ScreenHelper.getLastOverlay().onInitialized(); return true; } else { return super.keyPressed(int_1, int_2, int_3); @@ -340,7 +340,7 @@ public class ConfigScreen extends Screen { e.printStackTrace(); } ConfigScreen.this.client.openScreen(parent); - GuiHelper.getLastOverlay().onInitialized(); + ScreenHelper.getLastOverlay().onInitialized(); } }); super.onInitialized(); diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java index 7f727ae4c..40e4aed80 100644 --- a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java @@ -1,6 +1,6 @@ package me.shedaniel.rei.gui.credits; -import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.ScreenHelper; import net.minecraft.client.gui.ContainerScreen; import net.minecraft.client.gui.InputListener; import net.minecraft.client.gui.Screen; @@ -21,7 +21,7 @@ public class CreditsScreen extends Screen { public boolean keyPressed(int int_1, int int_2, int int_3) { if (int_1 == 256 && this.doesEscapeKeyClose()) { this.client.openScreen(parent); - GuiHelper.getLastOverlay().onInitialized(); + ScreenHelper.getLastOverlay().onInitialized(); return true; } return super.keyPressed(int_1, int_2, int_3); @@ -38,7 +38,7 @@ public class CreditsScreen extends Screen { @Override public void onPressed(double double_1, double double_2) { CreditsScreen.this.client.openScreen(parent); - GuiHelper.getLastOverlay().onInitialized(); + ScreenHelper.getLastOverlay().onInitialized(); } }); } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java index 8006d5846..dbd44bc9e 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java @@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.widget; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.ScreenHelper; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.GuiLighting; @@ -48,7 +48,7 @@ public abstract class CraftableToggleButtonWidget extends ButtonWidget { } private void drawTooltip() { - GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate(RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() ? "text.rei.showing_craftable" : "text.rei.showing_all")))); + ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate(RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() ? "text.rei.showing_craftable" : "text.rei.showing_all")))); } } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java index 129ef1051..4d5916a15 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java @@ -4,16 +4,18 @@ import com.google.common.collect.Lists; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.GuiHelper; import me.shedaniel.rei.client.ItemListOrdering; +import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.client.SearchArgument; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.resource.language.I18n; +import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.registry.Registry; import org.apache.commons.lang3.StringUtils; import java.awt.*; @@ -24,6 +26,7 @@ import java.util.stream.Stream; public class ItemListOverlay extends DrawableHelper implements IWidget { + private static List<Item> searchBlacklisted = Lists.newArrayList(); private List<IWidget> widgets; private int width, height, page; private Rectangle rectangle, listArea; @@ -36,6 +39,33 @@ public class ItemListOverlay extends DrawableHelper implements IWidget { this.page = page; } + public static List<String> tryGetItemStackToolTip(ItemStack itemStack) { + if (!searchBlacklisted.contains(itemStack.getItem())) + try { + return MinecraftClient.getInstance().currentScreen.getStackTooltip(itemStack); + } catch (Throwable e) { + e.printStackTrace(); + searchBlacklisted.add(itemStack.getItem()); + } + return Collections.singletonList(tryGetItemStackName(itemStack)); + } + + public static String tryGetItemStackName(ItemStack stack) { + if (!searchBlacklisted.contains(stack.getItem())) + try { + return stack.getDisplayName().getFormattedText(); + } catch (Throwable e) { + e.printStackTrace(); + searchBlacklisted.add(stack.getItem()); + } + try { + return I18n.translate("item." + Registry.ITEM.getId(stack.getItem()).toString().replace(":", ".")); + } catch (Throwable e) { + e.printStackTrace(); + } + return "ERROR"; + } + public int getTotalSlotsPerPage() { return width * height; } @@ -45,7 +75,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget { widgets.forEach(widget -> widget.draw(int_1, int_2, float_1)); ClientPlayerEntity player = MinecraftClient.getInstance().player; if (rectangle.contains(ClientHelper.getMouseLocation()) && ClientHelper.isCheating() && !player.inventory.getCursorStack().isEmpty() && MinecraftClient.getInstance().isInSingleplayer()) - GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items")))); + ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items")))); } public List<IWidget> getWidgets() { @@ -55,7 +85,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget { public void updateList(Rectangle bounds, int page, String searchTerm) { this.rectangle = bounds; this.widgets = Lists.newLinkedList(); - currentDisplayed = processSearchTerm(searchTerm, RoughlyEnoughItemsCore.getItemRegisterer().getItemList(), GuiHelper.inventoryStacks); + currentDisplayed = processSearchTerm(searchTerm, RoughlyEnoughItemsCore.getItemRegisterer().getItemList(), ScreenHelper.inventoryStacks); this.page = page; calculateListSize(rectangle); double startX = rectangle.getCenterX() - width * 9; @@ -83,9 +113,9 @@ public class ItemListOverlay extends DrawableHelper implements IWidget { return ClientHelper.tryCheatingStack(cheatedStack); } |
