Change crafting monitor task tooltip.

This commit is contained in:
raoulvdberge
2018-07-01 12:46:12 +02:00
parent a908cbdaf0
commit bb09a46f1f
14 changed files with 241 additions and 174 deletions

View File

@@ -89,6 +89,11 @@ public interface ICraftingTask {
*/ */
boolean isValid(); boolean isValid();
/**
* @return the time in ms when this task has started
*/
long getExecutionStarted();
/** /**
* @return the missing items * @return the missing items
*/ */

View File

@@ -1,6 +1,7 @@
package com.raoulvdberge.refinedstorage.api.network.grid; package com.raoulvdberge.refinedstorage.api.network.grid;
import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.api.util.IFilter;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import java.util.List; import java.util.List;
@@ -18,9 +19,15 @@ public interface IGridTab {
List<IFilter> getFilters(); List<IFilter> getFilters();
/** /**
* @return the name * Draws the tooltip of this tab at the given position.
*
* @param x the x position
* @param y the y position
* @param screenWidth the screen width
* @param screenHeight the screen height
* @param fontRenderer the font renderer
*/ */
String getName(); void drawTooltip(int x, int y, int screenWidth, int screenHeight, FontRenderer fontRenderer);
/** /**
* @return the icon * @return the icon

View File

@@ -49,6 +49,7 @@ public class CraftingTask implements ICraftingTask {
private static final String NBT_TICKS = "Ticks"; private static final String NBT_TICKS = "Ticks";
private static final String NBT_ID = "Id"; private static final String NBT_ID = "Id";
private static final String NBT_MISSING = "Missing"; private static final String NBT_MISSING = "Missing";
private static final String NBT_EXECUTION_STARTED = "ExecutionStarted";
private INetwork network; private INetwork network;
private ItemStack requested; private ItemStack requested;
@@ -59,6 +60,7 @@ public class CraftingTask implements ICraftingTask {
private Set<ICraftingPattern> patternsUsed = new HashSet<>(); private Set<ICraftingPattern> patternsUsed = new HashSet<>();
private int ticks = 0; private int ticks = 0;
private long calculationStarted; private long calculationStarted;
private long executionStarted = -1;
private UUID id = UUID.randomUUID(); private UUID id = UUID.randomUUID();
private IStackList<ItemStack> toTake = API.instance().createItemStackList(); private IStackList<ItemStack> toTake = API.instance().createItemStackList();
@@ -104,6 +106,10 @@ public class CraftingTask implements ICraftingTask {
this.missing.add(missingItem); this.missing.add(missingItem);
} }
if (tag.hasKey(NBT_EXECUTION_STARTED)) {
this.executionStarted = tag.getLong(NBT_EXECUTION_STARTED);
}
} }
@Override @Override
@@ -297,6 +303,10 @@ public class CraftingTask implements ICraftingTask {
@Override @Override
public boolean update() { public boolean update() {
if (executionStarted == -1) {
executionStarted = System.currentTimeMillis();
}
boolean allCompleted = true; boolean allCompleted = true;
if (ticks % getTickInterval(pattern.getContainer().getSpeedUpgradeCount()) == 0) { if (ticks % getTickInterval(pattern.getContainer().getSpeedUpgradeCount()) == 0) {
@@ -513,6 +523,11 @@ public class CraftingTask implements ICraftingTask {
return true; return true;
} }
@Override
public long getExecutionStarted() {
return executionStarted;
}
@Override @Override
public IStackList<ItemStack> getMissing() { public IStackList<ItemStack> getMissing() {
return missing; return missing;
@@ -531,6 +546,7 @@ public class CraftingTask implements ICraftingTask {
tag.setTag(NBT_INSERTER, inserter.writeToNbt()); tag.setTag(NBT_INSERTER, inserter.writeToNbt());
tag.setInteger(NBT_TICKS, ticks); tag.setInteger(NBT_TICKS, ticks);
tag.setUniqueId(NBT_ID, id); tag.setUniqueId(NBT_ID, id);
tag.setLong(NBT_EXECUTION_STARTED, executionStarted);
NBTTagList steps = new NBTTagList(); NBTTagList steps = new NBTTagList();
for (CraftingStep step : this.steps) { for (CraftingStep step : this.steps) {

View File

@@ -2,8 +2,11 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid;
import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab; import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab;
import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.api.util.IFilter;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.client.config.GuiUtils;
import java.util.Collections;
import java.util.List; import java.util.List;
public class GridTab implements IGridTab { public class GridTab implements IGridTab {
@@ -23,8 +26,10 @@ public class GridTab implements IGridTab {
} }
@Override @Override
public String getName() { public void drawTooltip(int x, int y, int screenWidth, int screenHeight, FontRenderer fontRenderer) {
return name; if (!name.trim().equals("")) {
GuiUtils.drawHoveringText(Collections.singletonList(name), x, y, screenWidth, screenHeight, -1, fontRenderer);
}
} }
@Override @Override

View File

@@ -92,6 +92,14 @@ public abstract class GuiBase extends GuiContainer {
} }
} }
public int getScreenWidth() {
return screenWidth;
}
public int getScreenHeight() {
return screenHeight;
}
public Scrollbar getScrollbar() { public Scrollbar getScrollbar() {
return scrollbar; return scrollbar;
} }
@@ -374,7 +382,7 @@ public abstract class GuiBase extends GuiContainer {
public void drawTooltip(@Nonnull ItemStack stack, int x, int y, List<String> lines) { public void drawTooltip(@Nonnull ItemStack stack, int x, int y, List<String> lines) {
GlStateManager.disableLighting(); GlStateManager.disableLighting();
GuiUtils.drawHoveringText(stack, lines, x, y, width - guiLeft, height, -1, fontRenderer); GuiUtils.drawHoveringText(stack, lines, x, y, screenWidth, screenHeight, -1, fontRenderer);
GlStateManager.enableLighting(); GlStateManager.enableLighting();
} }

View File

@@ -1,6 +1,7 @@
package com.raoulvdberge.refinedstorage.gui; package com.raoulvdberge.refinedstorage.gui;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
@@ -15,6 +16,8 @@ import com.raoulvdberge.refinedstorage.gui.control.SideButtonRedstoneMode;
import com.raoulvdberge.refinedstorage.gui.control.TabList; import com.raoulvdberge.refinedstorage.gui.control.TabList;
import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorCancel; import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorCancel;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import com.raoulvdberge.refinedstorage.util.RenderUtils;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.RenderHelper;
@@ -45,12 +48,14 @@ public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay {
private UUID id; private UUID id;
private ItemStack requested; private ItemStack requested;
private int qty; private int qty;
private long executionStarted;
private List<ICraftingMonitorElement> elements; private List<ICraftingMonitorElement> elements;
public CraftingMonitorTask(UUID id, ItemStack requested, int qty, List<ICraftingMonitorElement> elements) { public CraftingMonitorTask(UUID id, ItemStack requested, int qty, long executionStarted, List<ICraftingMonitorElement> elements) {
this.id = id; this.id = id;
this.requested = requested; this.requested = requested;
this.qty = qty; this.qty = qty;
this.executionStarted = executionStarted;
this.elements = elements; this.elements = elements;
} }
@@ -60,8 +65,18 @@ public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay {
} }
@Override @Override
public String getName() { public void drawTooltip(int x, int y, int screenWidth, int screenHeight, FontRenderer fontRenderer) {
return qty + "x " + requested.getDisplayName(); List<String> textLines = Lists.newArrayList(requested.getDisplayName());
List<String> smallTextLines = Lists.newArrayList();
int totalSecs = (int) (System.currentTimeMillis() - executionStarted) / 1000;
int minutes = (totalSecs % 3600) / 60;
int seconds = totalSecs % 60;
smallTextLines.add(I18n.format("gui.refinedstorage:crafting_monitor.tooltip.requested", qty));
smallTextLines.add(String.format("%02d:%02d", minutes, seconds));
RenderUtils.drawTooltipWithSmallText(textLines, smallTextLines, true, ItemStack.EMPTY, x, y, screenWidth, screenHeight, fontRenderer);
} }
@Override @Override
@@ -89,6 +104,7 @@ public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay {
super(container, 176, 230); super(container, 176, 230);
this.craftingMonitor = craftingMonitor; this.craftingMonitor = craftingMonitor;
this.tabs = new TabList(this, () -> tasks, () -> (int) Math.floor((float) Math.max(0, tasks.size() - 1) / (float) ICraftingMonitor.TABS_PER_PAGE), craftingMonitor::getTabPage, () -> { this.tabs = new TabList(this, () -> tasks, () -> (int) Math.floor((float) Math.max(0, tasks.size() - 1) / (float) ICraftingMonitor.TABS_PER_PAGE), craftingMonitor::getTabPage, () -> {
IGridTab tab = getCurrentTab(); IGridTab tab = getCurrentTab();
@@ -98,6 +114,7 @@ public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay {
return tasks.indexOf(tab); return tasks.indexOf(tab);
}, ICraftingMonitor.TABS_PER_PAGE); }, ICraftingMonitor.TABS_PER_PAGE);
this.tabs.addListener(new TabList.ITabListListener() { this.tabs.addListener(new TabList.ITabListListener() {
@Override @Override
public void onSelectionChanged(int tab) { public void onSelectionChanged(int tab) {

View File

@@ -144,8 +144,8 @@ public class TabList {
} }
public void drawTooltip(FontRenderer fontRenderer, int mouseX, int mouseY) { public void drawTooltip(FontRenderer fontRenderer, int mouseX, int mouseY) {
if (tabHovering >= 0 && tabHovering < tabs.get().size() && !tabs.get().get(tabHovering).getName().equalsIgnoreCase("")) { if (tabHovering >= 0 && tabHovering < tabs.get().size()) {
gui.drawTooltip(mouseX, mouseY, tabs.get().get(tabHovering).getName()); tabs.get().get(tabHovering).drawTooltip(mouseX, mouseY, gui.getScreenWidth(), gui.getScreenHeight(), fontRenderer);
} }
if (pages.get() > 0) { if (pages.get() > 0) {

View File

@@ -25,7 +25,6 @@ import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
import com.raoulvdberge.refinedstorage.util.RenderUtils; import com.raoulvdberge.refinedstorage.util.RenderUtils;
import com.raoulvdberge.refinedstorage.util.TimeUtils; import com.raoulvdberge.refinedstorage.util.TimeUtils;
import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
@@ -34,11 +33,7 @@ import net.minecraft.client.resources.I18n;
import net.minecraft.init.SoundEvents; import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.client.event.RenderTooltipEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.config.GuiCheckBox; import net.minecraftforge.fml.client.config.GuiCheckBox;
import net.minecraftforge.fml.client.config.GuiUtils;
import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.FMLCommonHandler;
import java.io.IOException; import java.io.IOException;
@@ -377,154 +372,21 @@ public class GuiGrid extends GuiBase implements IResizableDisplay {
tabs.drawTooltip(fontRenderer, mouseX, mouseY); tabs.drawTooltip(fontRenderer, mouseX, mouseY);
} }
// Copied with some tweaks from GuiUtils#drawHoveringText(@Nonnull final ItemStack stack, List<String> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, FontRenderer font) private void drawGridTooltip(IGridStack gridStack, int mouseX, int mouseY) {
public void drawGridTooltip(IGridStack gridStack, int mouseX, int mouseY) {
// RS BEGIN
List<String> textLines = Lists.newArrayList(gridStack.getTooltip().split("\n")); List<String> textLines = Lists.newArrayList(gridStack.getTooltip().split("\n"));
List<String> smallTextLines = Lists.newArrayList();
if (RS.INSTANCE.config.detailedTooltip) { if (!(gridStack instanceof GridStackItem) || !((GridStackItem) gridStack).doesDisplayCraftText()) {
if (!(gridStack instanceof GridStackItem) || !((GridStackItem) gridStack).doesDisplayCraftText()) { smallTextLines.add(I18n.format("misc.refinedstorage:total", gridStack.getFormattedFullQuantity()));
textLines.add(""); }
}
if (gridStack.getTrackerEntry() != null) { if (gridStack.getTrackerEntry() != null) {
textLines.add(""); smallTextLines.add(TimeUtils.getAgo(gridStack.getTrackerEntry().getTime(), gridStack.getTrackerEntry().getName()));
}
} }
ItemStack stack = gridStack instanceof GridStackItem ? ((GridStackItem) gridStack).getStack() : ItemStack.EMPTY; ItemStack stack = gridStack instanceof GridStackItem ? ((GridStackItem) gridStack).getStack() : ItemStack.EMPTY;
// RS END
if (!textLines.isEmpty()) { RenderUtils.drawTooltipWithSmallText(textLines, smallTextLines, RS.INSTANCE.config.detailedTooltip, stack, mouseX, mouseY, screenWidth, screenHeight, fontRenderer);
RenderTooltipEvent.Pre event = new RenderTooltipEvent.Pre(stack, textLines, mouseX, mouseY, screenWidth, screenHeight, -1, fontRenderer);
if (MinecraftForge.EVENT_BUS.post(event)) {
return;
}
mouseX = event.getX();
mouseY = event.getY();
screenWidth = event.getScreenWidth();
screenHeight = event.getScreenHeight();
FontRenderer font = event.getFontRenderer();
// RS BEGIN
float textScale = font.getUnicodeFlag() ? 1F : 0.7F;
// RS END
GlStateManager.disableRescaleNormal();
RenderHelper.disableStandardItemLighting();
GlStateManager.disableLighting();
GlStateManager.disableDepth();
int tooltipTextWidth = 0;
for (String textLine : textLines) {
int textLineWidth = font.getStringWidth(textLine);
if (textLineWidth > tooltipTextWidth) {
tooltipTextWidth = textLineWidth;
}
}
// RS BEGIN
if (RS.INSTANCE.config.detailedTooltip) {
int size;
if (!(gridStack instanceof GridStackItem) || !((GridStackItem) gridStack).doesDisplayCraftText()) {
size = (int) (font.getStringWidth(I18n.format("misc.refinedstorage:total", gridStack.getFormattedFullQuantity())) * textScale);
if (size > tooltipTextWidth) {
tooltipTextWidth = size;
}
}
if (gridStack.getTrackerEntry() != null) {
size = (int) (font.getStringWidth(TimeUtils.getAgo(gridStack.getTrackerEntry().getTime(), gridStack.getTrackerEntry().getName())) * textScale);
if (size > tooltipTextWidth) {
tooltipTextWidth = size;
}
}
}
// RS END
int titleLinesCount = 1;
int tooltipX = mouseX + 12;
int tooltipY = mouseY - 12;
int tooltipHeight = 8;
if (textLines.size() > 1) {
tooltipHeight += (textLines.size() - 1) * 10;
if (textLines.size() > titleLinesCount) {
tooltipHeight += 2;
}
}
if (tooltipY + tooltipHeight + 6 > screenHeight) {
tooltipY = screenHeight - tooltipHeight - 6;
}
final int zLevel = 300;
final int backgroundColor = 0xF0100010;
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3, tooltipY - 3, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY + tooltipHeight + 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX + tooltipTextWidth + 3, tooltipY - 3, tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor);
final int borderColorStart = 0x505000FF;
final int borderColorEnd = (borderColorStart & 0xFEFEFE) >> 1 | borderColorStart & 0xFF000000;
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd);
GuiUtils.drawGradientRect(zLevel, tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY - 3 + 1, borderColorStart, borderColorStart);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY + tooltipHeight + 2, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, borderColorEnd, borderColorEnd);
MinecraftForge.EVENT_BUS.post(new RenderTooltipEvent.PostBackground(stack, textLines, tooltipX, tooltipY, font, tooltipTextWidth, tooltipHeight));
int tooltipTop = tooltipY;
for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) {
String line = textLines.get(lineNumber);
font.drawStringWithShadow(line, (float) tooltipX, (float) tooltipY, -1);
if (lineNumber + 1 == titleLinesCount) {
tooltipY += 2;
}
tooltipY += 10;
}
MinecraftForge.EVENT_BUS.post(new RenderTooltipEvent.PostText(stack, textLines, tooltipX, tooltipTop, font, tooltipTextWidth, tooltipHeight));
// RS BEGIN
if (RS.INSTANCE.config.detailedTooltip) {
GlStateManager.pushMatrix();
GlStateManager.scale(textScale, textScale, 1);
if (!(gridStack instanceof GridStackItem) || !((GridStackItem) gridStack).doesDisplayCraftText()) {
font.drawStringWithShadow(
TextFormatting.GRAY + I18n.format("misc.refinedstorage:total", gridStack.getFormattedFullQuantity()),
RenderUtils.getOffsetOnScale(tooltipX, textScale),
RenderUtils.getOffsetOnScale(tooltipTop + tooltipHeight - (gridStack.getTrackerEntry() != null ? 15 : 6) - (font.getUnicodeFlag() ? 2 : 0), textScale),
-1
);
}
if (gridStack.getTrackerEntry() != null) {
font.drawStringWithShadow(
TextFormatting.GRAY + TimeUtils.getAgo(gridStack.getTrackerEntry().getTime(), gridStack.getTrackerEntry().getName()),
RenderUtils.getOffsetOnScale(tooltipX, textScale),
RenderUtils.getOffsetOnScale(tooltipTop + tooltipHeight - 6 - (font.getUnicodeFlag() ? 2 : 0), textScale),
-1
);
}
GlStateManager.popMatrix();
}
// RS END
GlStateManager.enableLighting();
GlStateManager.enableDepth();
RenderHelper.enableStandardItemLighting();
GlStateManager.enableRescaleNormal();
}
} }
@Override @Override

View File

@@ -6,16 +6,12 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageTrackerEntry;
import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class GridStackItem implements IGridStack { public class GridStackItem implements IGridStack {
@@ -103,18 +99,7 @@ public class GridStackItem implements IGridStack {
@Override @Override
public String getTooltip() { public String getTooltip() {
try { try {
List<String> lines = stack.getTooltip(Minecraft.getMinecraft().player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); return StackUtils.getItemTooltip(stack).stream().collect(Collectors.joining("\n"));
// From GuiScreen#renderToolTip
for (int i = 0; i < lines.size(); ++i) {
if (i == 0) {
lines.set(i, stack.getRarity().rarityColor + lines.get(i));
} else {
lines.set(i, TextFormatting.GRAY + lines.get(i));
}
}
return lines.stream().collect(Collectors.joining("\n"));
} catch (Throwable t) { } catch (Throwable t) {
return ""; return "";
} }

View File

@@ -55,7 +55,7 @@ public class ItemFilter extends ItemBase {
public String getItemStackDisplayName(ItemStack stack) { public String getItemStackDisplayName(ItemStack stack) {
String name = getName(stack); String name = getName(stack);
if (!name.equalsIgnoreCase("")) { if (!name.trim().equals("")) {
return name; return name;
} }

View File

@@ -39,6 +39,8 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
UUID id = UUID.fromString(ByteBufUtils.readUTF8String(buf)); UUID id = UUID.fromString(ByteBufUtils.readUTF8String(buf));
ItemStack requested = ByteBufUtils.readItemStack(buf); ItemStack requested = ByteBufUtils.readItemStack(buf);
int qty = buf.readInt(); int qty = buf.readInt();
long executionStarted = buf.readLong();
List<ICraftingMonitorElement> elements = new ArrayList<>(); List<ICraftingMonitorElement> elements = new ArrayList<>();
int elementCount = buf.readInt(); int elementCount = buf.readInt();
@@ -51,7 +53,7 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
} }
} }
tasks.add(new GuiCraftingMonitor.CraftingMonitorTask(id, requested, qty, elements)); tasks.add(new GuiCraftingMonitor.CraftingMonitorTask(id, requested, qty, executionStarted, elements));
} }
} }
@@ -63,6 +65,7 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
ByteBufUtils.writeUTF8String(buf, task.getId().toString()); ByteBufUtils.writeUTF8String(buf, task.getId().toString());
ByteBufUtils.writeItemStack(buf, task.getRequested()); ByteBufUtils.writeItemStack(buf, task.getRequested());
buf.writeInt(task.getQuantity()); buf.writeInt(task.getQuantity());
buf.writeLong(task.getExecutionStarted());
List<ICraftingMonitorElement> elements = task.getCraftingMonitorElements(); List<ICraftingMonitorElement> elements = task.getCraftingMonitorElements();

View File

@@ -3,8 +3,10 @@ package com.raoulvdberge.refinedstorage.util;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@@ -18,10 +20,15 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.client.event.RenderTooltipEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.model.TRSRTransformation; import net.minecraftforge.common.model.TRSRTransformation;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.client.config.GuiUtils;
import javax.annotation.Nonnull;
import javax.vecmath.Matrix4f; import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f; import javax.vecmath.Vector3f;
import java.util.Collection; import java.util.Collection;
@@ -325,4 +332,136 @@ public final class RenderUtils {
} }
} }
} }
// Copied with some tweaks from GuiUtils#drawHoveringText(@Nonnull final ItemStack stack, List<String> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, FontRenderer font)
public static void drawTooltipWithSmallText(List<String> textLines, List<String> smallTextLines, boolean showSmallText, @Nonnull ItemStack stack, int mouseX, int mouseY, int screenWidth, int screenHeight, FontRenderer fontRenderer) {
// RS BEGIN
if (showSmallText) {
for (int i = 0; i < smallTextLines.size(); ++i) {
textLines.add("");
}
}
// RS END
if (!textLines.isEmpty()) {
RenderTooltipEvent.Pre event = new RenderTooltipEvent.Pre(stack, textLines, mouseX, mouseY, screenWidth, screenHeight, -1, fontRenderer);
if (MinecraftForge.EVENT_BUS.post(event)) {
return;
}
mouseX = event.getX();
mouseY = event.getY();
screenWidth = event.getScreenWidth();
screenHeight = event.getScreenHeight();
FontRenderer font = event.getFontRenderer();
// RS BEGIN
float textScale = font.getUnicodeFlag() ? 1F : 0.7F;
// RS END
GlStateManager.disableRescaleNormal();
RenderHelper.disableStandardItemLighting();
GlStateManager.disableLighting();
GlStateManager.disableDepth();
int tooltipTextWidth = 0;
for (String textLine : textLines) {
int textLineWidth = font.getStringWidth(textLine);
if (textLineWidth > tooltipTextWidth) {
tooltipTextWidth = textLineWidth;
}
}
// RS BEGIN
if (showSmallText) {
int size;
for (String smallText : smallTextLines) {
size = (int) (font.getStringWidth(smallText) * textScale);
if (size > tooltipTextWidth) {
tooltipTextWidth = size;
}
}
}
// RS END
int titleLinesCount = 1;
int tooltipX = mouseX + 12;
int tooltipY = mouseY - 12;
int tooltipHeight = 8;
if (textLines.size() > 1) {
tooltipHeight += (textLines.size() - 1) * 10;
if (textLines.size() > titleLinesCount) {
tooltipHeight += 2;
}
}
if (tooltipY + tooltipHeight + 6 > screenHeight) {
tooltipY = screenHeight - tooltipHeight - 6;
}
final int zLevel = 300;
final int backgroundColor = 0xF0100010;
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3, tooltipY - 3, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY + tooltipHeight + 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor);
GuiUtils.drawGradientRect(zLevel, tooltipX + tooltipTextWidth + 3, tooltipY - 3, tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor);
final int borderColorStart = 0x505000FF;
final int borderColorEnd = (borderColorStart & 0xFEFEFE) >> 1 | borderColorStart & 0xFF000000;
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd);
GuiUtils.drawGradientRect(zLevel, tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY - 3 + 1, borderColorStart, borderColorStart);
GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY + tooltipHeight + 2, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, borderColorEnd, borderColorEnd);
MinecraftForge.EVENT_BUS.post(new RenderTooltipEvent.PostBackground(stack, textLines, tooltipX, tooltipY, font, tooltipTextWidth, tooltipHeight));
int tooltipTop = tooltipY;
for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) {
String line = textLines.get(lineNumber);
font.drawStringWithShadow(line, (float) tooltipX, (float) tooltipY, -1);
if (lineNumber + 1 == titleLinesCount) {
tooltipY += 2;
}
tooltipY += 10;
}
MinecraftForge.EVENT_BUS.post(new RenderTooltipEvent.PostText(stack, textLines, tooltipX, tooltipTop, font, tooltipTextWidth, tooltipHeight));
// RS BEGIN
if (showSmallText) {
GlStateManager.pushMatrix();
GlStateManager.scale(textScale, textScale, 1);
int y = tooltipTop + tooltipHeight - 6;
for (int i = smallTextLines.size() - 1; i >= 0; --i) {
font.drawStringWithShadow(
TextFormatting.GRAY + smallTextLines.get(i),
RenderUtils.getOffsetOnScale(tooltipX, textScale),
RenderUtils.getOffsetOnScale(y - (font.getUnicodeFlag() ? 2 : 0), textScale),
-1
);
y -= 9;
}
GlStateManager.popMatrix();
}
// RS END
GlStateManager.enableLighting();
GlStateManager.enableDepth();
RenderHelper.enableStandardItemLighting();
GlStateManager.enableRescaleNormal();
}
}
} }

View File

@@ -6,6 +6,8 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.api.util.IStackList;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Items; import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
@@ -14,6 +16,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
@@ -31,6 +34,7 @@ import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
@@ -292,4 +296,19 @@ public final class StackUtils {
return Pair.of(null, null); return Pair.of(null, null);
} }
public static List<String> getItemTooltip(ItemStack stack) {
List<String> lines = stack.getTooltip(Minecraft.getMinecraft().player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL);
// From GuiScreen#getItemToolTip
for (int i = 0; i < lines.size(); ++i) {
if (i == 0) {
lines.set(i, stack.getRarity().rarityColor + lines.get(i));
} else {
lines.set(i, TextFormatting.GRAY + lines.get(i));
}
}
return lines;
}
} }

View File

@@ -24,6 +24,7 @@ gui.refinedstorage:interface.import=Interface Import
gui.refinedstorage:interface.export=Interface Export gui.refinedstorage:interface.export=Interface Export
gui.refinedstorage:crafting_monitor=Crafting Monitor gui.refinedstorage:crafting_monitor=Crafting Monitor
gui.refinedstorage:wireless_crafting_monitor=Wireless Crafting Monitor gui.refinedstorage:wireless_crafting_monitor=Wireless Crafting Monitor
gui.refinedstorage:crafting_monitor.tooltip.requested=%d requested
gui.refinedstorage:crafting_monitor.fluids_taking=Fluids taking gui.refinedstorage:crafting_monitor.fluids_taking=Fluids taking
gui.refinedstorage:crafting_monitor.items_crafting=Items crafting gui.refinedstorage:crafting_monitor.items_crafting=Items crafting
gui.refinedstorage:crafting_monitor.items_processing=Items processing gui.refinedstorage:crafting_monitor.items_processing=Items processing