Move ICraftingMonitorElement to the API, so any api consumer can choose how their tasks look like in the crafting monitor!
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package refinedstorage.api;
|
||||
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
||||
import refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry;
|
||||
import refinedstorage.api.solderer.ISoldererRegistry;
|
||||
|
||||
@@ -20,4 +21,10 @@ public interface IAPI {
|
||||
*/
|
||||
@Nonnull
|
||||
ICraftingTaskRegistry getCraftingTaskRegistry();
|
||||
|
||||
/**
|
||||
* @return the crafting monitor element registry
|
||||
*/
|
||||
@Nonnull
|
||||
ICraftingMonitorElementRegistry getCraftingMonitorElementRegistry();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package refinedstorage.api.autocrafting.craftingmonitor;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import refinedstorage.gui.GuiBase;
|
||||
|
||||
public interface ICraftingMonitorElement {
|
||||
void draw(GuiBase gui, int x, int y);
|
||||
|
||||
int getTaskId();
|
||||
|
||||
String getId();
|
||||
|
||||
void write(ByteBuf buf);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package refinedstorage.api.autocrafting.craftingmonitor;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.function.Function;
|
||||
|
||||
public interface ICraftingMonitorElementRegistry {
|
||||
void add(String id, Function<ByteBuf, ICraftingMonitorElement> factory);
|
||||
|
||||
@Nullable
|
||||
Function<ByteBuf, ICraftingMonitorElement> getFactory(String id);
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.List;
|
||||
@@ -25,6 +26,8 @@ public interface ICraftingTask {
|
||||
|
||||
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
||||
|
||||
List<ICraftingMonitorElement> getCraftingMonitorElements();
|
||||
|
||||
ICraftingPattern getPattern();
|
||||
|
||||
Deque<ItemStack> getToTake();
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package refinedstorage.apiimpl;
|
||||
|
||||
import refinedstorage.api.IAPI;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
||||
import refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry;
|
||||
import refinedstorage.api.solderer.ISoldererRegistry;
|
||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRegistry;
|
||||
import refinedstorage.apiimpl.autocrafting.registry.CraftingTaskRegistry;
|
||||
import refinedstorage.apiimpl.solderer.SoldererRegistry;
|
||||
|
||||
@@ -13,6 +15,7 @@ public class API implements IAPI {
|
||||
|
||||
private ISoldererRegistry soldererRegistry = new SoldererRegistry();
|
||||
private ICraftingTaskRegistry craftingTaskRegistry = new CraftingTaskRegistry();
|
||||
private ICraftingMonitorElementRegistry craftingMonitorElementRegistry = new CraftingMonitorElementRegistry();
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
@@ -25,4 +28,10 @@ public class API implements IAPI {
|
||||
public ICraftingTaskRegistry getCraftingTaskRegistry() {
|
||||
return craftingTaskRegistry;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public ICraftingMonitorElementRegistry getCraftingMonitorElementRegistry() {
|
||||
return craftingMonitorElementRegistry;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class CraftingMonitorElementRegistry implements ICraftingMonitorElementRegistry {
|
||||
private Map<String, Function<ByteBuf, ICraftingMonitorElement>> registry = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void add(String id, Function<ByteBuf, ICraftingMonitorElement> factory) {
|
||||
registry.put(id, factory);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Function<ByteBuf, ICraftingMonitorElement> getFactory(String id) {
|
||||
return registry.get(id);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
package refinedstorage.gui.craftingmonitor;
|
||||
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.gui.GuiBase;
|
||||
|
||||
public class CraftingMonitorElementRoot implements ICraftingMonitorElement {
|
||||
static {
|
||||
REGISTRY.put(0, buf -> new CraftingMonitorElementRoot(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt()));
|
||||
}
|
||||
public static final String ID = "root";
|
||||
|
||||
private int id;
|
||||
private ItemStack output;
|
||||
@@ -41,8 +40,8 @@ public class CraftingMonitorElementRoot implements ICraftingMonitorElement {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getType() {
|
||||
return 0;
|
||||
public String getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -0,0 +1,50 @@
|
||||
package refinedstorage.apiimpl.autocrafting.craftingmonitor;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.gui.GuiBase;
|
||||
|
||||
public class CraftingMonitorElementToTake implements ICraftingMonitorElement {
|
||||
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) {
|
||||
gui.drawItem(x + 2, y + 1, toTake);
|
||||
|
||||
float scale = 0.5f;
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.scale(scale, scale, 1);
|
||||
|
||||
gui.drawString(gui.calculateOffsetOnScale(x + 21, scale), gui.calculateOffsetOnScale(y + 7, scale), remaining + " " + toTake.getDisplayName());
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
@@ -7,12 +7,14 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.api.autocrafting.task.IProcessable;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
import refinedstorage.api.network.NetworkUtils;
|
||||
import refinedstorage.api.storage.CompareUtils;
|
||||
import refinedstorage.api.storage.item.IGroupedItemStorage;
|
||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
@@ -141,6 +143,19 @@ public class CraftingTaskNormal implements ICraftingTask {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ICraftingMonitorElement> getCraftingMonitorElements() {
|
||||
List<ICraftingMonitorElement> elements = new ArrayList<>();
|
||||
|
||||
elements.add(new CraftingMonitorElementRoot(
|
||||
network.getCraftingTasks().indexOf(this),
|
||||
pattern.getOutputs().get(0),
|
||||
quantity
|
||||
));
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICraftingPattern getPattern() {
|
||||
return pattern;
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package refinedstorage.gui.craftingmonitor;
|
||||
package refinedstorage.gui;
|
||||
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import refinedstorage.RefinedStorage;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.container.ContainerCraftingMonitor;
|
||||
import refinedstorage.gui.GuiBase;
|
||||
import refinedstorage.gui.Scrollbar;
|
||||
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import refinedstorage.network.MessageCraftingMonitorCancel;
|
||||
import refinedstorage.tile.TileCraftingMonitor;
|
||||
@@ -9,7 +9,6 @@ import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.network.IGuiHandler;
|
||||
import refinedstorage.RefinedStorageGui;
|
||||
import refinedstorage.container.*;
|
||||
import refinedstorage.gui.craftingmonitor.GuiCraftingMonitor;
|
||||
import refinedstorage.gui.grid.GuiGrid;
|
||||
import refinedstorage.tile.*;
|
||||
import refinedstorage.tile.externalstorage.TileExternalStorage;
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
package refinedstorage.gui.craftingmonitor;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import refinedstorage.gui.GuiBase;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
public interface ICraftingMonitorElement {
|
||||
Map<Integer, Function<ByteBuf, ICraftingMonitorElement>> REGISTRY = new HashMap<>();
|
||||
|
||||
void draw(GuiBase gui, int x, int y);
|
||||
|
||||
int getTaskId();
|
||||
|
||||
int getType();
|
||||
|
||||
void write(ByteBuf buf);
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
@@ -19,6 +20,8 @@ import refinedstorage.RefinedStorageBlocks;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.api.RefinedStorageAPI;
|
||||
import refinedstorage.api.solderer.SoldererRecipe;
|
||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot;
|
||||
import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementToTake;
|
||||
import refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactoryNormal;
|
||||
import refinedstorage.apiimpl.solderer.*;
|
||||
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
|
||||
@@ -47,6 +50,9 @@ public class CommonProxy {
|
||||
|
||||
RefinedStorageAPI.instance().getCraftingTaskRegistry().addFactory(CraftingTaskFactoryNormal.ID, new CraftingTaskFactoryNormal());
|
||||
|
||||
RefinedStorageAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementRoot.ID, buf -> new CraftingMonitorElementRoot(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt()));
|
||||
RefinedStorageAPI.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementToTake.ID, buf -> new CraftingMonitorElementToTake(ByteBufUtils.readItemStack(buf), buf.readInt()));
|
||||
|
||||
int id = 0;
|
||||
|
||||
RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT);
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package refinedstorage.tile;
|
||||
|
||||
import refinedstorage.RefinedStorage;
|
||||
import refinedstorage.gui.craftingmonitor.CraftingMonitorElementRoot;
|
||||
import refinedstorage.gui.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.tile.data.ITileDataProducer;
|
||||
import refinedstorage.tile.data.RefinedStorageSerializers;
|
||||
import refinedstorage.tile.data.TileDataParameter;
|
||||
@@ -12,17 +11,11 @@ import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TileCraftingMonitor extends TileNode {
|
||||
public static final TileDataParameter<List<ICraftingMonitorElement>> ELEMENTS = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, Collections.emptyList(), new ITileDataProducer<List<ICraftingMonitorElement>, TileCraftingMonitor>() {
|
||||
public static final TileDataParameter<List<ICraftingMonitorElement>> ELEMENTS = new TileDataParameter<>(RefinedStorageSerializers.CRAFTING_MONITOR_ELEMENT_SERIALIZER, Collections.emptyList(), new ITileDataProducer<List<ICraftingMonitorElement>, TileCraftingMonitor>() {
|
||||
@Override
|
||||
public List<ICraftingMonitorElement> getValue(TileCraftingMonitor tile) {
|
||||
if (tile.connected) {
|
||||
List<ICraftingMonitorElement> tasks = tile.network.getCraftingTasks().stream().map(t -> new CraftingMonitorElementRoot(
|
||||
tile.network.getCraftingTasks().indexOf(t),
|
||||
t.getPattern().getOutputs().get(0),
|
||||
t.getQuantity()
|
||||
)).collect(Collectors.toList());
|
||||
|
||||
return tasks;
|
||||
return tile.network.getCraftingTasks().stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList());
|
||||
} else {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
package refinedstorage.tile.data;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.network.datasync.DataParameter;
|
||||
import net.minecraft.network.datasync.DataSerializer;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import refinedstorage.gui.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.api.RefinedStorageAPI;
|
||||
import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import refinedstorage.tile.ClientNode;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
public final class RefinedStorageSerializers {
|
||||
public static final DataSerializer<List<ClientNode>> CLIENT_NODE_SERIALIZER = new DataSerializer<List<ClientNode>>() {
|
||||
@@ -45,13 +48,13 @@ public final class RefinedStorageSerializers {
|
||||
}
|
||||
};
|
||||
|
||||
public static final DataSerializer<List<ICraftingMonitorElement>> CLIENT_CRAFTING_TASK_SERIALIZER = new DataSerializer<List<ICraftingMonitorElement>>() {
|
||||
public static final DataSerializer<List<ICraftingMonitorElement>> CRAFTING_MONITOR_ELEMENT_SERIALIZER = new DataSerializer<List<ICraftingMonitorElement>>() {
|
||||
@Override
|
||||
public void write(PacketBuffer buf, List<ICraftingMonitorElement> tasks) {
|
||||
buf.writeInt(tasks.size());
|
||||
public void write(PacketBuffer buf, List<ICraftingMonitorElement> elements) {
|
||||
buf.writeInt(elements.size());
|
||||
|
||||
for (ICraftingMonitorElement task : tasks) {
|
||||
buf.writeInt(task.getType());
|
||||
for (ICraftingMonitorElement task : elements) {
|
||||
ByteBufUtils.writeUTF8String(buf, task.getId());
|
||||
|
||||
task.write(buf);
|
||||
}
|
||||
@@ -59,19 +62,19 @@ public final class RefinedStorageSerializers {
|
||||
|
||||
@Override
|
||||
public List<ICraftingMonitorElement> read(PacketBuffer buf) {
|
||||
List<ICraftingMonitorElement> tasks = new ArrayList<>();
|
||||
List<ICraftingMonitorElement> elements = new ArrayList<>();
|
||||
|
||||
int size = buf.readInt();
|
||||
|
||||
for (int i = 0; i < size; ++i) {
|
||||
int type = buf.readInt();
|
||||
Function<ByteBuf, ICraftingMonitorElement> factory = RefinedStorageAPI.instance().getCraftingMonitorElementRegistry().getFactory(ByteBufUtils.readUTF8String(buf));
|
||||
|
||||
if (ICraftingMonitorElement.REGISTRY.containsKey(type)) {
|
||||
tasks.add(ICraftingMonitorElement.REGISTRY.get(type).apply(buf));
|
||||
if (factory != null) {
|
||||
elements.add(factory.apply(buf));
|
||||
}
|
||||
}
|
||||
|
||||
return tasks;
|
||||
return elements;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user