Fredashay's Block Claim 2018-03-11

This plugin lets your players claim blocks.

  1. Fredashay
    Tested Minecraft Versions:
    • 1.12
    Contributors:
    Fredashay
    This plugin lets your players claim blocks.

    You claim a block by placing it (placing common natural blocks like dirt or sand doesn't count if you are a regular player).
    If you are OP and weilding your OP stick, natural blocks like dirt and sand that you place are protected, and you can break other players' blocks.

    To install this plugin, copy the plugin JAR file to your server's plugins folder.

    Code (Text):

    package FredashaySpigotBlockClaim;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.UUID;
    import java.util.logging.Logger;

    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.OfflinePlayer;
    import org.bukkit.Server;
    import org.bukkit.World;
    import org.bukkit.block.Biome;
    import org.bukkit.block.Block;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Creature;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Monster;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.BlockBurnEvent;
    import org.bukkit.event.block.BlockDamageEvent;
    import org.bukkit.event.block.BlockExplodeEvent;
    import org.bukkit.event.block.BlockFromToEvent;
    import org.bukkit.event.block.BlockIgniteEvent;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.event.block.BlockSpreadEvent;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.EntityExplodeEvent;
    import org.bukkit.event.player.PlayerBucketEmptyEvent;
    import org.bukkit.event.player.PlayerBucketFillEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.java.JavaPlugin;

    @SuppressWarnings("unused")
    public class MyPlugin extends JavaPlugin implements Listener, CommandExecutor {
       
       private static Logger logger = null;
       private static PluginDescriptionFile pdfFile = null;  
       private static String dbName = null;  
       
       @Override
        public void onEnable() {      
           pdfFile = getDescription();
           getServer().getPluginManager().registerEvents(this,this);  
           logger = Logger.getLogger("Minecraft");  
           dbName = "Fredashay.db";
           sqlInit(dbName);
            }  
       
       public boolean isNumeric(String string) {
           double number = 0;
           if (number == 0) {
               try {          
                   number = Double.parseDouble(string);              
                   }  
               catch(NumberFormatException oops) {  
                   return (false);  
                   }
               }
           return (true);  
           }
       
       private int toInteger(String string) {
           Double number = 0.0;
           int integer = 0;
           try {
               number = Double.parseDouble(string.trim());
               integer = number.intValue();
               }
           catch (NumberFormatException oops) {
               logger.warning("[" + pdfFile.getName() + "] We tried to convert '" + string + "' to a number; it didn't end well.  ");
               logger.warning("[" + pdfFile.getName() + "] " + oops.getMessage());
               oops.printStackTrace(System.err);
               integer = 0;
               }
           return (integer);
           }  
       
       private String prettyDate(Long time) {
           SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");      
           return (sdfDate.format(time));
            }
       
        private String prettyTime(Long time) {
           SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");
           return (sdfTime.format(time));
            }
       
        private UUID getUuidFromName(String name) {
           UUID uuid = null;
           if (getServer().getPlayer(name) != null) {
               if (getServer().getPlayer(name).getUniqueId() != null) {
                   uuid = getServer().getPlayer(name).getUniqueId();
                   }
               }
           if (uuid == null) {
               OfflinePlayer offlinePlayers[] = getServer().getOfflinePlayers();
               int playerIndex = 0;
               while ((playerIndex < offlinePlayers.length) && (uuid == null)) {
                   if (offlinePlayers[playerIndex].getName().equalsIgnoreCase(name)) {
                       uuid = offlinePlayers[playerIndex].getUniqueId();
                       }
                   playerIndex = playerIndex + 1;
                   }
               }      
           return (uuid);
            }
       
        private String getNameFromUuid(UUID uuid) {
           String name = null;
           if (getServer().getPlayer(uuid) != null) {
               if (getServer().getPlayer(uuid).getName() != null) {
                   if (getServer().getPlayer(uuid).getName().length() > 0) {
                       name = getServer().getPlayer(uuid).getName();
                       }
                   }
               }
           OfflinePlayer offlinePlayers[] = getServer().getOfflinePlayers();
           int playerIndex = 0;
           if (name == null) {
               playerIndex = 0;
               while ((playerIndex < offlinePlayers.length) && (name == null)) {
                   if (offlinePlayers[playerIndex].getUniqueId().equals(uuid)) {
                       name = offlinePlayers[playerIndex].getName();
                       }
                   playerIndex = playerIndex + 1;
                   }
               }  
           else if (name.length() == 0) {
               playerIndex = 0;
               while ((playerIndex < offlinePlayers.length) && (name == null)) {
                   if (offlinePlayers[playerIndex].getUniqueId().equals(uuid)) {
                       name = offlinePlayers[playerIndex].getName();
                       }
                   playerIndex = playerIndex + 1;
                   }
               }  
           return (name);
            }
           
        private static String hexEncode(String textValue) {
           char[] chars = textValue.toCharArray();
           String hex = "#";
           int ix = 0;
           while (ix < chars.length) {
               try {
                   hex = hex + Integer.toHexString((int) chars[ix]);
                   }
               catch (Exception oops) {
                   return ("#00");
                   }
               ix = ix + 1;
               }
           return (hex);
           }
       
       private static String hexDecode(String hexValue) {      
           String textValue = "";
           if (hexValue.startsWith("#")) {
               int ix = 1;
               while (ix < hexValue.length()) {
                   try {
                       textValue = textValue + (char) Integer.parseInt(hexValue.substring(ix, (ix + 2)), 16);
                       }
                   catch (Exception oops) {
                       return (" ");
                       }              
                   ix = ix + 2;
                   }          
               }
           return (textValue);
           }          
       
       private void sqlInit(String dbName) {
             Connection connection = sqlOpen(dbName);
             PreparedStatement statement = null;
             try {
                 statement = connection.prepareStatement("create table if not exists block (world varchar(255), locx long, locy int, locz long, player varchar(255));  ");
               sqlUpdate(connection, statement);      
                 }  
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
             finally {
                 sqlClose(connection);
                 }
           }
       
        private Connection sqlOpen(String dbNname) {
           Connection connection = null;
           try {
                Class.forName("org.sqlite.JDBC");
                connection = DriverManager.getConnection("jdbc:sqlite:" + dbName);
               }
           catch (ClassNotFoundException oops) {
               logger.severe("[" + pdfFile.getName() + "] You need the SQLite JBDC library.  DuckDuckGo it. ");
               oops.printStackTrace(System.err);
               }
            catch(SQLException oops) {
                   logger.severe("[" + pdfFile.getName() + "] SQL Exception: '" + oops.getErrorCode() + "'. ");
                oops.printStackTrace();  
                }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
           return (connection);
            }
             
        private ResultSet sqlQuery(Connection connection, PreparedStatement statement) {
           ResultSet data = null;
           try {
                data = statement.executeQuery();
               }
            catch(SQLException oops) {
                   logger.severe("[" + pdfFile.getName() + "] SQL Exception: '" + oops.getErrorCode() + "'. ");
                oops.printStackTrace();  
                }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);
               }  
            return (data);
            }
       
        private void sqlUpdate(Connection connection, PreparedStatement statement) {
           try {
               statement.executeUpdate();
               }
            catch(SQLException oops) {
                   logger.severe("[" + pdfFile.getName() + "] SQL Exception: '" + oops.getErrorCode() + "'. ");
                oops.printStackTrace();  
                }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);
               }  
            }
           
        private void sqlClose(Connection connection) {
           if (connection != null) {
               try {
                   connection.close();
                   }
               catch(SQLException oops) {
                     logger.severe("[" + pdfFile.getName() + "] SQL Exception: '" + oops.getErrorCode() + "'. ");
                   oops.printStackTrace();  
                   }
               catch (Exception oops) {
                     logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                     oops.printStackTrace(System.err);
                   }  
               }
            }
       
        private UUID getOwnerOfBlock(Block block) {
           UUID uuid = null;      
           Connection connection = sqlOpen(dbName);
           try {  
               PreparedStatement statement = connection.prepareStatement("select * from block where world=? and locx=? and locy=? and locz=? order by player; ");
               statement.setString(1, hexEncode(block.getWorld().getUID().toString()));
               statement.setLong(2, block.getX());
               statement.setInt(3, block.getY());
               statement.setLong(4, block.getZ());
               ResultSet data = sqlQuery(connection, statement);
                while (data.next()) {                    
                       uuid = UUID.fromString(hexDecode(data.getString("player")));
                   }
               }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
             finally {
                 sqlClose(connection);
                 }
           return(uuid);
            }
       
        private Block[] getBlocksOwnedByPlayer(UUID uuid) {
           Connection connection = sqlOpen(dbName);      
           List<Block> blockList = new ArrayList<Block>();  
           try {  
               PreparedStatement statement = connection.prepareStatement("select * from block where player=?; ");
               statement.setString(1, hexEncode(uuid.toString()));
               ResultSet data = sqlQuery(connection, statement);
               int chunkIndex = 0;
               if (data != null) {
                   while(data.next()) {
                       Server server = getServer();
                       String string = hexDecode(data.getString("world"));
                       UUID uid = UUID.fromString(string);    
                       World world = server.getWorld(uid);
                       Block block = world.getBlockAt(data.getInt("locx"), data.getInt("locy"), data.getInt("locz"));
                       blockList.add(block);
                       chunkIndex = chunkIndex + 1;
                       }
                   }
               }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
             finally {
                 sqlClose(connection);
                 }
           Block blocks[] = new Block[blockList.size()];
           blockList.toArray(blocks);
           return(blocks);
            }
       
        private int numBlocksOwnedByPlayer(UUID uuid) {
           Connection connection = sqlOpen(dbName);
           int numBlocks = 0;
           try {  
               PreparedStatement statement = connection.prepareStatement("select * from block where player=?; ");
               statement.setString(1, hexEncode(uuid.toString()));
               ResultSet data = sqlQuery(connection, statement);
               if (data != null) {
                   while (data.next()) {
                       numBlocks = numBlocks + 1;
                       }
                   }
               }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
             finally {
                 sqlClose(connection);
                 }
           return(numBlocks);
            }
       
        private void insertBlockPlayer(Block block, UUID uuid) {
           Connection connection = sqlOpen(dbName);
           try {  
               PreparedStatement statement = connection.prepareStatement("insert into block values(?, ?, ?, ?, ?); ");
               statement.setString(1, hexEncode(block.getWorld().getUID().toString()));
               statement.setLong(2, block.getX());
               statement.setInt(3, block.getY());
               statement.setLong(4, block.getZ());
               statement.setString(5, hexEncode(uuid.toString()));
               sqlUpdate(connection, statement);  
               }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
             finally {
                 sqlClose(connection);
                 }
            }
       
        private void deleteBlock(Block block) {
           Connection connection = sqlOpen(dbName);
           try {  
               PreparedStatement statement = connection.prepareStatement("delete from block where world=? and locx=? and locy=? and locz=?; ");
               statement.setString(1, hexEncode(block.getWorld().getUID().toString()));
               statement.setLong(2, block.getX());
               statement.setInt(3, block.getY());
               statement.setLong(4, block.getZ());
               sqlUpdate(connection, statement);  
               }
           catch (Exception oops) {
                   logger.severe("[" + pdfFile.getName() + "] Exception: '" + oops.getMessage() + "'. ");      
                   oops.printStackTrace(System.err);          
               }
             finally {
                 sqlClose(connection);
                 }
            }
               
        private boolean playerOwnsBlock(Block block, UUID uuid) {
           UUID owner = getOwnerOfBlock(block);      
           if (uuid.equals(owner)) {
               return (true);
               }
           return (false);
            }
                                 
       @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {            
           if (label.equalsIgnoreCase("block")) {
               if (sender instanceof Player) {
                   // int loopIndex = 0;
                   Player player = (Player) sender;  
                   // Block block = player.getLocation().getBlock();
                   if (args.length > 0) {
                       if (args[0].equalsIgnoreCase("help")) {                  
                           int numBlocks = numBlocksOwnedByPlayer(player.getUniqueId());
                           String output = "You claim a block by placing it (placing common natural blocks like dirt or sand doesn't count).  ";
                           output = output + "You have claimed " + numBlocks + " blocks.  ";
                           if (player.isOp()) {
                               output = output + "If you are OP and weilding your OP stick, natural blocks like dirt and sand that you place are protected, and you can break other players' blocks.  ";
                               }
                           player.sendMessage("<BLOCK> " + output);
                           }
                       else {                      
                           player.sendMessage("<BLOCK> We don't know the meaning of the word '" + args[0] + "'. ");
                           }
                       }
                   else {
                       player.sendMessage("<BLOCK> 'Block' protects blocks that you place from griefers.  Issue /BLOCK HELP for help. ");
                       }
                   }
               return (true);
               }
           return (false);
            }
               
       private boolean foodBlock(Block block) {
           boolean food = false;
           if (block.getType().equals(Material.MELON_BLOCK)) {
                food = true;
               }
           else if (block.getType().equals(Material.PUMPKIN)) {
                food = true;
               }
           else if (block.getType().equals(Material.CAKE_BLOCK)) {
                food = true;
               }
           return (food);
           }
       
       private boolean commonBlock(Block block) {
           boolean common = false;
           if (foodBlock(block)) {
               common = true;
               }
           else if (block.getType().hasGravity()) {                  
               common = true;  
               }        
           else if (block.getType().isEdible()) {                  
               common = true;  
               }    
           else if (block.getType() == Material.AIR) {
               common = true;
               }
           else if (block.getType() == Material.FIRE) {
               common = true;
               }
           else if (block.getType() == Material.LAVA) {
               common = true;
               }
           else if (block.getType() == Material.STATIONARY_LAVA) {
               common = true;
               }
           else if (block.getType() == Material.WATER) {
               common = true;
               }
           else if (block.getType() == Material.STATIONARY_WATER) {
               common = true;
               }
           else if (block.getLocation().getWorld().getBiome(block.getX(), block.getZ()).equals(Biome.HELL)) {
               if (block.getType() == Material.NETHERRACK) {
                   common = true;
                   }
               else if (block.getType() == Material.SOUL_SAND) {
                   common = true;
                   }
               }
           else if (block.getLocation().getWorld().getBiome(block.getX(), block.getZ()).equals(Biome.SKY)) {
               if (block.getType() == Material.ENDER_STONE) {
                   common = true;
                   }
               }
           else if (block.getType() == Material.DIRT) {
               common = true;
               }
           else if (block.getType() == Material.GRASS) {
               common = true;
               }
           else if (block.getType() == Material.GRAVEL) {
               common = true;
               }
           else if (block.getType() == Material.SAND) {
               common = true;
               }
           return(common);
           }
       
        private boolean protectedThing(Material thing) {
           if (thing.equals(Material.ARMOR_STAND)) {
               return (true);
               }
           else if (thing.equals(Material.DIODE)) {
               return (true);
               }
           else if (thing.equals(Material.DIODE_BLOCK_OFF)) {
               return (true);
               }
           else if (thing.equals(Material.DIODE_BLOCK_ON)) {
               return (true);
               }
           else if (thing.equals(Material.COMMAND)) {
               return (true);
               }
           else if (thing.equals(Material.COMMAND_CHAIN)) {
               return (true);
               }
           else if (thing.equals(Material.COMMAND_MINECART)) {
               return (true);
               }
           else if (thing.equals(Material.COMMAND_REPEATING)) {
               return (true);
               }
           else if (thing.equals(Material.DISPENSER)) {
               return (true);
               }
           else if (thing.equals(Material.DROPPER)) {
               return (true);
               }
           else if (thing.equals(Material.FIRE)) {
               return (true);
               }
           else if (thing.equals(Material.HOPPER)) {
               return (true);
               }
           else if (thing.equals(Material.ITEM_FRAME)) {
               return (true);
               }
           else if (thing.equals(Material.NOTE_BLOCK)) {
               return (true);
               }
           else if (thing.equals(Material.PISTON_BASE)) {
               return (true);
               }
           else if (thing.equals(Material.PISTON_STICKY_BASE)) {
               return (true);
               }
           else if (thing.equals(Material.REDSTONE_COMPARATOR)) {
               return (true);
               }
           else if (thing.equals(Material.REDSTONE_COMPARATOR_OFF)) {
               return (true);
               }
           else if (thing.equals(Material.REDSTONE_COMPARATOR_ON)) {
               return (true);
               }
           else if (thing.equals(Material.SIGN)) {
               return (true);
               }
           else if (thing.equals(Material.SIGN_POST)) {
               return (true);
               }
           else if (thing.equals(Material.STRUCTURE_BLOCK)) {
               return (true);
               }
           else if (thing.equals(Material.TNT)) {
               return (true);
               }  
           return (false);
            }
       
       private boolean opStick(Player player) {
           boolean stick = false;
           if (player.getInventory().getItemInMainHand().getType().equals(Material.STICK)) {
                     stick = true;
                   }
               else if (player.getInventory().getItemInOffHand().getType().equals(Material.STICK)) {
                  stick = true;
                  }      
           return (stick);
           }
       
       
        @EventHandler (priority = EventPriority.LOW)
        public void blockBreakEventHandler(BlockBreakEvent event) {      
           if (event.isCancelled() == false) {
               Player player = event.getPlayer();
               Block block = event.getBlock();
               if (foodBlock(event.getBlock())) {
                   deleteBlock(block);
                   return;
                   }
               else if (playerOwnsBlock(block, player.getUniqueId())) {
                   deleteBlock(block);
                   return;
                   }
               else {
                   UUID owner = getOwnerOfBlock(block);
                   if (owner != null) {
                       if (owner.equals(player.getUniqueId())) {
                           deleteBlock(block);
                           return;
                           }
                       else if (player.isOp()) {
                           if (opStick(player)) {
                               deleteBlock(block);
                                 return;
                               }
                           else {
                               player.sendMessage("<BLOCK> This block belongs to another player.  You must be wielding your OP stick to destroy it. ");
                               event.setCancelled(true);
                               }
                           }
                       else {
                           player.sendMessage("<BLOCK> This block belongs to another player. ");
                           event.setCancelled(true);
                           }
                       }
                   }
               }
               }  
           
        @EventHandler (priority = EventPriority.LOW)
        public void blockDamageEventHandler(BlockDamageEvent event) {
               if (event.isCancelled() == false) {
               Player player = event.getPlayer();
               Block block = event.getBlock();
               if (foodBlock(event.getBlock())) {
                   return;
                   }
               else if (playerOwnsBlock(block, player.getUniqueId())) {
                   return;
                   }
               else {
                   UUID owner = getOwnerOfBlock(block);
                   if (owner != null) {
                       if (owner.equals(player.getUniqueId())) {
                           return;
                           }
                       else if (player.isOp()) {
                           if (opStick(player)) {
                                 return;
                               }
                           else {
                               player.sendMessage("<BLOCK> This block belongs to another player.  You must be wielding your OP stick to damage it. ");
                               event.setCancelled(true);
                               }
                           }
                       else {
                           player.sendMessage("<BLOCK> This block belongs to another player. ");
                           event.setCancelled(true);
                           }
                       }
                   }
               }          
           }
       
        @EventHandler (priority = EventPriority.LOW)
        public void blockExplodeEventHandler(BlockExplodeEvent event) {
           if (event.isCancelled() == false) {
               List<Block> blocks = event.blockList();
                Block block = null;
                int index = blocks.size() - 1;
                boolean protect = false;
                while (index >= 0) {          
                   block = blocks.get(index);
                   if (block.getType() == Material.TNT) {                  
                       }
                   else if (getOwnerOfBlock(block) != null) {
                         protect = true;
                         }          
                     index = index - 1;
                    }
                if (protect) {
                     index = blocks.size() - 1;
                     while (index >= 0) {          
                         block = blocks.get(index);
                       if (block.getType() == Material.TNT) {                  
                           }
                       else if (commonBlock(block) == false) {
                             blocks.remove(index);
                             }          
                         index = index - 1;
                        }
                    }
               }
            }
       
        @EventHandler (priority = EventPriority.LOW)
        public void blockIgniteEventHandler(BlockIgniteEvent event) {
           if (event.isCancelled() == false) {
               Player player = event.getPlayer();
               Location location = event.getBlock().getLocation();
               location.setY(location.getY() - 1);
               Block block = getServer().getWorld(location.getWorld().getUID()).getBlockAt(location);
               UUID owner = getOwnerOfBlock(block);
               if (owner != null) {
                   if (owner.equals(player.getUniqueId())) {
                       return;
                       }  
                   else if (player.isOp()) {
                       if (opStick(player)) {
                              return;
                            }
                       else {
                           player.sendMessage("<BLOCK> This block belongs to another player.  You must be wielding your OP stick to burn it. ");
                           event.setCancelled(true);
                           }  
                       }
                   else {  
                       player.sendMessage("<BLOCK> This block belongs to another player. ");
                       event.setCancelled(true);              
                       }
                   }
               }
            }
       
        @EventHandler (priority = EventPriority.LOW)
        public void blockPlaceEventHandler(BlockPlaceEvent event) {
           if (event.isCancelled() == false) {
               Player player = event.getPlayer();
               Block block = event.getBlock();
               if (commonBlock(block)) {
                   if (player.isOp()) {
                       if (opStick(player)) {
                           return;
                           }
                       else {
                           insertBlockPlayer(block, player.getUniqueId());                          
                           }
                       }
                   else {
                       return;
                       }
                   }
               else {
                   insertBlockPlayer(block, player.getUniqueId());
                   }
               }          
            }
       
        @EventHandler (priority = EventPriority.LOW)
        public void entityExplodeEventHandler(EntityExplodeEvent event) {  
           if (event.isCancelled() == false) {
                List<Block> blocks = event.blockList();
                Block block = null;
                Location location = null;
                int index = blocks.size() - 1;
                boolean protect = false;
                while ((index >= 0) && (protect == false)) {          
                   block = blocks.get(index);
                   if (block.getType() == Material.TNT) {                  
                       }
                   else if (getOwnerOfBlock(block) != null) {
                       protect = true;
                       }          
                   index = index - 1;
                    }
                if (protect) {
                    index = blocks.size() - 1;
                    while (index >= 0) {          
                       block = blocks.get(index);
                       if (block.getType() == Material.TNT) {                  
                           }
                       else if (commonBlock(block) == false) {
                           blocks.remove(index);
                           }          
                       index = index - 1;
                        }
                    }
               }
            }      
           
        @EventHandler(priority = EventPriority.LOW)
        public void playerInteractEventHandler(PlayerInteractEvent event) {
           if (event.isCancelled() == false) {
               Player player = event.getPlayer();
               boolean cancel = false;      
               if (event.getClickedBlock() != null) {
                   Block block = event.getClickedBlock();
                   UUID owner = getOwnerOfBlock(block);
                   if (owner != null) {
                       if (protectedThing(block.getType())) {              
                           if (owner.equals(player.getUniqueId())) {
                               return;
                               }
                           else if (player.isOp()) {
                               if (opStick(player)) {
                                   player.sendMessage("<BLOCK> This block belongs to " + getServer().getOfflinePlayer(owner).getName() + ". ");
                                     return;
                                   }
                               else {
                                   player.sendMessage("<BLOCK> This block belongs to another player. You must be weilding your OP stick to mess with it. ");
                                   cancel = true;      
                                   }
                               }
                           else {  
                               player.sendMessage("<BLOCK> This block belongs to another player. ");
                               cancel = true;
                               }              
                           }
                       else if (owner.equals(player.getUniqueId())) {
                           return;
                           }
                       else if (player.isOp()) {
                           if (opStick(player)) {
                               player.sendMessage("<BLOCK> This block belongs to " + getServer().getOfflinePlayer(owner).getName() + ". ");
                                 return;
                               }
                           }
                       }              
                   }  
               if (cancel) {
                   event.setCancelled(true);
                   }
               }          
           }  
                           
       // private void doNothing() { }
       
        }