The Crafting Monitor is now resizable and its size can be configured (stretched, small, medium, large).
This commit is contained in:
@@ -22,7 +22,7 @@ public class NetworkNodeCrafterManager extends NetworkNode {
|
||||
|
||||
@Override
|
||||
public int getEnergyUsage() {
|
||||
return 0;
|
||||
return 0; // TODO: config
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 |
Reference in New Issue
Block a user