Fixes to the security feature
This commit is contained in:
@@ -7,9 +7,9 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public interface ISecurityCard {
|
public interface ISecurityCard {
|
||||||
/**
|
/**
|
||||||
* @return the UUID that this security card is bound to
|
* @return the owner of this card
|
||||||
*/
|
*/
|
||||||
UUID getBound();
|
UUID getOwner();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param permission the permission to check for
|
* @param permission the permission to check for
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
|
if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player) || !network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
|
||||||
RSUtils.sendNoPermissionMessage(player);
|
RSUtils.sendNoPermissionMessage(player);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ import java.util.Map;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class SecurityCard implements ISecurityCard {
|
public class SecurityCard implements ISecurityCard {
|
||||||
private UUID bound;
|
private UUID owner;
|
||||||
private Map<Permission, Boolean> permissions = new HashMap<>();
|
private Map<Permission, Boolean> permissions = new HashMap<>();
|
||||||
|
|
||||||
public SecurityCard(UUID bound) {
|
public SecurityCard(UUID owner) {
|
||||||
this.bound = bound;
|
this.owner = owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<Permission, Boolean> getPermissions() {
|
public Map<Permission, Boolean> getPermissions() {
|
||||||
@@ -20,8 +20,8 @@ public class SecurityCard implements ISecurityCard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getBound() {
|
public UUID getOwner() {
|
||||||
return bound;
|
return owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ public class SecurityManager implements ISecurityManager {
|
|||||||
cards.clear();
|
cards.clear();
|
||||||
|
|
||||||
for (INetworkNode node : network.getNodeGraph().all()) {
|
for (INetworkNode node : network.getNodeGraph().all()) {
|
||||||
if (node instanceof ISecurityCardContainer) {
|
if (node instanceof ISecurityCardContainer && node.canUpdate()) {
|
||||||
for (ISecurityCard card : ((ISecurityCardContainer) node).getCards()) {
|
for (ISecurityCard card : ((ISecurityCardContainer) node).getCards()) {
|
||||||
cards.put(card.getBound(), card);
|
cards.put(card.getOwner(), card);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
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;
|
||||||
@@ -21,11 +24,24 @@ public class BlockSecurityManager extends BlockNode {
|
|||||||
return new TileSecurityManager();
|
return new TileSecurityManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
|
||||||
|
super.onBlockPlacedBy(world, pos, state, placer, stack);
|
||||||
|
|
||||||
|
if (!world.isRemote && placer instanceof EntityPlayer) {
|
||||||
|
((TileSecurityManager) world.getTileEntity(pos)).setOwner(((EntityPlayer) placer).getGameProfile().getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@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) {
|
||||||
|
if (player.getGameProfile().getId().equals(((TileSecurityManager) world.getTileEntity(pos)).getOwner())) {
|
||||||
|
player.openGui(RS.INSTANCE, RSGui.SECURITY_MANAGER, world, pos.getX(), pos.getY(), pos.getZ());
|
||||||
|
} else {
|
||||||
tryOpenNetworkGui(RSGui.SECURITY_MANAGER, player, world, pos, side, Permission.MODIFY, Permission.SECURITY);
|
tryOpenNetworkGui(RSGui.SECURITY_MANAGER, player, world, pos, side, Permission.MODIFY, Permission.SECURITY);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class ItemSecurityCard extends ItemBase {
|
public class ItemSecurityCard extends ItemBase {
|
||||||
private static final String NBT_BOUND = "Bound";
|
private static final String NBT_OWNER = "Owner";
|
||||||
private static final String NBT_BOUND_NAME = "BoundName";
|
private static final String NBT_OWNER_NAME = "OwnerName";
|
||||||
private static final String NBT_PERMISSION = "Permission_%d";
|
private static final String NBT_PERMISSION = "Permission_%d";
|
||||||
|
|
||||||
public ItemSecurityCard() {
|
public ItemSecurityCard() {
|
||||||
@@ -32,17 +32,17 @@ public class ItemSecurityCard extends ItemBase {
|
|||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
stack.setTagCompound(new NBTTagCompound());
|
stack.setTagCompound(new NBTTagCompound());
|
||||||
|
|
||||||
stack.getTagCompound().setString(NBT_BOUND, player.getGameProfile().getId().toString());
|
stack.getTagCompound().setString(NBT_OWNER, player.getGameProfile().getId().toString());
|
||||||
stack.getTagCompound().setString(NBT_BOUND_NAME, player.getGameProfile().getName());
|
stack.getTagCompound().setString(NBT_OWNER_NAME, player.getGameProfile().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static UUID getBound(ItemStack stack) {
|
public static UUID getOwner(ItemStack stack) {
|
||||||
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_BOUND)) {
|
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_OWNER)) {
|
||||||
return UUID.fromString(stack.getTagCompound().getString(NBT_BOUND));
|
return UUID.fromString(stack.getTagCompound().getString(NBT_OWNER));
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -70,8 +70,8 @@ public class ItemSecurityCard extends ItemBase {
|
|||||||
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
|
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
|
||||||
super.addInformation(stack, player, tooltip, advanced);
|
super.addInformation(stack, player, tooltip, advanced);
|
||||||
|
|
||||||
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_BOUND_NAME)) {
|
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_OWNER_NAME)) {
|
||||||
tooltip.add(I18n.format("item.refinedstorage:security_card.bound", stack.getTagCompound().getString(NBT_BOUND_NAME)));
|
tooltip.add(I18n.format("item.refinedstorage:security_card.owner", stack.getTagCompound().getString(NBT_OWNER_NAME)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.tile;
|
|||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.RSItems;
|
import com.raoulvdberge.refinedstorage.RSItems;
|
||||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCard;
|
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCard;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCardContainer;
|
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCardContainer;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||||
@@ -12,12 +13,17 @@ import com.raoulvdberge.refinedstorage.inventory.ItemValidatorBasic;
|
|||||||
import com.raoulvdberge.refinedstorage.item.ItemSecurityCard;
|
import com.raoulvdberge.refinedstorage.item.ItemSecurityCard;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class TileSecurityManager extends TileNode implements ISecurityCardContainer {
|
public class TileSecurityManager extends TileNode implements ISecurityCardContainer {
|
||||||
|
private static final String NBT_OWNER = "Owner";
|
||||||
|
|
||||||
private List<ISecurityCard> actualCards = new ArrayList<>();
|
private List<ISecurityCard> actualCards = new ArrayList<>();
|
||||||
|
|
||||||
private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)) {
|
private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)) {
|
||||||
@@ -36,6 +42,9 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai
|
|||||||
};
|
};
|
||||||
private ItemHandlerBasic editCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RSItems.SECURITY_CARD));
|
private ItemHandlerBasic editCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RSItems.SECURITY_CARD));
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private UUID owner;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
int usage = RS.INSTANCE.config.securityManagerUsage;
|
int usage = RS.INSTANCE.config.securityManagerUsage;
|
||||||
@@ -58,6 +67,17 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai
|
|||||||
super.update();
|
super.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOwner(@Nullable UUID owner) {
|
||||||
|
this.owner = owner;
|
||||||
|
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public UUID getOwner() {
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateNode() {
|
public void updateNode() {
|
||||||
// NO OP
|
// NO OP
|
||||||
@@ -70,7 +90,7 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai
|
|||||||
ItemStack stack = cards.getStackInSlot(i);
|
ItemStack stack = cards.getStackInSlot(i);
|
||||||
|
|
||||||
if (!stack.isEmpty()) {
|
if (!stack.isEmpty()) {
|
||||||
UUID uuid = ItemSecurityCard.getBound(stack);
|
UUID uuid = ItemSecurityCard.getOwner(stack);
|
||||||
|
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
continue;
|
continue;
|
||||||
@@ -91,6 +111,10 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai
|
|||||||
public void read(NBTTagCompound tag) {
|
public void read(NBTTagCompound tag) {
|
||||||
super.read(tag);
|
super.read(tag);
|
||||||
|
|
||||||
|
if (tag.hasKey(NBT_OWNER)) {
|
||||||
|
owner = UUID.fromString(tag.getString(NBT_OWNER));
|
||||||
|
}
|
||||||
|
|
||||||
RSUtils.readItems(cards, 0, tag);
|
RSUtils.readItems(cards, 0, tag);
|
||||||
RSUtils.readItems(editCard, 1, tag);
|
RSUtils.readItems(editCard, 1, tag);
|
||||||
}
|
}
|
||||||
@@ -99,12 +123,21 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai
|
|||||||
public NBTTagCompound write(NBTTagCompound tag) {
|
public NBTTagCompound write(NBTTagCompound tag) {
|
||||||
super.write(tag);
|
super.write(tag);
|
||||||
|
|
||||||
|
if (owner != null) {
|
||||||
|
tag.setString(NBT_OWNER, owner.toString());
|
||||||
|
}
|
||||||
|
|
||||||
RSUtils.writeItems(cards, 0, tag);
|
RSUtils.writeItems(cards, 0, tag);
|
||||||
RSUtils.writeItems(editCard, 1, tag);
|
RSUtils.writeItems(editCard, 1, tag);
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConnectionChange(INetworkMaster network, boolean state) {
|
||||||
|
network.getSecurityManager().rebuild();
|
||||||
|
}
|
||||||
|
|
||||||
public ItemHandlerBasic getCardsItems() {
|
public ItemHandlerBasic getCardsItems() {
|
||||||
return cards;
|
return cards;
|
||||||
}
|
}
|
||||||
@@ -125,4 +158,9 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai
|
|||||||
public List<ISecurityCard> getCards() {
|
public List<ISecurityCard> getCards() {
|
||||||
return actualCards;
|
return actualCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IItemHandler getDrops() {
|
||||||
|
return new CombinedInvWrapper(cards, editCard);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,4 +261,4 @@ item.refinedstorage:wrench.mode=Mode: %s
|
|||||||
item.refinedstorage:wrench.mode.0=Rotation
|
item.refinedstorage:wrench.mode.0=Rotation
|
||||||
item.refinedstorage:wrench.mode.1=Configuration
|
item.refinedstorage:wrench.mode.1=Configuration
|
||||||
item.refinedstorage:security_card.name=Security Card
|
item.refinedstorage:security_card.name=Security Card
|
||||||
item.refinedstorage:security_card.bound=Bound to: %s
|
item.refinedstorage:security_card.owner=Bound to: %s
|
||||||
Reference in New Issue
Block a user