@EventHandler
  public void onPlayerInteract_Appliance(final PlayerInteractEvent event) {
    if (!event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
      return;
    }
    String applianceType;
    switch (event.getClickedBlock().getTypeId()) { // Check and set appliance type
      case 58:
        applianceType = "CraftingTable";
        break;
      case 61:
        applianceType = "Furnace";
        break;
      case 116:
        applianceType = "EnchantmentTable";
        break;
      case 117:
        applianceType = "BrewingStand";
        break;
      case 23:
        applianceType = "Dispenser";
        break;
      default:
        return;
    }
    if (event
        .getPlayer()
        .hasPermission(
            "madetobreak.exempt."
                + applianceType
                    .toLowerCase())) { // Check if the player is exempted from depleting usage of
                                       // appliance
      return;
    }
    Block blk = event.getClickedBlock();
    Player player = event.getPlayer();
    if (plugin.l.containsKey(blk)) {

      if (plugin.l.get(blk)
          == -1) { // Check if the block is exempted (i.e. is an infinite usage block)
        return;
      } else if (plugin.l.get(blk) == -2) {
        event.setCancelled(true);
        player.sendMessage(
            plugin.colorize(
                plugin.getConfig().getString(applianceType + "Effects.Display_Message")));
        //				player.getWorld().playEffect(loc.add(0, 1, 0), Effect.SMOKE, 4);
        //				player.getWorld().playEffect(loc, Effect.EXTINGUISH, 0);
        //				//TODO: play effects prescribed in config
        return;
      }

      plugin.l.put(blk, plugin.l.get(blk) + 1); // add usage

      if (plugin.l.get(blk)
          >= plugin
              .getConfig()
              .getInt(applianceType + "_Uses")) { // Compares current usage to max usage in config
        // Deploy any effects prescribed in config
        World world = player.getWorld();
        switch (plugin.getConfig().getInt(applianceType + "Effects.Explosion.Setting")) {
          case 0:
            break;
          case 1:
            event.getClickedBlock().setTypeId(0);
            world.createExplosion(blk.getLocation(), 0F);
            plugin.l.remove(blk);
            return;
          case 2:
            event.getClickedBlock().setTypeId(0);
            player
                .getWorld()
                .createExplosion(
                    blk.getLocation(),
                    (float) plugin.getConfig().getInt(applianceType + "Effects.Explosion.Force"));
            plugin.l.remove(blk);
            return;
        } // end of explosion checking
        if (plugin.getConfig().getBoolean(applianceType + "Effects.Disappear")) {
          event.getClickedBlock().setTypeId(0);
          plugin.l.remove(blk);
          return;
        } // end of disappear checking

        plugin.l.put(blk, -2); // place 'broken' value (i.e. -2)
      }

    } else { // It's a new & normal block, put into the map.
      if (plugin.getConfig().getInt(applianceType + "_Uses") == -1) {
        return;
      }
      plugin.l.put(blk, 1);
    }
  }
 public MBListener(MadeToBreak os) {
   plugin = os;
   plugin.getServer().getPluginManager().registerEvents(this, plugin);
 }