@EventHandler(priority = EventPriority.MONITOR)
 public void onBlockPistonExtend(BlockPistonExtendEvent event) {
   if (event.isCancelled() || !OrebfuscatorConfig.getUpdateOnPiston()) return;
   for (Block b : event.getBlocks()) {
     OrebfuscatorThreadUpdate.Queue(b);
   }
 }
 @EventHandler(priority = EventPriority.MONITOR)
 public void onBlockPhysics(BlockPhysicsEvent event) {
   if (event.isCancelled() || !OrebfuscatorConfig.getUpdateOnPhysics()) return;
   if (event.getBlock().getType() != Material.SAND
       && event.getBlock().getType() != Material.GRAVEL) return;
   if (!applyphysics(event.getBlock())) return;
   OrebfuscatorThreadUpdate.Queue(event.getBlock());
 }
  @EventHandler(priority = EventPriority.MONITOR)
  public void onBlockDamage(BlockDamageEvent event) {
    if (event.isCancelled() || !OrebfuscatorConfig.getUpdateOnDamage()) return;

    if (blockLog.containsKey(event.getPlayer().getName())
        && blockLog.get(event.getPlayer().getName()).equals(event.getBlock())) {
      return;
    }

    blockLog.put(event.getPlayer().getName(), event.getBlock());

    OrebfuscatorThreadUpdate.Queue(event.getBlock());
  }
  @EventHandler(priority = EventPriority.MONITOR)
  public void onBlockBreak(BlockBreakEvent event) {
    if (event.isCancelled() || !OrebfuscatorConfig.getUpdateOnBreak()) return;

    OrebfuscatorThreadUpdate.Queue(event.getBlock());
  }