@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.useInteractedBlock() == Result.DENY) return; // For using a hoe for farming if (event.getItem() != null && event.getItem().getType() != null && (event.getMaterial() == Material.DIRT || event.getMaterial() == Material.GRASS) && ((event.getItem().getType() == Material.WOOD_HOE) || (event.getItem().getType() == Material.IRON_HOE) || (event.getItem().getType() == Material.GOLD_HOE) || (event.getItem().getType() == Material.DIAMOND_HOE))) { BlockUpdate.update(event.getClickedBlock()); } }
@Override public void shoot(PlayerInteractEvent event) { if (event.getMaterial() == null) return; final List<String> itemLore = event.getItem().getItemMeta().getLore(); if (WeaponWatch.durability.get(itemLore) == null) WeaponWatch.durability.put(itemLore, 4); if (WeaponWatch.durability.get(itemLore) == 0) return; if (WeaponWatch.cooldown.contains(itemLore)) return; if (shotsLeft.get(itemLore) != null && shotsLeft.get(itemLore) == 0) { WeaponWatch.cooldown.add(itemLore); shotsLeft.remove(itemLore); new BukkitRunnable() { @Override public void run() { WeaponWatch.durability.put(itemLore, WeaponWatch.durability.get(itemLore) - 1); WeaponWatch.cooldown.remove(itemLore); } }.runTaskLater(DuckMain.getPlugin(), 80); } int shotsPerRound = 6; // @Balancing: Specify shots per round here if (shotsLeft.get(itemLore) == null) shotsLeft.put(itemLore, shotsPerRound); else shotsLeft.put(itemLore, shotsLeft.get(itemLore) - 1); DuckMain.getWorld().playSound(event.getPlayer().getLocation(), Sound.ENTITY_BLAZE_HURT, 10, 1); Arrow a = event .getPlayer() .launchProjectile(Arrow.class, event.getPlayer().getLocation().getDirection()); a.setShooter(event.getPlayer()); a.setVelocity(a.getVelocity().multiply(6)); a.setCustomName("MachineGun"); }
@Override public void onPlayerInteract(PlayerInteractEvent event) { if (event.isCancelled()) { return; } Block block = event.getClickedBlock(); Player player = event.getPlayer(); if (block == null) { return; // clicked in air, apparently } if (!canPlayerUseBlock(player, block)) { event.setCancelled(true); return; } if (event.getAction() != Action.RIGHT_CLICK_BLOCK) { return; // only interested on right-clicks for below } if (!this.playerCanUseItemHere(player, block, event.getMaterial())) { event.setCancelled(true); return; } }
@EventHandler(priority = EventPriority.HIGHEST) public void onPlayerInteract(PlayerInteractEvent event) { if (isWorld(event.getPlayer().getWorld())) { Player p = event.getPlayer(); Block block = event.getClickedBlock(); if (event.getAction() == Action.RIGHT_CLICK_BLOCK && (event.getMaterial() == Material.LOG || event.getMaterial() == Material.LOG_2) && getConfig("config").getBoolean("Config.players.campfires.enable")) { if (!block.getType().isTransparent() && block.getType().isSolid() && block.getType() != Material.CHEST && block.getRelative(BlockFace.UP).getType() == Material.AIR && event.getBlockFace() == BlockFace.UP) { reduceInHand(p); Location loc = block.getLocation(), standLoc = loc.clone().add(.5, -0.3, .5); int campfireTicks = getConfig("config").getInt("Config.players.campfires.tick-duration"), lightAfter = fireplaceRotations.length * 4; for (int i = 0; i < fireplaceRotations.length; i++) { int delay = i * 4; constructFireplaceStand( standLoc, fireplaceRotations[i], delay, lightAfter - delay, campfireTicks); } constructFireplaceTorch(loc.add(0, 1, 0), lightAfter, campfireTicks); p.sendMessage(getMsg("Messages.placed-fireplace")); event.setCancelled(true); } else { p.sendMessage(getMsg("Messages.cannot-place-fireplace")); } } } }
@SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.NORMAL) public void onPlayerInteract(PlayerInteractEvent event) { Action action = event.getAction(); if (!(action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK)) return; Player player = event.getPlayer(); VPlayer vplayer = VPlayers.i.get(player); Material itemMaterial = event.getMaterial(); if (vplayer.isVampire()) { if (Conf.foodMaterials.contains(itemMaterial) && !Conf.vampireCanEat(itemMaterial)) { vplayer.msg(Lang.vampiresCantEatThat, Txt.getMaterialName(itemMaterial)); event.setCancelled(true); } if (action == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.CAKE_BLOCK && Conf.vampireCanEat(Material.CAKE_BLOCK)) { vplayer.msg(Lang.vampiresCantEatThat, Txt.getMaterialName(Material.CAKE)); event.setCancelled(true); } if (Conf.jumpMaterials.contains(event.getMaterial())) { vplayer.jump(Conf.jumpDeltaSpeed, false); } } if (vplayer.isInfected() && itemMaterial == Material.BREAD) { vplayer.infectionHeal(Conf.infectionBreadHealAmount); player.getInventory().removeItem(new ItemStack(Material.BREAD, 1)); player.updateInventory(); event.setCancelled(true); } if (action != Action.RIGHT_CLICK_BLOCK) return; Conf.altarEvil.evalBlockUse(event.getClickedBlock(), player); Conf.altarGood.evalBlockUse(event.getClickedBlock(), player); }
@Override public boolean playerInteract(PlayerInteractEvent event) { Action action = event.getAction(); Player player = event.getPlayer(); SuperNPlayer snplayer = SuperNManager.get(player); Material itemMaterial = event.getMaterial(); if (action.equals(Action.LEFT_CLICK_AIR) || action.equals(Action.LEFT_CLICK_BLOCK)) { if (itemMaterial.equals(Material.BOWL)) { remoteDonations(player); return true; } } return false; }
@EventHandler(priority = EventPriority.HIGH) public void onPlayerInteract(PlayerInteractEvent event) { final Player player = event.getPlayer(); final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); switch (event.getAction()) { case RIGHT_CLICK_AIR: case RIGHT_CLICK_BLOCK: { switch (event.getMaterial()) { case WATER_BUCKET: { if (TFM_AdminList.isSuperAdmin(player) || TFM_ConfigEntry.ALLOW_WATER_PLACE.getBoolean()) { break; } player .getInventory() .setItem( player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Water buckets are currently disabled."); event.setCancelled(true); break; } case LAVA_BUCKET: { if (TFM_AdminList.isSuperAdmin(player) || TFM_ConfigEntry.ALLOW_LAVA_PLACE.getBoolean()) { break; } player .getInventory() .setItem( player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Lava buckets are currently disabled."); event.setCancelled(true); break; } case EXPLOSIVE_MINECART: { if (TFM_ConfigEntry.ALLOW_TNT_MINECARTS.getBoolean()) { break; } player.getInventory().clear(player.getInventory().getHeldItemSlot()); player.sendMessage(ChatColor.GRAY + "TNT minecarts are currently disabled."); event.setCancelled(true); break; } } break; } case LEFT_CLICK_AIR: case LEFT_CLICK_BLOCK: { switch (event.getMaterial()) { case STICK: { if (!TFM_AdminList.isSuperAdmin(player)) { break; } event.setCancelled(true); final Location location = TFM_DepreciationAggregator.getTargetBlock(player, null, 5).getLocation(); final List<RollbackEntry> entries = TFM_RollbackManager.getEntriesAtLocation(location); if (entries.isEmpty()) { TFM_Util.playerMsg(player, "No block edits at that location."); break; } TFM_Util.playerMsg( player, "Block edits at (" + ChatColor.WHITE + "x" + location.getBlockX() + ", y" + location.getBlockY() + ", z" + location.getBlockZ() + ChatColor.BLUE + ")" + ChatColor.WHITE + ":", ChatColor.BLUE); for (RollbackEntry entry : entries) { TFM_Util.playerMsg( player, " - " + ChatColor.BLUE + entry.author + " " + entry.getType() + " " + StringUtils.capitalize(entry.getMaterial().toString().toLowerCase()) + (entry.data == 0 ? "" : ":" + entry.data)); } break; } case BONE: { if (!playerdata.mobThrowerEnabled()) { break; } Location player_pos = player.getLocation(); Vector direction = player_pos.getDirection().normalize(); LivingEntity rezzed_mob = (LivingEntity) player .getWorld() .spawnEntity( player_pos.add(direction.multiply(2.0)), playerdata.mobThrowerCreature()); rezzed_mob.setVelocity(direction.multiply(playerdata.mobThrowerSpeed())); playerdata.enqueueMob(rezzed_mob); event.setCancelled(true); break; } case SULPHUR: { if (!playerdata.isMP44Armed()) { break; } event.setCancelled(true); if (playerdata.toggleMP44Firing()) { playerdata.startArrowShooter(TotalFreedomMod.plugin); } else { playerdata.stopArrowShooter(); } break; } case BLAZE_ROD: { if (!TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) { break; } if (!TFM_AdminList.isSeniorAdmin(player, true)) { break; } event.setCancelled(true); Block targetBlock; if (event.getAction().equals(Action.LEFT_CLICK_AIR)) { targetBlock = TFM_DepreciationAggregator.getTargetBlock(player, null, 120); } else { targetBlock = event.getClickedBlock(); } if (targetBlock == null) { player.sendMessage("Can't resolve target block."); break; } player.getWorld().createExplosion(targetBlock.getLocation(), 4F, true); player.getWorld().strikeLightning(targetBlock.getLocation()); break; } case CARROT: { if (!TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) { break; } if (!TFM_AdminList.isSeniorAdmin(player, true)) { break; } Location location = player.getLocation().clone(); Vector playerPostion = location.toVector().add(new Vector(0.0, 1.65, 0.0)); Vector playerDirection = location.getDirection().normalize(); double distance = 150.0; Block targetBlock = TFM_DepreciationAggregator.getTargetBlock( player, null, Math.round((float) distance)); if (targetBlock != null) { distance = location.distance(targetBlock.getLocation()); } final List<Block> affected = new ArrayList<Block>(); Block lastBlock = null; for (double offset = 0.0; offset <= distance; offset += (distance / 25.0)) { Block block = playerPostion .clone() .add(playerDirection.clone().multiply(offset)) .toLocation(player.getWorld()) .getBlock(); if (!block.equals(lastBlock)) { if (block.isEmpty()) { affected.add(block); block.setType(Material.TNT); } else { break; } } lastBlock = block; } new BukkitRunnable() { @Override public void run() { for (Block tntBlock : affected) { TNTPrimed tnt = tntBlock.getWorld().spawn(tntBlock.getLocation(), TNTPrimed.class); tnt.setFuseTicks(5); tntBlock.setType(Material.AIR); } } }.runTaskLater(TotalFreedomMod.plugin, 30L); event.setCancelled(true); break; } case RAW_FISH: { final int RADIUS_HIT = 5; final int STRENGTH = 4; // Clownfish if (TFM_DepreciationAggregator.getData_MaterialData(event.getItem().getData()) == 2) { if (TFM_AdminList.isSeniorAdmin(player, true) || TFM_AdminList.isTelnetAdmin(player, true)) { boolean didHit = false; final Location playerLoc = player.getLocation(); final Vector playerLocVec = playerLoc.toVector(); final List<Player> players = player.getWorld().getPlayers(); for (final Player target : players) { if (target == player) { continue; } final Location targetPos = target.getLocation(); final Vector targetPosVec = targetPos.toVector(); try { if (targetPosVec.distanceSquared(playerLocVec) < (RADIUS_HIT * RADIUS_HIT)) { TFM_Util.setFlying(player, false); target.setVelocity( targetPosVec.subtract(playerLocVec).normalize().multiply(STRENGTH)); didHit = true; } } catch (IllegalArgumentException ex) { } } if (didHit) { final Sound[] sounds = Sound.values(); for (Sound sound : sounds) { if (sound.toString().contains("HIT")) { playerLoc .getWorld() .playSound( randomOffset(playerLoc, 5.0), sound, 100.0f, randomDoubleRange(0.5, 2.0).floatValue()); } } } } else { final StringBuilder msg = new StringBuilder(); final char[] chars = (player.getName() + " is a clown.").toCharArray(); for (char c : chars) { msg.append(TFM_Util.randomChatColor()).append(c); } TFM_Util.bcastMsg(msg.toString()); player.getInventory().getItemInHand().setType(Material.POTATO_ITEM); } event.setCancelled(true); break; } } } break; } } }
@EventHandler public void onPlayerInteract(PlayerInteractEvent pie) { Player player = pie.getPlayer(); Game g = Main.getInstance().getGameManager().getGameOfPlayer(player); if (g == null) { if (pie.getAction() != Action.RIGHT_CLICK_BLOCK && pie.getAction() != Action.RIGHT_CLICK_AIR) { return; } Block clicked = pie.getClickedBlock(); if (clicked == null) { return; } if (!(clicked.getState() instanceof Sign)) { return; } Game game = Main.getInstance().getGameManager().getGameBySignLocation(clicked.getLocation()); if (game == null) { return; } if (game.playerJoins(player)) { player.sendMessage(ChatWriter.pluginMessage(ChatColor.GREEN + Main._l("success.joined"))); } return; } if (g.getState() == GameState.STOPPED) { return; } Material interactingMaterial = pie.getMaterial(); Block clickedBlock = pie.getClickedBlock(); if (g.getState() == GameState.RUNNING) { if (pie.getAction() == Action.PHYSICAL) { if (clickedBlock != null && (clickedBlock.getType() == Material.WHEAT || clickedBlock.getType() == Material.SOIL)) { pie.setCancelled(true); return; } } if (pie.getAction() != Action.RIGHT_CLICK_BLOCK && pie.getAction() != Action.RIGHT_CLICK_AIR) { return; } if (clickedBlock != null) { if (clickedBlock.getType() == Material.LEVER && !g.isSpectator(player) && pie.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!g.getRegion().isPlacedUnbreakableBlock(clickedBlock)) { g.getRegion().addPlacedUnbreakableBlock(clickedBlock, clickedBlock.getState()); } return; } } if (g.isSpectator(player)) { if (interactingMaterial == Material.SLIME_BALL) { g.playerLeave(player, false); return; } if (interactingMaterial == Material.COMPASS) { g.openSpectatorCompass(player); pie.setCancelled(true); return; } } // Spectators want to block if (clickedBlock != null) { try { GameMode.valueOf("SPECTATOR"); } catch (Exception ex) { for (Player p : g.getFreePlayers()) { if (!g.getRegion().isInRegion(p.getLocation())) { continue; } if (pie.getClickedBlock().getLocation().distance(p.getLocation()) < 2) { Location oldLocation = p.getLocation(); if (oldLocation.getY() >= pie.getClickedBlock().getLocation().getY()) { oldLocation.setY(oldLocation.getY() + 2); } else { oldLocation.setY(oldLocation.getY() - 2); } p.teleport(oldLocation); } } } } if (clickedBlock != null) { if (clickedBlock.getType() == Material.ENDER_CHEST && !g.isSpectator(player)) { pie.setCancelled(true); Block chest = pie.getClickedBlock(); Team chestTeam = g.getTeamOfEnderChest(chest); Team playerTeam = g.getPlayerTeam(player); if (chestTeam == null) { return; } if (chestTeam.equals(playerTeam)) { player.openInventory(chestTeam.getInventory()); } else { player.sendMessage( ChatWriter.pluginMessage(ChatColor.RED + Main._l("ingame.noturteamchest"))); } return; } } return; } else if (g.getState() == GameState.WAITING) { if (interactingMaterial == null) { pie.setCancelled(true); return; } if (pie.getAction() == Action.PHYSICAL) { if (clickedBlock != null && (clickedBlock.getType() == Material.WHEAT || clickedBlock.getType() == Material.SOIL)) { pie.setCancelled(true); return; } } if (pie.getAction() != Action.RIGHT_CLICK_BLOCK && pie.getAction() != Action.RIGHT_CLICK_AIR) { return; } switch (interactingMaterial) { case BED: pie.setCancelled(true); if (!g.isAutobalanceEnabled()) { g.getPlayerStorage(player).openTeamSelection(g); } break; case DIAMOND: pie.setCancelled(true); if (player.isOp() || player.hasPermission("bw.setup")) { g.start(player); } else if (player.hasPermission("bw.vip.forcestart")) { GameLobbyCountdownRule rule = Main.getInstance().getLobbyCountdownRule(); if (rule.isRuleMet(g)) { g.start(player); } else { if (rule == GameLobbyCountdownRule.PLAYERS_IN_GAME || rule == GameLobbyCountdownRule.ENOUGH_TEAMS_AND_PLAYERS) { player.sendMessage( ChatWriter.pluginMessage( ChatColor.RED + Main._l("lobby.notenoughplayers-rule0"))); } else { player.sendMessage( ChatWriter.pluginMessage( ChatColor.RED + Main._l("lobby.notenoughplayers-rule1"))); } } } break; case SLIME_BALL: pie.setCancelled(true); g.playerLeave(player, false); break; case LEATHER_CHESTPLATE: pie.setCancelled(true); player.updateInventory(); break; default: break; } } }
@EventHandler(priority = EventPriority.HIGH) public void onPlayerInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); switch (event.getAction()) { case RIGHT_CLICK_AIR: case RIGHT_CLICK_BLOCK: { switch (event.getMaterial()) { case WATER_BUCKET: { if (!TotalFreedomMod.allowWaterPlace) { player .getInventory() .setItem( player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Water buckets are currently disabled."); event.setCancelled(true); } break; } case LAVA_BUCKET: { if (!TotalFreedomMod.allowLavaPlace) { player .getInventory() .setItem( player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Lava buckets are currently disabled."); event.setCancelled(true); } break; } case EXPLOSIVE_MINECART: { if (!TotalFreedomMod.allowTntMinecarts) { player.getInventory().clear(player.getInventory().getHeldItemSlot()); player.sendMessage(ChatColor.GRAY + "TNT minecarts are currently disabled."); event.setCancelled(true); } break; } } break; } case LEFT_CLICK_AIR: case LEFT_CLICK_BLOCK: { switch (event.getMaterial()) { case STICK: { TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); if (playerdata.mobThrowerEnabled()) { Location player_pos = player.getLocation(); Vector direction = player_pos.getDirection().normalize(); LivingEntity rezzed_mob = (LivingEntity) player .getWorld() .spawnEntity( player_pos.add(direction.multiply(2.0)), playerdata.mobThrowerCreature()); rezzed_mob.setVelocity(direction.multiply(playerdata.mobThrowerSpeed())); playerdata.enqueueMob(rezzed_mob); event.setCancelled(true); } break; } case SULPHUR: { TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); if (playerdata.isMP44Armed()) { if (playerdata.toggleMP44Firing()) { playerdata.startArrowShooter(TotalFreedomMod.plugin); } else { playerdata.stopArrowShooter(); } event.setCancelled(true); } break; } case BLAZE_ROD: { if (TotalFreedomMod.allowExplosions) { if (TFM_SuperadminList.isSeniorAdmin(player, true)) { Block target_block; if (event.getAction().equals(Action.LEFT_CLICK_AIR)) { target_block = player.getTargetBlock(null, 120); } else { target_block = event.getClickedBlock(); } if (target_block != null) { player.getWorld().createExplosion(target_block.getLocation(), 4F, true); player.getWorld().strikeLightning(target_block.getLocation()); } else { player.sendMessage("Can't resolve target block."); } event.setCancelled(true); } } break; } case CARROT: { if (TotalFreedomMod.allowExplosions) { if (TFM_SuperadminList.isSeniorAdmin(player, true)) { Location player_location = player.getLocation().clone(); Vector player_pos = player_location.toVector().add(new Vector(0.0, 1.65, 0.0)); Vector player_dir = player_location.getDirection().normalize(); double distance = 150.0; Block target_block = player.getTargetBlock(null, Math.round((float) distance)); if (target_block != null) { distance = player_location.distance(target_block.getLocation()); } final List<Block> affected = new ArrayList<Block>(); Block last_block = null; for (double offset = 0.0; offset <= distance; offset += (distance / 25.0)) { Block test_block = player_pos .clone() .add(player_dir.clone().multiply(offset)) .toLocation(player.getWorld()) .getBlock(); if (!test_block.equals(last_block)) { if (test_block.isEmpty()) { affected.add(test_block); test_block.setType(Material.TNT); } else { break; } } last_block = test_block; } new BukkitRunnable() { @Override public void run() { for (Block tnt_block : affected) { TNTPrimed tnt_primed = tnt_block.getWorld().spawn(tnt_block.getLocation(), TNTPrimed.class); tnt_primed.setFuseTicks(5); tnt_block.setType(Material.AIR); } } }.runTaskLater(TotalFreedomMod.plugin, 30L); event.setCancelled(true); } } break; } } break; } } }
@EventHandler(priority = EventPriority.HIGH) public void onPlayerInteract(PlayerInteractEvent event) { final Player player = event.getPlayer(); final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); switch (event.getAction()) { case RIGHT_CLICK_AIR: case RIGHT_CLICK_BLOCK: { switch (event.getMaterial()) { case WATER_BUCKET: { if (TFM_ConfigEntry.ALLOW_WATER_PLACE.getBoolean()) { break; } player .getInventory() .setItem( player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Water buckets are currently disabled."); event.setCancelled(true); break; } case LAVA_BUCKET: { if (TFM_ConfigEntry.ALLOW_LAVA_PLACE.getBoolean()) { break; } player .getInventory() .setItem( player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Lava buckets are currently disabled."); event.setCancelled(true); break; } case EXPLOSIVE_MINECART: { if (TFM_ConfigEntry.ALLOW_TNT_MINECARTS.getBoolean()) { break; } player.getInventory().clear(player.getInventory().getHeldItemSlot()); player.sendMessage(ChatColor.GRAY + "TNT minecarts are currently disabled."); event.setCancelled(true); break; } } break; } case LEFT_CLICK_AIR: case LEFT_CLICK_BLOCK: { switch (event.getMaterial()) { case STICK: { if (!TFM_AdminList.isSuperAdmin(player)) { break; } event.setCancelled(true); final Location location = player.getTargetBlock(null, 5).getLocation(); final List<RollbackEntry> entries = TFM_RollbackManager.getEntriesAtLocation(location); if (entries.isEmpty()) { TFM_Util.playerMsg(player, "No block edits at that location."); break; } TFM_Util.playerMsg( player, "Block edits at (" + ChatColor.WHITE + "x" + location.getBlockX() + ", y" + location.getBlockY() + ", z" + location.getBlockZ() + ChatColor.BLUE + ")" + ChatColor.WHITE + ":", ChatColor.BLUE); for (RollbackEntry entry : entries) { TFM_Util.playerMsg( player, " - " + ChatColor.BLUE + entry.author + " " + entry.getType() + " " + StringUtils.capitalize(entry.getMaterial().toString().toLowerCase()) + (entry.data == 0 ? "" : ":" + entry.data)); } break; } case BONE: { if (!playerdata.mobThrowerEnabled()) { break; } Location player_pos = player.getLocation(); Vector direction = player_pos.getDirection().normalize(); LivingEntity rezzed_mob = (LivingEntity) player .getWorld() .spawnEntity( player_pos.add(direction.multiply(2.0)), playerdata.mobThrowerCreature()); rezzed_mob.setVelocity(direction.multiply(playerdata.mobThrowerSpeed())); playerdata.enqueueMob(rezzed_mob); event.setCancelled(true); break; } case SULPHUR: { if (!playerdata.isMP44Armed()) { break; } event.setCancelled(true); if (playerdata.toggleMP44Firing()) { playerdata.startArrowShooter(TotalFreedomMod.plugin); } else { playerdata.stopArrowShooter(); } break; } case BLAZE_ROD: { if (!TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) { break; } if (!TFM_AdminList.isSeniorAdmin(player, true)) { break; } event.setCancelled(true); Block targetBlock; if (event.getAction().equals(Action.LEFT_CLICK_AIR)) { targetBlock = player.getTargetBlock(null, 120); } else { targetBlock = event.getClickedBlock(); } if (targetBlock == null) { player.sendMessage("Can't resolve target block."); break; } player.getWorld().createExplosion(targetBlock.getLocation(), 4F, true); player.getWorld().strikeLightning(targetBlock.getLocation()); break; } case CARROT: { if (!TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) { break; } if (!TFM_AdminList.isSeniorAdmin(player, true)) { break; } Location location = player.getLocation().clone(); Vector playerPostion = location.toVector().add(new Vector(0.0, 1.65, 0.0)); Vector playerDirection = location.getDirection().normalize(); double distance = 150.0; Block targetBlock = player.getTargetBlock(null, Math.round((float) distance)); if (targetBlock != null) { distance = location.distance(targetBlock.getLocation()); } final List<Block> affected = new ArrayList<Block>(); Block lastBlock = null; for (double offset = 0.0; offset <= distance; offset += (distance / 25.0)) { Block block = playerPostion .clone() .add(playerDirection.clone().multiply(offset)) .toLocation(player.getWorld()) .getBlock(); if (!block.equals(lastBlock)) { if (block.isEmpty()) { affected.add(block); block.setType(Material.TNT); } else { break; } } lastBlock = block; } new BukkitRunnable() { @Override public void run() { for (Block tntBlock : affected) { TNTPrimed tnt = tntBlock.getWorld().spawn(tntBlock.getLocation(), TNTPrimed.class); tnt.setFuseTicks(5); tntBlock.setType(Material.AIR); } } }.runTaskLater(TotalFreedomMod.plugin, 30L); event.setCancelled(true); break; } } break; } } }