Inserting / extracting of items from the Storage Monitor. Finishes the Storage Monitor and fixes #804
This commit is contained in:
@@ -1,14 +1,23 @@
|
|||||||
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.tile.TileStorageMonitor;
|
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.ForgeHooks;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
@@ -20,12 +29,63 @@ 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();
|
||||||
|
|
||||||
|
if (player.isSneaking() || holding.isEmpty()) {
|
||||||
tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side);
|
tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side);
|
||||||
|
} else {
|
||||||
|
NetworkNodeStorageMonitor storageMonitor = ((TileStorageMonitor) world.getTileEntity(pos)).getNode();
|
||||||
|
|
||||||
|
if (storageMonitor.getType() != IType.ITEMS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
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())));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockClicked(World world, BlockPos pos, EntityPlayer player) {
|
||||||
|
super.onBlockClicked(world, pos, player);
|
||||||
|
|
||||||
|
if (!world.isRemote) {
|
||||||
|
RayTraceResult rayResult = ForgeHooks.rayTraceEyes(player, ((EntityPlayerMP) player).interactionManager.getBlockReachDistance() + 1);
|
||||||
|
|
||||||
|
if (rayResult == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnumFacing side = rayResult.sideHit;
|
||||||
|
|
||||||
|
NetworkNodeStorageMonitor storageMonitor = ((TileStorageMonitor) world.getTileEntity(pos)).getNode();
|
||||||
|
|
||||||
|
if (storageMonitor.getHolder().getDirection() != side || storageMonitor.getType() != IType.ITEMS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack displaying = storageMonitor.getItemFilter().getStackInSlot(0);
|
||||||
|
|
||||||
|
int toExtract = player.isSneaking() ? 1 : 64;
|
||||||
|
|
||||||
|
if (storageMonitor.getNetwork() != null && !displaying.isEmpty()) {
|
||||||
|
ItemStack result = storageMonitor.getNetwork().extractItem(displaying, toExtract, storageMonitor.getCompare(), false);
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
if (!player.inventory.addItemStackToInventory(result.copy())) {
|
||||||
|
InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createTileEntity(World world, IBlockState state) {
|
public TileEntity createTileEntity(World world, IBlockState state) {
|
||||||
|
Reference in New Issue
Block a user