예제 #1
0
  /**
   * Monitor PlayerInteract events.
   *
   * @param event The event to watch
   */
  @EventHandler(priority = EventPriority.LOW)
  public void onPlayerInteract(PlayerInteractEvent event) {
    Player player = event.getPlayer();
    Action action = event.getAction();
    Block block = event.getClickedBlock();
    ItemStack inHand = player.getItemInHand();
    Material material;

    /* Fix for NPE on interacting with air */
    if (block == null) {
      material = Material.AIR;
    } else {
      material = block.getType();
    }

    switch (action) {
      case RIGHT_CLICK_BLOCK:

        /* REPAIR CHECKS */
        if (Permissions.getInstance().repair(player)
            && block.getTypeId() == Config.getInstance().getRepairAnvilId()) {
          if (mcMMO.repairManager.isRepairable(inHand)) {
            mcMMO.repairManager.handleRepair(player, inHand);
            event.setCancelled(true);
            player.updateInventory();
          }
        }

        /* ACTIVATION CHECKS */
        if (Config.getInstance().getAbilitiesEnabled() && BlockChecks.abilityBlockCheck(block)) {
          if (!material.equals(Material.DIRT)
              && !material.equals(Material.GRASS)
              && !material.equals(Material.SOIL)) {
            Skills.activationCheck(player, SkillType.HERBALISM);
          }

          Skills.activationCheck(player, SkillType.AXES);
          Skills.activationCheck(player, SkillType.EXCAVATION);
          Skills.activationCheck(player, SkillType.MINING);
          Skills.activationCheck(player, SkillType.SWORDS);
          Skills.activationCheck(player, SkillType.UNARMED);
          Skills.activationCheck(player, SkillType.WOODCUTTING);
        }

        /* GREEN THUMB CHECK */
        if (inHand.getType().equals(Material.SEEDS)
            && BlockChecks.makeMossy(block)
            && Permissions.getInstance().greenThumbBlocks(player)) {
          Herbalism.greenThumbBlocks(inHand, player, block);
        }

        /* ITEM CHECKS */
        if (BlockChecks.abilityBlockCheck(block)) {
          Item.itemChecks(player);
        }

        /* BLAST MINING CHECK */
        if (player.isSneaking()
            && inHand.getTypeId() == Config.getInstance().getDetonatorItemID()
            && Permissions.getInstance().blastMining(player)) {
          BlastMining.detonate(event, player, plugin);
        }

        break;

      case RIGHT_CLICK_AIR:

        /* ACTIVATION CHECKS */
        if (Config.getInstance().getAbilitiesEnabled()) {
          Skills.activationCheck(player, SkillType.AXES);
          Skills.activationCheck(player, SkillType.EXCAVATION);
          Skills.activationCheck(player, SkillType.HERBALISM);
          Skills.activationCheck(player, SkillType.MINING);
          Skills.activationCheck(player, SkillType.SWORDS);
          Skills.activationCheck(player, SkillType.UNARMED);
          Skills.activationCheck(player, SkillType.WOODCUTTING);
        }

        /* ITEM CHECKS */
        Item.itemChecks(player);

        /* BLAST MINING CHECK */
        if (player.isSneaking()
            && inHand.getTypeId() == Config.getInstance().getDetonatorItemID()
            && Permissions.getInstance().blastMining(player)) {
          BlastMining.detonate(event, player, plugin);
        }

        break;

      case LEFT_CLICK_AIR:
      case LEFT_CLICK_BLOCK:

        /* CALL OF THE WILD CHECKS */
        if (player.isSneaking()) {
          Material type = inHand.getType();

          if (type == Material.RAW_FISH) {
            TamingManager tamingManager = new TamingManager(player);
            tamingManager.summonOcelot();
          } else if (type == Material.BONE) {
            TamingManager tamingManager = new TamingManager(player);
            tamingManager.summonWolf();
          }
        }

        break;

      default:
        break;
    }
  }