From 20d6e540e396cab5deed9bfba712d8ca5af96113 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 8 Sep 2017 12:27:31 +0200 Subject: [PATCH] Added protection for other mods causing crashes when drawing an item or display name --- CHANGELOG.md | 1 + .../refinedstorage/gui/GuiBase.java | 12 +++++- .../gui/grid/stack/GridStackItem.java | 40 ++++++++++++------- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb7ac65f2..ca3b4593c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Added Project E integration for the External Storage on the Transmutation Table (raoulvdberge) - Added Project E integration for the energy values of Solderer items (raoulvdberge) - Added support for more than 4 grid tabs in the Grid by putting filters IN filters (raoulvdberge) +- Added protection for other mods causing crashes when drawing an item or display name (raoulvdberge) - Fixed network not disconnecting when Controller is broken (raoulvdberge) - Fixed bug where when multiple Fortune Upgrades are inserted, it chooses the first Fortune Upgrade instead of the highest one (raoulvdberge) - Fixed some translations having too big "Craft" text (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java index 24ba9fce5..a57d96915 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java @@ -261,7 +261,11 @@ public abstract class GuiBase extends GuiContainer { zLevel = 200.0F; itemRender.zLevel = 200.0F; - itemRender.renderItemIntoGUI(stack, x, y); + try { + itemRender.renderItemIntoGUI(stack, x, y); + } catch (Throwable t) { + // NO OP + } if (withOverlay) { drawItemOverlay(stack, text, x, y); @@ -272,7 +276,11 @@ public abstract class GuiBase extends GuiContainer { } public void drawItemOverlay(ItemStack stack, @Nullable String text, int x, int y) { - itemRender.renderItemOverlayIntoGUI(fontRenderer, stack, x, y, ""); + try { + itemRender.renderItemOverlayIntoGUI(fontRenderer, stack, x, y, ""); + } catch (Throwable t) { + // NO OP + } if (text != null) { drawQuantity(x, y, text); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java index 9205fe297..0a99c5bc7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java @@ -58,7 +58,11 @@ public class GridStackItem implements IGridStack { @Override public String getName() { - return stack.getDisplayName(); + try { + return stack.getDisplayName(); + } catch (Throwable t) { + return ""; + } } @Override @@ -69,7 +73,11 @@ public class GridStackItem implements IGridStack { @Override public String[] getOreIds() { if (oreIds == null) { - oreIds = Arrays.stream(OreDictionary.getOreIDs(stack)).mapToObj(OreDictionary::getOreName).collect(Collectors.toList()).toArray(new String[0]); + if (stack.isEmpty()) { + oreIds = new String[]{}; + } else { + oreIds = Arrays.stream(OreDictionary.getOreIDs(stack)).mapToObj(OreDictionary::getOreName).collect(Collectors.toList()).toArray(new String[0]); + } } return oreIds; @@ -77,22 +85,26 @@ public class GridStackItem implements IGridStack { @Override public String getTooltip(boolean quantity) { - List lines = stack.getTooltip(Minecraft.getMinecraft().player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); + try { + List lines = stack.getTooltip(Minecraft.getMinecraft().player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); - // From GuiScreen#renderToolTip - for (int i = 0; i < lines.size(); ++i) { - if (i == 0) { - lines.set(i, stack.getRarity().rarityColor + lines.get(i)); - } else { - lines.set(i, TextFormatting.GRAY + lines.get(i)); + // From GuiScreen#renderToolTip + for (int i = 0; i < lines.size(); ++i) { + if (i == 0) { + lines.set(i, stack.getRarity().rarityColor + lines.get(i)); + } else { + lines.set(i, TextFormatting.GRAY + lines.get(i)); + } } - } - if (quantity && !lines.isEmpty()) { - lines.set(0, lines.get(0) + " " + TextFormatting.GRAY + "(" + RenderUtils.QUANTITY_FORMATTER_UNFORMATTED.format(stack.getCount()) + "x)" + TextFormatting.RESET); - } + if (quantity && !lines.isEmpty()) { + lines.set(0, lines.get(0) + " " + TextFormatting.GRAY + "(" + RenderUtils.QUANTITY_FORMATTER_UNFORMATTED.format(stack.getCount()) + "x)" + TextFormatting.RESET); + } - return lines.stream().collect(Collectors.joining("\n")); + return lines.stream().collect(Collectors.joining("\n")); + } catch (Throwable t) { + return ""; + } } @Override