From dd76961f8eba8691e4be7309840ea987a7b51449 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 28 Oct 2019 12:52:14 +0100 Subject: [PATCH] Made error handling for rendering grid stacks a bit more robust --- .../refinedstorage/screen/BaseScreen.java | 46 +++++++--------- .../screen/grid/stack/FluidGridStack.java | 53 +++++++++++++----- .../screen/grid/stack/ItemGridStack.java | 55 +++++++++++-------- 3 files changed, 91 insertions(+), 63 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java index 284cff8a2..0d4635638 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java @@ -25,6 +25,8 @@ import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.client.config.GuiCheckBox; import net.minecraftforge.fml.client.config.GuiUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.lwjgl.opengl.GL11; import javax.annotation.Nonnull; @@ -36,6 +38,8 @@ public abstract class BaseScreen extends ContainerScreen private static final Map TEXTURE_CACHE = new HashMap<>(); private static final Map> ACTIONS = new HashMap<>(); + private Logger logger = LogManager.getLogger(getClass()); + private int sideButtonY; public BaseScreen(T container, int xSize, int ySize, PlayerInventory inventory, ITextComponent title) { @@ -227,38 +231,26 @@ public abstract class BaseScreen extends ContainerScreen } public void renderItem(int x, int y, ItemStack stack) { - renderItem(x, y, stack, false); + renderItem(x, y, stack, false, null); } - public void renderItem(int x, int y, ItemStack stack, boolean withOverlay) { - renderItem(x, y, stack, withOverlay, null); - } - - public void renderItem(int x, int y, ItemStack stack, boolean withOverlay, @Nullable String text) { - itemRenderer.zLevel = 200.0F; - + public void renderItem(int x, int y, ItemStack stack, boolean overlay, @Nullable String text) { try { + itemRenderer.zLevel = 200.0F; + itemRenderer.renderItemIntoGUI(stack, x, y); + + if (overlay) { + this.itemRenderer.renderItemOverlayIntoGUI(font, stack, x, y, ""); + } + + if (text != null) { + renderQuantity(x, y, text); + } + + itemRenderer.zLevel = 0.0F; } catch (Throwable t) { - // NO OP - } - - if (withOverlay) { - renderItemOverlay(stack, text, x, y); - } - - itemRenderer.zLevel = 0.0F; - } - - public void renderItemOverlay(ItemStack stack, @Nullable String text, int x, int y) { - try { - this.itemRenderer.renderItemOverlayIntoGUI(font, stack, x, y, ""); - } catch (Throwable t) { - // NO OP - } - - if (text != null) { - renderQuantity(x, y, text); + logger.warn("Couldn't render stack: " + stack.getItem().toString(), t); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java index 631b79e3f..7c9a55244 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -7,18 +7,25 @@ import com.raoulvdberge.refinedstorage.screen.BaseScreen; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.annotation.Nullable; import java.util.UUID; public class FluidGridStack implements IGridStack { + private Logger logger = LogManager.getLogger(getClass()); + private UUID id; private FluidStack stack; @Nullable private StorageTrackerEntry entry; private boolean craftable; - private String modId; - private String modName; + + private String cachedName; + private String cachedTooltip; + private String cachedModId; + private String cachedModName; public FluidGridStack(UUID id, FluidStack stack, @Nullable StorageTrackerEntry entry, boolean craftable) { this.id = id; @@ -43,35 +50,45 @@ public class FluidGridStack implements IGridStack { @Override public String getName() { - return stack.getDisplayName().getFormattedText(); + if (cachedName == null) { + try { + cachedName = stack.getDisplayName().getFormattedText(); + } catch (Throwable t) { + logger.warn("Could not retrieve fluid name of " + stack.getFluid().getRegistryName().toString(), t); + + cachedName = ""; + } + } + + return cachedName; } @Override public String getModId() { - if (modId == null) { + if (cachedModId == null) { ResourceLocation registryName = stack.getFluid().getRegistryName(); if (registryName != null) { - modId = registryName.getNamespace(); + cachedModId = registryName.getNamespace(); } else { - modId = "???"; + cachedModId = ""; } } - return modId; + return cachedModId; } @Override public String getModName() { - if (modName == null) { - modName = ItemGridStack.getModNameByModId(getModId()); + if (cachedModName == null) { + cachedModName = ItemGridStack.getModNameByModId(getModId()); - if (modName == null) { - modName = "???"; + if (cachedModName == null) { + cachedModName = ""; } } - return modName; + return cachedModName; } @Override @@ -82,7 +99,17 @@ public class FluidGridStack implements IGridStack { @Override public String getTooltip() { - return stack.getDisplayName().getFormattedText(); + if (cachedTooltip == null) { + try { + cachedTooltip = stack.getDisplayName().getFormattedText(); + } catch (Throwable t) { + cachedTooltip = ""; + + logger.warn("Could not retrieve fluid tooltip of " + stack.getFluid().getRegistryName().toString(), t); + } + } + + return cachedTooltip; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java index bf05c6aec..09bdbf4dd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -8,6 +8,8 @@ import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.ModContainer; import net.minecraftforge.fml.ModList; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.annotation.Nullable; import java.util.Optional; @@ -15,6 +17,8 @@ import java.util.UUID; import java.util.stream.Collectors; public class ItemGridStack implements IGridStack { + private Logger logger = LogManager.getLogger(getClass()); + private UUID id; private ItemStack stack; private String cachedName; @@ -22,9 +26,10 @@ public class ItemGridStack implements IGridStack { private String[] oreIds = null; @Nullable private StorageTrackerEntry entry; - private String modId; - private String modName; - private String tooltip; + + private String cachedModId; + private String cachedModName; + private String cachedTooltip; public ItemGridStack(ItemStack stack) { this.stack = stack; @@ -60,41 +65,43 @@ public class ItemGridStack implements IGridStack { @Override public String getName() { - try { - if (cachedName == null) { + if (cachedName == null) { + try { cachedName = stack.getDisplayName().getFormattedText(); - } + } catch (Throwable t) { + logger.warn("Could not retrieve item name of " + stack.getItem().toString(), t); - return cachedName; - } catch (Throwable t) { - return ""; + cachedName = ""; + } } + + return cachedName; } @Override public String getModId() { - if (modId == null) { - modId = stack.getItem().getCreatorModId(stack); + if (cachedModId == null) { + cachedModId = stack.getItem().getCreatorModId(stack); - if (modId == null) { - modId = "???"; + if (cachedModId == null) { + cachedModId = ""; } } - return modId; + return cachedModId; } @Override public String getModName() { - if (modName == null) { - modName = getModNameByModId(getModId()); + if (cachedModName == null) { + cachedModName = getModNameByModId(getModId()); - if (modName == null) { - modName = "???"; + if (cachedModName == null) { + cachedModName = ""; } } - return modName; + return cachedModName; } @Override @@ -113,15 +120,17 @@ public class ItemGridStack implements IGridStack { @Override public String getTooltip() { - if (tooltip == null) { + if (cachedTooltip == null) { try { - tooltip = RenderUtils.getTooltipFromItem(stack).stream().collect(Collectors.joining("\n")); + cachedTooltip = RenderUtils.getTooltipFromItem(stack).stream().collect(Collectors.joining("\n")); } catch (Throwable t) { - tooltip = ""; + logger.warn("Could not retrieve item tooltip of " + stack.getItem().toString(), t); + + cachedTooltip = ""; } } - return tooltip; + return cachedTooltip; } @Override