Skip to content

Commit

Permalink
Add more fluid handling infrastructure
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Nov 27, 2015
1 parent 73c473d commit ac5cc06
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 50 deletions.
16 changes: 12 additions & 4 deletions src/main/java/mezz/jei/gui/GuiFluidTank.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

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

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;

import net.minecraftforge.fluids.FluidStack;

Expand Down Expand Up @@ -34,12 +36,18 @@ protected FluidStack getMatch(Iterable<FluidStack> contained, @Nonnull Focus toM
}

@Override
public void draw(@Nonnull Minecraft minecraft) {
//TODO
protected void draw(@Nonnull Minecraft minecraft, int xPosition, int yPosition, @Nonnull FluidStack contents) {
// TODO
}

@Override
public void drawHovered(@Nonnull Minecraft minecraft, int mouseX, int mouseY) {
//TODO
protected List getTooltip(@Nonnull Minecraft minecraft, @Nonnull FluidStack value) {
// TODO
return null;
}

@Override
protected FontRenderer getFontRenderer(@Nonnull Minecraft minecraft, @Nonnull FluidStack value) {
return minecraft.fontRendererObj;
}
}
73 changes: 27 additions & 46 deletions src/main/java/mezz/jei/gui/GuiItemStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,17 @@

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

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;

import org.lwjgl.opengl.GL11;

import mezz.jei.util.Log;
import mezz.jei.util.StackUtil;

public class GuiItemStack extends GuiWidget<ItemStack> {

private static final int baseWidth = 16;
private static final int baseHeight = 16;

Expand Down Expand Up @@ -45,47 +42,8 @@ protected ItemStack getMatch(Iterable<ItemStack> contained, @Nonnull Focus toMat
}

@Override
public void draw(@Nonnull Minecraft minecraft) {
draw(minecraft, true);
}

@Override
public void drawHovered(@Nonnull Minecraft minecraft, int mouseX, int mouseY) {
ItemStack itemStack = get();
if (itemStack == null) {
return;
}
draw(minecraft, false);
try {
GlStateManager.disableDepth();
this.zLevel = 0;
RenderHelper.disableStandardItemLighting();
GL11.glEnable(GL11.GL_BLEND);
drawRect(xPosition, yPosition, xPosition + width, yPosition + width, 0x7FFFFFFF);
this.zLevel = 0;
minecraft.currentScreen.renderToolTip(itemStack, mouseX, mouseY);
GlStateManager.enableDepth();
} catch (RuntimeException e) {
Log.error("Exception when rendering tooltip on {}.\n{}", itemStack, e);
}
}

private void draw(Minecraft minecraft, boolean cycleIcons) {
if (!visible) {
return;
}

cycleTimer.onDraw(cycleIcons);

ItemStack itemStack = get();
if (itemStack == null) {
return;
}

FontRenderer font = itemStack.getItem().getFontRenderer(itemStack);
if (font == null) {
font = minecraft.fontRendererObj;
}
protected void draw(@Nonnull Minecraft minecraft, int xPosition, int yPosition, @Nonnull ItemStack itemStack) {
FontRenderer font = getFontRenderer(minecraft, itemStack);

RenderHelper.enableGUIStandardItemLighting();

Expand All @@ -94,4 +52,27 @@ private void draw(Minecraft minecraft, boolean cycleIcons) {

RenderHelper.disableStandardItemLighting();
}

@SuppressWarnings("unchecked")
@Override
protected List getTooltip(@Nonnull Minecraft minecraft, @Nonnull ItemStack itemStack) {
List list = itemStack.getTooltip(minecraft.thePlayer, minecraft.gameSettings.advancedItemTooltips);
for (int k = 0; k < list.size(); ++k) {
if (k == 0) {
list.set(k, itemStack.getRarity().rarityColor + (String) list.get(k));
} else {
list.set(k, EnumChatFormatting.GRAY + (String) list.get(k));
}
}
return list;
}

@Override
protected FontRenderer getFontRenderer(@Nonnull Minecraft minecraft, @Nonnull ItemStack itemStack) {
FontRenderer fontRenderer = itemStack.getItem().getFontRenderer(itemStack);
if (fontRenderer == null) {
fontRenderer = minecraft.fontRendererObj;
}
return fontRenderer;
}
}
63 changes: 63 additions & 0 deletions src/main/java/mezz/jei/gui/GuiWidget.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,16 @@
import java.util.Collections;
import java.util.List;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;

import org.lwjgl.opengl.GL11;

import mezz.jei.util.CycleTimer;
import mezz.jei.util.Log;

public abstract class GuiWidget<T> extends Gui implements IGuiWidget<T> {
protected final int xPosition;
Expand Down Expand Up @@ -70,4 +77,60 @@ public void set(@Nonnull Collection<T> contained, @Nonnull Focus focus) {
protected abstract Collection<T> expandSubtypes(Collection<T> contained);

protected abstract T getMatch(Iterable<T> contained, @Nonnull Focus toMatch);

@Override
public void draw(@Nonnull Minecraft minecraft) {
draw(minecraft, true);
}

@Override
public void drawHovered(@Nonnull Minecraft minecraft, int mouseX, int mouseY) {
T value = get();
if (value == null) {
return;
}
draw(minecraft, false);
drawTooltip(minecraft, mouseX, mouseY, value);
}

private void draw(Minecraft minecraft, boolean cycleIcons) {
if (!visible) {
return;
}

cycleTimer.onDraw(cycleIcons);

T value = get();
if (value == null) {
return;
}

draw(minecraft, xPosition, yPosition, value);
}

private void drawTooltip(@Nonnull Minecraft minecraft, int mouseX, int mouseY, @Nonnull T value) {
try {
GlStateManager.disableDepth();

this.zLevel = 0;
RenderHelper.disableStandardItemLighting();
GL11.glEnable(GL11.GL_BLEND);
drawRect(xPosition, yPosition, xPosition + width, yPosition + width, 0x7FFFFFFF);

this.zLevel = 0;
List tooltip = getTooltip(minecraft, value);
FontRenderer fontRenderer = getFontRenderer(minecraft, value);
TooltipRenderer.drawHoveringText(minecraft, tooltip, mouseX, mouseY, fontRenderer);

GlStateManager.enableDepth();
} catch (RuntimeException e) {
Log.error("Exception when rendering tooltip on {}.\n{}", value, e);
}
}

protected abstract void draw(@Nonnull Minecraft minecraft, int xPosition, int yPosition, @Nonnull T value);

protected abstract List getTooltip(@Nonnull Minecraft minecraft, @Nonnull T value);

protected abstract FontRenderer getFontRenderer(@Nonnull Minecraft minecraft, @Nonnull T value);
}
34 changes: 34 additions & 0 deletions src/main/java/mezz/jei/gui/TooltipRenderer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package mezz.jei.gui;

import java.util.List;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiScreen;

/**
* 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(Minecraft minecraft, List textLines, int x, int y, FontRenderer font) {
tooltipScreen.set(minecraft);
tooltipScreen.drawHoveringText(textLines, x, y, font);
}

private static class TooltipGuiScreen extends GuiScreen {
public void set(Minecraft minecraft) {
this.mc = minecraft;
this.itemRender = minecraft.getRenderItem();
this.width = minecraft.currentScreen.width;
this.height = minecraft.currentScreen.height;
}

@Override
public void drawHoveringText(List textLines, int x, int y, FontRenderer font) {
super.drawHoveringText(textLines, x, y, font);
}
}
}

0 comments on commit ac5cc06

Please sign in to comment.