Crafting monitor fixes
This commit is contained in:
@@ -254,7 +254,7 @@ public interface INetworkMaster {
|
||||
* @param size the amount of that prototype that has to be extracted
|
||||
* @return null if we didn't extract anything, or a stack with the result
|
||||
*/
|
||||
default ItemStack extractItem(ItemStack stack, int size) {
|
||||
default ItemStack extractItem(@Nonnull ItemStack stack, int size) {
|
||||
return extractItem(stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
||||
public class ContainerCraftingMonitor extends ContainerBase {
|
||||
private ICraftingMonitor craftingMonitor;
|
||||
|
||||
public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, EntityPlayer player) {
|
||||
super(null, player);
|
||||
super(craftingMonitor instanceof TileCraftingMonitor ? (TileCraftingMonitor) craftingMonitor : null, player);
|
||||
|
||||
this.craftingMonitor = craftingMonitor;
|
||||
|
||||
|
||||
@@ -7,7 +7,9 @@ import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorCancel;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
@@ -41,6 +43,8 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
private GuiButton cancelButton;
|
||||
private GuiButton cancelAllButton;
|
||||
|
||||
private ICraftingMonitor craftingMonitor;
|
||||
|
||||
private IElementDrawers drawers = new CraftingMonitorElementDrawers();
|
||||
|
||||
private int itemSelected = -1;
|
||||
@@ -48,15 +52,22 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
private int itemSelectedX = -1;
|
||||
private int itemSelectedY = -1;
|
||||
|
||||
public GuiCraftingMonitor(ContainerCraftingMonitor container) {
|
||||
public GuiCraftingMonitor(ContainerCraftingMonitor container, ICraftingMonitor craftingMonitor) {
|
||||
super(container, 176, 230);
|
||||
|
||||
this.craftingMonitor = craftingMonitor;
|
||||
this.scrollbar = new Scrollbar(157, 20, 12, 89);
|
||||
}
|
||||
|
||||
public List<ICraftingMonitorElement> getElements() {
|
||||
return craftingMonitor.isConnected() ? ELEMENTS : Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
if (!(craftingMonitor instanceof WirelessCraftingMonitor)) {
|
||||
addSideButton(new SideButtonRedstoneMode(this, TileCraftingMonitor.REDSTONE_MODE));
|
||||
}
|
||||
|
||||
String cancel = t("gui.cancel");
|
||||
String cancelAll = t("misc.refinedstorage:cancel_all");
|
||||
@@ -73,12 +84,12 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
scrollbar.setEnabled(getRows() > VISIBLE_ROWS);
|
||||
scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS);
|
||||
|
||||
if (itemSelected >= ELEMENTS.size()) {
|
||||
if (itemSelected >= getElements().size()) {
|
||||
itemSelected = -1;
|
||||
}
|
||||
|
||||
cancelButton.enabled = itemSelected != -1 && ELEMENTS.get(itemSelected).getTaskId() != -1;
|
||||
cancelAllButton.enabled = ELEMENTS.size() > 0;
|
||||
cancelButton.enabled = itemSelected != -1 && getElements().get(itemSelected).getTaskId() != -1;
|
||||
cancelAllButton.enabled = getElements().size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -90,8 +101,8 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
if (itemSelectedX != -1 &&
|
||||
itemSelectedY != -1 &&
|
||||
itemSelected >= 0 &&
|
||||
itemSelected < ELEMENTS.size() &&
|
||||
ELEMENTS.get(itemSelected).canDrawSelection()) {
|
||||
itemSelected < getElements().size() &&
|
||||
getElements().get(itemSelected).canDrawSelection()) {
|
||||
drawTexture(x + itemSelectedX, y + itemSelectedY, 0, 232, ITEM_WIDTH, ITEM_HEIGHT);
|
||||
}
|
||||
}
|
||||
@@ -114,8 +125,8 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
String itemSelectedTooltip = null;
|
||||
|
||||
for (int i = 0; i < VISIBLE_ROWS; ++i) {
|
||||
if (item < ELEMENTS.size()) {
|
||||
ICraftingMonitorElement element = ELEMENTS.get(item);
|
||||
if (item < getElements().size()) {
|
||||
ICraftingMonitorElement element = getElements().get(item);
|
||||
|
||||
if (item == itemSelected) {
|
||||
itemSelectedX = x;
|
||||
@@ -141,7 +152,7 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
}
|
||||
|
||||
private int getRows() {
|
||||
return ELEMENTS.size();
|
||||
return getElements().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -149,12 +160,12 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
super.actionPerformed(button);
|
||||
|
||||
if (button == cancelButton && itemSelected != -1) {
|
||||
ICraftingMonitorElement element = ELEMENTS.get(itemSelected);
|
||||
ICraftingMonitorElement element = getElements().get(itemSelected);
|
||||
|
||||
if (element.getTaskId() != -1) {
|
||||
RS.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(element.getTaskId()));
|
||||
}
|
||||
} else if (button == cancelAllButton && ELEMENTS.size() > 0) {
|
||||
} else if (button == cancelAllButton && getElements().size() > 0) {
|
||||
RS.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(-1));
|
||||
}
|
||||
}
|
||||
@@ -172,7 +183,7 @@ public class GuiCraftingMonitor extends GuiBase {
|
||||
int ix = 8;
|
||||
int iy = 20 + (i * ITEM_HEIGHT);
|
||||
|
||||
if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < ELEMENTS.size()) {
|
||||
if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getElements().size()) {
|
||||
itemSelected = item + i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class GuiHandler implements IGuiHandler {
|
||||
case RSGui.INTERFACE:
|
||||
return new GuiInterface((ContainerInterface) getContainer(ID, player, tile));
|
||||
case RSGui.CRAFTING_MONITOR:
|
||||
return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile));
|
||||
return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), (TileCraftingMonitor) tile);
|
||||
case RSGui.WIRELESS_TRANSMITTER:
|
||||
return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile));
|
||||
case RSGui.CRAFTER:
|
||||
@@ -159,7 +159,7 @@ public class GuiHandler implements IGuiHandler {
|
||||
private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int hand, int controllerDimension) {
|
||||
WirelessCraftingMonitor craftingMonitor = getWirelessCraftingMonitor(player, hand, controllerDimension);
|
||||
|
||||
return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, player));
|
||||
return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, player), craftingMonitor);
|
||||
}
|
||||
|
||||
private ContainerCraftingMonitor getWirelessCraftingMonitorContainer(EntityPlayer player, int hand, int controllerDimension) {
|
||||
|
||||
@@ -322,29 +322,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
||||
super.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markCraftingMonitorForUpdate() {
|
||||
craftingMonitorUpdateRequested = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCraftingMonitorUpdate() {
|
||||
List<ICraftingMonitorElement> elements = getElements();
|
||||
|
||||
worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream()
|
||||
.filter(player -> player.openContainer instanceof ContainerCraftingMonitor)
|
||||
.forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(elements), player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCraftingMonitorUpdate(EntityPlayerMP player) {
|
||||
RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(getElements()), player);
|
||||
}
|
||||
|
||||
private List<ICraftingMonitorElement> getElements() {
|
||||
return craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate() {
|
||||
super.invalidate();
|
||||
@@ -551,7 +528,30 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
||||
public void markCraftingMonitorForUpdate() {
|
||||
craftingMonitorUpdateRequested = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCraftingMonitorUpdate() {
|
||||
List<ICraftingMonitorElement> elements = getElements();
|
||||
|
||||
worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream()
|
||||
.filter(player -> player.openContainer instanceof ContainerCraftingMonitor && pos.equals(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor().getNetworkPosition()))
|
||||
.forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(elements), player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCraftingMonitorUpdate(EntityPlayerMP player) {
|
||||
RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(getElements()), player);
|
||||
}
|
||||
|
||||
private List<ICraftingMonitorElement> getElements() {
|
||||
return craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) {
|
||||
if (stack == null || stack.getItem() == null || itemStorage.getStorages().isEmpty()) {
|
||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||
}
|
||||
@@ -611,7 +611,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack extractItem(ItemStack stack, int size, int flags) {
|
||||
public ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags) {
|
||||
int requested = size;
|
||||
int received = 0;
|
||||
ItemStack newStack = null;
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public interface ICraftingMonitor {
|
||||
void onCancelled(EntityPlayerMP player, int id);
|
||||
|
||||
BlockPos getNetworkPosition();
|
||||
|
||||
boolean isConnected();
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileNode;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public class TileCraftingMonitor extends TileNode implements ICraftingMonitor {
|
||||
@Override
|
||||
@@ -27,6 +28,11 @@ public class TileCraftingMonitor extends TileNode implements ICraftingMonitor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return network != null ? network.getPosition() : null;
|
||||
}
|
||||
|
||||
public void onOpened(EntityPlayer player) {
|
||||
if (isConnected()) {
|
||||
network.sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
||||
|
||||
@@ -27,6 +27,16 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return controller;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnected() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private TileController getController() {
|
||||
World world = DimensionManager.getWorld(controllerDimension);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user