Fixed Storage Monitor not respecting security settings, fixes #1189
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user