Fix Arcane Workbench GUI
- Explicitly render inventory mouseover tooltips (this is apparently required now for them to appear) - When a wand is in, report the actual new xSize to Minecraft so things like JEI don't overdraw the tooltip on the right
This commit is contained in:
@@ -37,11 +37,15 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
|
|
||||||
private final int tooltipWidth = 164;
|
private final int tooltipWidth = 164;
|
||||||
|
|
||||||
|
// We report the actual size of the GUI to Minecraft when a wand is in so JEI doesn't overdraw it.
|
||||||
|
// For calculations, we use the size without the tooltip.
|
||||||
|
private final int xSizeNoTip = 176;
|
||||||
|
|
||||||
public GuiArcaneWorkbench(InventoryPlayer invPlayer, TileEntityArcaneWorkbench entity){
|
public GuiArcaneWorkbench(InventoryPlayer invPlayer, TileEntityArcaneWorkbench entity){
|
||||||
super(new ContainerArcaneWorkbench(invPlayer, entity));
|
super(new ContainerArcaneWorkbench(invPlayer, entity));
|
||||||
this.playerInventory = invPlayer;
|
this.playerInventory = invPlayer;
|
||||||
this.arcaneWorkbenchInventory = entity;
|
this.arcaneWorkbenchInventory = entity;
|
||||||
xSize = 176;
|
xSize = xSizeNoTip;
|
||||||
ySize = 220;
|
ySize = 220;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,9 +55,11 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
// Tests if there is a wand in the workbench and edits the positioning accordingly
|
// Tests if there is a wand in the workbench and edits the positioning accordingly
|
||||||
if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots
|
if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots
|
||||||
.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
|
.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
|
||||||
guiLeft = (this.width - this.xSize - tooltipWidth) / 2;
|
xSize = xSizeNoTip + tooltipWidth;
|
||||||
|
guiLeft = (this.width - this.xSize) / 2;
|
||||||
this.applyBtn.x = (this.width - tooltipWidth) / 2 + 48;
|
this.applyBtn.x = (this.width - tooltipWidth) / 2 + 48;
|
||||||
}else{
|
}else{
|
||||||
|
xSize = xSizeNoTip;
|
||||||
guiLeft = (this.width - this.xSize) / 2;
|
guiLeft = (this.width - this.xSize) / 2;
|
||||||
this.applyBtn.x = this.width / 2 + 48;
|
this.applyBtn.x = this.width / 2 + 48;
|
||||||
}
|
}
|
||||||
@@ -65,6 +71,9 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
|
super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
|
||||||
|
|
||||||
|
// Required now, or item mouseover tooltips won't render.
|
||||||
|
this.renderHoveredToolTip(p_73863_1_, p_73863_2_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -76,7 +85,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
Minecraft.getMinecraft().renderEngine.bindTexture(texture);
|
Minecraft.getMinecraft().renderEngine.bindTexture(texture);
|
||||||
|
|
||||||
// Main inventory
|
// Main inventory
|
||||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSizeNoTip, ySize);
|
||||||
|
|
||||||
// Changing slots
|
// Changing slots
|
||||||
for(int i = 0; i < ContainerArcaneWorkbench.CRYSTAL_SLOT; i++){
|
for(int i = 0; i < ContainerArcaneWorkbench.CRYSTAL_SLOT; i++){
|
||||||
@@ -90,10 +99,10 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
|
.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
|
||||||
|
|
||||||
// Tooltip box
|
// Tooltip box
|
||||||
drawTexturedModalRect(guiLeft + xSize, guiTop, xSize, 0, 256 - xSize - 4, ySize);
|
drawTexturedModalRect(guiLeft + xSizeNoTip, guiTop, xSizeNoTip, 0, 256 - xSizeNoTip - 4, ySize);
|
||||||
drawTexturedModalRect(guiLeft + 252, guiTop, xSize + 4, 0, tooltipWidth - 2 * (256 - xSize - 4), ySize);
|
drawTexturedModalRect(guiLeft + 252, guiTop, xSizeNoTip + 4, 0, tooltipWidth - 2 * (256 - xSizeNoTip - 4), ySize);
|
||||||
drawTexturedModalRect(guiLeft + xSize + tooltipWidth - (256 - xSize - 4), guiTop, xSize + 4, 0,
|
drawTexturedModalRect(guiLeft + xSize - (256 - xSizeNoTip - 4), guiTop, xSizeNoTip + 4, 0,
|
||||||
256 - xSize - 4, ySize);
|
256 - xSizeNoTip - 4, ySize);
|
||||||
|
|
||||||
ItemStack wand = this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack();
|
ItemStack wand = this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack();
|
||||||
|
|
||||||
@@ -114,7 +123,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
.bindTexture(discovered ? spell.element.getIcon() : Element.MAGIC.getIcon());
|
.bindTexture(discovered ? spell.element.getIcon() : Element.MAGIC.getIcon());
|
||||||
|
|
||||||
// Renders the little element icon
|
// Renders the little element icon
|
||||||
WizardryUtilities.drawTexturedRect(guiLeft + xSize + 5, guiTop + 34 + 10 * i++, 8, 8);
|
WizardryUtilities.drawTexturedRect(guiLeft + xSizeNoTip + 5, guiTop + 34 + 10 * i++, 8, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -128,8 +137,8 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
if(level > 0){
|
if(level > 0){
|
||||||
ItemStack stack = new ItemStack(item, level);
|
ItemStack stack = new ItemStack(item, level);
|
||||||
GlStateManager.enableDepth();
|
GlStateManager.enableDepth();
|
||||||
this.itemRender.renderItemAndEffectIntoGUI(stack, guiLeft + xSize + 6 + x, y);
|
this.itemRender.renderItemAndEffectIntoGUI(stack, guiLeft + xSizeNoTip + 6 + x, y);
|
||||||
this.itemRender.renderItemOverlayIntoGUI(this.fontRenderer, stack, guiLeft + xSize + 6 + x, y,
|
this.itemRender.renderItemOverlayIntoGUI(this.fontRenderer, stack, guiLeft + xSizeNoTip + 6 + x, y,
|
||||||
null);
|
null);
|
||||||
x += 18;
|
x += 18;
|
||||||
GlStateManager.disableDepth();
|
GlStateManager.disableDepth();
|
||||||
@@ -160,11 +169,11 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
|
|
||||||
ItemStack wand = this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack();
|
ItemStack wand = this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack();
|
||||||
|
|
||||||
this.fontRenderer.drawStringWithShadow("\u00A7f" + wand.getDisplayName(), xSize + 6, 6, 0);
|
this.fontRenderer.drawStringWithShadow("\u00A7f" + wand.getDisplayName(), xSizeNoTip + 6, 6, 0);
|
||||||
this.fontRenderer.drawStringWithShadow(
|
this.fontRenderer.drawStringWithShadow(
|
||||||
"\u00A77" + I18n.format("container." + Wizardry.MODID + ":arcane_workbench.mana") + " "
|
"\u00A77" + I18n.format("container." + Wizardry.MODID + ":arcane_workbench.mana") + " "
|
||||||
+ (wand.getMaxDamage() - wand.getItemDamage()) + "/" + wand.getMaxDamage(),
|
+ (wand.getMaxDamage() - wand.getItemDamage()) + "/" + wand.getMaxDamage(),
|
||||||
xSize + 6, 20, 0);
|
xSizeNoTip + 6, 20, 0);
|
||||||
|
|
||||||
Spell[] spells = WandHelper.getSpells(wand);
|
Spell[] spells = WandHelper.getSpells(wand);
|
||||||
|
|
||||||
@@ -179,10 +188,10 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(discovered){
|
if(discovered){
|
||||||
this.fontRenderer.drawStringWithShadow(spell.getDisplayNameWithFormatting(), xSize + 16, y, 0);
|
this.fontRenderer.drawStringWithShadow(spell.getDisplayNameWithFormatting(), xSizeNoTip + 16, y, 0);
|
||||||
}else{
|
}else{
|
||||||
this.mc.standardGalacticFontRenderer.drawStringWithShadow(
|
this.mc.standardGalacticFontRenderer.drawStringWithShadow(
|
||||||
"\u00A79" + SpellGlyphData.getGlyphName(spell, this.mc.world), xSize + 16, y, 0);
|
"\u00A79" + SpellGlyphData.getGlyphName(spell, this.mc.world), xSizeNoTip + 16, y, 0);
|
||||||
}
|
}
|
||||||
y += 10;
|
y += 10;
|
||||||
}
|
}
|
||||||
@@ -190,7 +199,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
if(WandHelper.getTotalUpgrades(wand) > 0){
|
if(WandHelper.getTotalUpgrades(wand) > 0){
|
||||||
|
|
||||||
this.fontRenderer.drawStringWithShadow(
|
this.fontRenderer.drawStringWithShadow(
|
||||||
"\u00A7f" + I18n.format("container." + Wizardry.MODID + ":arcane_workbench.upgrades"), xSize + 6, y + 6, 0);
|
"\u00A7f" + I18n.format("container." + Wizardry.MODID + ":arcane_workbench.upgrades"), xSizeNoTip + 6, y + 6, 0);
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
y = 50 + spells.length * 10;
|
y = 50 + spells.length * 10;
|
||||||
@@ -202,7 +211,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
if(level > 0){
|
if(level > 0){
|
||||||
// The javadoc for isPointInRegion is ambiguous; what it means is that the REGION is
|
// The javadoc for isPointInRegion is ambiguous; what it means is that the REGION is
|
||||||
// relative to the GUI but the POINT isn't.
|
// relative to the GUI but the POINT isn't.
|
||||||
if(isPointInRegion(xSize + 6 + x, y, 16, 16, mouseX, mouseY)){
|
if(isPointInRegion(xSizeNoTip + 6 + x, y, 16, 16, mouseX, mouseY)){
|
||||||
ItemStack stack = new ItemStack(item, level);
|
ItemStack stack = new ItemStack(item, level);
|
||||||
this.renderToolTip(stack, mouseX - guiLeft, mouseY - guiTop);
|
this.renderToolTip(stack, mouseX - guiLeft, mouseY - guiTop);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user