Add information to crafting monitor about crafting task

This commit is contained in:
Raoul Van den Berge
2016-05-05 16:54:06 +02:00
parent e67cced0ed
commit ca8466870c
8 changed files with 156 additions and 4 deletions

View File

@@ -204,8 +204,12 @@ public abstract class GuiBase extends GuiContainer {
}
public void drawTooltip(int x, int y, String message) {
drawTooltip(x, y, Arrays.asList(message.split("\n")));
}
public void drawTooltip(int x, int y, List<String> lines) {
GL11.glDisable(GL11.GL_LIGHTING);
drawHoveringText(Arrays.asList(message.split("\n")), x, y);
drawHoveringText(lines, x, y);
GL11.glEnable(GL11.GL_LIGHTING);
}

View File

@@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack;
import refinedstorage.container.ContainerCraftingMonitor;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.autocrafting.TileCraftingMonitor;
import scala.actors.threadpool.Arrays;
import java.util.List;
@@ -64,8 +65,10 @@ public class GuiCraftingMonitor extends GuiBase {
List<ItemStack> tasks = craftingMonitor.getTasks();
List<String> infoLines = null;
for (int i = 0; i < 6; ++i) {
if (slot < tasks.size()) {
if (slot < tasks.size() && slot < craftingMonitor.getInfo().length) {
ItemStack task = tasks.get(slot);
drawItem(x, y + 5, task);
@@ -77,6 +80,21 @@ public class GuiCraftingMonitor extends GuiBase {
drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 3, scale), task.getDisplayName());
GlStateManager.popMatrix();
if (inBounds(x, y + 5, 16, 16, mouseX, mouseY)) {
infoLines = Arrays.asList(craftingMonitor.getInfo()[slot].split("\n"));
for (int j = 0; j < infoLines.size(); ++j) {
String line = infoLines.get(j);
infoLines.set(j, line
.replace("{missing_items}", t("gui.refinedstorage:crafting_monitor.missing_items"))
.replace("{items_crafting}", t("gui.refinedstorage:crafting_monitor.items_crafting"))
.replace("{items_processing}", t("gui.refinedstorage:crafting_monitor.items_processing"))
.replace("{missing_machine}", t("gui.refinedstorage:crafting_monitor.missing_machine"))
.replace("{none}", t("misc.refinedstorage:none")));
}
}
}
if (i == 1 || i == 3) {
@@ -88,6 +106,10 @@ public class GuiCraftingMonitor extends GuiBase {
slot++;
}
if (infoLines != null) {
drawTooltip(mouseX, mouseY, infoLines);
}
}
public int getOffset() {

View File

@@ -13,6 +13,7 @@ import java.util.List;
public class TileCraftingMonitor extends TileMachine {
private List<ItemStack> tasks = new ArrayList<ItemStack>();
private String[] info = new String[0];
@Override
public int getEnergyUsage() {
@@ -31,6 +32,8 @@ public class TileCraftingMonitor extends TileMachine {
buf.writeInt(controller.getCraftingTasks().size());
for (ICraftingTask task : controller.getCraftingTasks()) {
ByteBufUtils.writeUTF8String(buf, task.getInfo());
buf.writeInt(task.getPattern().getOutputs().length);
for (ItemStack output : task.getPattern().getOutputs()) {
@@ -46,11 +49,14 @@ public class TileCraftingMonitor extends TileMachine {
public void receiveContainerData(ByteBuf buf) {
super.receiveContainerData(buf);
List<ItemStack> newTasks = new ArrayList<ItemStack>();
int size = buf.readInt();
List<ItemStack> newTasks = new ArrayList<ItemStack>();
String[] newInfo = new String[size];
for (int i = 0; i < size; ++i) {
newInfo[i] = ByteBufUtils.readUTF8String(buf);
int outputSize = buf.readInt();
for (int j = 0; j < outputSize; ++j) {
@@ -59,12 +65,17 @@ public class TileCraftingMonitor extends TileMachine {
}
tasks = newTasks;
info = newInfo;
}
public List<ItemStack> getTasks() {
return tasks;
}
public String[] getInfo() {
return info;
}
@Override
public Class<? extends Container> getContainer() {
return ContainerCraftingMonitor.class;

View File

@@ -1,6 +1,7 @@
package refinedstorage.tile.autocrafting.task;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import refinedstorage.tile.TileController;
import refinedstorage.tile.autocrafting.CraftingPattern;
@@ -57,4 +58,47 @@ public class BasicCraftingTask implements ICraftingTask {
controller.push(output);
}
}
@Override
public String getInfo() {
StringBuilder builder = new StringBuilder();
builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n");
int missingItems = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (!satisfied[i] && !childTasks[i]) {
builder.append("- ").append(input.getUnlocalizedName()).append("\n");
missingItems++;
}
}
if (missingItems == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
builder.append(TextFormatting.YELLOW).append("{items_crafting}").append(TextFormatting.RESET).append("\n");
int itemsCrafting = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (childTasks[i]) {
builder.append("- ").append(input.getDisplayName()).append("\n");
itemsCrafting++;
}
}
if (itemsCrafting == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
return builder.toString();
}
}

View File

@@ -9,4 +9,6 @@ public interface ICraftingTask {
boolean update(TileController controller);
void onDone(TileController controller);
String getInfo();
}

View File

@@ -4,6 +4,7 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityHopper;
import net.minecraft.util.text.TextFormatting;
import refinedstorage.tile.TileController;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.autocrafting.TileCrafter;
@@ -12,11 +13,14 @@ import refinedstorage.util.InventoryUtils;
public class ProcessingCraftingTask implements ICraftingTask {
private CraftingPattern pattern;
private boolean inserted[];
private boolean missing[];
private boolean satisfied[];
private boolean missingMachine;
public ProcessingCraftingTask(CraftingPattern pattern) {
this.pattern = pattern;
this.inserted = new boolean[pattern.getInputs().length];
this.missing = new boolean[pattern.getInputs().length];
this.satisfied = new boolean[pattern.getOutputs().length];
}
@@ -31,12 +35,16 @@ public class ProcessingCraftingTask implements ICraftingTask {
TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection()));
if (crafterFacing instanceof IInventory) {
missingMachine = false;
for (int i = 0; i < inserted.length; ++i) {
if (!inserted[i]) {
ItemStack input = pattern.getInputs()[i];
ItemStack took = controller.take(input);
if (took != null) {
missing[i] = false;
ItemStack remaining = TileEntityHopper.putStackInInventoryAllSlots((IInventory) crafterFacing, took, crafter.getDirection().getOpposite());
if (remaining == null) {
@@ -44,9 +52,13 @@ public class ProcessingCraftingTask implements ICraftingTask {
} else {
controller.push(input);
}
} else {
missing[i] = true;
}
}
}
} else {
missingMachine = true;
}
for (int i = 0; i < satisfied.length; ++i) {
@@ -73,4 +85,51 @@ public class ProcessingCraftingTask implements ICraftingTask {
public void onDone(TileController controller) {
// NO OP
}
@Override
public String getInfo() {
StringBuilder builder = new StringBuilder();
if (missingMachine) {
builder.append(TextFormatting.RED).append("{missing_machine}").append(TextFormatting.RESET).append("\n");
}
builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n");
int missingItems = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (missing[i]) {
builder.append("- ").append(input.getDisplayName()).append("\n");
missingItems++;
}
}
if (missingItems == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
builder.append(TextFormatting.YELLOW).append("{items_processing}").append(TextFormatting.RESET).append("\n");
int itemsProcessing = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (inserted[i] && !satisfied[i]) {
builder.append("- ").append(input.getDisplayName()).append("\n");
itemsProcessing++;
}
}
if (itemsProcessing == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
return builder.toString();
}
}

View File

@@ -21,6 +21,10 @@ gui.refinedstorage:relay=Relay
gui.refinedstorage:interface.import=Interface Import
gui.refinedstorage:interface.export=Interface Export
gui.refinedstorage:crafting_monitor=Crafting Monitor
gui.refinedstorage:crafting_monitor.missing_items=Missing items:
gui.refinedstorage:crafting_monitor.items_crafting=Items crafting:
gui.refinedstorage:crafting_monitor.items_processing=Items processing:
gui.refinedstorage:crafting_monitor.missing_machine=Missing machine!
gui.refinedstorage:wireless_transmitter=Wireless Transmitter
gui.refinedstorage:wireless_transmitter.distance=%d blocks
gui.refinedstorage:crafter=Crafter
@@ -47,6 +51,7 @@ misc.refinedstorage:yes=Yes
misc.refinedstorage:no=No
misc.refinedstorage:start=Start
misc.refinedstorage:clear=Clear
misc.refinedstorage:none=None
misc.refinedstorage:priority=Priority
misc.refinedstorage:processing=Processing

View File

@@ -21,6 +21,10 @@ gui.refinedstorage:relay=Relais
gui.refinedstorage:interface.import=Interface Import
gui.refinedstorage:interface.export=Interface Export
gui.refinedstorage:crafting_monitor=Crafting Monitor
gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items:
gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften:
gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken:
gui.refinedstorage:crafting_monitor.missing_machine=Ontbrekende machine!
gui.refinedstorage:wireless_transmitter=Draadloze Zender
gui.refinedstorage:wireless_transmitter.distance=%d blokken
gui.refinedstorage:crafter=Crafter
@@ -47,6 +51,7 @@ misc.refinedstorage:yes=Ja
misc.refinedstorage:no=Nee
misc.refinedstorage:start=Start
misc.refinedstorage:clear=Legen
misc.refinedstorage:none=Geen
misc.refinedstorage:priority=Prioriteit
misc.refinedstorage:processing=Verwerking