diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cb32903a..cff9be574 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.4.4 - Fixed Disk Manipulator crashing due to empty stack (raoulvdberge) - Fixed issue where empty stacks show up in the system (raoulvdberge) +- Fixed Storage Monitor not respecting security settings (raoulvdberge) ### 1.4.3 - Updated Forge to 2282 (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java index 24882bdc6..da8441003 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java @@ -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 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; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java index 703f45e8a..cb38e21e5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java @@ -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); } }