From ddfffd3d3100af4bbcbcc6d4e0b6cd97420d3c81 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Sun, 20 Dec 2020 00:16:17 +0000 Subject: [PATCH] Guard against IOOBEs when rendering the new spell trade icon, fixes #565 --- .../client/gui/WizardTradeTweaksHandler.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/java/electroblob/wizardry/client/gui/WizardTradeTweaksHandler.java b/src/main/java/electroblob/wizardry/client/gui/WizardTradeTweaksHandler.java index d67bca14..e072cf04 100644 --- a/src/main/java/electroblob/wizardry/client/gui/WizardTradeTweaksHandler.java +++ b/src/main/java/electroblob/wizardry/client/gui/WizardTradeTweaksHandler.java @@ -90,28 +90,30 @@ public class WizardTradeTweaksHandler { // New spell indicator if(gui.inventorySlots instanceof ContainerMerchant){ - // Can't use getCurrentRecipe because that only gets updated when the correct items are given - MerchantRecipe recipe = trades.get(tradeIndex); + if(tradeIndex < trades.size()){ // Seems to happen with certain mods' GUIs - if(recipe != null && recipe.getItemToSell().getItem() instanceof ItemSpellBook){ + // Can't use getCurrentRecipe because that only gets updated when the correct items are given + MerchantRecipe recipe = trades.get(tradeIndex); - EntityPlayer player = Minecraft.getMinecraft().player; - Spell spell = Spell.byMetadata(recipe.getItemToSell().getMetadata()); + if(recipe != null && recipe.getItemToSell().getItem() instanceof ItemSpellBook){ - if(Wizardry.settings.discoveryMode && !player.isCreative() && Wizardry.proxy.shouldDisplayDiscovered(spell, recipe.getItemToSell()) - && WizardData.get(player) != null && !WizardData.get(player).hasSpellBeenDiscovered(spell)){ - - int x = gui.inventorySlots.getSlot(2).xPos + 14; - int y = gui.inventorySlots.getSlot(2).yPos - 17; + EntityPlayer player = Minecraft.getMinecraft().player; + Spell spell = Spell.byMetadata(recipe.getItemToSell().getMetadata()); - RenderHelper.enableGUIStandardItemLighting(); - GlStateManager.color(1, 1, 1); - Minecraft.getMinecraft().renderEngine.bindTexture(NEW_SPELL_ICON); + if(Wizardry.settings.discoveryMode && !player.isCreative() && Wizardry.proxy.shouldDisplayDiscovered(spell, recipe.getItemToSell()) + && WizardData.get(player) != null && !WizardData.get(player).hasSpellBeenDiscovered(spell)){ - int frame = Math.max(player.ticksExisted/ANIMATION_FRAME_TIME % ANIMATION_PERIOD - (ANIMATION_PERIOD - ANIMATION_FRAMES), 0); - DrawingUtils.drawTexturedRect(x, y, 0, frame * ICON_HEIGHT, ICON_WIDTH, ICON_HEIGHT, ICON_WIDTH, ICON_HEIGHT * ANIMATION_FRAMES); + int x = gui.inventorySlots.getSlot(2).xPos + 14; + int y = gui.inventorySlots.getSlot(2).yPos - 17; - RenderHelper.disableStandardItemLighting(); + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.color(1, 1, 1); + Minecraft.getMinecraft().renderEngine.bindTexture(NEW_SPELL_ICON); + + int frame = Math.max(player.ticksExisted / ANIMATION_FRAME_TIME % ANIMATION_PERIOD - (ANIMATION_PERIOD - ANIMATION_FRAMES), 0); + DrawingUtils.drawTexturedRect(x, y, 0, frame * ICON_HEIGHT, ICON_WIDTH, ICON_HEIGHT, ICON_WIDTH, ICON_HEIGHT * ANIMATION_FRAMES); + + RenderHelper.disableStandardItemLighting(); // int mouseX = event.getMouseX() - gui.getGuiLeft(); // int mouseY = event.getMouseY() - gui.getGuiTop(); @@ -120,6 +122,7 @@ public class WizardTradeTweaksHandler { // GuiUtils.drawHoveringText(Collections.singletonList("You haven't discovered this spell yet"), mouseX, // mouseY, gui.width, gui.height, 150, Minecraft.getMinecraft().fontRenderer); // } + } } } }