private void handleBlockChange(Player player, Block block, short entityID, String mobName) {
   if (!player.hasPermission("silkspawners.changetype." + mobName)) {
     su.sendMessage(
         player,
         ChatColor.translateAlternateColorCodes(
             '\u0026', plugin.localization.getString("noPermissionChangingSpawner")));
     return;
   }
   // Call the event and maybe change things!
   SilkSpawnersSpawnerChangeEvent changeEvent =
       new SilkSpawnersSpawnerChangeEvent(
           player, block, entityID, su.getSpawnerEntityID(block), 1);
   plugin.getServer().getPluginManager().callEvent(changeEvent);
   // See if we need to stop
   if (changeEvent.isCancelled()) {
     return;
   }
   // Get the new ID (might be changed)
   short newEntityID = changeEvent.getEntityID();
   String newMob = su.getCreatureName(entityID);
   if (su.setSpawnerType(
       block,
       newEntityID,
       player,
       ChatColor.translateAlternateColorCodes(
           '\u0026', plugin.localization.getString("changingDeniedWorldGuard")))) {
     su.sendMessage(
         player,
         ChatColor.translateAlternateColorCodes(
                 '\u0026', plugin.localization.getString("changedSpawner"))
             .replace("%creature%", newMob));
   }
 }
  private void handleChange(CommandSender sender, String newMob) {
    if (sender instanceof Player) {
      if (su.isUnkown(newMob)) {
        su.sendMessage(
            sender,
            ChatColor.translateAlternateColorCodes(
                    '\u0026', plugin.localization.getString("unknownCreature"))
                .replace("%creature%", newMob));
        return;
      }

      // entityID
      short entityID = su.name2Eid.get(newMob);
      String creature = su.getCreatureName(entityID);
      // Filter spaces (like Zombie Pigman)
      String mobName = creature.toLowerCase().replace(" ", "");

      Player player = (Player) sender;

      int distance = plugin.config.getInt("spawnerCommandReachDistance", 6);
      // If the distance is -1, return
      if (distance != -1) {
        // Get the block
        Block block = su.nmsProvider.getSpawnerFacing(player, distance);
        if (block != null) {
          handleBlockChange(player, block, entityID, mobName);
          return;
        }
      }

      ItemStack itemInHand = su.nmsProvider.getSpawnerItemInHand(player);
      Material itemMaterial;
      try {
        itemMaterial = itemInHand.getType();
      } catch (NullPointerException e) {
        itemMaterial = null;
      }

      if (itemMaterial != null && itemMaterial == Material.MOB_SPAWNER) {
        handleChangeSpawner(player, entityID, mobName, itemInHand);
      } else if (itemMaterial != null && itemMaterial == SilkUtil.SPAWN_EGG) {
        handleChangeEgg(player, entityID, mobName, itemInHand);
      } else {
        su.sendMessage(
            player,
            ChatColor.translateAlternateColorCodes(
                '\u0026', plugin.localization.getString("spawnerNotDeterminable")));
      }
    } else {
      su.sendMessage(
          sender,
          ChatColor.translateAlternateColorCodes(
              '\u0026', plugin.localization.getString("noConsole")));
    }
  }
 private void handleReload(CommandSender sender) {
   if (sender.hasPermission("silkspawners.reload")) {
     plugin.reloadConfigs();
     su.sendMessage(
         sender,
         ChatColor.translateAlternateColorCodes(
             '\u0026', plugin.localization.getString("configsReloaded")));
   } else {
     su.sendMessage(
         sender,
         ChatColor.translateAlternateColorCodes(
             '\u0026', plugin.localization.getString("noPermission")));
   }
 }
 private void handleHelp(CommandSender sender) {
   for (int i = 1; i <= 7; i++) {
     String message =
         ChatColor.translateAlternateColorCodes(
             '\u0026',
             plugin
                 .localization
                 .getString("help" + i)
                 .replace("%version%", plugin.getDescription().getVersion()));
     su.sendMessage(sender, message);
   }
 }
  private void handleGive(CommandSender sender, String receiver, String mob, String amountString) {
    int amount = plugin.config.getInt("defaultAmountGive", 1);

    // Check given amount
    if (amountString != null && !amountString.isEmpty()) {
      amount = su.getNumber(amountString);
      if (amount == -1) {
        su.sendMessage(
            sender,
            ChatColor.translateAlternateColorCodes(
                '\u0026', plugin.localization.getString("useNumbers")));
        return;
      }
    }

    // Check player
    Player player = su.nmsProvider.getPlayer(receiver);
    // Online check
    if (player == null) {
      su.sendMessage(
          sender,
          ChatColor.translateAlternateColorCodes(
              '\u0026', plugin.localization.getString("playerOffline")));
      return;
    }

    // Check if it's an egg or not
    boolean isEgg = su.isEgg(mob);
    String egg = mob;
    if (isEgg) {
      egg = egg.replaceFirst("egg$", "");
    }

    if (isEgg) {
      handleGiveEgg(sender, player, egg, amount);
    } else {
      handleGiveSpawner(sender, player, mob, amount);
    }
  }
 private void handleView(CommandSender sender) {
   if (sender instanceof Player) {
     // If the distance is -1, return
     int distance = plugin.config.getInt("spawnerCommandReachDistance", 6);
     if (distance == -1) {
       return;
     }
     // Get the block, returns null for non spawner blocks
     Player player = (Player) sender;
     Block block = su.nmsProvider.getSpawnerFacing(player, distance);
     if (block == null) {
       su.sendMessage(
           player,
           ChatColor.translateAlternateColorCodes(
               '\u0026', plugin.localization.getString("lookAtSpawner")));
       return;
     }
     short entityID = su.getSpawnerEntityID(block);
     if (player.hasPermission("silkspawners.viewtype")) {
       su.sendMessage(
           player,
           ChatColor.translateAlternateColorCodes(
                   '\u0026', plugin.localization.getString("getSpawnerType"))
               .replace("%creature%", su.getCreatureName(entityID)));
     } else {
       su.sendMessage(
           player,
           ChatColor.translateAlternateColorCodes(
               '\u0026', plugin.localization.getString("noPermissionViewType")));
     }
   } else {
     su.sendMessage(
         sender,
         ChatColor.translateAlternateColorCodes(
             '\u0026', plugin.localization.getString("noConsole")));
   }
 }
  private void handleChangeEgg(
      Player player, short entityID, String mobName, ItemStack itemInHand) {
    if (!player.hasPermission("silkspawners.changetypewithegg." + mobName)) {
      su.sendMessage(
          player,
          ChatColor.translateAlternateColorCodes(
              '\u0026', plugin.localization.getString("noPermissionChangingEgg")));
      return;
    }

    // Call the event and maybe change things!
    SilkSpawnersSpawnerChangeEvent changeEvent =
        new SilkSpawnersSpawnerChangeEvent(
            player,
            null,
            entityID,
            su.getStoredSpawnerItemEntityID(itemInHand),
            itemInHand.getAmount());
    plugin.getServer().getPluginManager().callEvent(changeEvent);
    // See if we need to stop
    if (changeEvent.isCancelled()) {
      return;
    }

    // Get the new ID (might be changed)
    short newEntityID = changeEvent.getEntityID();
    String newMob = su.getCreatureName(entityID);
    ItemStack newItem =
        su.setSpawnerType(itemInHand, newEntityID, plugin.localization.getString("spawnerName"));
    su.nmsProvider.setSpawnerItemInHand(player, newItem);
    su.sendMessage(
        player,
        ChatColor.translateAlternateColorCodes(
                '\u0026', plugin.localization.getString("changedEgg"))
            .replace("%creature%", newMob));
  }
 private void handleUnknownArgument(CommandSender sender) {
   su.sendMessage(
       sender,
       ChatColor.translateAlternateColorCodes(
           '\u0026', plugin.localization.getString("unknownArgument")));
 }
  private void handleGiveSpawner(CommandSender sender, Player receiver, String mob, int amount) {
    if (su.isUnkown(mob)) {
      su.sendMessage(
          sender,
          ChatColor.translateAlternateColorCodes(
                  '\u0026', plugin.localization.getString("unknownCreature"))
              .replace("%creature%", mob));
      return;
    }

    short entityID = su.name2Eid.get(mob);
    String creature = su.getCreatureName(entityID);
    // Filter spaces (like Zombie Pigman)
    String mobName = creature.toLowerCase().replace(" ", "");

    // Add spawner
    if (sender.hasPermission("silkspawners.freeitem." + mobName)) {
      // Have space in inventory
      if (receiver.getInventory().firstEmpty() == -1) {
        su.sendMessage(
            sender,
            ChatColor.translateAlternateColorCodes(
                '\u0026', plugin.localization.getString("noFreeSlot")));
        return;
      }
      receiver
          .getInventory()
          .addItem(
              su.newSpawnerItem(
                  entityID, su.getCustomSpawnerName(su.eid2MobID.get(entityID)), amount, false));
      if (sender instanceof Player) {
        Player pSender = (Player) sender;
        if (pSender.getUniqueId() == receiver.getUniqueId()) {
          su.sendMessage(
              sender,
              ChatColor.translateAlternateColorCodes(
                      '\u0026', plugin.localization.getString("addedSpawner"))
                  .replace("%creature%", creature)
                  .replace("%amount%", Integer.toString(amount)));
        } else {
          su.sendMessage(
              sender,
              ChatColor.translateAlternateColorCodes(
                      '\u0026',
                      plugin
                          .localization
                          .getString("addedSpawnerOtherPlayer")
                          .replace("%player%", receiver.getName()))
                  .replace("%creature%", creature)
                  .replace("%amount%", Integer.toString(amount)));
        }
      } else {
        su.sendMessage(
            sender,
            ChatColor.translateAlternateColorCodes(
                    '\u0026',
                    plugin
                        .localization
                        .getString("addedSpawnerOtherPlayer")
                        .replace("%player%", receiver.getName()))
                .replace("%creature%", creature)
                .replace("%amount%", Integer.toString(amount)));
      }
      return;
    }
    su.sendMessage(
        sender,
        ChatColor.translateAlternateColorCodes(
            '\u0026', plugin.localization.getString("noPermissionFreeSpawner")));
  }