Crafting monitor fixes

This commit is contained in:
Raoul Van den Berge
2016-11-05 14:57:45 +01:00
parent e623f52a84
commit d92453e4fd
8 changed files with 75 additions and 42 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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);