Fixed Storage Monitor not respecting security settings, fixes #1189

This commit is contained in:
raoulvdberge
2017-04-25 22:20:50 +02:00
parent 9494d3f07e
commit 1844c8c898
3 changed files with 39 additions and 25 deletions

View File

@@ -1,6 +1,7 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
@@ -12,8 +13,10 @@ import com.raoulvdberge.refinedstorage.tile.config.IType;
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.IItemHandler;
import org.apache.commons.lang3.tuple.Pair;
@@ -78,6 +81,10 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
return false;
}
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
return false;
}
Pair<ItemStack, Long> deposit = deposits.get(player.getGameProfile().getName());
if (deposit == null) {
@@ -101,13 +108,17 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
}
public boolean deposit(EntityPlayer player, ItemStack toInsert) {
if (type != IType.ITEMS) {
if (type != IType.ITEMS || network == null) {
return false;
}
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
return false;
}
ItemStack filter = itemFilter.getStackInSlot(0);
if (network != null && !filter.isEmpty() && API.instance().getComparer().isEqual(filter, toInsert, compare)) {
if (!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()));
@@ -116,6 +127,30 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
return true;
}
public void extract(EntityPlayer player, EnumFacing side) {
if (type != IType.ITEMS || network != null || holder.getDirection() != side) {
return;
}
if (!network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) {
return;
}
ItemStack filter = itemFilter.getStackInSlot(0);
int toExtract = player.isSneaking() ? 1 : 64;
if (!filter.isEmpty()) {
ItemStack result = network.extractItem(filter, toExtract, compare, false);
if (result != null) {
if (!player.inventory.addItemStackToInventory(result.copy())) {
InventoryHelper.spawnItemStack(holder.world(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), result);
}
}
}
}
@Override
public int getEnergyUsage() {
return 0;

View File

@@ -3,11 +3,9 @@ package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorageMonitor;
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
import com.raoulvdberge.refinedstorage.tile.config.IType;
import net.minecraft.block.state.IBlockState;
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.util.EnumFacing;
@@ -56,27 +54,7 @@ public class BlockStorageMonitor extends BlockNode {
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);
}
}
}
((TileStorageMonitor) world.getTileEntity(pos)).getNode().extract(player, rayResult.sideHit);
}
}