The Crafting Monitor is now resizable and its size can be configured (stretched, small, medium, large).

This commit is contained in:
raoulvdberge
2018-05-31 16:37:36 +02:00
parent a262ca588b
commit 6dea32a192
15 changed files with 249 additions and 132 deletions

View File

@@ -22,7 +22,7 @@ public class NetworkNodeCrafterManager extends NetworkNode {
@Override
public int getEnergyUsage() {
return 0;
return 0; // TODO: config
}
@Override

View File

@@ -2,42 +2,46 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.util.IFilter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFilter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class NetworkNodeCraftingMonitor extends NetworkNode implements ICraftingMonitor {
public static final String ID = "crafting_monitor";
private List<IFilter> filters = new ArrayList<>();
private ItemHandlerListenerNetworkNode filterListener = new ItemHandlerListenerNetworkNode(this);
private ItemHandlerFilter filter = new ItemHandlerFilter(filters, new ArrayList<>(), slot -> {
filterListener.accept(slot);
private static final String NBT_SIZE = "Size";
if (network != null) {
network.getCraftingManager().sendCraftingMonitorUpdate();
}
});
private int size = IGrid.SIZE_STRETCH;
public NetworkNodeCraftingMonitor(World world, BlockPos pos) {
super(world, pos);
}
@Override
public int getSize() {
return world.isRemote ? TileCraftingMonitor.SIZE.getValue() : size;
}
@Override
public void onSizeChanged(int size) {
TileDataManager.setParameter(TileCraftingMonitor.SIZE, size);
}
public void setSize(int size) {
this.size = size;
}
@Override
public int getEnergyUsage() {
return RS.INSTANCE.config.craftingMonitorUsage;
@@ -81,11 +85,6 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
return network != null ? network.getCraftingManager().getTasks() : Collections.emptyList();
}
@Override
public List<IFilter> getFilters() {
return filters;
}
public void onOpened(EntityPlayer player) {
if (network != null) {
network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
@@ -93,32 +92,25 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
public NBTTagCompound writeConfiguration(NBTTagCompound tag) {
super.writeConfiguration(tag);
StackUtils.writeItems(filter, 0, tag);
tag.setInteger(NBT_SIZE, size);
return tag;
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
public void readConfiguration(NBTTagCompound tag) {
super.readConfiguration(tag);
StackUtils.readItems(filter, 0, tag);
if (tag.hasKey(NBT_SIZE)) {
size = tag.getInteger(NBT_SIZE);
}
}
@Override
public void onClosed(EntityPlayer player) {
// NO OP
}
public ItemHandlerFilter getFilter() {
return filter;
}
@Override
public IItemHandler getDrops() {
return filter;
}
}

View File

@@ -1,28 +1,33 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.gui.IResizableDisplay;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import javax.annotation.Nullable;
public class ContainerCraftingMonitor extends ContainerBase {
private ICraftingMonitor craftingMonitor;
private IResizableDisplay resizableDisplay;
public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, @Nullable TileCraftingMonitor craftingMonitorTile, EntityPlayer player) {
public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, @Nullable TileCraftingMonitor craftingMonitorTile, EntityPlayer player, IResizableDisplay resizableDisplay) {
super(craftingMonitorTile, player);
this.craftingMonitor = craftingMonitor;
this.resizableDisplay = resizableDisplay;
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(craftingMonitor.getFilter(), i, 187, 6 + (18 * i)));
}
initSlots();
}
addPlayerInventory(8, 148);
public void initSlots() {
this.inventorySlots.clear();
this.inventoryItemStacks.clear();
addPlayerInventory(8, resizableDisplay.getYPlayerInventory());
}
@Override

View File

@@ -2,10 +2,12 @@ package com.raoulvdberge.refinedstorage.gui;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.api.render.IElementDrawer;
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
import com.raoulvdberge.refinedstorage.gui.control.Scrollbar;
import com.raoulvdberge.refinedstorage.gui.control.SideButtonGridSize;
import com.raoulvdberge.refinedstorage.gui.control.SideButtonRedstoneMode;
import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorCancel;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
@@ -18,7 +20,7 @@ import java.io.IOException;
import java.util.Collections;
import java.util.List;
public class GuiCraftingMonitor extends GuiBase {
public class GuiCraftingMonitor extends GuiBase implements IResizableDisplay {
public class CraftingMonitorElementDrawers extends ElementDrawers {
private IElementDrawer<Integer> overlayDrawer = (x, y, color) -> {
GlStateManager.color(1, 1, 1, 1);
@@ -50,10 +52,9 @@ public class GuiCraftingMonitor extends GuiBase {
private int itemSelectedY = -1;
public GuiCraftingMonitor(ContainerCraftingMonitor container, ICraftingMonitor craftingMonitor) {
super(container, 210, 230);
super(container, 176, 230);
this.craftingMonitor = craftingMonitor;
this.scrollbar = new Scrollbar(157, 20, 12, 89);
}
public void setElements(List<ICraftingMonitorElement> elements) {
@@ -66,26 +67,38 @@ public class GuiCraftingMonitor extends GuiBase {
@Override
public void init(int x, int y) {
((ContainerCraftingMonitor) this.inventorySlots).initSlots();
this.scrollbar = new Scrollbar(157, getTopHeight(), 12, (getVisibleRows() * 18) - 1);
if (craftingMonitor.getRedstoneModeParameter() != null) {
addSideButton(new SideButtonRedstoneMode(this, craftingMonitor.getRedstoneModeParameter()));
}
addSideButton(new SideButtonGridSize(this, () -> craftingMonitor.getSize(), size -> craftingMonitor.onSizeChanged(size)));
String cancel = t("gui.cancel");
String cancelAll = t("misc.refinedstorage:cancel_all");
int cancelButtonWidth = 14 + fontRenderer.getStringWidth(cancel);
int cancelAllButtonWidth = 14 + fontRenderer.getStringWidth(cancelAll);
cancelButton = addButton(x + 7, y + 113, cancelButtonWidth, 20, cancel, false, true);
cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 113, cancelAllButtonWidth, 20, cancelAll, false, true);
int by = y + getTopHeight() + (getVisibleRows() * 18) + 3;
this.cancelButton = addButton(x + 7, by, cancelButtonWidth, 20, cancel, false, true);
this.cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, by, cancelAllButtonWidth, 20, cancelAll, false, true);
}
private void updateScrollbar() {
if (scrollbar != null) {
scrollbar.setEnabled(getRows() > getVisibleRows());
scrollbar.setMaxOffset(getRows() - getVisibleRows());
}
}
@Override
public void update(int x, int y) {
if (scrollbar != null) {
scrollbar.setEnabled(getRows() > VISIBLE_ROWS);
scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS);
}
updateScrollbar();
if (itemSelected >= getElements().size()) {
itemSelected = -1;
@@ -100,25 +113,41 @@ public class GuiCraftingMonitor extends GuiBase {
}
}
@Override
protected void calcHeight() {
this.ySize = getTopHeight() + getBottomHeight() + (getVisibleRows() * 18);
this.screenHeight = ySize;
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) {
bindTexture("gui/crafting_monitor.png");
drawTexture(x, y, 0, 0, screenWidth, screenHeight);
int yy = y;
if (itemSelectedX != -1 &&
itemSelectedY != -1 &&
itemSelected >= 0 &&
itemSelected < getElements().size() &&
getElements().get(itemSelected).canDrawSelection()) {
drawTexture(x + itemSelectedX, y + itemSelectedY, 0, 232, ITEM_WIDTH, ITEM_HEIGHT);
drawTexture(x, yy, 0, 0, screenWidth, getTopHeight());
yy += getTopHeight();
int rows = getVisibleRows();
for (int i = 0; i < rows; ++i) {
drawTexture(x, yy, 0, getTopHeight() + (i > 0 ? (i == rows - 1 ? 18 * 2 : 18) : 0), screenWidth, 18);
yy += 18;
}
drawTexture(x, yy, 0, getTopHeight() + (18 * 3), screenWidth, getBottomHeight());
if (itemSelectedX != -1 && itemSelectedY != -1 && itemSelected >= 0 && itemSelected < getElements().size() && getElements().get(itemSelected).canDrawSelection()) {
drawRect(x + itemSelectedX, y + itemSelectedY, x + itemSelectedX + ITEM_WIDTH, y + itemSelectedY + ITEM_HEIGHT - 1, 0xFFCCCCCC);
}
}
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t(craftingMonitor.getGuiTitle()));
drawString(7, 137, t("container.inventory"));
drawString(7, getYPlayerInventory() - 12, t("container.inventory"));
int item = scrollbar != null ? scrollbar.getOffset() : 0;
@@ -127,17 +156,17 @@ public class GuiCraftingMonitor extends GuiBase {
int x = 8;
int y = 20;
itemSelectedX = -1;
itemSelectedY = -1;
this.itemSelectedX = -1;
this.itemSelectedY = -1;
String itemSelectedTooltip = null;
for (int i = 0; i < VISIBLE_ROWS; ++i) {
for (int i = scrollbar.getOffset(); i < scrollbar.getOffset() + getVisibleRows(); ++i) {
if (item < getElements().size()) {
ICraftingMonitorElement element = getElements().get(item);
if (item == itemSelected) {
itemSelectedX = x;
itemSelectedY = y;
this.itemSelectedX = x;
this.itemSelectedY = y;
}
if (inBounds(x, y, ITEM_WIDTH, ITEM_HEIGHT, mouseX, mouseY)) {
@@ -157,10 +186,54 @@ public class GuiCraftingMonitor extends GuiBase {
}
}
private int getRows() {
@Override
public int getVisibleRows() {
switch (craftingMonitor.getSize()) {
case IGrid.SIZE_STRETCH:
int screenSpaceAvailable = height - getTopHeight() - getBottomHeight();
return Math.max(3, Math.min((screenSpaceAvailable / 18) - 3, RS.INSTANCE.config.maxRowsStretch));
case IGrid.SIZE_SMALL:
return 3;
case IGrid.SIZE_MEDIUM:
return 5;
case IGrid.SIZE_LARGE:
return 8;
default:
return 3;
}
}
@Override
public int getRows() {
return getElements().size();
}
@Override
public int getCurrentOffset() {
return scrollbar.getOffset();
}
@Override
public String getSearchFieldText() {
return null;
}
@Override
public int getTopHeight() {
return 20;
}
@Override
public int getBottomHeight() {
return 120;
}
@Override
public int getYPlayerInventory() {
return getTopHeight() + (18 * getVisibleRows()) + 38;
}
@Override
protected void actionPerformed(GuiButton button) throws IOException {
super.actionPerformed(button);
@@ -180,17 +253,17 @@ public class GuiCraftingMonitor extends GuiBase {
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
super.mouseClicked(mouseX, mouseY, mouseButton);
itemSelected = -1;
this.itemSelected = -1;
if (mouseButton == 0 && inBounds(8, 20, 144, 90, mouseX - guiLeft, mouseY - guiTop)) {
if (mouseButton == 0) {
int item = scrollbar != null ? scrollbar.getOffset() : 0;
for (int i = 0; i < VISIBLE_ROWS; ++i) {
for (int i = 0; i < getVisibleRows(); ++i) {
int ix = 8;
int iy = 20 + (i * ITEM_HEIGHT);
if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getElements().size()) {
itemSelected = item + i;
this.itemSelected = item + i;
}
}
}

View File

@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor;
import com.raoulvdberge.refinedstorage.container.*;
import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid;
import com.raoulvdberge.refinedstorage.tile.*;
@@ -51,7 +52,7 @@ public class GuiHandler implements IGuiHandler {
case RSGui.INTERFACE:
return new ContainerInterface((TileInterface) tile, player);
case RSGui.CRAFTING_MONITOR:
return new ContainerCraftingMonitor(((TileCraftingMonitor) tile).getNode(), (TileCraftingMonitor) tile, player);
return new ContainerCraftingMonitor(((TileCraftingMonitor) tile).getNode(), (TileCraftingMonitor) tile, player, new ResizableDisplayDummy());
case RSGui.WIRELESS_TRANSMITTER:
return new ContainerWirelessTransmitter((TileWirelessTransmitter) tile, player);
case RSGui.CRAFTER:
@@ -98,11 +99,12 @@ public class GuiHandler implements IGuiHandler {
case RSGui.CONTROLLER:
return new GuiController((ContainerController) getContainer(ID, player, tile), (TileController) tile);
case RSGui.GRID:
case RSGui.PORTABLE_GRID:
case RSGui.PORTABLE_GRID: {
IGrid grid = ID == RSGui.GRID ? ((TileGrid) tile).getNode() : (TilePortableGrid) tile;
GuiGrid gui = new GuiGrid(null, grid);
gui.inventorySlots = new ContainerGrid(grid, gui, null, player);
return gui;
}
case RSGui.WIRELESS_GRID:
return getGridGui(player, x, y, z);
case RSGui.DISK_DRIVE:
@@ -127,8 +129,12 @@ public class GuiHandler implements IGuiHandler {
return new GuiRelay((ContainerRelay) getContainer(ID, player, tile));
case RSGui.INTERFACE:
return new GuiInterface((ContainerInterface) getContainer(ID, player, tile));
case RSGui.CRAFTING_MONITOR:
return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), ((TileCraftingMonitor) tile).getNode());
case RSGui.CRAFTING_MONITOR: {
NetworkNodeCraftingMonitor node = ((TileCraftingMonitor) tile).getNode();
GuiCraftingMonitor gui = new GuiCraftingMonitor(null, node);
gui.inventorySlots = new ContainerCraftingMonitor(node, (TileCraftingMonitor) tile, player, gui);
return gui;
}
case RSGui.WIRELESS_TRANSMITTER:
return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile));
case RSGui.CRAFTER:
@@ -183,11 +189,13 @@ public class GuiHandler implements IGuiHandler {
private GuiCraftingMonitor getCraftingMonitorGui(EntityPlayer player, int hand, int networkDimension) {
WirelessCraftingMonitor craftingMonitor = getCraftingMonitor(player, hand, networkDimension);
return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, null, player), craftingMonitor);
GuiCraftingMonitor gui = new GuiCraftingMonitor(null, craftingMonitor);
gui.inventorySlots = new ContainerCraftingMonitor(craftingMonitor, null, player, gui);
return gui;
}
private ContainerCraftingMonitor getCraftingMonitorContainer(EntityPlayer player, int hand, int networkDimension) {
return new ContainerCraftingMonitor(getCraftingMonitor(player, hand, networkDimension), null, player);
return new ContainerCraftingMonitor(getCraftingMonitor(player, hand, networkDimension), null, player, new ResizableDisplayDummy());
}
private ContainerFilter getFilterContainer(EntityPlayer player, int hand) {

View File

@@ -751,12 +751,4 @@ public class GuiGrid extends GuiBase implements IResizableDisplay {
tabPageRight.visible = grid.getTotalTabPages() > 0;
}
}
public GuiButton getTabPageLeft() {
return tabPageLeft;
}
public GuiButton getTabPageRight() {
return tabPageRight;
}
}

View File

@@ -1,14 +1,18 @@
package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessCraftingMonitor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import javax.annotation.Nonnull;
public class ItemWirelessCraftingMonitor extends ItemNetworkItem {
public static final String NBT_SIZE = "Size";
public ItemWirelessCraftingMonitor() {
super("wireless_crafting_monitor");
}
@@ -18,4 +22,20 @@ public class ItemWirelessCraftingMonitor extends ItemNetworkItem {
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
return new NetworkItemWirelessCraftingMonitor(handler, player, stack);
}
public static int getSize(ItemStack stack) {
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_SIZE)) {
return stack.getTagCompound().getInteger(NBT_SIZE);
}
return IGrid.SIZE_STRETCH;
}
public static void setSize(ItemStack stack, int size) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
stack.getTagCompound().setInteger(NBT_SIZE, size);
}
}

View File

@@ -5,17 +5,15 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor;
import com.raoulvdberge.refinedstorage.gui.grid.filtering.GridFilterFilter;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import io.netty.buffer.ByteBuf;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Function;
@@ -46,22 +44,18 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
@Override
public void toBytes(ByteBuf buf) {
List<ICraftingMonitorElement> elements = new ArrayList<>();
List<ICraftingMonitorElement> elements = new LinkedList<>();
for (ICraftingTask task : craftingMonitor.getTasks()) {
ItemStack stack = task.getRequested();
if (stack == null || GridFilterFilter.accepts(craftingMonitor.getFilters(), stack, Item.REGISTRY.getNameForObject(stack.getItem()).getResourceDomain())) {
elements.addAll(task.getCraftingMonitorElements());
}
elements.addAll(task.getCraftingMonitorElements());
}
buf.writeInt(elements.size());
for (ICraftingMonitorElement task : elements) {
ByteBufUtils.writeUTF8String(buf, task.getId());
for (ICraftingMonitorElement element : elements) {
ByteBufUtils.writeUTF8String(buf, element.getId());
task.write(buf);
element.write(buf);
}
}

View File

@@ -0,0 +1,37 @@
package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class MessageWirelessCraftingMonitorSize extends MessageHandlerPlayerToServer<MessageWirelessCraftingMonitorSize> implements IMessage {
private int size;
public MessageWirelessCraftingMonitorSize() {
}
public MessageWirelessCraftingMonitorSize(int size) {
this.size = size;
}
@Override
public void fromBytes(ByteBuf buf) {
size = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(size);
}
@Override
public void handle(MessageWirelessCraftingMonitorSize message, EntityPlayerMP player) {
if (player.openContainer instanceof ContainerCraftingMonitor && IGrid.isValidSize(message.size)) {
ItemWirelessCraftingMonitor.setSize(((WirelessCraftingMonitor) ((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()).getStack(), message.size);
}
}
}

View File

@@ -139,6 +139,7 @@ public class ProxyCommon {
RS.INSTANCE.network.registerMessage(MessageWirelessFluidGridSettingsUpdate.class, MessageWirelessFluidGridSettingsUpdate.class, id++, Side.SERVER);
RS.INSTANCE.network.registerMessage(MessageCrafterManagerSlotSizes.class, MessageCrafterManagerSlotSizes.class, id++, Side.CLIENT);
RS.INSTANCE.network.registerMessage(MessageCrafterManagerRequestSlotData.class, MessageCrafterManagerRequestSlotData.class, id++, Side.SERVER);
RS.INSTANCE.network.registerMessage(MessageWirelessCraftingMonitorSize.class, MessageWirelessCraftingMonitorSize.class, id++, Side.SERVER);
NetworkRegistry.INSTANCE.registerGuiHandler(RS.INSTANCE, new GuiHandler());

View File

@@ -1,8 +1,6 @@
package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.util.IFilter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
@@ -23,9 +21,9 @@ public interface ICraftingMonitor {
List<ICraftingTask> getTasks();
List<IFilter> getFilters();
int getSize();
ItemHandlerBase getFilter();
void onSizeChanged(int size);
boolean isActive();

View File

@@ -1,13 +1,29 @@
package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor;
import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.TileNode;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import javax.annotation.Nonnull;
public class TileCraftingMonitor extends TileNode<NetworkNodeCraftingMonitor> {
public static final TileDataParameter<Integer, TileCraftingMonitor> SIZE = new TileDataParameter<>(DataSerializers.VARINT, IGrid.SIZE_STRETCH, t -> t.getNode().getSize(), (t, v) -> {
if (IGrid.isValidSize(v)) {
t.getNode().setSize(v);
t.getNode().markDirty();
}
}, (initial, p) -> GuiBase.executeLater(GuiCraftingMonitor.class, GuiBase::initGui));
public TileCraftingMonitor() {
dataManager.addWatchedParameter(SIZE);
}
@Override
@Nonnull
public NetworkNodeCraftingMonitor createNode(World world, BlockPos pos) {

View File

@@ -1,23 +1,21 @@
package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.util.IFilter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFilter;
import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor;
import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
import com.raoulvdberge.refinedstorage.network.MessageWirelessCraftingMonitorSize;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -26,35 +24,13 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
private int networkDimension;
private BlockPos network;
private List<IFilter> filters = new ArrayList<>();
private ItemHandlerFilter filter = new ItemHandlerFilter(filters, new ArrayList<>(), null) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
StackUtils.writeItems(this, 0, stack.getTagCompound());
INetwork network = getNetwork();
if (network != null) {
network.getCraftingManager().sendCraftingMonitorUpdate();
}
}
};
private int size;
public WirelessCraftingMonitor(int networkDimension, ItemStack stack) {
this.stack = stack;
this.networkDimension = networkDimension;
this.network = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack));
if (stack.hasTagCompound()) {
StackUtils.readItems(filter, 0, stack.getTagCompound());
}
this.size = ItemWirelessCraftingMonitor.getSize(stack);
}
@Override
@@ -93,13 +69,17 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
}
@Override
public List<IFilter> getFilters() {
return filters;
public int getSize() {
return size;
}
@Override
public ItemHandlerBase getFilter() {
return filter;
public void onSizeChanged(int size) {
this.size = size;
GuiBase.executeLater(GuiCraftingMonitor.class, GuiBase::initGui);
RS.INSTANCE.network.sendToServer(new MessageWirelessCraftingMonitorSize(size));
}
private INetwork getNetwork() {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB