Made error handling for rendering grid stacks a bit more robust
This commit is contained in:
@@ -25,6 +25,8 @@ import net.minecraft.util.text.ITextComponent;
|
|||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fml.client.config.GuiCheckBox;
|
import net.minecraftforge.fml.client.config.GuiCheckBox;
|
||||||
import net.minecraftforge.fml.client.config.GuiUtils;
|
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 org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
@@ -36,6 +38,8 @@ public abstract class BaseScreen<T extends Container> extends ContainerScreen<T>
|
|||||||
private static final Map<String, ResourceLocation> TEXTURE_CACHE = new HashMap<>();
|
private static final Map<String, ResourceLocation> TEXTURE_CACHE = new HashMap<>();
|
||||||
private static final Map<Class, Queue<Consumer>> ACTIONS = new HashMap<>();
|
private static final Map<Class, Queue<Consumer>> ACTIONS = new HashMap<>();
|
||||||
|
|
||||||
|
private Logger logger = LogManager.getLogger(getClass());
|
||||||
|
|
||||||
private int sideButtonY;
|
private int sideButtonY;
|
||||||
|
|
||||||
public BaseScreen(T container, int xSize, int ySize, PlayerInventory inventory, ITextComponent title) {
|
public BaseScreen(T container, int xSize, int ySize, PlayerInventory inventory, ITextComponent title) {
|
||||||
@@ -227,38 +231,26 @@ public abstract class BaseScreen<T extends Container> extends ContainerScreen<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void renderItem(int x, int y, ItemStack stack) {
|
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) {
|
public void renderItem(int x, int y, ItemStack stack, boolean overlay, @Nullable String text) {
|
||||||
renderItem(x, y, stack, withOverlay, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void renderItem(int x, int y, ItemStack stack, boolean withOverlay, @Nullable String text) {
|
|
||||||
itemRenderer.zLevel = 200.0F;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
itemRenderer.zLevel = 200.0F;
|
||||||
|
|
||||||
itemRenderer.renderItemIntoGUI(stack, x, y);
|
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) {
|
} catch (Throwable t) {
|
||||||
// NO OP
|
logger.warn("Couldn't render stack: " + stack.getItem().toString(), t);
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,18 +7,25 @@ import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
|||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class FluidGridStack implements IGridStack {
|
public class FluidGridStack implements IGridStack {
|
||||||
|
private Logger logger = LogManager.getLogger(getClass());
|
||||||
|
|
||||||
private UUID id;
|
private UUID id;
|
||||||
private FluidStack stack;
|
private FluidStack stack;
|
||||||
@Nullable
|
@Nullable
|
||||||
private StorageTrackerEntry entry;
|
private StorageTrackerEntry entry;
|
||||||
private boolean craftable;
|
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) {
|
public FluidGridStack(UUID id, FluidStack stack, @Nullable StorageTrackerEntry entry, boolean craftable) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
@@ -43,35 +50,45 @@ public class FluidGridStack implements IGridStack {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
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 = "<Error>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cachedName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModId() {
|
public String getModId() {
|
||||||
if (modId == null) {
|
if (cachedModId == null) {
|
||||||
ResourceLocation registryName = stack.getFluid().getRegistryName();
|
ResourceLocation registryName = stack.getFluid().getRegistryName();
|
||||||
|
|
||||||
if (registryName != null) {
|
if (registryName != null) {
|
||||||
modId = registryName.getNamespace();
|
cachedModId = registryName.getNamespace();
|
||||||
} else {
|
} else {
|
||||||
modId = "???";
|
cachedModId = "<Error>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return modId;
|
return cachedModId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModName() {
|
public String getModName() {
|
||||||
if (modName == null) {
|
if (cachedModName == null) {
|
||||||
modName = ItemGridStack.getModNameByModId(getModId());
|
cachedModName = ItemGridStack.getModNameByModId(getModId());
|
||||||
|
|
||||||
if (modName == null) {
|
if (cachedModName == null) {
|
||||||
modName = "???";
|
cachedModName = "<Error>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return modName;
|
return cachedModName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,7 +99,17 @@ public class FluidGridStack implements IGridStack {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTooltip() {
|
public String getTooltip() {
|
||||||
return stack.getDisplayName().getFormattedText();
|
if (cachedTooltip == null) {
|
||||||
|
try {
|
||||||
|
cachedTooltip = stack.getDisplayName().getFormattedText();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
cachedTooltip = "<Error>";
|
||||||
|
|
||||||
|
logger.warn("Could not retrieve fluid tooltip of " + stack.getFluid().getRegistryName().toString(), t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cachedTooltip;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -8,6 +8,8 @@ import net.minecraft.client.resources.I18n;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.fml.ModContainer;
|
import net.minecraftforge.fml.ModContainer;
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.minecraftforge.fml.ModList;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -15,6 +17,8 @@ import java.util.UUID;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ItemGridStack implements IGridStack {
|
public class ItemGridStack implements IGridStack {
|
||||||
|
private Logger logger = LogManager.getLogger(getClass());
|
||||||
|
|
||||||
private UUID id;
|
private UUID id;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
private String cachedName;
|
private String cachedName;
|
||||||
@@ -22,9 +26,10 @@ public class ItemGridStack implements IGridStack {
|
|||||||
private String[] oreIds = null;
|
private String[] oreIds = null;
|
||||||
@Nullable
|
@Nullable
|
||||||
private StorageTrackerEntry entry;
|
private StorageTrackerEntry entry;
|
||||||
private String modId;
|
|
||||||
private String modName;
|
private String cachedModId;
|
||||||
private String tooltip;
|
private String cachedModName;
|
||||||
|
private String cachedTooltip;
|
||||||
|
|
||||||
public ItemGridStack(ItemStack stack) {
|
public ItemGridStack(ItemStack stack) {
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
@@ -60,41 +65,43 @@ public class ItemGridStack implements IGridStack {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
try {
|
if (cachedName == null) {
|
||||||
if (cachedName == null) {
|
try {
|
||||||
cachedName = stack.getDisplayName().getFormattedText();
|
cachedName = stack.getDisplayName().getFormattedText();
|
||||||
}
|
} catch (Throwable t) {
|
||||||
|
logger.warn("Could not retrieve item name of " + stack.getItem().toString(), t);
|
||||||
|
|
||||||
return cachedName;
|
cachedName = "<Error>";
|
||||||
} catch (Throwable t) {
|
}
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return cachedName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModId() {
|
public String getModId() {
|
||||||
if (modId == null) {
|
if (cachedModId == null) {
|
||||||
modId = stack.getItem().getCreatorModId(stack);
|
cachedModId = stack.getItem().getCreatorModId(stack);
|
||||||
|
|
||||||
if (modId == null) {
|
if (cachedModId == null) {
|
||||||
modId = "???";
|
cachedModId = "<Error>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return modId;
|
return cachedModId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModName() {
|
public String getModName() {
|
||||||
if (modName == null) {
|
if (cachedModName == null) {
|
||||||
modName = getModNameByModId(getModId());
|
cachedModName = getModNameByModId(getModId());
|
||||||
|
|
||||||
if (modName == null) {
|
if (cachedModName == null) {
|
||||||
modName = "???";
|
cachedModName = "<Error>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return modName;
|
return cachedModName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -113,15 +120,17 @@ public class ItemGridStack implements IGridStack {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTooltip() {
|
public String getTooltip() {
|
||||||
if (tooltip == null) {
|
if (cachedTooltip == null) {
|
||||||
try {
|
try {
|
||||||
tooltip = RenderUtils.getTooltipFromItem(stack).stream().collect(Collectors.joining("\n"));
|
cachedTooltip = RenderUtils.getTooltipFromItem(stack).stream().collect(Collectors.joining("\n"));
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
tooltip = "";
|
logger.warn("Could not retrieve item tooltip of " + stack.getItem().toString(), t);
|
||||||
|
|
||||||
|
cachedTooltip = "<Error>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tooltip;
|
return cachedTooltip;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user