@EventHandler(priority = EventPriority.NORMAL) public void onPlayerInteract(final PlayerInteractEvent event) { final IUser user = userMap.getUser(event.getPlayer()); user.updateActivity(true); switch (event.getAction()) { case RIGHT_CLICK_BLOCK: if (event.isCancelled()) { return; } final ISettings settings = ess.getSettings(); if (settings.getData().getCommands().getHome().isUpdateBedAtDaytime() && event.getClickedBlock().getType() == Material.BED_BLOCK) { event.getPlayer().setBedSpawnLocation(event.getClickedBlock().getLocation()); } break; case LEFT_CLICK_AIR: case LEFT_CLICK_BLOCK: if (user.getData().hasPowerTools() && user.getData().isPowerToolsEnabled()) { if (usePowertools(user)) { event.setCancelled(true); } } break; default: break; } }
@Override protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } final String whois = args[0].toLowerCase(Locale.ENGLISH); boolean foundUser = false; final Player player = sender instanceof IUser ? ((IUser)sender).getPlayer() : null; final IUserMap userMap = ess.getUserMap(); for (Player onlinePlayer : server.getOnlinePlayers()) { final IUser u = userMap.getUser(onlinePlayer); if (player != null && !player.canSee(onlinePlayer)) { continue; } final Player realPlayer = u.getPlayer(); final String displayName = FormatUtil.stripFormat(realPlayer.getDisplayName()).toLowerCase(Locale.ENGLISH); if (displayName.contains(whois)) { foundUser = true; sender.sendMessage(realPlayer.getDisplayName() + " " + _("is") + " " + u.getName()); } } if (!foundUser) { throw new NoSuchFieldException(_("Player not found.")); } }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPlayerMove(final PlayerMoveEvent event) { final IUser user = userMap.getUser(event.getPlayer()); final ISettings settings = ess.getSettings(); if (user.getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers()) { final Location from = event.getFrom(); final Location to = event.getTo().clone(); to.setX(from.getX()); to.setY(from.getY()); to.setZ(from.getZ()); try { event.setTo(LocationUtil.getSafeDestination(to)); } catch (Exception ex) { event.setTo(to); } return; } final Location afk = user.getAfkPosition(); if (afk == null || !event.getTo().getWorld().equals(afk.getWorld()) || afk.distanceSquared(event.getTo()) > 9) { user.updateActivity(true); } }
@Override public void run(final IUser user, final String commandLabel, final String[] args) throws Exception { if (args.length < 3) { throw new NotEnoughArgumentsException(); } final int x = Integer.parseInt(args[0]); final int y = Integer.parseInt(args[1]); final int z = Integer.parseInt(args[2]); final Location location = new Location(user.getPlayer().getWorld(), x, y, z); if (args.length > 3) { location.setYaw((Float.parseFloat(args[3]) + 180 + 360) % 360); } if (args.length > 4) { location.setPitch(Float.parseFloat(args[4])); } final Trade charge = new Trade(commandName, ess); charge.isAffordableFor(user); user.sendMessage(_("teleporting")); user.getTeleport().teleport(location, charge, TeleportCause.COMMAND); throw new NoChargeException(); }
private String getLocal(final IUser user, final long radius) { final Location loc = user.getPlayer().getLocation(); final World world = loc.getWorld(); final StringBuilder output = new StringBuilder(); final long radiusSquared = radius * radius; Player userPlayer = user.getPlayer(); for (Player onlinePlayer : server.getOnlinePlayers()) { if (!onlinePlayer.getName().equals(user.getName()) && userPlayer.canSee(onlinePlayer)) { final Location playerLoc = onlinePlayer.getLocation(); if (playerLoc.getWorld() != world) { continue; } final long delta = (long)playerLoc.distanceSquared(loc); if (delta < radiusSquared) { if (output.length() > 0) { output.append(", "); } output.append(onlinePlayer.getDisplayName()).append("§f(§4").append((long)Math.sqrt(delta)).append("m§f)"); } } } return output.length() > 1 ? output.toString() : _("none"); }
@Override public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 4) { throw new NotEnoughArgumentsException(); } IUser user = ess.getUserMap().getUser(server.getPlayer(args[0])); final int x = Integer.parseInt(args[1]); final int y = Integer.parseInt(args[2]); final int z = Integer.parseInt(args[3]); final Location location = new Location(user.getPlayer().getWorld(), x, y, z); if (args.length > 4) { location.setYaw((Float.parseFloat(args[4]) + 180 + 360) % 360); } if (args.length > 5) { location.setPitch(Float.parseFloat(args[5])); } sender.sendMessage(_("teleporting")); user.sendMessage(_("teleporting")); user.getTeleport().teleport(location, null, TeleportCause.COMMAND); }
public static String formatString(final IUser user, final String permBase, final String input) { if (input == null) { return null; } String message; if (Permissions.hasPermission(user.getPlayer(), permBase + ".color")) { message = Util.replaceColor(input, REPLACE_COLOR_PATTERN); } else { message = Util.stripColor(input, VANILLA_COLOR_PATTERN); } if (Permissions.hasPermission(user.getPlayer(), permBase + ".magic")) { message = Util.replaceColor(message, REPLACE_MAGIC_PATTERN); } else { message = Util.stripColor(message, VANILLA_MAGIC_PATTERN); } if (Permissions.hasPermission(user.getPlayer(), permBase + ".format")) { message = Util.replaceColor(message, REPLACE_FORMAT_PATTERN); } else { message = Util.stripColor(message, VANILLA_FORMAT_PATTERN); } return message; }
@EventHandler(priority = EventPriority.MONITOR) public void onPlayerChangedWorld(final PlayerChangedWorldEvent event) { final ISettings settings = ess.getSettings(); final IUser user = userMap.getUser(event.getPlayer()); if (settings.getData().getChat().getChangeDisplayname()) { user.updateDisplayName(); } if (!settings.getData().getWorldOptions(event.getPlayer().getLocation().getWorld().getName()).isGodmode() && !Permissions.NOGOD_OVERRIDE.isAuthorized( user)) { if (user.getData().isGodmode()) { user.sendMessage(_("§4Warning! God mode in this world disabled.")); } } if (settings.getData().getCommands().getTeleport().isCancelRequestsOnWorldChange()) { if (user.getTeleportRequester() != null) { user.requestTeleport(null, false); user.sendMessage(_("teleportRequestsCancelledWorldChange")); } } if (settings.getData().getGeneral().isPtClearOnWorldChange()) { user.getData().clearAllPowertools(); user.queueSave(); user.sendMessage(_("§6All powertool commands have been cleared.")); } }
@Override protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception { // Which Players(s) / Users(s) are we interested in? String userSelector = null; if (args.length == 2) { userSelector = args[1]; } Set<IUser> users = getUsers(sender, userSelector); // If no arguments we are reading the time if (args.length == 0) { getUsersTime(sender, users); return; } IUser user = sender instanceof Player ? ess.getUserMap().getUser((Player)sender) : null; if ((!users.contains(user) || users.size() > 1) && user != null && !Permissions.PTIME_OTHERS.isAuthorized(user)) { user.sendMessage(_("pTimeOthersPermission")); return; } Long ticks; // Parse the target time int ticks from args[0] String timeParam = args[0]; boolean relative = true; if (timeParam.startsWith("@")) { relative = false; timeParam = timeParam.substring(1); } if (getAliases.contains(timeParam)) { getUsersTime(sender, users); return; } else if (DescParseTickFormat.meansReset(timeParam)) { ticks = null; } else { try { ticks = DescParseTickFormat.parse(timeParam); } catch (NumberFormatException e) { throw new NotEnoughArgumentsException(e); } } setUsersTime(sender, users, ticks, relative); }
@Override public void run(final IUser user, final String commandLabel, final String[] args) throws Exception { ess.getPlugin().callSuicideEvent(user.getPlayer()); user.getPlayer().damage(Short.MAX_VALUE); user.sendMessage(_("suicideMessage")); user.setDisplayNick(); ess.broadcastMessage(user,_("suicideSuccess", user.getPlayer().getDisplayName())); }
@Override public void run(final IUser user, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } ItemStack is = null; if (args[0].equalsIgnoreCase("hand")) { is = user.getItemInHand(); } else if (args[0].equalsIgnoreCase("inventory") || args[0].equalsIgnoreCase("invent") || args[0].equalsIgnoreCase("all")) { for (ItemStack stack : user.getInventory().getContents()) { if (stack == null || stack.getType() == Material.AIR) { continue; } try { sellItem(user, stack, args, true); } catch (Exception e) { } } return; } else if (args[0].equalsIgnoreCase("blocks")) { for (ItemStack stack : user.getInventory().getContents()) { if (stack == null || stack.getTypeId() > 255 || stack.getType() == Material.AIR) { continue; } try { sellItem(user, stack, args, true); } catch (Exception e) { } } return; } if (is == null) { is = ess.getItemDb().get(args[0]); } sellItem(user, is, args, false); }
@Override public void run(final IUser user, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } ess.getJails().setJail(args[0], user.getPlayer().getLocation()); user.sendMessage(_("§6Jail§c {0} §6has been set.", Util.sanitizeString(args[0]))); }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPlayerEggThrow(final PlayerEggThrowEvent event) { final IUser user = userMap.getUser(event.getPlayer()); final ItemStack hand = new ItemStack(Material.EGG, 1); if (user.getData().hasUnlimited(hand.getType())) { user.getPlayer().getInventory().addItem(hand); user.getPlayer().updateInventory(); } }
@EventHandler(priority = EventPriority.NORMAL) public void onPlayerRespawn(final PlayerRespawnEvent event) { final Player player = event.getPlayer(); if (!player.isOnline()) { return; } final IUser user = userMap.getUser(player); user.updateCompass(); user.updateDisplayName(); }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPlayerTeleport(final PlayerTeleportEvent event) { final ISettings settings = ess.getSettings(); //There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports. if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && settings.getData().getCommands().getBack().isRegisterBackInListener()) { final IUser user = userMap.getUser(event.getPlayer()); user.setLastLocation(); } }
private void goHome(final IUser user, final IUser player, final String home, final Trade charge) throws Exception { final Location loc = player.getHome(home); if (loc == null) { throw new NotEnoughArgumentsException(); } if (user.getPlayer().getWorld() != loc.getWorld() && ess.getSettings().getData().getGeneral().isWorldHomePermissions() && !Permissions.WORLD.isAuthorized( user, loc.getWorld().getName())) { throw new Exception(_("noPerm", "essentials.world." + loc.getWorld().getName())); } user.getTeleport().home(loc, charge); }
@Override protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 2) { throw new NotEnoughArgumentsException(); } sender.sendMessage(_("teleporting")); final IUser target = getPlayer(args, 0); final IUser toPlayer = getPlayer(args, 1); target.getTeleport().now(toPlayer, false, TeleportCause.COMMAND); target.sendMessage(_("teleportAtoB", Console.NAME, toPlayer.getDisplayName())); }
@Override public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception { IUser user = null; if (sender instanceof Player) { user = ess.getUser(((Player)sender)); } if ((args.length < 1 || !Permissions.LIGHTNING_OTHERS.isAuthorized(user)) && user != null) { user.getWorld().strikeLightning(user.getTargetBlock(null, 600).getLocation()); return; } if (server.matchPlayer(args[0]).isEmpty()) { throw new Exception(_("playerNotFound")); } int power = 5; if (args.length > 1) { try { power = Integer.parseInt(args[1]); } catch (NumberFormatException ex) { } } for (Player matchPlayer : server.matchPlayer(args[0])) { sender.sendMessage(_("lightningUse", matchPlayer.getDisplayName())); final LightningStrike strike = matchPlayer.getWorld().strikeLightningEffect(matchPlayer.getLocation()); if (!ess.getUser(matchPlayer).isGodModeEnabled()) { matchPlayer.damage(power, strike); } @Cleanup final ISettings settings = ess.getSettings(); settings.acquireReadLock(); if (settings.getData().getCommands().getLightning().isWarnPlayer()) { matchPlayer.sendMessage(_("lightningSmited")); } } }
@Override protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } final IUser player = ess.getUserMap().matchUser(args[0], true); player.getData().setBan(null); player.setBanned(false); player.queueSave(); sender.sendMessage(_("unbannedPlayer")); }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerPickupItem(final PlayerPickupItemEvent event) { final ISettings settings = ess.getSettings(); if (!settings.getData().getCommands().getAfk().isDisableItemPickupWhileAfk()) { return; } final IUser user = userMap.getUser(event.getPlayer()); if (user.getData().isAfk()) { event.setCancelled(true); } }
/** * Used to set the time and inform of the change */ private void setUsersTime(final CommandSender sender, final Collection<IUser> users, final Long ticks, boolean relative) { // Update the time if (ticks == null) { // Reset for (IUser user : users) { user.getPlayer().resetPlayerTime(); } } else { // Set for (IUser user : users) { final World world = user.getPlayer().getWorld(); long time = user.getPlayer().getPlayerTime(); time -= time % 24000; time += 24000 + ticks; if (relative) { time -= world.getTime(); } user.getPlayer().setPlayerTime(time, relative); } } final StringBuilder msg = new StringBuilder(); for (IUser user : users) { if (msg.length() > 0) { msg.append(", "); } msg.append(user.getName()); } // Inform the sender of the change if (ticks == null) { sender.sendMessage(_("pTimeReset", msg.toString())); } else { String time = DescParseTickFormat.format(ticks); if (!relative) { sender.sendMessage(_("pTimeSetFixed", time, msg.toString())); } else { sender.sendMessage(_("pTimeSet", time, msg.toString())); } } }
/** * Used to get the time and inform */ private void getUsersTime(final CommandSender sender, final Collection<IUser> users) { if (users.size() > 1) { sender.sendMessage(_("pTimePlayers")); } for (IUser user : users) { if (user.getPlayer().getPlayerTimeOffset() == 0) { sender.sendMessage(_("pTimeNormal", user.getName())); } else { String time = DescParseTickFormat.format(user.getPlayer().getPlayerTime()); if (!user.getPlayer().isPlayerTimeRelative()) { sender.sendMessage(_("pTimeCurrentFixed", user.getName(), time)); } else { sender.sendMessage(_("pTimeCurrent", user.getName(), time)); } } } }
@EventHandler(priority = EventPriority.MONITOR) public void onInventoryCloseEvent(final InventoryCloseEvent event) { if (event.getView().getTopInventory().getType() == InventoryType.PLAYER) { final IUser user = userMap.getUser((Player)event.getPlayer()); user.setInvSee(false); } else if (event.getView().getTopInventory().getType() == InventoryType.WORKBENCH) { final IUser user = userMap.getUser((Player)event.getPlayer()); if (user.isRecipeSee()) { user.setRecipeSee(false); event.getView().getTopInventory().clear(); } } }
private void repairItems(final ItemStack[] items, final IUser user, final List<String> repaired) { for (ItemStack item : items) { if (item == null) { continue; } final String itemName = item.getType().toString().toLowerCase(Locale.ENGLISH); final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), "repair-item", ess); try { charge.isAffordableFor(user); } catch (ChargeException ex) { user.sendMessage(ex.getMessage()); continue; } if (!item.getEnchantments().isEmpty() && !Permissions.REPAIR_ENCHANTED.isAuthorized(user)) { continue; } try { repairItem(item); } catch (Exception e) { continue; } try { charge.charge(user); } catch (ChargeException ex) { user.sendMessage(ex.getMessage()); } repaired.add(itemName.replace('_', ' ')); } }
@Override public void payUser(final IUser reciever, final double value) throws Exception { if (value == 0) { return; } if (canAfford(value)) { setMoney(getMoney() - value); reciever.setMoney(reciever.getMoney() + value); sendMessage(_("{0} has been sent to {1}", FormatUtil.displayCurrency(value, ess), reciever.getPlayer().getDisplayName())); reciever.sendMessage(_("{0} has been received from {1}", FormatUtil.displayCurrency(value, ess), getPlayer().getDisplayName())); } else { throw new Exception(_("You do not have sufficient funds.")); } }
@Override protected void run(final IUser user, final String commandLabel, final String[] args) throws Exception { long radius = ess.getSettings().getData().getCommands().getNear().getDefaultRadius(); IUser otherUser = null; if (args.length > 0) { try { otherUser = ess.getUserMap().matchUserExcludingHidden(args[0], user.getPlayer()); } catch (Exception ex) { try { radius = Long.parseLong(args[0]); } catch (NumberFormatException e) { } } if (args.length > 1 && otherUser != null) { try { radius = Long.parseLong(args[1]); } catch (NumberFormatException e) { } } } if (otherUser == null || Permissions.NEAR_OTHERS.isAuthorized(user)) { user.sendMessage(_("Players nearby: {0}", getLocal(otherUser == null ? user : otherUser, radius))); } else { user.sendMessage(_("You do not have access to that command.")); } }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) { final IUser user = userMap.getUser(event.getPlayer()); if (user.getData().hasUnlimited(event.getBucket())) { event.getItemStack().setType(event.getBucket()); ess.getPlugin().scheduleSyncDelayedTask( new Runnable() { @Override public void run() { user.getPlayer().updateInventory(); } }); } }
private boolean usePowertools(final IUser user) { final ItemStack is = user.getPlayer().getItemInHand(); if (is == null || is.getTypeId() == 0) { return false; } final List<String> commandList = user.getData().getPowertool(is.getType()); if (commandList == null || commandList.isEmpty()) { return false; } boolean used = false; // We need to loop through each command and execute for (final String command : commandList) { if (command.matches(".*\\{player\\}.*")) { //user.sendMessage("Click a player to use this command"); } else if (command.startsWith("c:")) { used = true; user.getPlayer().chat(command.substring(2)); } else { used = true; ess.getPlugin().scheduleSyncDelayedTask( new Runnable() { @Override public void run() { user.getServer().dispatchCommand(user.getPlayer(), command); } }); } } return used; }
@Override public void run(final IUser user, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } user.setDisplayNick(); final String message = _("helpOp", user.getDisplayName(), Util.stripFormat(getFinalArg(args, 0))); logger.log(Level.INFO, message); for (Player onlinePlayer : server.getOnlinePlayers()) { final IUser player = ess.getUser(onlinePlayer); if (!Permissions.HELPOP_RECEIVE.isAuthorized(player)) { continue; } player.sendMessage(message); } }
@Override public String getMessage() { if (!matches.isEmpty()) { StringBuilder builder = new StringBuilder(matches.size() * 16); for (IUser iUser : matches) { if (builder.length() > 0) { builder.append(", "); } builder.append(iUser.getPlayer().getDisplayName()); } return _("tooManyMatchesWithList", builder.toString()); } else { return _("tooManyMatches"); } }