Show IProcessable items in crafting monitor too
This commit is contained in:
@@ -27,6 +27,8 @@ public interface IProcessable {
|
|||||||
*/
|
*/
|
||||||
boolean hasReceivedOutputs();
|
boolean hasReceivedOutputs();
|
||||||
|
|
||||||
|
boolean hasReceivedOutput(int i);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param stack the stack that was inserted in the storage system
|
* @param stack the stack that was inserted in the storage system
|
||||||
* @return whether this item belonged to the processable item
|
* @return whether this item belonged to the processable item
|
||||||
|
@@ -1,26 +1,56 @@
|
|||||||
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||||
import refinedstorage.gui.GuiBase;
|
import refinedstorage.gui.GuiBase;
|
||||||
|
|
||||||
public abstract class CraftingMonitorElementItemRender implements ICraftingMonitorElement<GuiBase> {
|
public class CraftingMonitorElementItemRender implements ICraftingMonitorElement<GuiBase> {
|
||||||
|
public static final String ID = "item_render";
|
||||||
|
|
||||||
|
private int taskId;
|
||||||
|
private ItemStack stack;
|
||||||
|
private int quantity;
|
||||||
|
private int offset;
|
||||||
|
|
||||||
|
public CraftingMonitorElementItemRender(int taskId, ItemStack stack, int quantity, int offset) {
|
||||||
|
this.taskId = taskId;
|
||||||
|
this.stack = stack;
|
||||||
|
this.quantity = quantity;
|
||||||
|
this.offset = offset;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(GuiBase gui, int x, int y) {
|
public void draw(GuiBase gui, int x, int y) {
|
||||||
gui.drawItem(x + 2, y + 1, getItem());
|
gui.drawItem(x + 2 + offset, y + 1, stack);
|
||||||
|
|
||||||
float scale = 0.5f;
|
float scale = 0.5f;
|
||||||
|
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
GlStateManager.scale(scale, scale, 1);
|
GlStateManager.scale(scale, scale, 1);
|
||||||
|
|
||||||
gui.drawString(gui.calculateOffsetOnScale(x + 21, scale), gui.calculateOffsetOnScale(y + 7, scale), getQuantity() + " " + getItem().getDisplayName());
|
gui.drawString(gui.calculateOffsetOnScale(x + 21 + offset, scale), gui.calculateOffsetOnScale(y + 7, scale), quantity + " " + stack.getDisplayName());
|
||||||
|
|
||||||
GlStateManager.popMatrix();
|
GlStateManager.popMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract ItemStack getItem();
|
@Override
|
||||||
|
public int getTaskId() {
|
||||||
protected abstract int getQuantity();
|
return taskId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(ByteBuf buf) {
|
||||||
|
buf.writeInt(taskId);
|
||||||
|
ByteBufUtils.writeItemStack(buf, stack);
|
||||||
|
buf.writeInt(quantity);
|
||||||
|
buf.writeInt(offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,46 +0,0 @@
|
|||||||
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
|
||||||
|
|
||||||
public class CraftingMonitorElementRoot extends CraftingMonitorElementItemRender {
|
|
||||||
public static final String ID = "root";
|
|
||||||
|
|
||||||
private int id;
|
|
||||||
private ItemStack output;
|
|
||||||
private int quantity;
|
|
||||||
|
|
||||||
public CraftingMonitorElementRoot(int id, ItemStack output, int quantity) {
|
|
||||||
this.id = id;
|
|
||||||
this.output = output;
|
|
||||||
this.quantity = quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getTaskId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId() {
|
|
||||||
return ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(ByteBuf buf) {
|
|
||||||
buf.writeInt(id);
|
|
||||||
ByteBufUtils.writeItemStack(buf, output);
|
|
||||||
buf.writeInt(quantity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ItemStack getItem() {
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getQuantity() {
|
|
||||||
return quantity;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,49 +0,0 @@
|
|||||||
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
|
||||||
import refinedstorage.gui.GuiBase;
|
|
||||||
|
|
||||||
public class CraftingMonitorElementToTake extends CraftingMonitorElementItemRender {
|
|
||||||
public static final String ID = "to_take";
|
|
||||||
|
|
||||||
private ItemStack toTake;
|
|
||||||
private int remaining;
|
|
||||||
|
|
||||||
public CraftingMonitorElementToTake(ItemStack toTake, int remaining) {
|
|
||||||
this.toTake = toTake;
|
|
||||||
this.remaining = remaining;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void draw(GuiBase gui, int x, int y) {
|
|
||||||
super.draw(gui, x + 32, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getTaskId() {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId() {
|
|
||||||
return ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(ByteBuf buf) {
|
|
||||||
ByteBufUtils.writeItemStack(buf, toTake);
|
|
||||||
buf.writeInt(remaining);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ItemStack getItem() {
|
|
||||||
return toTake;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getQuantity() {
|
|
||||||
return remaining;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -10,9 +10,8 @@ import refinedstorage.api.autocrafting.task.ICraftingTask;
|
|||||||
import refinedstorage.api.autocrafting.task.IProcessable;
|
import refinedstorage.api.autocrafting.task.IProcessable;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.util.IItemStackList;
|
import refinedstorage.api.util.IItemStackList;
|
||||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot;
|
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender;
|
||||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText;
|
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText;
|
||||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementToTake;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -123,7 +122,7 @@ public class CraftingTaskNormal implements ICraftingTask {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toTake.isEmpty() && missing.isEmpty() && toProcess.stream().allMatch(IProcessable::hasReceivedOutputs)) {
|
if (toTake.isEmpty() && missing.isEmpty() && hasProcessedItems()) {
|
||||||
for (ItemStack output : pattern.getOutputs()) {
|
for (ItemStack output : pattern.getOutputs()) {
|
||||||
// @TODO: Handle remainder
|
// @TODO: Handle remainder
|
||||||
network.insertItem(output, output.stackSize, false);
|
network.insertItem(output, output.stackSize, false);
|
||||||
@@ -154,18 +153,43 @@ public class CraftingTaskNormal implements ICraftingTask {
|
|||||||
public List<ICraftingMonitorElement> getCraftingMonitorElements() {
|
public List<ICraftingMonitorElement> getCraftingMonitorElements() {
|
||||||
List<ICraftingMonitorElement> elements = new ArrayList<>();
|
List<ICraftingMonitorElement> elements = new ArrayList<>();
|
||||||
|
|
||||||
elements.add(new CraftingMonitorElementRoot(
|
elements.add(new CraftingMonitorElementItemRender(
|
||||||
network.getCraftingTasks().indexOf(this),
|
network.getCraftingTasks().indexOf(this),
|
||||||
pattern.getOutputs().get(0),
|
pattern.getOutputs().get(0),
|
||||||
quantity
|
quantity,
|
||||||
|
0
|
||||||
));
|
));
|
||||||
|
|
||||||
|
if (!toTake.isEmpty()) {
|
||||||
elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_taking", 16));
|
elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_taking", 16));
|
||||||
|
|
||||||
elements.addAll(toTake.getStacks().stream()
|
elements.addAll(toTake.getStacks().stream()
|
||||||
.map(stack -> new CraftingMonitorElementToTake(stack, stack.stackSize))
|
.map(stack -> new CraftingMonitorElementItemRender(
|
||||||
|
-1,
|
||||||
|
stack,
|
||||||
|
stack.stackSize,
|
||||||
|
32
|
||||||
|
))
|
||||||
.collect(Collectors.toList())
|
.collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasProcessedItems()) {
|
||||||
|
elements.add(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_processing", 16));
|
||||||
|
|
||||||
|
for (IProcessable processable : toProcess) {
|
||||||
|
for (int i = 0; i < processable.getPattern().getOutputs().size(); ++i) {
|
||||||
|
if (!processable.hasReceivedOutput(i)) {
|
||||||
|
elements.add(new CraftingMonitorElementItemRender(
|
||||||
|
-1,
|
||||||
|
processable.getPattern().getOutputs().get(i),
|
||||||
|
processable.getPattern().getOutputs().get(i).stackSize,
|
||||||
|
32
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return elements;
|
return elements;
|
||||||
}
|
}
|
||||||
@@ -175,12 +199,15 @@ public class CraftingTaskNormal implements ICraftingTask {
|
|||||||
return pattern;
|
return pattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<IProcessable> getToProcess() {
|
public List<IProcessable> getToProcess() {
|
||||||
return toProcess;
|
return toProcess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasProcessedItems() {
|
||||||
|
return toProcess.stream().allMatch(IProcessable::hasReceivedOutputs);
|
||||||
|
}
|
||||||
|
|
||||||
private void addExtras(ICraftingPattern pattern) {
|
private void addExtras(ICraftingPattern pattern) {
|
||||||
pattern.getOutputs().stream()
|
pattern.getOutputs().stream()
|
||||||
.filter(o -> o.stackSize > 1)
|
.filter(o -> o.stackSize > 1)
|
||||||
|
@@ -45,6 +45,11 @@ public class Processable implements IProcessable {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasReceivedOutput(int i) {
|
||||||
|
return satisfied[i];
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onReceiveOutput(ItemStack stack) {
|
public boolean onReceiveOutput(ItemStack stack) {
|
||||||
for (int i = 0; i < pattern.getOutputs().size(); ++i) {
|
for (int i = 0; i < pattern.getOutputs().size(); ++i) {
|
||||||
|
@@ -19,9 +19,8 @@ import refinedstorage.RS;
|
|||||||
import refinedstorage.RSBlocks;
|
import refinedstorage.RSBlocks;
|
||||||
import refinedstorage.RSItems;
|
import refinedstorage.RSItems;
|
||||||
import refinedstorage.api.RSAPI;
|
import refinedstorage.api.RSAPI;
|
||||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot;
|
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender;
|
||||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText;
|
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText;
|
||||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementToTake;
|
|
||||||
import refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactoryNormal;
|
import refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactoryNormal;
|
||||||
import refinedstorage.apiimpl.solderer.*;
|
import refinedstorage.apiimpl.solderer.*;
|
||||||
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
|
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
|
||||||
@@ -50,8 +49,7 @@ public class CommonProxy {
|
|||||||
|
|
||||||
RSAPI.instance().getCraftingTaskRegistry().addFactory(CraftingTaskFactoryNormal.ID, new CraftingTaskFactoryNormal());
|
RSAPI.instance().getCraftingTaskRegistry().addFactory(CraftingTaskFactoryNormal.ID, new CraftingTaskFactoryNormal());
|
||||||
|
|
||||||
RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementRoot.ID, buf -> new CraftingMonitorElementRoot(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt()));
|
RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt(), buf.readInt()));
|
||||||
RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementToTake.ID, buf -> new CraftingMonitorElementToTake(ByteBufUtils.readItemStack(buf), buf.readInt()));
|
|
||||||
RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementText.ID, buf -> new CraftingMonitorElementText(ByteBufUtils.readUTF8String(buf), buf.readInt()));
|
RSAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementText.ID, buf -> new CraftingMonitorElementText(ByteBufUtils.readUTF8String(buf), buf.readInt()));
|
||||||
|
|
||||||
int id = 0;
|
int id = 0;
|
||||||
|
Reference in New Issue
Block a user