Allow View Cells to be shift-clicked into place (#388)
This commit is contained in:
@@ -46,6 +46,9 @@ import appeng.api.util.IConfigurableObject;
|
|||||||
import appeng.client.gui.implementations.GuiMEMonitorable;
|
import appeng.client.gui.implementations.GuiMEMonitorable;
|
||||||
import appeng.container.AEBaseContainer;
|
import appeng.container.AEBaseContainer;
|
||||||
import appeng.container.guisync.GuiSync;
|
import appeng.container.guisync.GuiSync;
|
||||||
|
import appeng.container.slot.AppEngSlot;
|
||||||
|
import appeng.container.slot.SlotPlayerHotBar;
|
||||||
|
import appeng.container.slot.SlotPlayerInv;
|
||||||
import appeng.container.slot.SlotRestrictedInput;
|
import appeng.container.slot.SlotRestrictedInput;
|
||||||
import appeng.core.AELog;
|
import appeng.core.AELog;
|
||||||
import appeng.core.sync.network.NetworkHandler;
|
import appeng.core.sync.network.NetworkHandler;
|
||||||
@@ -60,9 +63,11 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.entity.player.InventoryPlayer;
|
import net.minecraft.entity.player.InventoryPlayer;
|
||||||
import net.minecraft.inventory.IContainerListener;
|
import net.minecraft.inventory.IContainerListener;
|
||||||
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
import net.minecraftforge.fml.common.Loader;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -161,6 +166,51 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack transferStackInSlot(final EntityPlayer p, final int idx) {
|
||||||
|
if (Platform.isClient()) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Below logic is all about handling shift click for view cells
|
||||||
|
if (!(this.host instanceof IViewCellStorage)) {
|
||||||
|
return super.transferStackInSlot(p, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is it a view cell?
|
||||||
|
final Slot clickSlot = this.inventorySlots.get(idx);
|
||||||
|
ItemStack itemStack = clickSlot.getStack();
|
||||||
|
if (!AEApi.instance().definitions().items().viewCell().isSameAs(itemStack)) {
|
||||||
|
return super.transferStackInSlot(p, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Are we clicking from the player's inventory?
|
||||||
|
final boolean isPlayerInventorySlot = this.inventorySlots.get(idx) instanceof SlotPlayerInv || this.inventorySlots.get(idx) instanceof SlotPlayerHotBar;
|
||||||
|
if (!isPlayerInventorySlot) {
|
||||||
|
return super.transferStackInSlot(p, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to move the item into the view cell storage
|
||||||
|
final IItemHandler viewCellInv = ((IViewCellStorage) this.host).getViewCellStorage();
|
||||||
|
for (int slot = 0; slot < viewCellInv.getSlots(); slot++) {
|
||||||
|
if (viewCellInv.isItemValid(slot, itemStack) && viewCellInv.getStackInSlot(slot).isEmpty()) {
|
||||||
|
ItemStack remainder = viewCellInv.insertItem(slot, itemStack, true);
|
||||||
|
if (!remainder.isEmpty()) { // That slot can't take the item
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remainder = viewCellInv.insertItem(slot, itemStack, false);
|
||||||
|
clickSlot.putStack(remainder);
|
||||||
|
this.detectAndSendChanges();
|
||||||
|
if (!remainder.isEmpty()) {
|
||||||
|
// How??
|
||||||
|
return super.transferStackInSlot(p, idx);
|
||||||
|
}
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.transferStackInSlot(p, idx);
|
||||||
|
}
|
||||||
|
|
||||||
public IGridNode getNetworkNode() {
|
public IGridNode getNetworkNode() {
|
||||||
return this.networkNode;
|
return this.networkNode;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user