Fixes #125 "Taking random items out of storage?"

This commit is contained in:
Raoul Van den Berge
2016-06-21 18:01:23 +02:00
parent cb81cd1187
commit 329380324b
20 changed files with 202 additions and 459 deletions

View File

@@ -6,6 +6,8 @@ When updating to this version, you'll have to break and replace your controller.
**Bugfixes**
- Fixed controller not working after leaving chunk
- Fixed machines not working when leaving chunk
- Fixed getting wrong items back in grid
- Fixed wrong item getting crafted
- Rewrote storage networks: they are now saved to disk, so big systems won't lag when rejoining a chunk
### 0.7.16

View File

@@ -486,7 +486,7 @@ public class NetworkMaster {
public void syncItemsWithClients() {
for (EntityPlayer player : world.playerEntities) {
if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getControllerPos())) {
if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition())) {
syncItemsWithClient((EntityPlayerMP) player);
}
}

View File

@@ -98,14 +98,10 @@ public class ContainerGrid extends ContainerBase {
if (slot == craftingResultSlot) {
((TileGrid) grid).onCraftedShift(this, player);
} else if (slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) {
ItemStack stack = inventorySlots.get(slotIndex).getStack();
} else if (grid.getStorageHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy) && slot.getHasStack()) {
slot.putStack(grid.getStorageHandler().onPush(slot.getStack()));
if (stack != null) {
inventorySlots.get(slotIndex).putStack(grid.onItemPush(player, stack));
detectAndSendChanges();
}
detectAndSendChanges();
}
}

View File

@@ -3,9 +3,12 @@ package refinedstorage.gui;
import com.google.common.primitives.Ints;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.client.FMLClientHandler;
import org.lwjgl.input.Keyboard;
import refinedstorage.RefinedStorage;
import refinedstorage.container.ContainerDummy;
import refinedstorage.network.MessageGridCraftingStart;
import refinedstorage.tile.controller.StorageHandler;
import java.io.IOException;
@@ -13,14 +16,14 @@ import java.io.IOException;
public class GuiCraftingSettings extends GuiBase {
private GuiTextField amountField;
private GuiGrid gridGui;
private int id;
private ItemStack stack;
private GuiButton startButton;
public GuiCraftingSettings(GuiGrid gridGui, int id) {
public GuiCraftingSettings(GuiGrid gridGui, ItemStack stack) {
super(new ContainerDummy(), 143, 61);
this.gridGui = gridGui;
this.id = id;
this.stack = stack;
}
@Override
@@ -82,7 +85,7 @@ public class GuiCraftingSettings extends GuiBase {
Integer quantity = Ints.tryParse(amountField.getText());
if (quantity != null && quantity > 0 && quantity <= StorageHandler.MAX_CRAFTING_PER_REQUEST) {
gridGui.getGrid().onCraftingRequested(id, quantity);
RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingStart(stack, quantity));
close();
}

View File

@@ -19,10 +19,7 @@ import refinedstorage.gui.sidebutton.SideButtonGridSortingDirection;
import refinedstorage.gui.sidebutton.SideButtonGridSortingType;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.jei.RefinedStorageJEIPlugin;
import refinedstorage.network.GridPullFlags;
import refinedstorage.network.MessageGridCraftingClear;
import refinedstorage.network.MessageGridPatternCreate;
import refinedstorage.tile.ClientItem;
import refinedstorage.network.*;
import refinedstorage.tile.grid.IGrid;
import refinedstorage.tile.grid.TileGrid;
import refinedstorage.tile.grid.WirelessGrid;
@@ -31,11 +28,11 @@ import java.io.IOException;
import java.util.*;
public class GuiGrid extends GuiBase {
private Comparator<ClientItem> quantityComparator = new Comparator<ClientItem>() {
private Comparator<ItemStack> quantityComparator = new Comparator<ItemStack>() {
@Override
public int compare(ClientItem left, ClientItem right) {
int leftSize = left.getStack().stackSize;
int rightSize = right.getStack().stackSize;
public int compare(ItemStack left, ItemStack right) {
int leftSize = left.stackSize;
int rightSize = right.stackSize;
if (leftSize == rightSize) {
return 0;
@@ -51,28 +48,26 @@ public class GuiGrid extends GuiBase {
}
};
private Comparator<ClientItem> nameComparator = new Comparator<ClientItem>() {
private Comparator<ItemStack> nameComparator = new Comparator<ItemStack>() {
@Override
public int compare(ClientItem left, ClientItem right) {
public int compare(ItemStack left, ItemStack right) {
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
return left.getStack().getDisplayName().compareTo(right.getStack().getDisplayName());
return left.getDisplayName().compareTo(right.getDisplayName());
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
return right.getStack().getDisplayName().compareTo(left.getStack().getDisplayName());
return right.getDisplayName().compareTo(left.getDisplayName());
}
return 0;
}
};
private ContainerGrid container;
private IGrid grid;
private List<ClientItem> items = new ArrayList<ClientItem>();
private GuiTextField searchField;
private ContainerGrid container;
private List<ItemStack> items = new ArrayList<ItemStack>();
private IGrid grid;
private int slotNumber;
private int slotId;
public GuiGrid(ContainerGrid container, IGrid grid) {
super(container, 193, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 256 : 208);
@@ -85,8 +80,8 @@ public class GuiGrid extends GuiBase {
@Override
public void init(int x, int y) {
if (grid.getRedstoneModeSetting() != null) {
addSideButton(new SideButtonRedstoneMode(grid.getRedstoneModeSetting()));
if (grid.getRedstoneModeConfig() != null) {
addSideButton(new SideButtonRedstoneMode(grid.getRedstoneModeConfig()));
}
int sx = x + 80 + 1;
@@ -123,16 +118,16 @@ public class GuiGrid extends GuiBase {
String query = searchField.getText().trim().toLowerCase();
if (!query.isEmpty()) {
Iterator<ClientItem> t = items.iterator();
Iterator<ItemStack> t = items.iterator();
while (t.hasNext()) {
ClientItem item = t.next();
ItemStack item = t.next();
if (query.startsWith("@")) {
String[] parts = query.split(" ");
String modId = parts[0].substring(1);
String modIdFromItem = Item.REGISTRY.getNameForObject(item.getStack().getItem()).getResourceDomain();
String modIdFromItem = Item.REGISTRY.getNameForObject(item.getItem()).getResourceDomain();
if (!modIdFromItem.contains(modId)) {
t.remove();
@@ -147,18 +142,18 @@ public class GuiGrid extends GuiBase {
}
}
if (!item.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) {
if (!item.getDisplayName().toLowerCase().contains(itemFromMod.toString())) {
t.remove();
}
}
} else if (query.startsWith("#")) {
String tooltip = query.substring(1);
String tooltipFromItem = StringUtils.join(item.getStack().getTooltip(container.getPlayer(), true), "\n");
String tooltipFromItem = StringUtils.join(item.getTooltip(container.getPlayer(), true), "\n");
if (!tooltipFromItem.contains(tooltip)) {
t.remove();
}
} else if (!item.getStack().getDisplayName().toLowerCase().contains(query)) {
} else if (!item.getDisplayName().toLowerCase().contains(query)) {
t.remove();
}
}
@@ -269,14 +264,10 @@ public class GuiGrid extends GuiBase {
for (int i = 0; i < 9 * getVisibleRows(); ++i) {
if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) {
this.slotNumber = slot;
if (slot < items.size()) {
slotId = items.get(slot).getId();
}
}
if (slot < items.size()) {
ItemStack stack = items.get(slot).getStack();
ItemStack stack = items.get(slot);
drawItem(x, y, stack, true, formatQuantity(stack.stackSize, slot));
}
@@ -306,7 +297,7 @@ public class GuiGrid extends GuiBase {
}
if (isOverSlotWithItem()) {
drawTooltip(mouseX, mouseY, items.get(slotNumber).getStack());
drawTooltip(mouseX, mouseY, items.get(slotNumber));
}
if (isOverClear(mouseX, mouseY)) {
@@ -362,12 +353,12 @@ public class GuiGrid extends GuiBase {
}
if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && container.getPlayer().inventory.getItemStack() != null && (clickedButton == 0 || clickedButton == 1)) {
grid.onHeldItemPush(clickedButton == 1);
RefinedStorage.NETWORK.sendToServer(new MessageGridHeldPush(clickedButton == 1));
}
if (isOverSlotWithItem() && container.getPlayer().inventory.getItemStack() == null) {
if (items.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) {
FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, slotId));
if (items.get(slotNumber).stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) {
FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, items.get(slotNumber)));
} else {
int flags = 0;
@@ -383,7 +374,7 @@ public class GuiGrid extends GuiBase {
flags |= GridPullFlags.PULL_ONE;
}
grid.onItemPull(slotId, flags);
RefinedStorage.NETWORK.sendToServer(new MessageGridPull(items.get(slotNumber), flags));
}
}
}

View File

@@ -2,53 +2,47 @@ package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.math.BlockPos;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.api.network.NetworkMaster;
import refinedstorage.api.network.NetworkMasterRegistry;
import refinedstorage.container.ContainerGrid;
import refinedstorage.tile.controller.StorageHandler;
public class MessageGridCraftingStart extends MessageHandlerPlayerToServer<MessageGridCraftingStart> implements IMessage {
private int x;
private int y;
private int z;
private int id;
private ItemStack stack;
private int quantity;
public MessageGridCraftingStart() {
}
public MessageGridCraftingStart(int x, int y, int z, int id, int quantity) {
this.x = x;
this.y = y;
this.z = z;
this.id = id;
public MessageGridCraftingStart(ItemStack stack, int quantity) {
this.stack = stack;
this.quantity = quantity;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
id = buf.readInt();
stack = ByteBufUtils.readItemStack(buf);
quantity = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeInt(id);
ByteBufUtils.writeItemStack(buf, stack);
buf.writeInt(quantity);
}
@Override
public void handle(MessageGridCraftingStart message, EntityPlayerMP player) {
NetworkMaster network = NetworkMasterRegistry.get(new BlockPos(message.x, message.y, message.z), player.worldObj.provider.getDimension());
Container container = player.openContainer;
if (network != null && network.canRun()) {
network.getStorageHandler().onCraftingRequested(message.id, message.quantity);
if (container instanceof ContainerGrid) {
StorageHandler handler = ((ContainerGrid) container).getGrid().getStorageHandler();
if (handler != null) {
handler.onCraftingRequested(message.stack, message.quantity);
}
}
}
}

View File

@@ -1,50 +0,0 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.grid.TileGrid;
public class MessageGridHeldItemPush extends MessageHandlerPlayerToServer<MessageGridHeldItemPush> implements IMessage {
private int x;
private int y;
private int z;
private boolean one;
public MessageGridHeldItemPush() {
}
public MessageGridHeldItemPush(int x, int y, int z, boolean one) {
this.x = x;
this.y = y;
this.z = z;
this.one = one;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
one = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeBoolean(one);
}
@Override
public void handle(MessageGridHeldItemPush message, EntityPlayerMP player) {
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
((TileGrid) tile).getNetwork().getStorageHandler().onHeldItemPush(message.one, player);
}
}
}

View File

@@ -0,0 +1,42 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.container.ContainerGrid;
import refinedstorage.tile.controller.StorageHandler;
public class MessageGridHeldPush extends MessageHandlerPlayerToServer<MessageGridHeldPush> implements IMessage {
private boolean single;
public MessageGridHeldPush() {
}
public MessageGridHeldPush(boolean single) {
this.single = single;
}
@Override
public void fromBytes(ByteBuf buf) {
single = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeBoolean(single);
}
@Override
public void handle(MessageGridHeldPush message, EntityPlayerMP player) {
Container container = player.openContainer;
if (container instanceof ContainerGrid) {
StorageHandler handler = ((ContainerGrid) container).getGrid().getStorageHandler();
if (handler != null) {
handler.onHeldItemPush(message.single, player);
}
}
}
}

View File

@@ -10,14 +10,13 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.api.network.NetworkMaster;
import refinedstorage.container.ContainerGrid;
import refinedstorage.tile.ClientItem;
import java.util.ArrayList;
import java.util.List;
public class MessageGridItems implements IMessage, IMessageHandler<MessageGridItems, IMessage> {
private NetworkMaster network;
private List<ClientItem> items = new ArrayList<ClientItem>();
private List<ItemStack> items = new ArrayList<ItemStack>();
public MessageGridItems() {
}
@@ -36,7 +35,7 @@ public class MessageGridItems implements IMessage, IMessageHandler<MessageGridIt
ItemStack stack = ByteBufUtils.readItemStack(buf);
stack.stackSize = size;
this.items.add(new ClientItem(i, stack));
this.items.add(stack);
}
}

View File

@@ -0,0 +1,48 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.container.ContainerGrid;
import refinedstorage.tile.controller.StorageHandler;
public class MessageGridPull extends MessageHandlerPlayerToServer<MessageGridPull> implements IMessage {
private ItemStack stack;
private int flags;
public MessageGridPull() {
}
public MessageGridPull(ItemStack stack, int flags) {
this.stack = stack;
this.flags = flags;
}
@Override
public void fromBytes(ByteBuf buf) {
stack = ByteBufUtils.readItemStack(buf);
flags = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
ByteBufUtils.writeItemStack(buf, stack);
buf.writeInt(flags);
}
@Override
public void handle(MessageGridPull message, EntityPlayerMP player) {
Container container = player.openContainer;
if (container instanceof ContainerGrid) {
StorageHandler handler = ((ContainerGrid) container).getGrid().getStorageHandler();
if (handler != null) {
handler.onPull(message.stack, message.flags, player);
}
}
}
}

View File

@@ -1,54 +0,0 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.grid.TileGrid;
public class MessageGridStoragePull extends MessageHandlerPlayerToServer<MessageGridStoragePull> implements IMessage {
private int x;
private int y;
private int z;
private int id;
private int flags;
public MessageGridStoragePull() {
}
public MessageGridStoragePull(int x, int y, int z, int id, int flags) {
this.x = x;
this.y = y;
this.z = z;
this.id = id;
this.flags = flags;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
id = buf.readInt();
flags = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeInt(id);
buf.writeInt(flags);
}
@Override
public void handle(MessageGridStoragePull message, EntityPlayerMP player) {
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
((TileGrid) tile).getNetwork().getStorageHandler().onPull(message.id, message.flags, player);
}
}
}

View File

@@ -1,54 +0,0 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.api.network.NetworkMaster;
import refinedstorage.api.network.NetworkMasterRegistry;
public class MessageWirelessGridCraftingStart extends MessageHandlerPlayerToServer<MessageWirelessGridCraftingStart> implements IMessage {
private int controllerX;
private int controllerY;
private int controllerZ;
private int id;
private int quantity;
public MessageWirelessGridCraftingStart() {
}
public MessageWirelessGridCraftingStart(int controllerX, int controllerY, int controllerZ, int id, int quantity) {
this.controllerX = controllerX;
this.controllerY = controllerY;
this.controllerZ = controllerZ;
this.id = id;
this.quantity = quantity;
}
@Override
public void fromBytes(ByteBuf buf) {
controllerX = buf.readInt();
controllerY = buf.readInt();
controllerZ = buf.readInt();
id = buf.readInt();
quantity = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(controllerX);
buf.writeInt(controllerY);
buf.writeInt(controllerZ);
buf.writeInt(id);
buf.writeInt(quantity);
}
@Override
public void handle(MessageWirelessGridCraftingStart message, EntityPlayerMP player) {
NetworkMaster network = NetworkMasterRegistry.get(new BlockPos(message.controllerX, message.controllerY, message.controllerZ), player.worldObj.provider.getDimension());
if (network != null && network.canRun()) {
network.getStorageHandler().onCraftingRequested(message.id, message.quantity);
}
}
}

View File

@@ -1,50 +0,0 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.api.network.NetworkMaster;
import refinedstorage.api.network.NetworkMasterRegistry;
public class MessageWirelessGridHeldItemPush extends MessageHandlerPlayerToServer<MessageWirelessGridHeldItemPush> implements IMessage {
private int controllerX;
private int controllerY;
private int controllerZ;
private boolean one;
public MessageWirelessGridHeldItemPush() {
}
public MessageWirelessGridHeldItemPush(int controllerX, int controllerY, int controllerZ, boolean one) {
this.controllerX = controllerX;
this.controllerY = controllerY;
this.controllerZ = controllerZ;
this.one = one;
}
@Override
public void fromBytes(ByteBuf buf) {
controllerX = buf.readInt();
controllerY = buf.readInt();
controllerZ = buf.readInt();
one = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(controllerX);
buf.writeInt(controllerY);
buf.writeInt(controllerZ);
buf.writeBoolean(one);
}
@Override
public void handle(MessageWirelessGridHeldItemPush message, EntityPlayerMP player) {
NetworkMaster network = NetworkMasterRegistry.get(new BlockPos(message.controllerX, message.controllerY, message.controllerZ), player.worldObj.provider.getDimension());
if (network != null && network.canRun()) {
network.getStorageHandler().onHeldItemPush(message.one, player);
}
}
}

View File

@@ -1,54 +0,0 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.api.network.NetworkMaster;
import refinedstorage.api.network.NetworkMasterRegistry;
public class MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer<MessageWirelessGridStoragePull> implements IMessage {
private int controllerX;
private int controllerY;
private int controllerZ;
private int id;
private int flags;
public MessageWirelessGridStoragePull() {
}
public MessageWirelessGridStoragePull(int controllerX, int controllerY, int controllerZ, int id, int flags) {
this.controllerX = controllerX;
this.controllerY = controllerY;
this.controllerZ = controllerZ;
this.id = id;
this.flags = flags;
}
@Override
public void fromBytes(ByteBuf buf) {
controllerX = buf.readInt();
controllerY = buf.readInt();
controllerZ = buf.readInt();
id = buf.readInt();
flags = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(controllerX);
buf.writeInt(controllerY);
buf.writeInt(controllerZ);
buf.writeInt(id);
buf.writeInt(flags);
}
@Override
public void handle(MessageWirelessGridStoragePull message, EntityPlayerMP player) {
NetworkMaster network = NetworkMasterRegistry.get(new BlockPos(message.controllerX, message.controllerY, message.controllerZ), player.worldObj.provider.getDimension());
if (network != null && network.canRun()) {
network.getStorageHandler().onPull(message.id, message.flags, player);
}
}
}

View File

@@ -45,8 +45,8 @@ public class CommonProxy {
RefinedStorage.NETWORK.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT);
RefinedStorage.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridHeldItemPush.class, MessageGridHeldItemPush.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridStoragePull.class, MessageGridStoragePull.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridHeldPush.class, MessageGridHeldPush.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridPull.class, MessageGridPull.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageModeToggle.class, MessageModeToggle.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, id++, Side.SERVER);
@@ -56,10 +56,7 @@ public class CommonProxy {
RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridHeldItemPush.class, MessageWirelessGridHeldItemPush.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePull.class, MessageWirelessGridStoragePull.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridCraftingStart.class, MessageWirelessGridCraftingStart.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridPatternCreate.class, MessageGridPatternCreate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageCraftingMonitorCancel.class, MessageCraftingMonitorCancel.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridItems.class, MessageGridItems.class, id++, Side.CLIENT);

View File

@@ -1,21 +0,0 @@
package refinedstorage.tile;
import net.minecraft.item.ItemStack;
public final class ClientItem {
private int id;
private ItemStack stack;
public ClientItem(int id, ItemStack stack) {
this.id = id;
this.stack = stack;
}
public int getId() {
return id;
}
public ItemStack getStack() {
return stack;
}
}

View File

@@ -19,17 +19,11 @@ public class StorageHandler {
this.network = network;
}
public void onPull(int id, int flags, EntityPlayerMP player) {
public void onPull(ItemStack stack, int flags, EntityPlayerMP player) {
if (player.inventory.getItemStack() != null) {
return;
}
if (id < 0 || id > network.getItems().size() - 1) {
return;
}
ItemStack stack = network.getItems().get(id);
int size = 64;
if (GridPullFlags.isPullingHalf(flags) && stack.stackSize > 1) {
@@ -62,15 +56,19 @@ public class StorageHandler {
}
}
public void onHeldItemPush(boolean one, EntityPlayerMP player) {
public ItemStack onPush(ItemStack stack) {
return network.push(stack, stack.stackSize, false);
}
public void onHeldItemPush(boolean single, EntityPlayerMP player) {
if (player.inventory.getItemStack() == null) {
return;
}
ItemStack stack = player.inventory.getItemStack();
int size = one ? 1 : stack.stackSize;
int size = single ? 1 : stack.stackSize;
if (one) {
if (single) {
if (network.push(stack, size, true) == null) {
network.push(stack, size, false);
@@ -89,30 +87,30 @@ public class StorageHandler {
network.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH);
}
public void onCraftingRequested(int id, int quantity) {
if (id >= 0 && id < network.getItems().size() && quantity > 0 && quantity <= MAX_CRAFTING_PER_REQUEST) {
ItemStack requested = network.getItems().get(id);
public void onCraftingRequested(ItemStack stack, int quantity) {
if (quantity <= 0 || quantity > MAX_CRAFTING_PER_REQUEST) {
return;
}
int quantityPerRequest = 0;
int quantityPerRequest = 0;
CraftingPattern pattern = network.getPatternWithBestScore(requested);
CraftingPattern pattern = network.getPatternWithBestScore(stack);
if (pattern != null) {
for (ItemStack output : pattern.getOutputs()) {
if (RefinedStorageUtils.compareStackNoQuantity(requested, output)) {
quantityPerRequest += output.stackSize;
if (pattern != null) {
for (ItemStack output : pattern.getOutputs()) {
if (RefinedStorageUtils.compareStackNoQuantity(stack, output)) {
quantityPerRequest += output.stackSize;
if (!pattern.isProcessing()) {
break;
}
if (!pattern.isProcessing()) {
break;
}
}
}
while (quantity > 0) {
network.addCraftingTaskAsLast(network.createCraftingTask(pattern));
while (quantity > 0) {
network.addCraftingTaskAsLast(network.createCraftingTask(pattern));
quantity -= quantityPerRequest;
}
quantity -= quantityPerRequest;
}
}
}

View File

@@ -1,28 +1,23 @@
package refinedstorage.tile.grid;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import refinedstorage.block.EnumGridType;
import refinedstorage.tile.ClientItem;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.controller.StorageHandler;
import java.util.List;
public interface IGrid {
EnumGridType getType();
List<ClientItem> getItems();
List<ItemStack> getItems();
void setItems(List<ClientItem> items);
void setItems(List<ItemStack> items);
BlockPos getControllerPos();
BlockPos getNetworkPosition();
ItemStack onItemPush(EntityPlayer player, ItemStack stack);
void onHeldItemPush(boolean one);
void onItemPull(int id, int flags);
StorageHandler getStorageHandler();
int getSortingType();
@@ -36,9 +31,7 @@ public interface IGrid {
void onSearchBoxModeChanged(int searchBoxMode);
void onCraftingRequested(int id, int quantity);
IRedstoneModeConfig getRedstoneModeSetting();
IRedstoneModeConfig getRedstoneModeConfig();
boolean isConnected();
}

View File

@@ -20,13 +20,10 @@ import refinedstorage.container.ContainerGrid;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.item.ItemPattern;
import refinedstorage.network.MessageGridCraftingStart;
import refinedstorage.network.MessageGridHeldItemPush;
import refinedstorage.network.MessageGridSettingsUpdate;
import refinedstorage.network.MessageGridStoragePull;
import refinedstorage.tile.ClientItem;
import refinedstorage.tile.TileSlave;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.controller.StorageHandler;
import java.util.ArrayList;
import java.util.List;
@@ -69,7 +66,8 @@ public class TileGrid extends TileSlave implements IGrid {
private int sortingType = SORTING_TYPE_NAME;
private int searchBoxMode = SEARCH_BOX_MODE_NORMAL;
private List<ClientItem> items = new ArrayList<ClientItem>();
// Used clientside only
private List<ItemStack> items = new ArrayList<ItemStack>();
@Override
public int getEnergyUsage() {
@@ -98,17 +96,17 @@ public class TileGrid extends TileSlave implements IGrid {
}
@Override
public List<ClientItem> getItems() {
public List<ItemStack> getItems() {
return items;
}
@Override
public void setItems(List<ClientItem> items) {
public void setItems(List<ItemStack> items) {
this.items = items;
}
@Override
public BlockPos getControllerPos() {
public BlockPos getNetworkPosition() {
return network != null ? network.getPosition() : null;
}
@@ -119,18 +117,8 @@ public class TileGrid extends TileSlave implements IGrid {
}
@Override
public ItemStack onItemPush(EntityPlayer player, ItemStack stack) {
return isConnected() ? network.push(stack, stack.stackSize, false) : stack;
}
@Override
public void onHeldItemPush(boolean one) {
RefinedStorage.NETWORK.sendToServer(new MessageGridHeldItemPush(getPos().getX(), getPos().getY(), getPos().getZ(), one));
}
@Override
public void onItemPull(int id, int flags) {
RefinedStorage.NETWORK.sendToServer(new MessageGridStoragePull(getPos().getX(), getPos().getY(), getPos().getZ(), id, flags));
public StorageHandler getStorageHandler() {
return isConnected() ? network.getStorageHandler() : null;
}
public InventoryCrafting getMatrix() {
@@ -318,12 +306,7 @@ public class TileGrid extends TileSlave implements IGrid {
}
@Override
public void onCraftingRequested(int id, int quantity) {
RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingStart(getPos().getX(), getPos().getY(), getPos().getZ(), id, quantity));
}
@Override
public IRedstoneModeConfig getRedstoneModeSetting() {
public IRedstoneModeConfig getRedstoneModeConfig() {
return this;
}

View File

@@ -11,12 +11,9 @@ import refinedstorage.api.network.NetworkMaster;
import refinedstorage.api.network.NetworkMasterRegistry;
import refinedstorage.block.EnumGridType;
import refinedstorage.item.ItemWirelessGrid;
import refinedstorage.network.MessageWirelessGridCraftingStart;
import refinedstorage.network.MessageWirelessGridHeldItemPush;
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
import refinedstorage.network.MessageWirelessGridStoragePull;
import refinedstorage.tile.ClientItem;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.controller.StorageHandler;
import java.util.ArrayList;
import java.util.List;
@@ -28,7 +25,7 @@ public class WirelessGrid implements IGrid {
private int sortingType;
private int sortingDirection;
private int searchBoxMode;
private List<ClientItem> items = new ArrayList<ClientItem>();
private List<ItemStack> items = new ArrayList<ItemStack>();
private long lastUpdate;
public WirelessGrid(World world, ItemStack stack, EnumHand hand) {
@@ -46,46 +43,34 @@ public class WirelessGrid implements IGrid {
}
@Override
public List<ClientItem> getItems() {
public List<ItemStack> getItems() {
return items;
}
@Override
public void setItems(List<ClientItem> items) {
public void setItems(List<ItemStack> items) {
this.items = items;
this.lastUpdate = System.currentTimeMillis();
}
@Override
public BlockPos getControllerPos() {
public BlockPos getNetworkPosition() {
return controllerPos;
}
@Override
public ItemStack onItemPush(EntityPlayer player, ItemStack stack) {
NetworkMaster network = NetworkMasterRegistry.get(controllerPos, player.worldObj.provider.getDimension());
public StorageHandler getStorageHandler() {
NetworkMaster network = NetworkMasterRegistry.get(controllerPos, world.provider.getDimension());
if (network != null && network.canRun()) {
network.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH);
return network.push(stack, stack.stackSize, false);
if (network != null) {
return network.getStorageHandler();
}
return stack;
}
@Override
public void onHeldItemPush(boolean one) {
RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridHeldItemPush(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), one));
}
@Override
public void onItemPull(int id, int flags) {
RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePull(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), id, flags));
return null;
}
public void onClose(EntityPlayer player) {
NetworkMaster network = NetworkMasterRegistry.get(controllerPos, player.worldObj.provider.getDimension());
NetworkMaster network = NetworkMasterRegistry.get(controllerPos, world.provider.getDimension());
if (network != null) {
network.getWirelessGridHandler().handleClose(player);
@@ -129,12 +114,7 @@ public class WirelessGrid implements IGrid {
}
@Override
public void onCraftingRequested(int id, int quantity) {
RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridCraftingStart(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), id, quantity));
}
@Override
public IRedstoneModeConfig getRedstoneModeSetting() {
public IRedstoneModeConfig getRedstoneModeConfig() {
return null;
}