Skip to content

Commit

Permalink
Update for improved tooltip methods in Forge.
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Mar 28, 2016
1 parent c14f261 commit 3bbb423
Show file tree
Hide file tree
Showing 10 changed files with 136 additions and 151 deletions.
8 changes: 8 additions & 0 deletions changelog.html
@@ -1,3 +1,11 @@
<h2>2.28.10</h2>
<h4>Features:</h4>
<ul>
<li>Update for improved tooltip methods in Forge.</li>
</ul>
<br/>
<hr/>

<h2>2.28.9</h2>
<h4>Fixes:</h4>
<ul>
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
@@ -1,8 +1,8 @@
mcversion=1.8.9
forgeversion=11.15.1.1761
forgeversion=11.15.1.1808
mcp_mappings=snapshot_20160223
curse_project_id=238222

version_major=2
version_minor=28
version_patch=9
version_patch=10
2 changes: 1 addition & 1 deletion src/main/java/mezz/jei/JustEnoughItems.java
Expand Up @@ -22,7 +22,7 @@
version = Constants.VERSION,
guiFactory = "mezz.jei.config.JEIModGuiFactory",
acceptedMinecraftVersions = "[1.8.9]",
dependencies = "required-after:Forge@[11.15.0.1697,);")
dependencies = "required-after:Forge@[11.15.1.1808,);")
public class JustEnoughItems {

@SidedProxy(clientSide = "mezz.jei.ProxyCommonClient", serverSide = "mezz.jei.ProxyCommon")
Expand Down
60 changes: 33 additions & 27 deletions src/main/java/mezz/jei/gui/RecipeLayout.java
Expand Up @@ -49,47 +49,54 @@ public RecipeLayout(int index, int posX, int posY, @Nonnull IRecipeCategory reci
this.recipeCategory.setRecipe(this, recipeWrapper);
}

public void draw(@Nonnull Minecraft minecraft, int mouseX, int mouseY) {
GlStateManager.pushMatrix();
GlStateManager.translate(posX, posY, 0.0F);
public void draw(@Nonnull Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) {
IDrawable background = recipeCategory.getBackground();

GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableLighting();
GlStateManager.enableAlpha();

IDrawable background = recipeCategory.getBackground();
background.draw(minecraft);
recipeCategory.drawExtras(minecraft);
recipeCategory.drawAnimations(minecraft);
recipeWrapper.drawAnimations(minecraft, background.getWidth(), background.getHeight());
GlStateManager.pushMatrix();
GlStateManager.translate(offsetX + posX, offsetY + posY, 0.0F);
{
background.draw(minecraft);
recipeCategory.drawExtras(minecraft);
recipeCategory.drawAnimations(minecraft);
recipeWrapper.drawAnimations(minecraft, background.getWidth(), background.getHeight());
}
GlStateManager.popMatrix();

GlStateManager.translate(-posX, -posY, 0.0F);
recipeTransferButton.drawButton(minecraft, mouseX, mouseY);
GlStateManager.disableBlend();
GlStateManager.translate(posX, posY, 0.0F);
GlStateManager.disableLighting();

final int recipeMouseX = mouseX - posX;
final int recipeMouseY = mouseY - posY;
final int recipeMouseX = mouseX - offsetX - posX;
final int recipeMouseY = mouseY - offsetY - posY;

try {
recipeWrapper.drawInfo(minecraft, background.getWidth(), background.getHeight(), recipeMouseX, recipeMouseY);
} catch (AbstractMethodError ignored) {
// older wrappers don't have this method
GlStateManager.pushMatrix();
GlStateManager.translate(offsetX + posX, offsetY + posY, 0.0F);
{
try {
recipeWrapper.drawInfo(minecraft, background.getWidth(), background.getHeight(), recipeMouseX, recipeMouseY);
} catch (AbstractMethodError ignored) {
// older wrappers don't have this method
}
//noinspection deprecation
recipeWrapper.drawInfo(minecraft, background.getWidth(), background.getHeight());
}
//noinspection deprecation
recipeWrapper.drawInfo(minecraft, background.getWidth(), background.getHeight());
GlStateManager.popMatrix();

RenderHelper.enableGUIStandardItemLighting();
GuiIngredient hoveredItemStack = guiItemStackGroup.draw(minecraft, recipeMouseX, recipeMouseY);
GuiIngredient hoveredItemStack = guiItemStackGroup.draw(minecraft, offsetX + posX, offsetY + posY, mouseX, mouseY);
RenderHelper.disableStandardItemLighting();
GuiIngredient hoveredFluidStack = guiFluidStackGroup.draw(minecraft, recipeMouseX, recipeMouseY);
GuiIngredient hoveredFluidStack = guiFluidStackGroup.draw(minecraft, offsetX + posX, offsetY + posY, mouseX, mouseY);

if (hoveredItemStack != null) {
RenderHelper.enableGUIStandardItemLighting();
hoveredItemStack.drawHovered(minecraft, recipeMouseX, recipeMouseY);
hoveredItemStack.drawHovered(minecraft, offsetX + posX, offsetY + posY, recipeMouseX, recipeMouseY);
RenderHelper.disableStandardItemLighting();
} else if (hoveredFluidStack != null) {
hoveredFluidStack.drawHovered(minecraft, recipeMouseX, recipeMouseY);
hoveredFluidStack.drawHovered(minecraft, offsetX + posX, offsetY + posY, recipeMouseX, recipeMouseY);
} else if (recipeMouseX >= 0 && recipeMouseX < background.getWidth() && recipeMouseY >= 0 && recipeMouseY < background.getHeight()) {
List<String> tooltipStrings = null;
try {
Expand All @@ -98,18 +105,17 @@ public void draw(@Nonnull Minecraft minecraft, int mouseX, int mouseY) {
// older wrappers don't have this method
}
if (tooltipStrings != null && !tooltipStrings.isEmpty()) {
TooltipRenderer.drawHoveringText(minecraft, tooltipStrings, recipeMouseX, recipeMouseY);
TooltipRenderer.drawHoveringText(minecraft, tooltipStrings, offsetX + posX + mouseX, offsetY + posY + mouseY);
}
}

GlStateManager.disableAlpha();
GlStateManager.popMatrix();
}

public Focus getFocusUnderMouse(int mouseX, int mouseY) {
Focus focus = guiItemStackGroup.getFocusUnderMouse(mouseX - posX, mouseY - posY);
public Focus getFocusUnderMouse(int offsetX, int offsetY, int mouseX, int mouseY) {
Focus focus = guiItemStackGroup.getFocusUnderMouse(offsetX + posX, offsetY + posY, mouseX, mouseY);
if (focus == null) {
focus = guiFluidStackGroup.getFocusUnderMouse(mouseX - posX, mouseY - posY);
focus = guiFluidStackGroup.getFocusUnderMouse(offsetX + posX, offsetY + posY, mouseX, mouseY);
}
return focus;
}
Expand Down
91 changes: 42 additions & 49 deletions src/main/java/mezz/jei/gui/RecipesGui.java
Expand Up @@ -98,14 +98,14 @@ public void initGui() {
this.titleHeight = fontRendererObj.FONT_HEIGHT + borderPadding;
this.headerHeight = titleHeight + fontRendererObj.FONT_HEIGHT + textPadding;

final int rightButtonX = xSize - borderPadding - buttonWidth;
final int leftButtonX = borderPadding;
final int rightButtonX = guiLeft + xSize - borderPadding - buttonWidth;
final int leftButtonX = guiLeft + borderPadding;

int recipeClassButtonTop = borderPadding - 2;
int recipeClassButtonTop = guiTop + borderPadding - 2;
nextRecipeCategory = new GuiButtonExt(2, rightButtonX, recipeClassButtonTop, buttonWidth, buttonHeight, ">");
previousRecipeCategory = new GuiButtonExt(3, leftButtonX, recipeClassButtonTop, buttonWidth, buttonHeight, "<");

int pageButtonTop = titleHeight + 3;
int pageButtonTop = guiTop + titleHeight + 3;
nextPage = new GuiButtonExt(4, rightButtonX, pageButtonTop, buttonWidth, buttonHeight, ">");
previousPage = new GuiButtonExt(5, leftButtonX, pageButtonTop, buttonWidth, buttonHeight, "<");

Expand All @@ -127,48 +127,47 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) {

GlStateManager.disableBlend();

final int recipeMouseX = mouseX - guiLeft;
final int recipeMouseY = mouseY - guiTop;
drawRect(guiLeft + borderPadding + buttonWidth,
guiTop + borderPadding - 2,
guiLeft + xSize - borderPadding - buttonWidth,
guiTop + borderPadding + 10,
0x30000000);
drawRect(guiLeft + borderPadding + buttonWidth,
guiTop + titleHeight + textPadding - 2,
guiLeft + xSize - borderPadding - buttonWidth,
guiTop + titleHeight + textPadding + 10,
0x30000000);

GlStateManager.pushMatrix();
{
GlStateManager.translate(guiLeft, guiTop, 0.0F);

drawRect(borderPadding + buttonWidth, borderPadding - 2, xSize - borderPadding - buttonWidth, borderPadding + 10, 0x30000000);
drawRect(borderPadding + buttonWidth, titleHeight + textPadding - 2, xSize - borderPadding - buttonWidth, titleHeight + textPadding + 10, 0x30000000);

GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);

StringUtil.drawCenteredString(fontRendererObj, title, xSize, borderPadding, Color.WHITE.getRGB(), true);
StringUtil.drawCenteredString(fontRendererObj, pageString, xSize, titleHeight + textPadding, Color.WHITE.getRGB(), true);
StringUtil.drawCenteredString(fontRendererObj, title, xSize, guiLeft, guiTop + borderPadding, Color.WHITE.getRGB(), true);
StringUtil.drawCenteredString(fontRendererObj, pageString, xSize, guiLeft, guiTop + titleHeight + textPadding, Color.WHITE.getRGB(), true);

nextRecipeCategory.drawButton(mc, recipeMouseX, recipeMouseY);
previousRecipeCategory.drawButton(mc, recipeMouseX, recipeMouseY);
nextPage.drawButton(mc, recipeMouseX, recipeMouseY);
previousPage.drawButton(mc, recipeMouseX, recipeMouseY);
nextRecipeCategory.drawButton(mc, mouseX, mouseY);
previousRecipeCategory.drawButton(mc, mouseX, mouseY);
nextPage.drawButton(mc, mouseX, mouseY);
previousPage.drawButton(mc, mouseX, mouseY);

RecipeLayout hovered = null;
for (RecipeLayout recipeWidget : recipeLayouts) {
if (recipeWidget.getFocusUnderMouse(recipeMouseX, recipeMouseY) != null) {
hovered = recipeWidget;
} else {
recipeWidget.draw(mc, recipeMouseX, recipeMouseY);
}
RecipeLayout hovered = null;
for (RecipeLayout recipeWidget : recipeLayouts) {
if (recipeWidget.getFocusUnderMouse(guiLeft, guiTop, mouseX, mouseY) != null) {
hovered = recipeWidget;
} else {
recipeWidget.draw(mc, guiLeft, guiTop, mouseX, mouseY);
}
}

if (hovered != null) {
hovered.draw(mc, recipeMouseX, recipeMouseY);
}
if (hovered != null) {
hovered.draw(mc, guiLeft, guiTop, mouseX, mouseY);
}

if (titleHoverChecker.checkHover(recipeMouseX, recipeMouseY)) {
Focus focus = logic.getFocus();
if (focus != null && !focus.isBlank()) {
String showAllRecipesString = Translator.translateToLocal("jei.tooltip.show.all.recipes");
TooltipRenderer.drawHoveringText(mc, showAllRecipesString, recipeMouseX, recipeMouseY);
}
if (titleHoverChecker.checkHover(mouseX, mouseY)) {
Focus focus = logic.getFocus();
if (focus != null && !focus.isBlank()) {
String showAllRecipesString = Translator.translateToLocal("jei.tooltip.show.all.recipes");
TooltipRenderer.drawHoveringText(mc, showAllRecipesString, mouseX, mouseY);
}
}
GlStateManager.popMatrix();
}

protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
Expand All @@ -192,11 +191,8 @@ public Focus getFocusUnderMouse(int mouseX, int mouseY) {
return null;
}

final int recipeMouseX = mouseX - guiLeft;
final int recipeMouseY = mouseY - guiTop;

for (RecipeLayout recipeLayouts : this.recipeLayouts) {
Focus focus = recipeLayouts.getFocusUnderMouse(recipeMouseX, recipeMouseY);
Focus focus = recipeLayouts.getFocusUnderMouse(guiLeft, guiTop, mouseX, mouseY);
if (focus != null) {
return focus;
}
Expand Down Expand Up @@ -234,22 +230,19 @@ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOEx
return;
}

final int recipeMouseX = mouseX - guiLeft;
final int recipeMouseY = mouseY - guiTop;

if (titleHoverChecker.checkHover(recipeMouseX, recipeMouseY)) {
if (titleHoverChecker.checkHover(mouseX, mouseY)) {
if (logic.setCategoryFocus()) {
updateLayout();
}
} else {
for (RecipeLayout recipeLayout : recipeLayouts) {
if (recipeLayout.handleClick(mc, recipeMouseX, recipeMouseY, mouseButton)) {
if (recipeLayout.handleClick(mc, mouseX, mouseY, mouseButton)) {
return;
}
}
}

super.mouseClicked(recipeMouseX, recipeMouseY, mouseButton);
super.mouseClicked(mouseX, mouseY, mouseButton);
}

@Override
Expand Down Expand Up @@ -350,8 +343,8 @@ private void updateLayout() {

title = recipeCategory.getTitle();
final int titleWidth = fontRendererObj.getStringWidth(title);
final int titleX = (xSize - titleWidth) / 2;
final int titleY = borderPadding;
final int titleX = guiLeft + (xSize - titleWidth) / 2;
final int titleY = guiTop + borderPadding;
titleHoverChecker = new HoverChecker(titleY, titleY + fontRendererObj.FONT_HEIGHT, titleX, titleX + titleWidth, 0);

int spacingY = recipeBackground.getHeight() + recipeSpacing;
Expand Down
32 changes: 5 additions & 27 deletions src/main/java/mezz/jei/gui/TooltipRenderer.java
@@ -1,47 +1,25 @@
package mezz.jei.gui;

import mezz.jei.config.Constants;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraftforge.fml.client.config.GuiUtils;

import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;

/**
* Workaround for GuiScreen.drawHoveringText being protected instead of public.
* (the method with FontRenderer is added by Forge and can't be AT'd).
*/
public class TooltipRenderer {
private static final TooltipGuiScreen tooltipScreen = new TooltipGuiScreen();

public static void drawHoveringText(@Nonnull Minecraft minecraft, @Nonnull String textLine, int x, int y) {
List<String> textLines = minecraft.fontRendererObj.listFormattedStringToWidth(textLine, Constants.MAX_TOOLTIP_WIDTH);
drawHoveringText(minecraft, textLines, x, y, minecraft.fontRendererObj);
drawHoveringText(minecraft, Collections.singletonList(textLine), x, y, minecraft.fontRendererObj);
}

public static void drawHoveringText(@Nonnull Minecraft minecraft, @Nonnull List<String> textLines, int x, int y) {
drawHoveringText(minecraft, textLines, x, y, minecraft.fontRendererObj);
}

public static void drawHoveringText(@Nonnull Minecraft minecraft, @Nonnull List<String> textLines, int x, int y, @Nonnull FontRenderer font) {
tooltipScreen.set(minecraft);
tooltipScreen.drawHoveringText(textLines, x, y, font);
}

private static class TooltipGuiScreen extends GuiScreen {
public void set(@Nonnull Minecraft minecraft) {
this.mc = minecraft;
this.itemRender = minecraft.getRenderItem();
ScaledResolution scaledresolution = new ScaledResolution(minecraft);
this.width = scaledresolution.getScaledWidth();
this.height = scaledresolution.getScaledHeight();
}

@Override
public void drawHoveringText(@Nonnull List<String> textLines, int x, int y, @Nonnull FontRenderer font) {
super.drawHoveringText(textLines, x, y, font);
}
ScaledResolution scaledresolution = new ScaledResolution(minecraft);
GuiUtils.drawHoveringText(textLines, x, y, scaledresolution.getScaledWidth(), scaledresolution.getScaledHeight(), -1, font);
}
}

0 comments on commit 3bbb423

Please sign in to comment.