Fixed Storage Monitor not respecting security settings, fixes #1189
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
### 1.4.4
|
### 1.4.4
|
||||||
- Fixed Disk Manipulator crashing due to empty stack (raoulvdberge)
|
- Fixed Disk Manipulator crashing due to empty stack (raoulvdberge)
|
||||||
- Fixed issue where empty stacks show up in the system (raoulvdberge)
|
- Fixed issue where empty stacks show up in the system (raoulvdberge)
|
||||||
|
- Fixed Storage Monitor not respecting security settings (raoulvdberge)
|
||||||
|
|
||||||
### 1.4.3
|
### 1.4.3
|
||||||
- Updated Forge to 2282 (raoulvdberge)
|
- Updated Forge to 2282 (raoulvdberge)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
|
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 com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
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 org.apache.commons.lang3.tuple.Pair;
|
||||||
@@ -78,6 +81,10 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Pair<ItemStack, Long> deposit = deposits.get(player.getGameProfile().getName());
|
Pair<ItemStack, Long> deposit = deposits.get(player.getGameProfile().getName());
|
||||||
|
|
||||||
if (deposit == null) {
|
if (deposit == null) {
|
||||||
@@ -101,13 +108,17 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean deposit(EntityPlayer player, ItemStack toInsert) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack filter = itemFilter.getStackInSlot(0);
|
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())));
|
player.inventory.setInventorySlotContents(player.inventory.currentItem, RSUtils.transformNullToEmpty(network.insertItemTracked(toInsert, toInsert.getCount())));
|
||||||
|
|
||||||
deposits.put(player.getGameProfile().getName(), Pair.of(toInsert, Minecraft.getSystemTime()));
|
deposits.put(player.getGameProfile().getName(), Pair.of(toInsert, Minecraft.getSystemTime()));
|
||||||
@@ -116,6 +127,30 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
|
|||||||
return true;
|
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
|
@Override
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -3,11 +3,9 @@ package com.raoulvdberge.refinedstorage.block;
|
|||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
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 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.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.inventory.InventoryHelper;
|
|
||||||
import net.minecraft.item.ItemStack;
|
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;
|
||||||
@@ -56,27 +54,7 @@ public class BlockStorageMonitor extends BlockNode {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EnumFacing side = rayResult.sideHit;
|
((TileStorageMonitor) world.getTileEntity(pos)).getNode().extract(player, 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user