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.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -374,7 +375,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
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.BlockLiquidWrapper;
|
||||||
import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper;
|
import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -318,7 +319,7 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import net.minecraft.util.math.BlockPos;
|
|||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
|
||||||
public class NetworkNodeDetector extends NetworkNode implements IComparable, IType {
|
public class NetworkNodeDetector extends NetworkNode implements IComparable, IType {
|
||||||
public static final String ID = "detector";
|
public static final String ID = "detector";
|
||||||
@@ -230,7 +231,7 @@ public class NetworkNodeDetector extends NetworkNode implements IComparable, ITy
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import net.minecraftforge.fluids.Fluid;
|
|||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
|
||||||
@@ -246,7 +247,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import net.minecraft.world.World;
|
|||||||
import net.minecraftforge.common.util.Constants;
|
import net.minecraftforge.common.util.Constants;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -346,7 +347,7 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -690,7 +690,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return processingMatrix;
|
return processingMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import net.minecraftforge.fluids.Fluid;
|
|||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -246,7 +247,7 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import net.minecraftforge.fluids.FluidStack;
|
|||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
@@ -363,7 +364,7 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ public class StorageDiskFluidDriveWrapper implements IStorageDisk<FluidStack> {
|
|||||||
private NetworkNodeDiskDrive diskDrive;
|
private NetworkNodeDiskDrive diskDrive;
|
||||||
private IStorageDisk<FluidStack> parent;
|
private IStorageDisk<FluidStack> parent;
|
||||||
private int lastState;
|
private int lastState;
|
||||||
private int ticksSinceLastChanged;
|
|
||||||
|
|
||||||
public StorageDiskFluidDriveWrapper(NetworkNodeDiskDrive diskDrive, IStorageDisk<FluidStack> parent) {
|
public StorageDiskFluidDriveWrapper(NetworkNodeDiskDrive diskDrive, IStorageDisk<FluidStack> parent) {
|
||||||
this.diskDrive = diskDrive;
|
this.diskDrive = diskDrive;
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import net.minecraftforge.fluids.FluidStack;
|
|||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -407,7 +408,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getItemFilters() {
|
public IItemHandlerModifiable getItemFilters() {
|
||||||
return itemFilters;
|
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.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyDisabled;
|
import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyDisabled;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyFilter;
|
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.network.MessageSlotFilterFluidUpdate;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataWatcher;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataWatcher;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
|
||||||
import invtweaks.api.container.InventoryContainer;
|
import invtweaks.api.container.InventoryContainer;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
@@ -20,7 +19,6 @@ import net.minecraft.inventory.Container;
|
|||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -34,6 +32,8 @@ public abstract class ContainerBase extends Container {
|
|||||||
private TileDataWatcher listener;
|
private TileDataWatcher listener;
|
||||||
private EntityPlayer player;
|
private EntityPlayer player;
|
||||||
|
|
||||||
|
protected TransferManager transferManager = new TransferManager(this);
|
||||||
|
|
||||||
private List<SlotFilterFluid> fluidSlots = new ArrayList<>();
|
private List<SlotFilterFluid> fluidSlots = new ArrayList<>();
|
||||||
private List<FluidStack> fluids = new ArrayList<>();
|
private List<FluidStack> fluids = new ArrayList<>();
|
||||||
|
|
||||||
@@ -139,54 +139,7 @@ public abstract class ContainerBase extends Container {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
|
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
|
||||||
return ItemStack.EMPTY;
|
return transferManager.transfer(slotIndex);
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.TileConstructor;
|
import com.raoulvdberge.refinedstorage.tile.TileConstructor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerConstructor extends ContainerBase {
|
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));
|
addSlotToContainer(new SlotFilterFluid(constructor.getNode().getFluidFilters(), 0, 80, 20, 0).setEnableHandler(() -> constructor.getNode().getType() == IType.FLUIDS));
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, constructor.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addFilterTransfer(player.inventory, constructor.getNode().getItemFilters(), constructor.getNode().getFluidFilters(), constructor.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
|
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerCrafter extends ContainerBase {
|
public class ContainerCrafter extends ContainerBase {
|
||||||
@@ -19,32 +17,8 @@ public class ContainerCrafter extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, crafter.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addBiTransfer(player.inventory, crafter.getNode().getPatternItems());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,16 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDestructor;
|
import com.raoulvdberge.refinedstorage.tile.TileDestructor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerDestructor extends ContainerBase {
|
public class ContainerDestructor extends ContainerBase {
|
||||||
private NetworkNodeDestructor destructor;
|
|
||||||
|
|
||||||
public ContainerDestructor(TileDestructor destructor, EntityPlayer player) {
|
public ContainerDestructor(TileDestructor destructor, EntityPlayer player) {
|
||||||
super(destructor, player);
|
super(destructor, player);
|
||||||
|
|
||||||
this.destructor = destructor.getNode();
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
addSlotToContainer(new SlotItemHandler(destructor.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
addSlotToContainer(new SlotItemHandler(destructor.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||||
}
|
}
|
||||||
@@ -31,36 +24,8 @@ public class ContainerDestructor extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, destructor.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addFilterTransfer(player.inventory, destructor.getNode().getItemFilters(), destructor.getNode().getFluidFilters(), destructor.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,42 +1,20 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDetector;
|
import com.raoulvdberge.refinedstorage.tile.TileDetector;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class ContainerDetector extends ContainerBase {
|
public class ContainerDetector extends ContainerBase {
|
||||||
private NetworkNodeDetector detector;
|
|
||||||
|
|
||||||
public ContainerDetector(TileDetector detector, EntityPlayer player) {
|
public ContainerDetector(TileDetector detector, EntityPlayer player) {
|
||||||
super(detector, 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 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));
|
addSlotToContainer(new SlotFilterFluid(detector.getNode().getFluidFilters(), 0, 107, 20).setEnableHandler(() -> detector.getNode().getType() == IType.FLUIDS));
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addFilterTransfer(player.inventory, detector.getNode().getItemFilters(), detector.getNode().getFluidFilters(), detector.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,16 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
|
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerDiskDrive extends ContainerBase {
|
public class ContainerDiskDrive extends ContainerBase {
|
||||||
private NetworkNodeDiskDrive diskDrive;
|
|
||||||
|
|
||||||
public ContainerDiskDrive(TileDiskDrive diskDrive, EntityPlayer player) {
|
public ContainerDiskDrive(TileDiskDrive diskDrive, EntityPlayer player) {
|
||||||
super(diskDrive, player);
|
super(diskDrive, player);
|
||||||
|
|
||||||
this.diskDrive = diskDrive.getNode();
|
|
||||||
|
|
||||||
int x = 80;
|
int x = 80;
|
||||||
int y = 54;
|
int y = 54;
|
||||||
|
|
||||||
@@ -34,36 +27,8 @@ public class ContainerDiskDrive extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 141);
|
addPlayerInventory(8, 141);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, diskDrive.getNode().getDisks());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addFilterTransfer(player.inventory, diskDrive.getNode().getItemFilters(), diskDrive.getNode().getFluidFilters(), diskDrive.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,16 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerDiskManipulator extends ContainerBase {
|
public class ContainerDiskManipulator extends ContainerBase {
|
||||||
private NetworkNodeDiskManipulator diskManipulator;
|
|
||||||
|
|
||||||
public ContainerDiskManipulator(TileDiskManipulator diskManipulator, EntityPlayer player) {
|
public ContainerDiskManipulator(TileDiskManipulator diskManipulator, EntityPlayer player) {
|
||||||
super(diskManipulator, player);
|
super(diskManipulator, player);
|
||||||
|
|
||||||
this.diskManipulator = diskManipulator.getNode();
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
addSlotToContainer(new SlotItemHandler(diskManipulator.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
addSlotToContainer(new SlotItemHandler(diskManipulator.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||||
}
|
}
|
||||||
@@ -39,36 +32,10 @@ public class ContainerDiskManipulator extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 129);
|
addPlayerInventory(8, 129);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, diskManipulator.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addBiTransfer(player.inventory, diskManipulator.getNode().getInputDisks());
|
||||||
ItemStack stack = ItemStack.EMPTY;
|
transferManager.addTransfer(diskManipulator.getNode().getOutputDisks(), player.inventory);
|
||||||
|
transferManager.addFilterTransfer(player.inventory, diskManipulator.getNode().getItemFilters(), diskManipulator.getNode().getFluidFilters(), diskManipulator.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,16 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerExporter extends ContainerBase {
|
public class ContainerExporter extends ContainerBase {
|
||||||
private NetworkNodeExporter exporter;
|
|
||||||
|
|
||||||
public ContainerExporter(TileExporter exporter, EntityPlayer player) {
|
public ContainerExporter(TileExporter exporter, EntityPlayer player) {
|
||||||
super(exporter, player);
|
super(exporter, player);
|
||||||
|
|
||||||
this.exporter = exporter.getNode();
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
addSlotToContainer(new SlotItemHandler(exporter.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
addSlotToContainer(new SlotItemHandler(exporter.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||||
}
|
}
|
||||||
@@ -31,36 +24,8 @@ public class ContainerExporter extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, exporter.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addFilterTransfer(player.inventory, exporter.getNode().getItemFilters(), exporter.getNode().getFluidFilters(), exporter.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,15 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileExternalStorage;
|
import com.raoulvdberge.refinedstorage.tile.TileExternalStorage;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class ContainerExternalStorage extends ContainerBase {
|
public class ContainerExternalStorage extends ContainerBase {
|
||||||
private NetworkNodeExternalStorage externalStorage;
|
|
||||||
|
|
||||||
public ContainerExternalStorage(TileExternalStorage externalStorage, EntityPlayer player) {
|
public ContainerExternalStorage(TileExternalStorage externalStorage, EntityPlayer player) {
|
||||||
super(externalStorage, player);
|
super(externalStorage, player);
|
||||||
|
|
||||||
this.externalStorage = externalStorage.getNode();
|
|
||||||
|
|
||||||
for (int i = 0; i < 9; ++i) {
|
for (int i = 0; i < 9; ++i) {
|
||||||
addSlotToContainer(new SlotFilter(externalStorage.getNode().getItemFilters(), i, 8 + (18 * i), 20).setEnableHandler(() -> externalStorage.getNode().getType() == IType.ITEMS));
|
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);
|
addPlayerInventory(8, 141);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addFilterTransfer(player.inventory, externalStorage.getNode().getItemFilters(), externalStorage.getNode().getFluidFilters(), externalStorage.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.ItemHandlerFilterIcon;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterItems;
|
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterItems;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
public class ContainerFilter extends ContainerBase {
|
public class ContainerFilter extends ContainerBase {
|
||||||
@@ -34,31 +33,14 @@ public class ContainerFilter extends ContainerBase {
|
|||||||
addSlotToContainer(new SlotFilter(new ItemHandlerFilterIcon(stack), 0, 8, 117));
|
addSlotToContainer(new SlotFilter(new ItemHandlerFilterIcon(stack), 0, 8, 117));
|
||||||
|
|
||||||
addPlayerInventory(8, 149);
|
addPlayerInventory(8, 149);
|
||||||
|
|
||||||
|
transferManager.addItemFilterTransfer(player.inventory, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getStack() {
|
public ItemStack getStack() {
|
||||||
return stack;
|
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
|
@Override
|
||||||
protected boolean isHeldItemDisabled() {
|
protected boolean isHeldItemDisabled() {
|
||||||
return true;
|
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.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileFluidInterface;
|
import com.raoulvdberge.refinedstorage.tile.TileFluidInterface;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerFluidInterface extends ContainerBase {
|
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));
|
addSlotToContainer(new SlotFilterFluid(fluidInterface.getNode().getOut(), 0, 116, 32, SlotFilter.FILTER_ALLOW_SIZE));
|
||||||
|
|
||||||
addPlayerInventory(8, 122);
|
addPlayerInventory(8, 122);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, fluidInterface.getNode().getIn());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addFluidFilterTransfer(player.inventory, fluidInterface.getNode().getOut());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileFluidStorage;
|
import com.raoulvdberge.refinedstorage.tile.TileFluidStorage;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class ContainerFluidStorage extends ContainerBase {
|
public class ContainerFluidStorage extends ContainerBase {
|
||||||
public ContainerFluidStorage(TileFluidStorage fluidStorage, EntityPlayer player) {
|
public ContainerFluidStorage(TileFluidStorage fluidStorage, EntityPlayer player) {
|
||||||
@@ -15,16 +13,7 @@ public class ContainerFluidStorage extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 141);
|
addPlayerInventory(8, 141);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addFluidFilterTransfer(player.inventory, fluidStorage.getNode().getFilters());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
|
||||||
Slot slot = getSlot(index);
|
|
||||||
|
|
||||||
if (slot.getHasStack() && index > 8) {
|
|
||||||
return transferToFluidFilters(slot.getStack());
|
|
||||||
}
|
|
||||||
|
|
||||||
return ItemStack.EMPTY;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
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.GridType;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab;
|
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.network.grid.handler.IItemGridHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageCacheListener;
|
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.apiimpl.network.node.NetworkNodeGrid;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
@@ -54,9 +52,71 @@ public class ContainerGrid extends ContainerBase {
|
|||||||
this.inventorySlots.clear();
|
this.inventorySlots.clear();
|
||||||
this.inventoryItemStacks.clear();
|
this.inventoryItemStacks.clear();
|
||||||
|
|
||||||
int headerAndSlots = getTabDelta() + display.getTopHeight() + (display.getVisibleRows() * 18);
|
this.transferManager.clearTransfers();
|
||||||
|
|
||||||
if (grid.getGridType() != GridType.FLUID) {
|
if (grid.getGridType() != GridType.FLUID) {
|
||||||
|
addFilterSlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid instanceof IPortableGrid) {
|
||||||
|
addPortableGridSlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid.getGridType() == GridType.CRAFTING) {
|
||||||
|
addCraftingSlots();
|
||||||
|
} else if (grid.getGridType() == GridType.PATTERN) {
|
||||||
|
addPatternSlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
transferManager.setNotFoundHandler(slotIndex -> {
|
||||||
|
if (!getPlayer().getEntityWorld().isRemote) {
|
||||||
|
Slot slot = inventorySlots.get(slotIndex);
|
||||||
|
|
||||||
|
if (slot.getHasStack()) {
|
||||||
|
if (slot == craftingResultSlot) {
|
||||||
|
grid.onCraftedShift(getPlayer());
|
||||||
|
|
||||||
|
sendCraftingSlots();
|
||||||
|
|
||||||
|
detectAndSendChanges();
|
||||||
|
} else {
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
});
|
||||||
|
|
||||||
|
addPlayerInventory(8, display.getYPlayerInventory());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addPortableGridSlots() {
|
||||||
|
addSlotToContainer(new SlotItemHandler(((IPortableGrid) grid).getDisk(), 0, 204, 6 + getTabDelta()));
|
||||||
|
|
||||||
|
// TODO: avoid putting disks into disks.
|
||||||
|
transferManager.addTransfer(getPlayer().inventory, ((IPortableGrid) grid).getDisk());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addFilterSlots() {
|
||||||
int yStart = 6;
|
int yStart = 6;
|
||||||
|
|
||||||
if (grid instanceof IPortableGrid) {
|
if (grid instanceof IPortableGrid) {
|
||||||
@@ -66,20 +126,13 @@ public class ContainerGrid extends ContainerBase {
|
|||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, yStart + (18 * i) + getTabDelta()));
|
addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, yStart + (18 * i) + getTabDelta()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transferManager.addBiTransfer(getPlayer().inventory, grid.getFilter());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grid.getGridType() == GridType.PATTERN) {
|
private void addCraftingSlots() {
|
||||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 0, 172, headerAndSlots + 4));
|
int headerAndSlots = getTabDelta() + display.getTopHeight() + (display.getVisibleRows() * 18);
|
||||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 1, 172, headerAndSlots + 40));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (grid instanceof IPortableGrid) {
|
|
||||||
addSlotToContainer(new SlotItemHandler(((IPortableGrid) grid).getDisk(), 0, 204, 6 + getTabDelta()));
|
|
||||||
}
|
|
||||||
|
|
||||||
addPlayerInventory(8, display.getYPlayerInventory());
|
|
||||||
|
|
||||||
if (grid.getGridType() == GridType.CRAFTING) {
|
|
||||||
int x = 26;
|
int x = 26;
|
||||||
int y = headerAndSlots + 4;
|
int y = headerAndSlots + 4;
|
||||||
|
|
||||||
@@ -95,7 +148,16 @@ public class ContainerGrid extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addSlotToContainer(craftingResultSlot = new SlotGridCraftingResult(this, getPlayer(), grid, 0, 130 + 4, headerAndSlots + 22));
|
addSlotToContainer(craftingResultSlot = new SlotGridCraftingResult(this, getPlayer(), grid, 0, 130 + 4, headerAndSlots + 22));
|
||||||
} else if (grid.getGridType() == GridType.PATTERN) {
|
}
|
||||||
|
|
||||||
|
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
|
// Processing patterns
|
||||||
int ox = 8;
|
int ox = 8;
|
||||||
int x = ox;
|
int x = ox;
|
||||||
@@ -136,7 +198,6 @@ public class ContainerGrid extends ContainerBase {
|
|||||||
|
|
||||||
addSlotToContainer(patternResultSlot = (new SlotLegacyDisabled(grid.getCraftingResult(), 0, 134, headerAndSlots + 22).setEnableHandler(() -> !((NetworkNodeGrid) grid).isProcessingPattern())));
|
addSlotToContainer(patternResultSlot = (new SlotLegacyDisabled(grid.getCraftingResult(), 0, 134, headerAndSlots + 22).setEnableHandler(() -> !((NetworkNodeGrid) grid).isProcessingPattern())));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private int getTabDelta() {
|
private int getTabDelta() {
|
||||||
return !grid.getTabs().isEmpty() ? IGridTab.TAB_HEIGHT - 4 : 0;
|
return !grid.getTabs().isEmpty() ? IGridTab.TAB_HEIGHT - 4 : 0;
|
||||||
@@ -200,115 +261,6 @@ public class ContainerGrid extends ContainerBase {
|
|||||||
return (slot == craftingResultSlot || slot == patternResultSlot) ? false : super.canMergeSlot(stack, slot);
|
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
|
@Override
|
||||||
protected boolean isHeldItemDisabled() {
|
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
|
// 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;
|
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.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileImporter;
|
import com.raoulvdberge.refinedstorage.tile.TileImporter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerImporter extends ContainerBase {
|
public class ContainerImporter extends ContainerBase {
|
||||||
private NetworkNodeImporter importer;
|
|
||||||
|
|
||||||
public ContainerImporter(TileImporter importer, EntityPlayer player) {
|
public ContainerImporter(TileImporter importer, EntityPlayer player) {
|
||||||
super(importer, player);
|
super(importer, player);
|
||||||
|
|
||||||
this.importer = importer.getNode();
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
addSlotToContainer(new SlotItemHandler(importer.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
addSlotToContainer(new SlotItemHandler(importer.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
|
||||||
}
|
}
|
||||||
@@ -31,36 +24,8 @@ public class ContainerImporter extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, importer.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addFilterTransfer(player.inventory, importer.getNode().getItemFilters(), importer.getNode().getFluidFilters(), importer.getNode()::getType);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.container.slot.SlotOutput;
|
|||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileInterface;
|
import com.raoulvdberge.refinedstorage.tile.TileInterface;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerInterface extends ContainerBase {
|
public class ContainerInterface extends ContainerBase {
|
||||||
@@ -29,34 +27,9 @@ public class ContainerInterface extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 134);
|
addPlayerInventory(8, 134);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, tile.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addBiTransfer(player.inventory, tile.getNode().getImportItems());
|
||||||
ItemStack stack = ItemStack.EMPTY;
|
transferManager.addTransfer(tile.getNode().getExportItems(), player.inventory);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter;
|
import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerNetworkTransmitter extends ContainerBase {
|
public class ContainerNetworkTransmitter extends ContainerBase {
|
||||||
@@ -15,32 +13,8 @@ public class ContainerNetworkTransmitter extends ContainerBase {
|
|||||||
addSlotToContainer(new SlotItemHandler(networkTransmitter.getNode().getUpgrades(), 0, 187, 6));
|
addSlotToContainer(new SlotItemHandler(networkTransmitter.getNode().getUpgrades(), 0, 187, 6));
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, networkTransmitter.getNode().getUpgrades());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addBiTransfer(player.inventory, networkTransmitter.getNode().getNetworkCard());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerSecurityManager extends ContainerBase {
|
public class ContainerSecurityManager extends ContainerBase {
|
||||||
@@ -27,32 +25,8 @@ public class ContainerSecurityManager extends ContainerBase {
|
|||||||
addSlotToContainer(new SlotItemHandler(securityManager.getNode().getEditCard(), 0, 80, 70));
|
addSlotToContainer(new SlotItemHandler(securityManager.getNode().getEditCard(), 0, 80, 70));
|
||||||
|
|
||||||
addPlayerInventory(8, 152);
|
addPlayerInventory(8, 152);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, securityManager.getNode().getCardsItems());
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
transferManager.addTransfer(securityManager.getNode().getEditCard(), player.inventory);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileStorage;
|
import com.raoulvdberge.refinedstorage.tile.TileStorage;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class ContainerStorage extends ContainerBase {
|
public class ContainerStorage extends ContainerBase {
|
||||||
public ContainerStorage(TileStorage storage, EntityPlayer player) {
|
public ContainerStorage(TileStorage storage, EntityPlayer player) {
|
||||||
@@ -15,16 +13,7 @@ public class ContainerStorage extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 141);
|
addPlayerInventory(8, 141);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addItemFilterTransfer(player.inventory, storage.getNode().getFilters());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class ContainerStorageMonitor extends ContainerBase {
|
public class ContainerStorageMonitor extends ContainerBase {
|
||||||
public ContainerStorageMonitor(TileStorageMonitor storageMonitor, EntityPlayer player) {
|
public ContainerStorageMonitor(TileStorageMonitor storageMonitor, EntityPlayer player) {
|
||||||
@@ -13,18 +11,7 @@ public class ContainerStorageMonitor extends ContainerBase {
|
|||||||
addSlotToContainer(new SlotFilter(storageMonitor.getNode().getItemFilters(), 0, 80, 20));
|
addSlotToContainer(new SlotFilter(storageMonitor.getNode().getItemFilters(), 0, 80, 20));
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addItemFilterTransfer(player.inventory, storageMonitor.getNode().getItemFilters());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileWirelessTransmitter;
|
import com.raoulvdberge.refinedstorage.tile.TileWirelessTransmitter;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerWirelessTransmitter extends ContainerBase {
|
public class ContainerWirelessTransmitter extends ContainerBase {
|
||||||
@@ -15,32 +13,7 @@ public class ContainerWirelessTransmitter extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
transferManager.addBiTransfer(player.inventory, wirelessTransmitter.getNode().getUpgrades());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 com.raoulvdberge.refinedstorage.tile.data.TileDataParameterClientListener;
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ public interface IType {
|
|||||||
|
|
||||||
void setType(int type);
|
void setType(int type);
|
||||||
|
|
||||||
IItemHandler getItemFilters();
|
IItemHandlerModifiable getItemFilters();
|
||||||
|
|
||||||
FluidInventory getFluidFilters();
|
FluidInventory getFluidFilters();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user