Add deposit all to storage monitor
This commit is contained in:
@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
|
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
|
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
|
||||||
@@ -9,12 +10,20 @@ import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
|
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class NetworkNodeStorageMonitor extends NetworkNode implements IComparable, IType {
|
public class NetworkNodeStorageMonitor extends NetworkNode implements IComparable, IType {
|
||||||
|
public static final int DEPOSIT_ALL_MAX_DELAY = 500;
|
||||||
|
|
||||||
public static final String ID = "storage_monitor";
|
public static final String ID = "storage_monitor";
|
||||||
|
|
||||||
private static final String NBT_COMPARE = "Compare";
|
private static final String NBT_COMPARE = "Compare";
|
||||||
@@ -38,6 +47,8 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private Map<String, Pair<ItemStack, Long>> deposits = new HashMap<>();
|
||||||
|
|
||||||
private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE;
|
private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE;
|
||||||
private int type = IType.ITEMS;
|
private int type = IType.ITEMS;
|
||||||
|
|
||||||
@@ -62,6 +73,49 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean depositAll(EntityPlayer player) {
|
||||||
|
if (type != IType.ITEMS || network == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pair<ItemStack, Long> deposit = deposits.get(player.getGameProfile().getName());
|
||||||
|
|
||||||
|
if (deposit == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack inserted = deposit.getKey();
|
||||||
|
long insertedAt = deposit.getValue();
|
||||||
|
|
||||||
|
if (Minecraft.getSystemTime() - insertedAt < DEPOSIT_ALL_MAX_DELAY) {
|
||||||
|
for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
|
||||||
|
ItemStack toInsert = player.inventory.getStackInSlot(i);
|
||||||
|
|
||||||
|
if (API.instance().getComparer().isEqual(inserted, toInsert, compare)) {
|
||||||
|
player.inventory.setInventorySlotContents(i, RSUtils.transformNullToEmpty(network.insertItemTracked(toInsert, toInsert.getCount())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean deposit(EntityPlayer player, ItemStack toInsert) {
|
||||||
|
if (type != IType.ITEMS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack filter = itemFilter.getStackInSlot(0);
|
||||||
|
|
||||||
|
if (network != null && !filter.isEmpty() && API.instance().getComparer().isEqual(filter, toInsert, compare)) {
|
||||||
|
player.inventory.setInventorySlotContents(player.inventory.currentItem, RSUtils.transformNullToEmpty(network.insertItemTracked(toInsert, toInsert.getCount())));
|
||||||
|
|
||||||
|
deposits.put(player.getGameProfile().getName(), Pair.of(toInsert, Minecraft.getSystemTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorageMonitor;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorageMonitor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
@@ -29,21 +27,17 @@ public class BlockStorageMonitor extends BlockNode {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
ItemStack holding = player.inventory.getCurrentItem();
|
ItemStack held = player.inventory.getCurrentItem();
|
||||||
|
|
||||||
if (player.isSneaking()) {
|
if (player.isSneaking()) {
|
||||||
tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side);
|
tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side);
|
||||||
} else if (!holding.isEmpty()) {
|
} else {
|
||||||
NetworkNodeStorageMonitor storageMonitor = ((TileStorageMonitor) world.getTileEntity(pos)).getNode();
|
NetworkNodeStorageMonitor storageMonitor = ((TileStorageMonitor) world.getTileEntity(pos)).getNode();
|
||||||
|
|
||||||
if (storageMonitor.getType() != IType.ITEMS) {
|
if (!held.isEmpty()) {
|
||||||
return false;
|
return storageMonitor.deposit(player, held);
|
||||||
}
|
} else {
|
||||||
|
return storageMonitor.depositAll(player);
|
||||||
ItemStack displaying = storageMonitor.getItemFilter().getStackInSlot(0);
|
|
||||||
|
|
||||||
if (storageMonitor.getNetwork() != null && !displaying.isEmpty() && API.instance().getComparer().isEqual(displaying, holding, storageMonitor.getCompare())) {
|
|
||||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, RSUtils.transformNullToEmpty(storageMonitor.getNetwork().insertItemTracked(holding, holding.getCount())));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user