Add new shift click handling framework.
This commit is contained in:
@@ -44,6 +44,7 @@ import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -374,7 +375,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper;
|
||||
import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -318,7 +319,7 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
public class NetworkNodeDetector extends NetworkNode implements IComparable, IType {
|
||||
public static final String ID = "detector";
|
||||
@@ -230,7 +231,7 @@ public class NetworkNodeDetector extends NetworkNode implements IComparable, ITy
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
@@ -246,7 +247,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
@@ -346,7 +347,7 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -690,7 +690,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware, I
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return processingMatrix;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -246,7 +247,7 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
@@ -363,7 +364,7 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ public class StorageDiskFluidDriveWrapper implements IStorageDisk<FluidStack> {
|
||||
private NetworkNodeDiskDrive diskDrive;
|
||||
private IStorageDisk<FluidStack> parent;
|
||||
private int lastState;
|
||||
private int ticksSinceLastChanged;
|
||||
|
||||
public StorageDiskFluidDriveWrapper(NetworkNodeDiskDrive diskDrive, IStorageDisk<FluidStack> parent) {
|
||||
this.diskDrive = diskDrive;
|
||||
|
||||
@@ -31,6 +31,7 @@ import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -407,7 +408,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getItemFilters() {
|
||||
public IItemHandlerModifiable getItemFilters() {
|
||||
return itemFilters;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,10 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyDisabled;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyFilter;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.container.transfer.TransferManager;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageSlotFilterFluidUpdate;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataWatcher;
|
||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||
import invtweaks.api.container.InventoryContainer;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
@@ -20,7 +19,6 @@ import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
@@ -34,6 +32,8 @@ public abstract class ContainerBase extends Container {
|
||||
private TileDataWatcher listener;
|
||||
private EntityPlayer player;
|
||||
|
||||
protected TransferManager transferManager = new TransferManager(this);
|
||||
|
||||
private List<SlotFilterFluid> fluidSlots = new ArrayList<>();
|
||||
private List<FluidStack> fluids = new ArrayList<>();
|
||||
|
||||
@@ -139,54 +139,7 @@ public abstract class ContainerBase extends Container {
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
protected ItemStack transferToFilters(ItemStack stack, int begin, int end) {
|
||||
for (int i = begin; i < end; ++i) {
|
||||
if (API.instance().getComparer().isEqualNoQuantity(getSlot(i).getStack(), stack)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = begin; i < end; ++i) {
|
||||
Slot slot = getSlot(i);
|
||||
|
||||
if (slot.getStack().isEmpty() && slot.isItemValid(stack)) {
|
||||
slot.putStack(ItemHandlerHelper.copyStackWithSize(stack, 1));
|
||||
slot.onSlotChanged();
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
protected ItemStack transferToFluidFilters(ItemStack stack) {
|
||||
FluidStack fluidInContainer = StackUtils.getFluid(stack, true).getValue();
|
||||
|
||||
if (fluidInContainer == null) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
for (SlotFilterFluid slot : fluidSlots) {
|
||||
if (API.instance().getComparer().isEqual(fluidInContainer, slot.getFluidInventory().getFluid(slot.getSlotIndex()), IComparer.COMPARE_NBT)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
for (SlotFilterFluid slot : fluidSlots) {
|
||||
FluidInventory inventory = slot.getFluidInventory();
|
||||
|
||||
if (inventory.getFluid(slot.getSlotIndex()) == null) {
|
||||
slot.onContainerClicked(stack);
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
return transferManager.transfer(slotIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,8 +6,6 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileConstructor;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerConstructor extends ContainerBase {
|
||||
@@ -26,36 +24,8 @@ public class ContainerConstructor extends ContainerBase {
|
||||
addSlotToContainer(new SlotFilterFluid(constructor.getNode().getFluidFilters(), 0, 80, 20, 0).setEnableHandler(() -> constructor.getNode().getType() == IType.FLUIDS));
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4) {
|
||||
if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4, false)) {
|
||||
if (constructor.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 4, 4 + 1);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, constructor.getNode().getUpgrades());
|
||||
transferManager.addFilterTransfer(player.inventory, constructor.getNode().getItemFilters(), constructor.getNode().getFluidFilters(), constructor.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerCrafter extends ContainerBase {
|
||||
@@ -19,32 +17,8 @@ public class ContainerCrafter extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 9 + 4) {
|
||||
if (!mergeItemStack(stack, 9 + 4, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 9 + 4, false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, crafter.getNode().getUpgrades());
|
||||
transferManager.addBiTransfer(player.inventory, crafter.getNode().getPatternItems());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDestructor;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileDestructor;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerDestructor extends ContainerBase {
|
||||
private NetworkNodeDestructor destructor;
|
||||
|
||||
public ContainerDestructor(TileDestructor destructor, EntityPlayer player) {
|
||||
super(destructor, player);
|
||||
|
||||
this.destructor = destructor.getNode();
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
addSlotToContainer(new SlotItemHandler(destructor.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||
}
|
||||
@@ -31,36 +24,8 @@ public class ContainerDestructor extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4) {
|
||||
if (!mergeItemStack(stack, 4 + 9 + 9, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4, false)) {
|
||||
if (destructor.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 4, 4 + 9);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, destructor.getNode().getUpgrades());
|
||||
transferManager.addFilterTransfer(player.inventory, destructor.getNode().getItemFilters(), destructor.getNode().getFluidFilters(), destructor.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,42 +1,20 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDetector;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileDetector;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerDetector extends ContainerBase {
|
||||
private NetworkNodeDetector detector;
|
||||
|
||||
public ContainerDetector(TileDetector detector, EntityPlayer player) {
|
||||
super(detector, player);
|
||||
|
||||
this.detector = detector.getNode();
|
||||
|
||||
addSlotToContainer(new SlotFilter(detector.getNode().getItemFilters(), 0, 107, 20).setEnableHandler(() -> detector.getNode().getType() == IType.ITEMS));
|
||||
addSlotToContainer(new SlotFilterFluid(detector.getNode().getFluidFilters(), 0, 107, 20).setEnableHandler(() -> detector.getNode().getType() == IType.FLUIDS));
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
ItemStack stack = slot.getStack();
|
||||
|
||||
if (slot.getHasStack() && index > 0) {
|
||||
if (detector.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 0, 1);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
transferManager.addFilterTransfer(player.inventory, detector.getNode().getItemFilters(), detector.getNode().getFluidFilters(), detector.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerDiskDrive extends ContainerBase {
|
||||
private NetworkNodeDiskDrive diskDrive;
|
||||
|
||||
public ContainerDiskDrive(TileDiskDrive diskDrive, EntityPlayer player) {
|
||||
super(diskDrive, player);
|
||||
|
||||
this.diskDrive = diskDrive.getNode();
|
||||
|
||||
int x = 80;
|
||||
int y = 54;
|
||||
|
||||
@@ -34,36 +27,8 @@ public class ContainerDiskDrive extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 141);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 8) {
|
||||
if (!mergeItemStack(stack, 8 + 9 + 9, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 8, false)) {
|
||||
if (diskDrive.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 8, 8 + 9);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, diskDrive.getNode().getDisks());
|
||||
transferManager.addFilterTransfer(player.inventory, diskDrive.getNode().getItemFilters(), diskDrive.getNode().getFluidFilters(), diskDrive.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.NetworkNodeDiskManipulator;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerDiskManipulator extends ContainerBase {
|
||||
private NetworkNodeDiskManipulator diskManipulator;
|
||||
|
||||
public ContainerDiskManipulator(TileDiskManipulator diskManipulator, EntityPlayer player) {
|
||||
super(diskManipulator, player);
|
||||
|
||||
this.diskManipulator = diskManipulator.getNode();
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
addSlotToContainer(new SlotItemHandler(diskManipulator.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||
}
|
||||
@@ -39,36 +32,10 @@ public class ContainerDiskManipulator extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 129);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4 + 3 + 3) {
|
||||
if (!mergeItemStack(stack, 4 + 3 + 3 + 9 + 9, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4 + 3, false)) {
|
||||
if (diskManipulator.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 4 + 3 + 3, 4 + 3 + 3 + 9);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, diskManipulator.getNode().getUpgrades());
|
||||
transferManager.addBiTransfer(player.inventory, diskManipulator.getNode().getInputDisks());
|
||||
transferManager.addTransfer(diskManipulator.getNode().getOutputDisks(), player.inventory);
|
||||
transferManager.addFilterTransfer(player.inventory, diskManipulator.getNode().getItemFilters(), diskManipulator.getNode().getFluidFilters(), diskManipulator.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeExporter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerExporter extends ContainerBase {
|
||||
private NetworkNodeExporter exporter;
|
||||
|
||||
public ContainerExporter(TileExporter exporter, EntityPlayer player) {
|
||||
super(exporter, player);
|
||||
|
||||
this.exporter = exporter.getNode();
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
addSlotToContainer(new SlotItemHandler(exporter.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||
}
|
||||
@@ -31,36 +24,8 @@ public class ContainerExporter extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4) {
|
||||
if (!mergeItemStack(stack, 4 + 9 + 9, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4, false)) {
|
||||
if (exporter.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 4, 4 + 9);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, exporter.getNode().getUpgrades());
|
||||
transferManager.addFilterTransfer(player.inventory, exporter.getNode().getItemFilters(), exporter.getNode().getFluidFilters(), exporter.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,15 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeExternalStorage;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileExternalStorage;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerExternalStorage extends ContainerBase {
|
||||
private NetworkNodeExternalStorage externalStorage;
|
||||
|
||||
public ContainerExternalStorage(TileExternalStorage externalStorage, EntityPlayer player) {
|
||||
super(externalStorage, player);
|
||||
|
||||
this.externalStorage = externalStorage.getNode();
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotFilter(externalStorage.getNode().getItemFilters(), i, 8 + (18 * i), 20).setEnableHandler(() -> externalStorage.getNode().getType() == IType.ITEMS));
|
||||
}
|
||||
@@ -26,20 +19,7 @@ public class ContainerExternalStorage extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 141);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack() && index > 8) {
|
||||
if (externalStorage.getType() == IType.ITEMS) {
|
||||
return transferToFilters(slot.getStack(), 0, 9);
|
||||
} else {
|
||||
return transferToFluidFilters(slot.getStack());
|
||||
}
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
transferManager.addFilterTransfer(player.inventory, externalStorage.getNode().getItemFilters(), externalStorage.getNode().getFluidFilters(), externalStorage.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterIcon;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterItems;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerFilter extends ContainerBase {
|
||||
@@ -34,31 +33,14 @@ public class ContainerFilter extends ContainerBase {
|
||||
addSlotToContainer(new SlotFilter(new ItemHandlerFilterIcon(stack), 0, 8, 117));
|
||||
|
||||
addPlayerInventory(8, 149);
|
||||
|
||||
transferManager.addItemFilterTransfer(player.inventory, filter);
|
||||
}
|
||||
|
||||
public ItemStack getStack() {
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index > 27 - 1) {
|
||||
return transferToFilters(stack, 0, 27);
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isHeldItemDisabled() {
|
||||
return true;
|
||||
|
||||
@@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileFluidInterface;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerFluidInterface extends ContainerBase {
|
||||
@@ -20,32 +18,8 @@ public class ContainerFluidInterface extends ContainerBase {
|
||||
addSlotToContainer(new SlotFilterFluid(fluidInterface.getNode().getOut(), 0, 116, 32, SlotFilter.FILTER_ALLOW_SIZE));
|
||||
|
||||
addPlayerInventory(8, 122);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4 + 1 + 1) {
|
||||
if (!mergeItemStack(stack, 4 + 1 + 1, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4 + 1, false)) {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, fluidInterface.getNode().getIn());
|
||||
transferManager.addFluidFilterTransfer(player.inventory, fluidInterface.getNode().getOut());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileFluidStorage;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerFluidStorage extends ContainerBase {
|
||||
public ContainerFluidStorage(TileFluidStorage fluidStorage, EntityPlayer player) {
|
||||
@@ -15,16 +13,7 @@ public class ContainerFluidStorage extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 141);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack() && index > 8) {
|
||||
return transferToFluidFilters(slot.getStack());
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
transferManager.addFluidFilterTransfer(player.inventory, fluidStorage.getNode().getFilters());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.GridType;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab;
|
||||
@@ -8,7 +7,6 @@ import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandle
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageCacheListener;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskFactory;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
@@ -54,88 +52,151 @@ public class ContainerGrid extends ContainerBase {
|
||||
this.inventorySlots.clear();
|
||||
this.inventoryItemStacks.clear();
|
||||
|
||||
int headerAndSlots = getTabDelta() + display.getTopHeight() + (display.getVisibleRows() * 18);
|
||||
this.transferManager.clearTransfers();
|
||||
|
||||
if (grid.getGridType() != GridType.FLUID) {
|
||||
int yStart = 6;
|
||||
|
||||
if (grid instanceof IPortableGrid) {
|
||||
yStart = 38;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, yStart + (18 * i) + getTabDelta()));
|
||||
}
|
||||
}
|
||||
|
||||
if (grid.getGridType() == GridType.PATTERN) {
|
||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 0, 172, headerAndSlots + 4));
|
||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 1, 172, headerAndSlots + 40));
|
||||
addFilterSlots();
|
||||
}
|
||||
|
||||
if (grid instanceof IPortableGrid) {
|
||||
addSlotToContainer(new SlotItemHandler(((IPortableGrid) grid).getDisk(), 0, 204, 6 + getTabDelta()));
|
||||
addPortableGridSlots();
|
||||
}
|
||||
|
||||
addPlayerInventory(8, display.getYPlayerInventory());
|
||||
|
||||
if (grid.getGridType() == GridType.CRAFTING) {
|
||||
int x = 26;
|
||||
int y = headerAndSlots + 4;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotGridCrafting(grid.getCraftingMatrix(), i, x, y));
|
||||
|
||||
x += 18;
|
||||
|
||||
if ((i + 1) % 3 == 0) {
|
||||
y += 18;
|
||||
x = 26;
|
||||
}
|
||||
}
|
||||
|
||||
addSlotToContainer(craftingResultSlot = new SlotGridCraftingResult(this, getPlayer(), grid, 0, 130 + 4, headerAndSlots + 22));
|
||||
addCraftingSlots();
|
||||
} else if (grid.getGridType() == GridType.PATTERN) {
|
||||
// Processing patterns
|
||||
int ox = 8;
|
||||
int x = ox;
|
||||
int y = headerAndSlots + 4;
|
||||
addPatternSlots();
|
||||
}
|
||||
|
||||
for (int i = 0; i < 9 * 2; ++i) {
|
||||
addSlotToContainer(new SlotFilter(((NetworkNodeGrid) grid).getProcessingMatrix(), i, x, y, SlotFilter.FILTER_ALLOW_SIZE).setEnableHandler(() -> ((NetworkNodeGrid) grid).isProcessingPattern() && ((NetworkNodeGrid) grid).getType() == IType.ITEMS));
|
||||
addSlotToContainer(new SlotFilterFluid(((NetworkNodeGrid) grid).getProcessingMatrixFluids(), i, x, y, SlotFilter.FILTER_ALLOW_SIZE).setEnableHandler(() -> ((NetworkNodeGrid) grid).isProcessingPattern() && ((NetworkNodeGrid) grid).getType() == IType.FLUIDS));
|
||||
transferManager.setNotFoundHandler(slotIndex -> {
|
||||
if (!getPlayer().getEntityWorld().isRemote) {
|
||||
Slot slot = inventorySlots.get(slotIndex);
|
||||
|
||||
x += 18;
|
||||
if (slot.getHasStack()) {
|
||||
if (slot == craftingResultSlot) {
|
||||
grid.onCraftedShift(getPlayer());
|
||||
|
||||
if ((i + 1) % 3 == 0) {
|
||||
if (i == 8) {
|
||||
ox = 98;
|
||||
x = ox;
|
||||
y = headerAndSlots + 4;
|
||||
sendCraftingSlots();
|
||||
|
||||
detectAndSendChanges();
|
||||
} else {
|
||||
x = ox;
|
||||
y += 18;
|
||||
ItemStack stack = slot.getStack();
|
||||
|
||||
if (grid.getGridType() == GridType.FLUID) {
|
||||
IFluidGridHandler fluidHandler = grid.getFluidHandler();
|
||||
|
||||
if (fluidHandler != null) {
|
||||
slot.putStack(fluidHandler.onShiftClick((EntityPlayerMP) getPlayer(), stack));
|
||||
}
|
||||
} else {
|
||||
IItemGridHandler itemHandler = grid.getItemHandler();
|
||||
|
||||
if (itemHandler != null) {
|
||||
slot.putStack(itemHandler.onShiftClick((EntityPlayerMP) getPlayer(), stack));
|
||||
} else if (slot instanceof SlotGridCrafting && mergeItemStack(stack, 4, 4 + (9 * 4), false)) {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
detectAndSendChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Regular patterns
|
||||
x = 26;
|
||||
y = headerAndSlots + 4;
|
||||
return ItemStack.EMPTY;
|
||||
});
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotLegacyFilter(grid.getCraftingMatrix(), i, x, y).setEnableHandler(() -> !((NetworkNodeGrid) grid).isProcessingPattern()));
|
||||
addPlayerInventory(8, display.getYPlayerInventory());
|
||||
}
|
||||
|
||||
x += 18;
|
||||
private void addPortableGridSlots() {
|
||||
addSlotToContainer(new SlotItemHandler(((IPortableGrid) grid).getDisk(), 0, 204, 6 + getTabDelta()));
|
||||
|
||||
if ((i + 1) % 3 == 0) {
|
||||
// TODO: avoid putting disks into disks.
|
||||
transferManager.addTransfer(getPlayer().inventory, ((IPortableGrid) grid).getDisk());
|
||||
}
|
||||
|
||||
private void addFilterSlots() {
|
||||
int yStart = 6;
|
||||
|
||||
if (grid instanceof IPortableGrid) {
|
||||
yStart = 38;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, yStart + (18 * i) + getTabDelta()));
|
||||
}
|
||||
|
||||
transferManager.addBiTransfer(getPlayer().inventory, grid.getFilter());
|
||||
}
|
||||
|
||||
private void addCraftingSlots() {
|
||||
int headerAndSlots = getTabDelta() + display.getTopHeight() + (display.getVisibleRows() * 18);
|
||||
|
||||
int x = 26;
|
||||
int y = headerAndSlots + 4;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotGridCrafting(grid.getCraftingMatrix(), i, x, y));
|
||||
|
||||
x += 18;
|
||||
|
||||
if ((i + 1) % 3 == 0) {
|
||||
y += 18;
|
||||
x = 26;
|
||||
}
|
||||
}
|
||||
|
||||
addSlotToContainer(craftingResultSlot = new SlotGridCraftingResult(this, getPlayer(), grid, 0, 130 + 4, headerAndSlots + 22));
|
||||
}
|
||||
|
||||
private void addPatternSlots() {
|
||||
int headerAndSlots = getTabDelta() + display.getTopHeight() + (display.getVisibleRows() * 18);
|
||||
|
||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 0, 172, headerAndSlots + 4));
|
||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 1, 172, headerAndSlots + 40));
|
||||
|
||||
transferManager.addBiTransfer(getPlayer().inventory, ((NetworkNodeGrid) grid).getPatterns());
|
||||
|
||||
// Processing patterns
|
||||
int ox = 8;
|
||||
int x = ox;
|
||||
int y = headerAndSlots + 4;
|
||||
|
||||
for (int i = 0; i < 9 * 2; ++i) {
|
||||
addSlotToContainer(new SlotFilter(((NetworkNodeGrid) grid).getProcessingMatrix(), i, x, y, SlotFilter.FILTER_ALLOW_SIZE).setEnableHandler(() -> ((NetworkNodeGrid) grid).isProcessingPattern() && ((NetworkNodeGrid) grid).getType() == IType.ITEMS));
|
||||
addSlotToContainer(new SlotFilterFluid(((NetworkNodeGrid) grid).getProcessingMatrixFluids(), i, x, y, SlotFilter.FILTER_ALLOW_SIZE).setEnableHandler(() -> ((NetworkNodeGrid) grid).isProcessingPattern() && ((NetworkNodeGrid) grid).getType() == IType.FLUIDS));
|
||||
|
||||
x += 18;
|
||||
|
||||
if ((i + 1) % 3 == 0) {
|
||||
if (i == 8) {
|
||||
ox = 98;
|
||||
x = ox;
|
||||
y = headerAndSlots + 4;
|
||||
} else {
|
||||
x = ox;
|
||||
y += 18;
|
||||
x = 26;
|
||||
}
|
||||
}
|
||||
|
||||
addSlotToContainer(patternResultSlot = (new SlotLegacyDisabled(grid.getCraftingResult(), 0, 134, headerAndSlots + 22).setEnableHandler(() -> !((NetworkNodeGrid) grid).isProcessingPattern())));
|
||||
}
|
||||
|
||||
// Regular patterns
|
||||
x = 26;
|
||||
y = headerAndSlots + 4;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotLegacyFilter(grid.getCraftingMatrix(), i, x, y).setEnableHandler(() -> !((NetworkNodeGrid) grid).isProcessingPattern()));
|
||||
|
||||
x += 18;
|
||||
|
||||
if ((i + 1) % 3 == 0) {
|
||||
y += 18;
|
||||
x = 26;
|
||||
}
|
||||
}
|
||||
|
||||
addSlotToContainer(patternResultSlot = (new SlotLegacyDisabled(grid.getCraftingResult(), 0, 134, headerAndSlots + 22).setEnableHandler(() -> !((NetworkNodeGrid) grid).isProcessingPattern())));
|
||||
}
|
||||
|
||||
private int getTabDelta() {
|
||||
@@ -200,115 +261,6 @@ public class ContainerGrid extends ContainerBase {
|
||||
return (slot == craftingResultSlot || slot == patternResultSlot) ? false : super.canMergeSlot(stack, slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
|
||||
if (!player.getEntityWorld().isRemote) {
|
||||
Slot slot = inventorySlots.get(slotIndex);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
if (grid instanceof IPortableGrid && slot.slotNumber == 4) { // Prevent moving disk slot into portable grid itself
|
||||
return ItemStack.EMPTY;
|
||||
} else if (grid.getGridType() == GridType.PATTERN && slot.slotNumber == 5) { // From output slot to inventory
|
||||
ItemStack stack = slot.getStack();
|
||||
|
||||
int startIndex = 5;
|
||||
int endIndex = startIndex + (9 * 4);
|
||||
|
||||
if (mergeItemStack(stack, startIndex, endIndex, false)) {
|
||||
slot.onSlotChanged();
|
||||
|
||||
detectAndSendChanges();
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
} else if (slot == craftingResultSlot) {
|
||||
grid.onCraftedShift(player);
|
||||
|
||||
sendCraftingSlots();
|
||||
detectAndSendChanges();
|
||||
} else if (slot != patternResultSlot && !(slot instanceof SlotLegacyFilter)) {
|
||||
ItemStack stack = slot.getStack();
|
||||
|
||||
if (grid.getGridType() != GridType.FLUID && stack.getItem() == RSItems.FILTER) {
|
||||
int startIndex = 0;
|
||||
int endIndex = 4;
|
||||
|
||||
// Move to player inventory instead
|
||||
if (slotIndex < 4) {
|
||||
startIndex = 4;
|
||||
|
||||
if (grid.getGridType() == GridType.PATTERN) {
|
||||
startIndex += 2; // Skip the pattern slots
|
||||
}
|
||||
|
||||
endIndex = startIndex + (9 * 4);
|
||||
}
|
||||
|
||||
if (mergeItemStack(stack, startIndex, endIndex, false)) {
|
||||
slot.onSlotChanged();
|
||||
|
||||
detectAndSendChanges();
|
||||
|
||||
// For some reason it doesn't detect when moving the filter from filter inventory to player inventory...
|
||||
if (slotIndex < 4) {
|
||||
grid.getFilter().setStackInSlot(slotIndex, ItemStack.EMPTY);
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if ((grid.getGridType() == GridType.PATTERN && stack.getItem() == RSItems.PATTERN) || (grid instanceof IPortableGrid && stack.getItem() instanceof IStorageDiskFactory)) {
|
||||
int startIndex = 4;
|
||||
int endIndex = startIndex + 1;
|
||||
|
||||
// Move to player inventory instead
|
||||
if (slotIndex == 4) {
|
||||
startIndex = endIndex;
|
||||
endIndex = startIndex + (9 * 4);
|
||||
}
|
||||
|
||||
if (mergeItemStack(stack, startIndex, endIndex, false)) {
|
||||
slot.onSlotChanged();
|
||||
|
||||
detectAndSendChanges();
|
||||
|
||||
// For some reason it doesn't detect when moving the disk from disk inventory to player inventory...
|
||||
if (grid instanceof IPortableGrid && slotIndex == 4) {
|
||||
((IPortableGrid) grid).getDisk().setStackInSlot(0, ItemStack.EMPTY);
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
// When we shift click a storage disk in a portable grid and our inventory is full, the disk can't go in the storage!
|
||||
if (grid instanceof PortableGrid) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
if (grid.getGridType() == GridType.FLUID) {
|
||||
IFluidGridHandler fluidHandler = grid.getFluidHandler();
|
||||
|
||||
if (fluidHandler != null) {
|
||||
slot.putStack(fluidHandler.onShiftClick((EntityPlayerMP) player, stack));
|
||||
}
|
||||
} else {
|
||||
IItemGridHandler itemHandler = grid.getItemHandler();
|
||||
|
||||
if (itemHandler != null) {
|
||||
slot.putStack(itemHandler.onShiftClick((EntityPlayerMP) player, stack));
|
||||
} else if (slot instanceof SlotGridCrafting && mergeItemStack(stack, 4, 4 + (9 * 4), false)) {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
detectAndSendChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isHeldItemDisabled() {
|
||||
// Here we check for the concrete portable grid type, not IPortableGrid, because we *CAN* move the held item in the portable grid tile
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeImporter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileImporter;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerImporter extends ContainerBase {
|
||||
private NetworkNodeImporter importer;
|
||||
|
||||
public ContainerImporter(TileImporter importer, EntityPlayer player) {
|
||||
super(importer, player);
|
||||
|
||||
this.importer = importer.getNode();
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
addSlotToContainer(new SlotItemHandler(importer.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||
}
|
||||
@@ -31,36 +24,8 @@ public class ContainerImporter extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4) {
|
||||
if (!mergeItemStack(stack, 4 + 9 + 9, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4, false)) {
|
||||
if (importer.getType() == IType.ITEMS) {
|
||||
return transferToFilters(stack, 4, 4 + 9);
|
||||
} else {
|
||||
return transferToFluidFilters(stack);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, importer.getNode().getUpgrades());
|
||||
transferManager.addFilterTransfer(player.inventory, importer.getNode().getItemFilters(), importer.getNode().getFluidFilters(), importer.getNode()::getType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.container.slot.SlotOutput;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileInterface;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerInterface extends ContainerBase {
|
||||
@@ -29,34 +27,9 @@ public class ContainerInterface extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 134);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 9 || (index >= 9 + 9 + 9 && index < 9 + 9 + 9 + 4)) {
|
||||
if (!mergeItemStack(stack, 9 + 9 + 9 + 4, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 9 + 9 + 9, 9 + 9 + 9 + 4, false)) {
|
||||
if (!mergeItemStack(stack, 0, 9, false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, tile.getNode().getUpgrades());
|
||||
transferManager.addBiTransfer(player.inventory, tile.getNode().getImportItems());
|
||||
transferManager.addTransfer(tile.getNode().getExportItems(), player.inventory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerNetworkTransmitter extends ContainerBase {
|
||||
@@ -15,32 +13,8 @@ public class ContainerNetworkTransmitter extends ContainerBase {
|
||||
addSlotToContainer(new SlotItemHandler(networkTransmitter.getNode().getUpgrades(), 0, 187, 6));
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index <= 1) {
|
||||
if (!mergeItemStack(stack, 2, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 2, false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, networkTransmitter.getNode().getUpgrades());
|
||||
transferManager.addBiTransfer(player.inventory, networkTransmitter.getNode().getNetworkCard());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerSecurityManager extends ContainerBase {
|
||||
@@ -27,32 +25,8 @@ public class ContainerSecurityManager extends ContainerBase {
|
||||
addSlotToContainer(new SlotItemHandler(securityManager.getNode().getEditCard(), 0, 80, 70));
|
||||
|
||||
addPlayerInventory(8, 152);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < (9 * 2) + 1) {
|
||||
if (!mergeItemStack(stack, (9 * 2) + 1, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 9 * 2, false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, securityManager.getNode().getCardsItems());
|
||||
transferManager.addTransfer(securityManager.getNode().getEditCard(), player.inventory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileStorage;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerStorage extends ContainerBase {
|
||||
public ContainerStorage(TileStorage storage, EntityPlayer player) {
|
||||
@@ -15,16 +13,7 @@ public class ContainerStorage extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 141);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack() && index > 8) {
|
||||
return transferToFilters(slot.getStack(), 0, 9);
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
transferManager.addItemFilterTransfer(player.inventory, storage.getNode().getFilters());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerStorageMonitor extends ContainerBase {
|
||||
public ContainerStorageMonitor(TileStorageMonitor storageMonitor, EntityPlayer player) {
|
||||
@@ -13,18 +11,7 @@ public class ContainerStorageMonitor extends ContainerBase {
|
||||
addSlotToContainer(new SlotFilter(storageMonitor.getNode().getItemFilters(), 0, 80, 20));
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
ItemStack stack = slot.getStack();
|
||||
|
||||
if (index > 0 && slot.getHasStack()) {
|
||||
return transferToFilters(stack, 0, 1);
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addItemFilterTransfer(player.inventory, storageMonitor.getNode().getItemFilters());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.tile.TileWirelessTransmitter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
public class ContainerWirelessTransmitter extends ContainerBase {
|
||||
@@ -15,32 +13,7 @@ public class ContainerWirelessTransmitter extends ContainerBase {
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
stack = slot.getStack();
|
||||
|
||||
if (index < 4) {
|
||||
if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 4, false)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
if (stack.getCount() == 0) {
|
||||
slot.putStack(ItemStack.EMPTY);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
transferManager.addBiTransfer(player.inventory, wirelessTransmitter.getNode().getUpgrades());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
interface IInventoryWrapper {
|
||||
InsertionResult insert(ItemStack stack);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
class InsertionResult {
|
||||
private InsertionResultType type;
|
||||
private ItemStack value;
|
||||
|
||||
InsertionResult(ItemStack value) {
|
||||
this.type = InsertionResultType.CONTINUE_IF_POSSIBLE;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
InsertionResult(InsertionResultType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public InsertionResultType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public ItemStack getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
enum InsertionResultType {
|
||||
CONTINUE_IF_POSSIBLE,
|
||||
STOP
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
class InventoryWrapperFilter implements IInventoryWrapper {
|
||||
private InventoryWrapperFilterItem item;
|
||||
private InventoryWrapperFilterFluid fluid;
|
||||
private Supplier<Integer> typeGetter;
|
||||
|
||||
InventoryWrapperFilter(IItemHandlerModifiable itemTo, FluidInventory fluidTo, Supplier<Integer> typeGetter) {
|
||||
this.item = new InventoryWrapperFilterItem(itemTo);
|
||||
this.fluid = new InventoryWrapperFilterFluid(fluidTo);
|
||||
this.typeGetter = typeGetter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InsertionResult insert(ItemStack stack) {
|
||||
return typeGetter.get() == IType.ITEMS ? item.insert(stack) : fluid.insert(stack);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
class InventoryWrapperFilterFluid implements IInventoryWrapper {
|
||||
private FluidInventory filterInv;
|
||||
|
||||
InventoryWrapperFilterFluid(FluidInventory filterInv) {
|
||||
this.filterInv = filterInv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InsertionResult insert(ItemStack stack) {
|
||||
InsertionResult stop = new InsertionResult(InsertionResultType.STOP);
|
||||
|
||||
FluidStack fluidInContainer = StackUtils.getFluid(stack, true).getValue();
|
||||
|
||||
if (fluidInContainer == null) {
|
||||
return stop;
|
||||
}
|
||||
|
||||
for (FluidStack fluid : filterInv.getFluids()) {
|
||||
if (API.instance().getComparer().isEqual(fluidInContainer, fluid, IComparer.COMPARE_NBT)) {
|
||||
return stop;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < filterInv.getSlots(); ++i) {
|
||||
if (filterInv.getFluid(i) == null) {
|
||||
filterInv.setFluid(i, StackUtils.copy(fluidInContainer, Fluid.BUCKET_VOLUME));
|
||||
|
||||
return stop;
|
||||
}
|
||||
}
|
||||
|
||||
return stop;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
class InventoryWrapperFilterItem implements IInventoryWrapper {
|
||||
private IItemHandlerModifiable filterInv;
|
||||
|
||||
InventoryWrapperFilterItem(IItemHandlerModifiable filterInv) {
|
||||
this.filterInv = filterInv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InsertionResult insert(ItemStack stack) {
|
||||
InsertionResult stop = new InsertionResult(InsertionResultType.STOP);
|
||||
|
||||
for (int i = 0; i < filterInv.getSlots(); ++i) {
|
||||
if (API.instance().getComparer().isEqualNoQuantity(filterInv.getStackInSlot(i), stack)) {
|
||||
return stop;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < filterInv.getSlots(); ++i) {
|
||||
if (filterInv.getStackInSlot(i).isEmpty()) {
|
||||
filterInv.setStackInSlot(i, ItemHandlerHelper.copyStackWithSize(stack, 1));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return stop;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.wrapper.InvWrapper;
|
||||
import net.minecraftforge.items.wrapper.RangedWrapper;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
class InventoryWrapperInventory implements IInventoryWrapper {
|
||||
private IInventory inventory;
|
||||
private IItemHandler wrapper;
|
||||
|
||||
InventoryWrapperInventory(IInventory inventory) {
|
||||
this.inventory = inventory;
|
||||
|
||||
if (inventory instanceof InventoryPlayer) {
|
||||
// Don't use PlayerMainInvWrapper to avoid stack animations.
|
||||
this.wrapper = new RangedWrapper(new InvWrapper(inventory), 0, ((InventoryPlayer) inventory).mainInventory.size());
|
||||
} else {
|
||||
this.wrapper = new InvWrapper(inventory);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public InsertionResult insert(ItemStack stack) {
|
||||
return new InsertionResult(ItemHandlerHelper.insertItem(wrapper, stack, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
InventoryWrapperInventory that = (InventoryWrapperInventory) o;
|
||||
|
||||
return Objects.equals(inventory, that.inventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(inventory);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
class InventoryWrapperItemHandler implements IInventoryWrapper {
|
||||
private IItemHandler handler;
|
||||
|
||||
InventoryWrapperItemHandler(IItemHandler handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InsertionResult insert(ItemStack stack) {
|
||||
return new InsertionResult(ItemHandlerHelper.insertItem(handler, stack, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
InventoryWrapperItemHandler that = (InventoryWrapperItemHandler) o;
|
||||
|
||||
return Objects.equals(handler, that.handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(handler);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
package com.raoulvdberge.refinedstorage.container.transfer;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class TransferManager {
|
||||
private Map<IInventoryWrapper, List<IInventoryWrapper>> fromToMap = new HashMap<>();
|
||||
private Container container;
|
||||
|
||||
@Nullable
|
||||
private Function<Integer, ItemStack> notFoundHandler;
|
||||
|
||||
public TransferManager(Container container) {
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
public void clearTransfers() {
|
||||
this.fromToMap.clear();
|
||||
}
|
||||
|
||||
public void setNotFoundHandler(@Nullable Function<Integer, ItemStack> handler) {
|
||||
this.notFoundHandler = handler;
|
||||
}
|
||||
|
||||
public void addTransfer(IInventory from, IItemHandler to) {
|
||||
addTransfer(new InventoryWrapperInventory(from), new InventoryWrapperItemHandler(to));
|
||||
}
|
||||
|
||||
public void addFilterTransfer(IInventory from, IItemHandlerModifiable itemTo, FluidInventory fluidTo, Supplier<Integer> typeGetter) {
|
||||
addTransfer(new InventoryWrapperInventory(from), new InventoryWrapperFilter(itemTo, fluidTo, typeGetter));
|
||||
}
|
||||
|
||||
public void addItemFilterTransfer(IInventory from, IItemHandlerModifiable to) {
|
||||
addTransfer(new InventoryWrapperInventory(from), new InventoryWrapperFilterItem(to));
|
||||
}
|
||||
|
||||
public void addFluidFilterTransfer(IInventory from, FluidInventory to) {
|
||||
addTransfer(new InventoryWrapperInventory(from), new InventoryWrapperFilterFluid(to));
|
||||
}
|
||||
|
||||
public void addTransfer(IItemHandler from, IInventory to) {
|
||||
addTransfer(new InventoryWrapperItemHandler(from), new InventoryWrapperInventory(to));
|
||||
}
|
||||
|
||||
public void addBiTransfer(IInventory from, IItemHandler to) {
|
||||
addTransfer(from, to);
|
||||
addTransfer(to, from);
|
||||
}
|
||||
|
||||
private void addTransfer(IInventoryWrapper from, IInventoryWrapper to) {
|
||||
List<IInventoryWrapper> toList = fromToMap.computeIfAbsent(from, k -> new LinkedList<>());
|
||||
|
||||
toList.add(to);
|
||||
}
|
||||
|
||||
public ItemStack transfer(int index) {
|
||||
Slot slot = container.getSlot(index);
|
||||
|
||||
IInventoryWrapper key;
|
||||
if (slot instanceof SlotItemHandler) {
|
||||
key = new InventoryWrapperItemHandler(((SlotItemHandler) slot).getItemHandler());
|
||||
} else {
|
||||
key = new InventoryWrapperInventory(slot.inventory);
|
||||
}
|
||||
|
||||
List<IInventoryWrapper> toList = fromToMap.get(key);
|
||||
|
||||
if (toList != null) {
|
||||
ItemStack initial = slot.getStack().copy();
|
||||
|
||||
ItemStack remainder = slot.getStack();
|
||||
|
||||
for (IInventoryWrapper to : toList) {
|
||||
InsertionResult result = to.insert(remainder);
|
||||
|
||||
if (result.getType() == InsertionResultType.STOP) {
|
||||
break;
|
||||
} else if (result.getType() == InsertionResultType.CONTINUE_IF_POSSIBLE) {
|
||||
remainder = result.getValue();
|
||||
|
||||
if (remainder.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
slot.putStack(remainder);
|
||||
slot.onSlotChanged();
|
||||
|
||||
if (API.instance().getComparer().isEqual(remainder, initial) && notFoundHandler != null) {
|
||||
return notFoundHandler.apply(index);
|
||||
}
|
||||
} else if (notFoundHandler != null) {
|
||||
return notFoundHandler.apply(index);
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameterClientListener;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@@ -30,7 +30,7 @@ public interface IType {
|
||||
|
||||
void setType(int type);
|
||||
|
||||
IItemHandler getItemFilters();
|
||||
IItemHandlerModifiable getItemFilters();
|
||||
|
||||
FluidInventory getFluidFilters();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user