Fixes #69 "Unable to triple click items into a grid"

This commit is contained in:
Raoul Van den Berge
2016-06-15 15:42:55 +02:00
parent 64bcda49ef
commit 339e236081
17 changed files with 106 additions and 173 deletions

View File

@@ -1,5 +1,8 @@
# Refined Storage Changelog # Refined Storage Changelog
### 0.7.13
- Fixed not being able to triple click in grid
### 0.7.12 ### 0.7.12
**Bugfixes** **Bugfixes**
- Fixed creative storage blocks and disks not working - Fixed creative storage blocks and disks not working

View File

@@ -14,17 +14,12 @@ import refinedstorage.tile.grid.IGrid;
import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.TileGrid;
import refinedstorage.tile.grid.WirelessGrid; import refinedstorage.tile.grid.WirelessGrid;
import java.util.ArrayList;
import java.util.List;
public class ContainerGrid extends ContainerBase { public class ContainerGrid extends ContainerBase {
private List<SlotGridCrafting> craftingSlots = new ArrayList<SlotGridCrafting>();
private SlotGridCraftingResult craftingResultSlot;
private SlotDisabled patternResultSlot;
private IGrid grid; private IGrid grid;
private SlotGridCraftingResult craftingResultSlot;
private SlotDisabled patternResultSlot;
public ContainerGrid(EntityPlayer player, IGrid grid) { public ContainerGrid(EntityPlayer player, IGrid grid) {
super(player); super(player);
@@ -37,11 +32,7 @@ public class ContainerGrid extends ContainerBase {
int y = 106; int y = 106;
for (int i = 0; i < 9; ++i) { for (int i = 0; i < 9; ++i) {
SlotGridCrafting slot = new SlotGridCrafting(((TileGrid) grid).getMatrix(), i, x, y); addSlotToContainer(new SlotGridCrafting(((TileGrid) grid).getMatrix(), i, x, y));
craftingSlots.add(slot);
addSlotToContainer(slot);
x += 18; x += 18;
@@ -78,15 +69,6 @@ public class ContainerGrid extends ContainerBase {
return grid; return grid;
} }
public List<SlotGridCrafting> getCraftingSlots() {
return craftingSlots;
}
/* I'm overriding detectAndSendChanges() here because the default check
checks if the item stacks are equal, and if so, then it will only send the new slot contents.
The thing is though, when the grid replaces the slots with new items from the storage
system, the item stack replaced WILL be the same and thus changes will not be sent!
That is why we override here to get rid of the check and ALWAYS send slot changes. */
@Override @Override
public void detectAndSendChanges() { public void detectAndSendChanges() {
for (int i = 0; i < inventorySlots.size(); ++i) { for (int i = 0; i < inventorySlots.size(); ++i) {
@@ -143,4 +125,19 @@ public class ContainerGrid extends ContainerBase {
return super.canMergeSlot(stack, slot); return super.canMergeSlot(stack, slot);
} }
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
if (!player.worldObj.isRemote) {
ItemStack stack = inventorySlots.get(slotIndex).getStack();
if (stack != null) {
inventorySlots.get(slotIndex).putStack(grid.onItemPush(player, stack));
detectAndSendChanges();
}
}
return null;
}
} }

View File

@@ -6,7 +6,6 @@ import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.init.SoundEvents; import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.FMLCommonHandler;
@@ -20,7 +19,6 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.jei.RefinedStorageJEIPlugin; import refinedstorage.jei.RefinedStorageJEIPlugin;
import refinedstorage.network.GridPullFlags; import refinedstorage.network.GridPullFlags;
import refinedstorage.network.MessageGridCraftingClear; import refinedstorage.network.MessageGridCraftingClear;
import refinedstorage.network.MessageGridCraftingPush;
import refinedstorage.network.MessageGridPatternCreate; import refinedstorage.network.MessageGridPatternCreate;
import refinedstorage.tile.ClientItem; import refinedstorage.tile.ClientItem;
import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.IGrid;
@@ -331,9 +329,15 @@ public class GuiGrid extends GuiBase {
RefinedStorage.NETWORK.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ())); RefinedStorage.NETWORK.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ()));
} else if (grid.isConnected()) { } else if (grid.isConnected()) {
if (clickedClear) {
RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear((TileGrid) grid));
}
if (isHoveringOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && container.getPlayer().inventory.getItemStack() != null && (clickedButton == 0 || clickedButton == 1)) { if (isHoveringOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && container.getPlayer().inventory.getItemStack() != null && (clickedButton == 0 || clickedButton == 1)) {
grid.onItemPush(-1, clickedButton == 1); grid.onHeldItemPush(clickedButton == 1);
} else if (isHoveringOverItemInSlot() && container.getPlayer().inventory.getItemStack() == null) { }
if (isHoveringOverItemInSlot() && container.getPlayer().inventory.getItemStack() == null) {
if (items.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) { if (items.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) {
FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, slotId)); FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, slotId));
} else { } else {
@@ -353,26 +357,6 @@ public class GuiGrid extends GuiBase {
grid.onItemPull(slotId, flags); grid.onItemPull(slotId, flags);
} }
} else if (clickedClear) {
RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear((TileGrid) grid));
} else {
for (Slot slot : container.getPlayerInventorySlots()) {
if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) {
if (GuiScreen.isShiftKeyDown()) {
grid.onItemPush(slot.slotNumber, clickedButton == 1);
}
}
}
if (grid.getType() == EnumGridType.CRAFTING) {
for (Slot slot : container.getCraftingSlots()) {
if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) {
if (GuiScreen.isShiftKeyDown()) {
RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingPush((TileGrid) grid, slot.getSlotIndex()));
}
}
}
}
} }
} }

View File

@@ -64,7 +64,7 @@ public class GuiHandler implements IGuiHandler {
} }
private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) {
return new WirelessGrid(player.getHeldItem(RefinedStorageUtils.getHandById(hand)), RefinedStorageUtils.getHandById(hand)); return new WirelessGrid(player.worldObj, player.getHeldItem(RefinedStorageUtils.getHandById(hand)), RefinedStorageUtils.getHandById(hand));
} }
private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) {

View File

@@ -47,7 +47,7 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer<M
TileCraftingMonitor monitor = (TileCraftingMonitor) tile; TileCraftingMonitor monitor = (TileCraftingMonitor) tile;
if (monitor.isConnected()) { if (monitor.isConnected()) {
monitor.getController().getStorageHandler().handleCraftingCancel(message.id); monitor.getController().getStorageHandler().onCraftingCancelRequested(message.id);
} }
} }
} }

View File

@@ -1,60 +0,0 @@
package refinedstorage.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.block.EnumGridType;
import refinedstorage.tile.grid.TileGrid;
public class MessageGridCraftingPush extends MessageHandlerPlayerToServer<MessageGridCraftingPush> implements IMessage {
private int x;
private int y;
private int z;
private int craftingSlot;
public MessageGridCraftingPush() {
}
public MessageGridCraftingPush(TileGrid grid, int craftingSlot) {
this.x = grid.getPos().getX();
this.y = grid.getPos().getY();
this.z = grid.getPos().getZ();
this.craftingSlot = craftingSlot;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
craftingSlot = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeInt(craftingSlot);
}
@Override
public void handle(MessageGridCraftingPush message, EntityPlayerMP player) {
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid) {
TileGrid grid = (TileGrid) tile;
if (grid.isConnected() && grid.getType() == EnumGridType.CRAFTING && message.craftingSlot >= 0 && message.craftingSlot < grid.getMatrix().getSizeInventory()) {
ItemStack stack = grid.getMatrix().getStackInSlot(message.craftingSlot);
if (stack != null) {
grid.getMatrix().setInventorySlotContents(message.craftingSlot, grid.getController().push(stack, stack.stackSize, false));
}
}
}
}
}

View File

@@ -48,7 +48,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer<Messa
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) { if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
((TileGrid) tile).getController().getStorageHandler().handleCraftingRequest(message.id, message.quantity); ((TileGrid) tile).getController().getStorageHandler().onCraftingRequested(message.id, message.quantity);
} }
} }
} }

View File

@@ -7,21 +7,19 @@ import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.TileGrid;
public class MessageGridStoragePush extends MessageHandlerPlayerToServer<MessageGridStoragePush> implements IMessage { public class MessageGridHeldItemPush extends MessageHandlerPlayerToServer<MessageGridHeldItemPush> implements IMessage {
private int x; private int x;
private int y; private int y;
private int z; private int z;
private int playerSlot;
private boolean one; private boolean one;
public MessageGridStoragePush() { public MessageGridHeldItemPush() {
} }
public MessageGridStoragePush(int x, int y, int z, int playerSlot, boolean one) { public MessageGridHeldItemPush(int x, int y, int z, boolean one) {
this.x = x; this.x = x;
this.y = y; this.y = y;
this.z = z; this.z = z;
this.playerSlot = playerSlot;
this.one = one; this.one = one;
} }
@@ -30,7 +28,6 @@ public class MessageGridStoragePush extends MessageHandlerPlayerToServer<Message
x = buf.readInt(); x = buf.readInt();
y = buf.readInt(); y = buf.readInt();
z = buf.readInt(); z = buf.readInt();
playerSlot = buf.readInt();
one = buf.readBoolean(); one = buf.readBoolean();
} }
@@ -39,16 +36,15 @@ public class MessageGridStoragePush extends MessageHandlerPlayerToServer<Message
buf.writeInt(x); buf.writeInt(x);
buf.writeInt(y); buf.writeInt(y);
buf.writeInt(z); buf.writeInt(z);
buf.writeInt(playerSlot);
buf.writeBoolean(one); buf.writeBoolean(one);
} }
@Override @Override
public void handle(MessageGridStoragePush message, EntityPlayerMP player) { public void handle(MessageGridHeldItemPush message, EntityPlayerMP player) {
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) { if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
((TileGrid) tile).getController().getStorageHandler().handlePush(message.playerSlot, message.one, player); ((TileGrid) tile).getController().getStorageHandler().onHeldItemPush(message.one, player);
} }
} }
} }

View File

@@ -48,7 +48,7 @@ public class MessageGridStoragePull extends MessageHandlerPlayerToServer<Message
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) { if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
((TileGrid) tile).getController().getStorageHandler().handlePull(message.id, message.flags, player); ((TileGrid) tile).getController().getStorageHandler().onPull(message.id, message.flags, player);
} }
} }
} }

View File

@@ -48,7 +48,7 @@ public class MessageWirelessGridCraftingStart extends MessageHandlerPlayerToServ
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ));
if (tile instanceof TileController && ((TileController) tile).canRun()) { if (tile instanceof TileController && ((TileController) tile).canRun()) {
((TileController) tile).getStorageHandler().handleCraftingRequest(message.id, message.quantity); ((TileController) tile).getStorageHandler().onCraftingRequested(message.id, message.quantity);
} }
} }
} }

View File

@@ -7,21 +7,19 @@ import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.controller.TileController; import refinedstorage.tile.controller.TileController;
public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer<MessageWirelessGridStoragePush> implements IMessage { public class MessageWirelessGridHeldItemPush extends MessageHandlerPlayerToServer<MessageWirelessGridHeldItemPush> implements IMessage {
private int controllerX; private int controllerX;
private int controllerY; private int controllerY;
private int controllerZ; private int controllerZ;
private int playerSlot;
private boolean one; private boolean one;
public MessageWirelessGridStoragePush() { public MessageWirelessGridHeldItemPush() {
} }
public MessageWirelessGridStoragePush(int controllerX, int controllerY, int controllerZ, int playerSlot, boolean one) { public MessageWirelessGridHeldItemPush(int controllerX, int controllerY, int controllerZ, boolean one) {
this.controllerX = controllerX; this.controllerX = controllerX;
this.controllerY = controllerY; this.controllerY = controllerY;
this.controllerZ = controllerZ; this.controllerZ = controllerZ;
this.playerSlot = playerSlot;
this.one = one; this.one = one;
} }
@@ -30,7 +28,6 @@ public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer
controllerX = buf.readInt(); controllerX = buf.readInt();
controllerY = buf.readInt(); controllerY = buf.readInt();
controllerZ = buf.readInt(); controllerZ = buf.readInt();
playerSlot = buf.readInt();
one = buf.readBoolean(); one = buf.readBoolean();
} }
@@ -39,16 +36,15 @@ public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer
buf.writeInt(controllerX); buf.writeInt(controllerX);
buf.writeInt(controllerY); buf.writeInt(controllerY);
buf.writeInt(controllerZ); buf.writeInt(controllerZ);
buf.writeInt(playerSlot);
buf.writeBoolean(one); buf.writeBoolean(one);
} }
@Override @Override
public void handle(MessageWirelessGridStoragePush message, EntityPlayerMP player) { public void handle(MessageWirelessGridHeldItemPush message, EntityPlayerMP player) {
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ));
if (tile instanceof TileController && ((TileController) tile).canRun()) { if (tile instanceof TileController && ((TileController) tile).canRun()) {
((TileController) tile).getStorageHandler().handlePush(message.playerSlot, message.one, player); ((TileController) tile).getStorageHandler().onHeldItemPush(message.one, player);
} }
} }
} }

View File

@@ -48,7 +48,7 @@ public class MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ));
if (tile instanceof TileController && ((TileController) tile).canRun()) { if (tile instanceof TileController && ((TileController) tile).canRun()) {
((TileController) tile).getStorageHandler().handlePull(message.id, message.flags, player); ((TileController) tile).getStorageHandler().onPull(message.id, message.flags, player);
} }
} }
} }

View File

@@ -43,7 +43,7 @@ public class CommonProxy {
RefinedStorage.NETWORK.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT); RefinedStorage.NETWORK.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT);
RefinedStorage.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridStoragePush.class, MessageGridStoragePush.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(MessageGridStoragePull.class, MessageGridStoragePull.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.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(MessageModeToggle.class, MessageModeToggle.class, id++, Side.SERVER);
@@ -52,10 +52,9 @@ public class CommonProxy {
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingPush.class, MessageGridCraftingPush.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.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(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePush.class, MessageWirelessGridStoragePush.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(MessageWirelessGridStoragePull.class, MessageWirelessGridStoragePull.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingShift.class, MessageGridCraftingShift.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingShift.class, MessageGridCraftingShift.class, id++, Side.SERVER);
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER);

View File

@@ -18,7 +18,7 @@ public class StorageHandler {
this.controller = controller; this.controller = controller;
} }
public void handlePull(int id, int flags, EntityPlayerMP player) { public void onPull(int id, int flags, EntityPlayerMP player) {
if (player.inventory.getItemStack() != null) { if (player.inventory.getItemStack() != null) {
return; return;
} }
@@ -61,45 +61,34 @@ public class StorageHandler {
} }
} }
public void handlePush(int playerSlot, boolean one, EntityPlayerMP player) { public void onHeldItemPush(boolean one, EntityPlayerMP player) {
ItemStack stack; if (player.inventory.getItemStack() == null) {
return;
}
if (playerSlot == -1) { ItemStack stack = player.inventory.getItemStack();
stack = player.inventory.getItemStack().copy(); int size = one ? 1 : stack.stackSize;
if (one) { if (one) {
stack.stackSize = 1; if (controller.push(stack, size, true) == null) {
controller.push(stack, size, false);
stack.stackSize -= size;
if (stack.stackSize == 0) {
player.inventory.setItemStack(null);
}
} }
} else { } else {
stack = player.inventory.getStackInSlot(playerSlot); player.inventory.setItemStack(controller.push(stack, size, false));
} }
if (stack != null) { player.updateHeldItem();
if (playerSlot == -1) {
if (one) {
if (controller.push(stack, stack.stackSize, true) == null) {
controller.push(stack, stack.stackSize, false);
player.inventory.getItemStack().stackSize--; controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH);
if (player.inventory.getItemStack().stackSize == 0) {
player.inventory.setItemStack(null);
}
}
} else {
player.inventory.setItemStack(controller.push(stack, stack.stackSize, false));
}
player.updateHeldItem();
} else {
player.inventory.setInventorySlotContents(playerSlot, controller.push(stack, stack.stackSize, false));
}
controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH);
}
} }
public void handleCraftingRequest(int id, int quantity) { public void onCraftingRequested(int id, int quantity) {
if (id >= 0 && id < controller.getItems().size() && quantity > 0 && quantity <= MAX_CRAFTING_PER_REQUEST) { if (id >= 0 && id < controller.getItems().size() && quantity > 0 && quantity <= MAX_CRAFTING_PER_REQUEST) {
ItemStack requested = controller.getItems().get(id); ItemStack requested = controller.getItems().get(id);
@@ -127,7 +116,7 @@ public class StorageHandler {
} }
} }
public void handleCraftingCancel(int id) { public void onCraftingCancelRequested(int id) {
if (id >= 0 && id < controller.getCraftingTasks().size()) { if (id >= 0 && id < controller.getCraftingTasks().size()) {
controller.cancelCraftingTask(controller.getCraftingTasks().get(id)); controller.cancelCraftingTask(controller.getCraftingTasks().get(id));
} else if (id == -1) { } else if (id == -1) {

View File

@@ -1,5 +1,7 @@
package refinedstorage.tile.grid; package refinedstorage.tile.grid;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import refinedstorage.block.EnumGridType; import refinedstorage.block.EnumGridType;
import refinedstorage.tile.ClientItem; import refinedstorage.tile.ClientItem;
@@ -16,7 +18,9 @@ public interface IGrid {
BlockPos getControllerPos(); BlockPos getControllerPos();
void onItemPush(int playerSlot, boolean one); ItemStack onItemPush(EntityPlayer player, ItemStack stack);
void onHeldItemPush(boolean one);
void onItemPull(int id, int flags); void onItemPull(int id, int flags);

View File

@@ -21,9 +21,9 @@ import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator; import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.item.ItemPattern; import refinedstorage.item.ItemPattern;
import refinedstorage.network.MessageGridCraftingStart; import refinedstorage.network.MessageGridCraftingStart;
import refinedstorage.network.MessageGridHeldItemPush;
import refinedstorage.network.MessageGridSettingsUpdate; import refinedstorage.network.MessageGridSettingsUpdate;
import refinedstorage.network.MessageGridStoragePull; import refinedstorage.network.MessageGridStoragePull;
import refinedstorage.network.MessageGridStoragePush;
import refinedstorage.tile.ClientItem; import refinedstorage.tile.ClientItem;
import refinedstorage.tile.TileMachine; import refinedstorage.tile.TileMachine;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
@@ -110,8 +110,13 @@ public class TileGrid extends TileMachine implements IGrid {
} }
@Override @Override
public void onItemPush(int playerSlot, boolean one) { public ItemStack onItemPush(EntityPlayer player, ItemStack stack) {
RefinedStorage.NETWORK.sendToServer(new MessageGridStoragePush(getPos().getX(), getPos().getY(), getPos().getZ(), playerSlot, one)); return isConnected() ? controller.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 @Override

View File

@@ -5,14 +5,15 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageUtils; import refinedstorage.RefinedStorageUtils;
import refinedstorage.block.EnumGridType; import refinedstorage.block.EnumGridType;
import refinedstorage.item.ItemWirelessGrid; import refinedstorage.item.ItemWirelessGrid;
import refinedstorage.network.MessageWirelessGridCraftingStart; import refinedstorage.network.MessageWirelessGridCraftingStart;
import refinedstorage.network.MessageWirelessGridHeldItemPush;
import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.network.MessageWirelessGridSettingsUpdate;
import refinedstorage.network.MessageWirelessGridStoragePull; import refinedstorage.network.MessageWirelessGridStoragePull;
import refinedstorage.network.MessageWirelessGridStoragePush;
import refinedstorage.tile.ClientItem; import refinedstorage.tile.ClientItem;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.controller.TileController; import refinedstorage.tile.controller.TileController;
@@ -22,6 +23,7 @@ import java.util.List;
public class WirelessGrid implements IGrid { public class WirelessGrid implements IGrid {
private EnumHand hand; private EnumHand hand;
private World world;
private BlockPos controllerPos; private BlockPos controllerPos;
private int sortingType; private int sortingType;
private int sortingDirection; private int sortingDirection;
@@ -29,8 +31,9 @@ public class WirelessGrid implements IGrid {
private List<ClientItem> items = new ArrayList<ClientItem>(); private List<ClientItem> items = new ArrayList<ClientItem>();
private long lastUpdate; private long lastUpdate;
public WirelessGrid(ItemStack stack, EnumHand hand) { public WirelessGrid(World world, ItemStack stack, EnumHand hand) {
this.hand = hand; this.hand = hand;
this.world = world;
this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack));
this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingType = ItemWirelessGrid.getSortingType(stack);
this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack);
@@ -59,8 +62,25 @@ public class WirelessGrid implements IGrid {
} }
@Override @Override
public void onItemPush(int playerSlot, boolean one) { public ItemStack onItemPush(EntityPlayer player, ItemStack stack) {
RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePush(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), playerSlot, one)); TileEntity tile = world.getTileEntity(controllerPos);
if (tile instanceof TileController) {
TileController controller = (TileController) tile;
if (controller.canRun()) {
controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH);
return controller.push(stack, stack.stackSize, false);
}
}
return stack;
}
@Override
public void onHeldItemPush(boolean one) {
RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridHeldItemPush(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), one));
} }
@Override @Override