From e19991f1f99820aeda5d6e37ab004a261d7295bb Mon Sep 17 00:00:00 2001 From: shartte Date: Wed, 5 Aug 2020 18:21:13 +0200 Subject: [PATCH] Fixes #4547: Name clash between ITooltip#getWidth, ITooltip#getHeight and Vanilla Widget methods leads to missing methods at runtime, since the implementing methods will be remapped to SRG names, while referees of the interface will try to call the renamed methods by their name in the interface, leading to an AbstractMethodError. (#4558) --- .../java/appeng/client/gui/AEBaseScreen.java | 24 +++++++++---------- .../client/gui/widgets/ActionButton.java | 2 +- .../client/gui/widgets/CustomSlotWidget.java | 12 +++++----- .../appeng/client/gui/widgets/ITooltip.java | 12 +++++----- .../appeng/client/gui/widgets/IconButton.java | 15 ++++++++---- .../client/gui/widgets/ProgressBar.java | 12 +++++----- .../gui/widgets/SettingToggleButton.java | 2 +- .../appeng/client/gui/widgets/TabButton.java | 15 ++++++++---- .../client/gui/widgets/ToggleButton.java | 12 +++++----- .../client/gui/widgets/FluidSlotWidget.java | 7 +++--- .../client/gui/widgets/FluidTankWidget.java | 12 +++++----- .../gui/widgets/OptionalFluidSlotWidget.java | 5 ++-- 12 files changed, 71 insertions(+), 59 deletions(-) diff --git a/src/main/java/appeng/client/gui/AEBaseScreen.java b/src/main/java/appeng/client/gui/AEBaseScreen.java index fe2166933..a9f0f9542 100644 --- a/src/main/java/appeng/client/gui/AEBaseScreen.java +++ b/src/main/java/appeng/client/gui/AEBaseScreen.java @@ -154,14 +154,14 @@ public abstract class AEBaseScreen extends ContainerS protected void drawGuiSlot(CustomSlotWidget slot, int mouseX, int mouseY, float partialTicks) { if (slot.isSlotEnabled()) { - final int left = slot.xPos(); - final int top = slot.yPos(); - final int right = left + slot.getWidth(); - final int bottom = top + slot.getHeight(); + final int left = slot.getTooltipAreaX(); + final int top = slot.getTooltipAreaY(); + final int right = left + slot.getTooltipAreaWidth(); + final int bottom = top + slot.getTooltipAreaHeight(); slot.drawContent(getMinecraft(), mouseX, mouseY, partialTicks); - if (this.isPointInRegion(left, top, slot.getWidth(), slot.getHeight(), mouseX, mouseY) + if (this.isPointInRegion(left, top, slot.getTooltipAreaWidth(), slot.getTooltipAreaHeight(), mouseX, mouseY) && slot.canClick(getPlayer())) { RenderSystem.colorMask(true, true, true, false); this.fillGradient(left, top, right, bottom, -2130706433, -2130706433); @@ -171,16 +171,16 @@ public abstract class AEBaseScreen extends ContainerS } private void drawTooltip(ITooltip tooltip, int mouseX, int mouseY) { - final int x = tooltip.xPos(); // ((GuiImgButton) c).x; - int y = tooltip.yPos(); // ((GuiImgButton) c).y; + final int x = tooltip.getTooltipAreaX(); + int y = tooltip.getTooltipAreaY(); - if (x < mouseX && x + tooltip.getWidth() > mouseX && tooltip.isVisible()) { - if (y < mouseY && y + tooltip.getHeight() > mouseY) { + if (x < mouseX && x + tooltip.getTooltipAreaWidth() > mouseX && tooltip.isTooltipAreaVisible()) { + if (y < mouseY && y + tooltip.getTooltipAreaHeight() > mouseY) { if (y < 15) { y = 15; } - final String msg = tooltip.getMessage(); + final String msg = tooltip.getTooltipMessage(); if (msg != null && !msg.isEmpty()) { this.drawTooltip(x + 11, y + 4, msg); } @@ -275,8 +275,8 @@ public abstract class AEBaseScreen extends ContainerS } for (CustomSlotWidget slot : this.guiSlots) { - if (this.isPointInRegion(slot.xPos(), slot.yPos(), slot.getWidth(), slot.getHeight(), xCoord, yCoord) - && slot.canClick(getPlayer())) { + if (this.isPointInRegion(slot.getTooltipAreaX(), slot.getTooltipAreaY(), slot.getTooltipAreaWidth(), + slot.getTooltipAreaHeight(), xCoord, yCoord) && slot.canClick(getPlayer())) { slot.slotClicked(getPlayer().inventory.getItemStack(), btn); } } diff --git a/src/main/java/appeng/client/gui/widgets/ActionButton.java b/src/main/java/appeng/client/gui/widgets/ActionButton.java index 8d4303175..6c87345d8 100644 --- a/src/main/java/appeng/client/gui/widgets/ActionButton.java +++ b/src/main/java/appeng/client/gui/widgets/ActionButton.java @@ -24,7 +24,7 @@ import java.util.regex.Pattern; import appeng.api.config.ActionItems; import appeng.core.localization.ButtonToolTips; -public class ActionButton extends IconButton implements ITooltip { +public class ActionButton extends IconButton { private static final Pattern PATTERN_NEW_LINE = Pattern.compile("\\n", Pattern.LITERAL); private final int iconIndex; diff --git a/src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java b/src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java index 1f18f0028..b88e0a582 100644 --- a/src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java +++ b/src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java @@ -34,32 +34,32 @@ public abstract class CustomSlotWidget extends AbstractGui implements ITooltip { } @Override - public String getMessage() { + public String getTooltipMessage() { return null; } @Override - public int xPos() { + public int getTooltipAreaX() { return this.x; } @Override - public int yPos() { + public int getTooltipAreaY() { return this.y; } @Override - public int getWidth() { + public int getTooltipAreaWidth() { return 16; } @Override - public int getHeight() { + public int getTooltipAreaHeight() { return 16; } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return false; } diff --git a/src/main/java/appeng/client/gui/widgets/ITooltip.java b/src/main/java/appeng/client/gui/widgets/ITooltip.java index 73ef0821c..0adf02997 100644 --- a/src/main/java/appeng/client/gui/widgets/ITooltip.java +++ b/src/main/java/appeng/client/gui/widgets/ITooltip.java @@ -28,38 +28,38 @@ public interface ITooltip { * * @return tooltip message */ - String getMessage(); + String getTooltipMessage(); /** * x Location for the object that triggers the tooltip. * * @return xPosition */ - int xPos(); + int getTooltipAreaX(); /** * y Location for the object that triggers the tooltip. * * @return yPosition */ - int yPos(); + int getTooltipAreaY(); /** * Width of the object that triggers the tooltip. * * @return width */ - int getWidth(); + int getTooltipAreaWidth(); /** * Height for the object that triggers the tooltip. * * @return height */ - int getHeight(); + int getTooltipAreaHeight(); /** * @return true if button being drawn */ - boolean isVisible(); + boolean isTooltipAreaVisible(); } diff --git a/src/main/java/appeng/client/gui/widgets/IconButton.java b/src/main/java/appeng/client/gui/widgets/IconButton.java index 40091320f..97b107275 100644 --- a/src/main/java/appeng/client/gui/widgets/IconButton.java +++ b/src/main/java/appeng/client/gui/widgets/IconButton.java @@ -95,27 +95,32 @@ public abstract class IconButton extends Button implements ITooltip { protected abstract int getIconIndex(); @Override - public int xPos() { + public String getTooltipMessage() { + return getMessage(); + } + + @Override + public int getTooltipAreaX() { return this.x; } @Override - public int yPos() { + public int getTooltipAreaY() { return this.y; } @Override - public int getWidth() { + public int getTooltipAreaWidth() { return this.halfSize ? 8 : 16; } @Override - public int getHeight() { + public int getTooltipAreaHeight() { return this.halfSize ? 8 : 16; } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return this.visible; } diff --git a/src/main/java/appeng/client/gui/widgets/ProgressBar.java b/src/main/java/appeng/client/gui/widgets/ProgressBar.java index eefff2b91..fbcb7bd57 100644 --- a/src/main/java/appeng/client/gui/widgets/ProgressBar.java +++ b/src/main/java/appeng/client/gui/widgets/ProgressBar.java @@ -76,7 +76,7 @@ public class ProgressBar extends Widget implements ITooltip { } @Override - public String getMessage() { + public String getTooltipMessage() { if (this.fullMsg != null) { return this.fullMsg; } @@ -86,27 +86,27 @@ public class ProgressBar extends Widget implements ITooltip { } @Override - public int xPos() { + public int getTooltipAreaX() { return this.x - 2; } @Override - public int yPos() { + public int getTooltipAreaY() { return this.y - 2; } @Override - public int getWidth() { + public int getTooltipAreaWidth() { return this.width + 4; } @Override - public int getHeight() { + public int getTooltipAreaHeight() { return this.height + 4; } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return true; } diff --git a/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java b/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java index e5a532cd4..19b184173 100644 --- a/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java +++ b/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java @@ -278,7 +278,7 @@ public class SettingToggleButton> extends IconButton { } @Override - public String getMessage() { + public String getTooltipMessage() { ITextComponent displayName = null; ITextComponent displayValue = null; diff --git a/src/main/java/appeng/client/gui/widgets/TabButton.java b/src/main/java/appeng/client/gui/widgets/TabButton.java index 6ae1e69f9..f8df40a0f 100644 --- a/src/main/java/appeng/client/gui/widgets/TabButton.java +++ b/src/main/java/appeng/client/gui/widgets/TabButton.java @@ -97,27 +97,32 @@ public class TabButton extends Button implements ITooltip { } @Override - public int xPos() { + public String getTooltipMessage() { + return getMessage(); + } + + @Override + public int getTooltipAreaX() { return this.x; } @Override - public int yPos() { + public int getTooltipAreaY() { return this.y; } @Override - public int getWidth() { + public int getTooltipAreaWidth() { return 22; } @Override - public int getHeight() { + public int getTooltipAreaHeight() { return 22; } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return this.visible; } diff --git a/src/main/java/appeng/client/gui/widgets/ToggleButton.java b/src/main/java/appeng/client/gui/widgets/ToggleButton.java index 5a13843b5..0a785d689 100644 --- a/src/main/java/appeng/client/gui/widgets/ToggleButton.java +++ b/src/main/java/appeng/client/gui/widgets/ToggleButton.java @@ -74,7 +74,7 @@ public class ToggleButton extends Button implements ITooltip { } @Override - public String getMessage() { + public String getTooltipMessage() { if (this.displayName != null) { String name = I18n.format(this.displayName); String value = I18n.format(this.displayHint); @@ -103,27 +103,27 @@ public class ToggleButton extends Button implements ITooltip { } @Override - public int xPos() { + public int getTooltipAreaX() { return this.x; } @Override - public int yPos() { + public int getTooltipAreaY() { return this.y; } @Override - public int getWidth() { + public int getTooltipAreaWidth() { return 16; } @Override - public int getHeight() { + public int getTooltipAreaHeight() { return 16; } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return this.visible; } } diff --git a/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java b/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java index ce842fdee..a0c44b767 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java @@ -52,7 +52,8 @@ public class FluidSlotWidget extends CustomSlotWidget { final float blue = (attributes.getColor() & 255) / 255.0F; RenderSystem.color3f(red, green, blue); - blit(xPos(), yPos(), this.getBlitOffset(), getWidth(), getHeight(), sprite); + blit(getTooltipAreaX(), getTooltipAreaY(), this.getBlitOffset(), getTooltipAreaWidth(), + getTooltipAreaHeight(), sprite); } } @@ -76,7 +77,7 @@ public class FluidSlotWidget extends CustomSlotWidget { } @Override - public String getMessage() { + public String getTooltipMessage() { final IAEFluidStack fluid = this.getFluidStack(); if (fluid != null) { return I18n.format(fluid.getFluidStack().getTranslationKey()); @@ -85,7 +86,7 @@ public class FluidSlotWidget extends CustomSlotWidget { } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return true; } diff --git a/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java b/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java index 3fc8a098d..4c9325505 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java @@ -85,7 +85,7 @@ public class FluidTankWidget extends Widget implements ITooltip { } @Override - public String getMessage() { + public String getTooltipMessage() { final IAEFluidStack fluid = this.tank.getFluidInSlot(this.slot); if (fluid != null && fluid.getStackSize() > 0) { String desc = fluid.getFluid().getAttributes().getDisplayName(fluid.getFluidStack()).getFormattedText(); @@ -97,27 +97,27 @@ public class FluidTankWidget extends Widget implements ITooltip { } @Override - public int xPos() { + public int getTooltipAreaX() { return this.x - 2; } @Override - public int yPos() { + public int getTooltipAreaY() { return this.y - 2; } @Override - public int getWidth() { + public int getTooltipAreaWidth() { return this.width + 4; } @Override - public int getHeight() { + public int getTooltipAreaHeight() { return this.height + 4; } @Override - public boolean isVisible() { + public boolean isTooltipAreaVisible() { return true; } diff --git a/src/main/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java b/src/main/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java index 882bc8251..b006d2f46 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java @@ -48,7 +48,8 @@ public class OptionalFluidSlotWidget extends FluidSlotWidget { } else { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 0.4F); } - GuiUtils.drawTexturedModalRect(guileft + this.xPos() - 1, guitop + this.yPos() - 1, this.srcX - 1, - this.srcY - 1, this.getWidth() + 2, this.getHeight() + 2, currentZIndex); + GuiUtils.drawTexturedModalRect(guileft + this.getTooltipAreaX() - 1, guitop + this.getTooltipAreaY() - 1, + this.srcX - 1, this.srcY - 1, this.getTooltipAreaWidth() + 2, this.getTooltipAreaHeight() + 2, + currentZIndex); } }