package mcjty.rftools.blocks; import cofh.api.item.IToolHammer; import mcjty.lib.container.GenericBlock; import mcjty.lib.container.WrenchUsage; import mcjty.lib.entity.GenericTileEntity; import mcjty.lib.varia.Logging; import mcjty.lib.varia.SecurityTools; import mcjty.rftools.RFTools; import mcjty.rftools.blocks.security.SecurityChannels; import mcjty.rftools.items.smartwrench.SmartWrench; import mcjty.rftools.items.smartwrench.SmartWrenchMode; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; public abstract class GenericRFToolsBlock extends GenericBlock { public GenericRFToolsBlock(Material material, Class<? extends TileEntity> tileEntityClass, boolean isContainer) { super(RFTools.instance, material, tileEntityClass, isContainer); } @Override protected WrenchUsage getWrenchUsage(int x, int y, int z, EntityPlayer player, ItemStack itemStack, WrenchUsage wrenchUsed, Item item) { WrenchUsage usage = super.getWrenchUsage(x, y, z, player, itemStack, wrenchUsed, item); if (item instanceof IToolHammer && usage == WrenchUsage.DISABLED) { // It is still possible it is a smart wrench. if (item instanceof SmartWrench) { SmartWrench smartWrench = (SmartWrench) item; SmartWrenchMode mode = smartWrench.getMode(itemStack); if (mode.equals(SmartWrenchMode.MODE_SELECT)) { if (player.isSneaking()) { usage = WrenchUsage.SNEAK_SELECT; } else { usage = WrenchUsage.SELECT; } } } } return usage; } @Override protected boolean checkAccess(World world, EntityPlayer player, TileEntity te) { if (te instanceof GenericTileEntity) { GenericTileEntity genericTileEntity = (GenericTileEntity) te; if ((!SecurityTools.isAdmin(player)) && (!player.getPersistentID().equals(genericTileEntity.getOwnerUUID()))) { int securityChannel = genericTileEntity.getSecurityChannel(); if (securityChannel != -1) { SecurityChannels securityChannels = SecurityChannels.getChannels(world); SecurityChannels.SecurityChannel channel = securityChannels.getChannel(securityChannel); boolean playerListed = channel.getPlayers().contains(player.getDisplayName()); if (channel.isWhitelist() != playerListed) { Logging.message(player, EnumChatFormatting.RED + "You have no permission to use this block!"); return true; } } } } return false; } }