示例#1
0
 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));
   }
 }
示例#2
0
 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);
   }
 }
示例#3
0
 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")));
   }
 }
示例#4
0
  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));
  }
  @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
  public void onBlockBreak(BlockBreakEvent event) {
    if (event.isCancelled()) {
      return;
    }
    Block block = event.getBlock();
    Player player = event.getPlayer();

    // We just want the mob spawner events
    if (block.getType() != Material.MOB_SPAWNER) {
      return;
    }

    // We can't build here? Return then
    if (!su.canBuildHere(player, block.getLocation())) {
      return;
    }

    // Get the entityID from the spawner
    short entityID = su.getSpawnerEntityID(block);

    // Message the player about the broken spawner
    plugin.informPlayer(
        player,
        ChatColor.translateAlternateColorCodes(
                '\u0026', plugin.localization.getString("spawnerBroken"))
            .replace("%creature%", su.getCreatureName(entityID)));

    // If using silk touch, drop spawner itself
    ItemStack tool = player.getItemInHand();
    // Check for SilkTocuh level
    boolean validToolAndSilkTouch = su.isValidItemAndHasSilkTouch(tool);

    // Get the world to drop in
    World world = player.getWorld();

    // Mob
    String mobName = su.getCreatureName(entityID).toLowerCase().replace(" ", "");

    // No drops in creative
    if (plugin.config.getBoolean("noDropsCreative", true)
        && player.getGameMode() == GameMode.CREATIVE) {
      return;
    }

    // Prevent XP farming/duping
    event.setExpToDrop(0);
    // assume not mined
    boolean mined = false;
    // drop XP only when destroyed and not silk picked
    boolean dropXPOnlyOnDestroy = plugin.config.getBoolean("dropXPOnlyOnDestroy", false);

    if (plugin.config.getBoolean("preventXPFarming", true) && block.hasMetadata("mined")) {
      mined = block.getMetadata("mined").get(0).asBoolean();
    }

    // Drop maybe some XP
    if (player.hasPermission("silkspawners.silkdrop." + mobName)
        || player.hasPermission("silkspawners.destroydrop." + mobName)) {
      int addXP = plugin.config.getInt("destroyDropXP");
      // If we have more than 0 XP, drop them
      // either we drop XP for destroy and silktouch or only when
      // destroyed and we have no silktouch
      if (!mined
          && addXP != 0
          && (!dropXPOnlyOnDestroy || !validToolAndSilkTouch && dropXPOnlyOnDestroy)) {
        event.setExpToDrop(addXP);
        // check if we should flag spawners
        if (plugin.config.getBoolean("preventXPFarming", true)) {
          block.setMetadata("mined", new FixedMetadataValue(plugin, true));
        }
      }
    }

    // random drop chance
    String mobID = su.eid2MobID.get(entityID);
    int randomNumber = rnd.nextInt(100);
    int dropChance = 0;

    // silk touch
    if (validToolAndSilkTouch && player.hasPermission("silkspawners.silkdrop." + mobName)) {
      // Calculate drop chance
      if (plugin.mobs.contains("creatures." + mobID + ".silkDropChance")) {
        dropChance = plugin.mobs.getInt("creatures." + mobID + ".silkDropChance", 100);
      } else {
        dropChance = plugin.config.getInt("silkDropChance", 100);
      }
      if (randomNumber < dropChance) {
        // Drop spawner
        world.dropItemNaturally(
            block.getLocation(),
            su.newSpawnerItem(
                entityID, su.getCustomSpawnerName(su.eid2MobID.get(entityID)), 1, false));
      }
      return;
    }

    // no silk touch
    if (player.hasPermission("silkspawners.destroydrop." + mobName)) {
      if (plugin.config.getBoolean("destroyDropEgg", false)) {
        // Calculate drop chance
        randomNumber = rnd.nextInt(100);
        if (plugin.mobs.contains("creatures." + mobID + ".eggDropChance")) {
          dropChance = plugin.mobs.getInt("creatures." + mobID + ".eggDropChance", 100);
        } else {
          dropChance = plugin.config.getInt("eggDropChance", 100);
        }
        if (randomNumber < dropChance) {
          // Drop egg
          world.dropItemNaturally(block.getLocation(), su.newEggItem(entityID));
        }
      }
      // Drop iron bars (or not)
      int dropBars = plugin.config.getInt("destroyDropBars", 0);
      if (dropBars != 0) {
        // Calculate drop chance
        randomNumber = rnd.nextInt(100);
        if (plugin.mobs.contains("creatures." + mobID + ".destroyDropChance")) {
          dropChance = plugin.mobs.getInt("creatures." + mobID + ".destroyDropChance", 100);
        } else {
          dropChance = plugin.config.getInt("destroyDropChance", 100);
        }
        if (randomNumber < dropChance) {
          world.dropItem(block.getLocation(), new ItemStack(Material.IRON_FENCE, dropBars));
        }
      }
    }
  }
  @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
  public void onBlockPlace(BlockPlaceEvent event) {
    if (event.isCancelled()) {
      return;
    }
    Block blockPlaced = event.getBlockPlaced();
    // Just mob spawner events
    if (blockPlaced.getType() != Material.MOB_SPAWNER) {
      return;
    }
    Player player = event.getPlayer();
    // If the player can't build here, return
    if (!su.canBuildHere(player, blockPlaced.getLocation())) {
      return;
    }
    // Get the item
    ItemStack item = event.getItemInHand();
    // Get data from item
    short entityID = su.getStoredSpawnerItemEntityID(item);
    boolean defaultID = false;
    // 0 or unknown then fallback
    if (entityID == 0 || !su.knownEids.contains(entityID)) {
      // Default
      defaultID = true;
      entityID = su.getDefaultEntityID();
    }

    // Names
    String creatureName = su.getCreatureName(entityID);
    String spawnerName = creatureName.toLowerCase().replace(" ", "");

    // Check for place permission
    if (!player.hasPermission("silkspawners.place." + spawnerName)) {
      event.setCancelled(true);
      player.sendMessage(
          ChatColor.translateAlternateColorCodes(
                  '\u0026',
                  plugin
                      .localization
                      .getString("noPermissionPlace")
                      .replace("%ID%", Short.toString(entityID)))
              .replace("%creature%", creatureName));
      return;
    }

    // Message default
    if (defaultID) {
      plugin.informPlayer(
          player,
          ChatColor.translateAlternateColorCodes(
              '\u0026', plugin.localization.getString("placingDefault")));
    } else {
      // Else message the type
      plugin.informPlayer(
          player,
          ChatColor.translateAlternateColorCodes(
                  '\u0026', plugin.localization.getString("spawnerPlaced"))
              .replace("%creature%", su.getCreatureName(entityID)));
    }

    su.setSpawnerEntityID(blockPlaced, entityID);
  }