@Override public void onPlayerJoin(final PlayerJoinEvent event) { ess.getBackup().onPlayerJoin(); final User user = ess.getUser(event.getPlayer()); if (ess.getSettings().changeDisplayName()) { user.setDisplayName(user.getNick()); } user.updateActivity(false); if (user.isAuthorized("essentials.sleepingignored")) { user.setSleepingIgnored(true); } if (!ess.getSettings().isCommandDisabled("motd") && user.isAuthorized("essentials.motd")) { for (String m : ess.getMotd(user, null)) { if (m == null) { continue; } user.sendMessage(m); } } if (!ess.getSettings().isCommandDisabled("mail") && user.isAuthorized("essentials.mail")) { final List<String> mail = user.getMails(); if (mail.isEmpty()) { user.sendMessage(Util.i18n("noNewMail")); } else { user.sendMessage(Util.format("youHaveNewMail", mail.size())); } } }
@EventHandler(priority = EventPriority.LOWEST) public void onPlayerDeathEvent(final PlayerDeathEvent event) { final User user = ess.getUser(event.getEntity()); if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back")) { user.setLastLocation(); user.sendMessage(_("backAfterDeath")); } if (!ess.getSettings().areDeathMessagesEnabled()) { event.setDeathMessage(""); } }
public void onPlayerRespawn(final PlayerRespawnEvent event) { final User user = ess.getUser(event.getPlayer()); if (user.isJailed() && user.getJail() != null && !user.getJail().isEmpty()) { return; } if (ess.getSettings().getRespawnAtHome()) { Location home; final Location bed = user.getBedSpawnLocation(); if (bed != null && bed.getBlock().getType() == Material.BED_BLOCK) { home = bed; } else { home = user.getHome(user.getLocation()); } if (home != null) { event.setRespawnLocation(home); return; } } final Location spawn = spawns.getSpawn(user.getGroup()); if (spawn != null) { event.setRespawnLocation(spawn); } }
public void executed(final String label, final String otherLabel) { if (ess.getSettings().isDebug()) { LOGGER.log(Level.INFO, "Essentials: Alternative command " + label + " found, using " + otherLabel); } disabledList.put(label, otherLabel); }
@Override public void showCommandError(final CommandSender sender, final String commandLabel, final Throwable exception) { sender.sendMessage(_("errorWithMessage", exception.getMessage())); if (ess.getSettings().isDebug()) { LOGGER.log(Level.WARNING, _("errorCallingCommand", commandLabel), exception); } }
@Override public void onPlayerRespawn(final PlayerRespawnEvent event) { final User user = ess.getUser(event.getPlayer()); user.setDisplayName(user.getNick()); updateCompass(user); if (ess.getSettings().changeDisplayName()) { user.setDisplayName(user.getNick()); } }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityRegainHealth(final EntityRegainHealthEvent event) { if (event.getRegainReason() == RegainReason.SATIATED && event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isAfk() && ess.getSettings().getFreezeAfkPlayers()) { event.setCancelled(true); } }
@Override public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.isCancelled()) { return; } final User user = ess.getUser(event.getPlayer()); if (ess.getSettings().changeDisplayName()) { user.setDisplayName(user.getNick()); } updateCompass(user); }
private BigDecimal _getMoney() { BigDecimal result = ess.getSettings().getStartingBalance(); BigDecimal maxMoney = ess.getSettings().getMaxMoney(); BigDecimal minMoney = ess.getSettings().getMinMoney(); if (config.hasProperty("money")) { result = config.getBigDecimal("money", result); } if (result.compareTo(maxMoney) > 0) { result = maxMoney; } if (result.compareTo(minMoney) < 0) { result = minMoney; } return result; }
public void onPlayerJoin(final PlayerJoinEvent event) { if (event.getPlayer().hasPlayedBefore()) { LOGGER.log(Level.FINE, "Old player join"); return; } final User user = ess.getUser(event.getPlayer()); if (!"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn())) { ess.scheduleSyncDelayedTask(new NewPlayerTeleport(user), 1L); } if (ess.getSettings().getAnnounceNewPlayers()) { final IText output = new KeywordReplacer(ess.getSettings().getAnnounceNewPlayerFormat(), user, ess); final SimpleTextPager pager = new SimpleTextPager(output); ess.broadcastMessage(user, pager.getString(0)); } final String kitName = ess.getSettings().getNewPlayerKit(); if (!kitName.isEmpty()) { try { final Map<String, Object> kit = ess.getSettings().getKit(kitName.toLowerCase(Locale.ENGLISH)); final List<String> items = Kit.getItems(user, kit); Kit.expandItems(ess, user, items); } catch (Exception ex) { LOGGER.log(Level.WARNING, ex.getMessage()); } } LOGGER.log(Level.FINE, "New player join"); }
@Override public void onPlayerQuit(final PlayerQuitEvent event) { final User user = ess.getUser(event.getPlayer()); if (ess.getSettings().removeGodOnDisconnect() && user.isGodModeEnabled()) { user.toggleGodModeEnabled(); } if (user.getSavedInventory() != null) { user.getInventory().setContents(user.getSavedInventory()); user.setSavedInventory(null); } user.updateActivity(false); user.dispose(); if (!ess.getSettings().getReclaimSetting()) { return; } final Thread thread = new Thread( new Runnable() { public void run() { try { Thread.sleep(1000); Runtime rt = Runtime.getRuntime(); double mem = rt.freeMemory(); rt.runFinalization(); rt.gc(); mem = rt.freeMemory() - mem; mem /= 1024 * 1024; LOGGER.log(Level.INFO, Util.format("freedMemory", mem)); } catch (InterruptedException ex) { return; } } }); thread.setPriority(Thread.MIN_PRIORITY); thread.start(); }
public void setMoney(BigDecimal value) { money = value; BigDecimal maxMoney = ess.getSettings().getMaxMoney(); BigDecimal minMoney = ess.getSettings().getMinMoney(); if (money.compareTo(maxMoney) > 0) { money = maxMoney; } if (money.compareTo(minMoney) < 0) { money = minMoney; } config.setProperty("money", money); config.save(); }
@Override public void onPlayerInteract(final PlayerInteractEvent event) { if (event.isCancelled()) { return; } if (event.getAction() != Action.RIGHT_CLICK_BLOCK) { return; } if (ess.getSettings().getBedSetsHome() && event.getClickedBlock().getType() == Material.BED_BLOCK) { try { final User user = ess.getUser(event.getPlayer()); user.setHome(); user.sendMessage(Util.i18n("homeSetToBed")); } catch (Throwable ex) { } } }
@Override public void onPlayerChat(final PlayerChatEvent event) { final User user = ess.getUser(event.getPlayer()); if (user.isMuted()) { event.setCancelled(true); user.sendMessage(Util.i18n("playerMuted")); LOGGER.info(Util.format("mutedUserSpeaks", user.getName())); } final Iterator<Player> it = event.getRecipients().iterator(); while (it.hasNext()) { final User u = ess.getUser(it.next()); if (u.isIgnoredPlayer(user.getName())) { it.remove(); } } user.updateActivity(true); if (ess.getSettings().changeDisplayName()) { user.setDisplayName(user.getNick()); } }
//TODO: Convert this to use one of the new text classes? public static String listKits(final IEssentials ess, final User user) throws Exception { try { final ConfigurationSection kits = ess.getSettings().getKits(); final StringBuilder list = new StringBuilder(); for (String kiteItem : kits.getKeys(false)) { if (user.isAuthorized("essentials.kit." + kiteItem.toLowerCase(Locale.ENGLISH))) { list.append(" ").append(capitalCase(kiteItem)); } } return list.toString().trim(); } catch (Exception ex) { throw new Exception(_("kitError")); } }
public static void expandItems(final IEssentials ess, final User user, final List<String> items) throws Exception { try { boolean spew = false; for (String d : items) { final String[] parts = d.split(" "); final String[] item = parts[0].split("[:+',;.]", 2); final int id = Material.getMaterial(Integer.parseInt(item[0])).getId(); final short data = item.length > 1 ? Short.parseShort(item[1]) : 0; final int amount = parts.length > 1 ? Integer.parseInt(parts[1]) : 1; final ItemStack stack = new ItemStack(id, amount, data); if (parts.length > 2) { for (int i = 2; i < parts.length; i++) { final String[] split = parts[i].split("[:+',;.]", 2); if (split.length < 1) { continue; } final Enchantment enchantment = Commandenchant.getEnchantment(split[0], user); int level; if (split.length > 1) { level = Integer.parseInt(split[1]); } else { level = enchantment.getMaxLevel(); } stack.addEnchantment(enchantment, level); } } final Map<Integer, ItemStack> overfilled; if (user.isAuthorized("essentials.oversizedstacks")) { overfilled = InventoryWorkaround.addItem(user.getInventory(), true, ess.getSettings().getOversizedStackSize(), stack); } else { overfilled = InventoryWorkaround.addItem(user.getInventory(), true, new ItemStack(id, amount, data)); } for (ItemStack itemStack : overfilled.values()) { user.getWorld().dropItemNaturally(user.getLocation(), itemStack); spew = true; } } user.updateInventory(); if (spew) { user.sendMessage(_("kitInvFull")); } } catch (Exception e) { user.updateInventory(); throw new Exception(_("kitError2")); } }
@Override public void onPlayerMove(final PlayerMoveEvent event) { if (event.isCancelled()) { return; } final User user = ess.getUser(event.getPlayer()); if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers()) { final Location from = event.getFrom(); final Location to = event.getTo().clone(); to.setX(from.getX()); to.setY(from.getBlock().getTypeId() == 0 ? from.getY() - 1 : from.getY()); to.setZ(from.getZ()); event.setTo(to); return; } Location afk = user.getAfkPosition(); if (afk == null || !event.getTo().getWorld().equals(afk.getWorld()) || afk.distanceSquared(event.getTo()) > 9) { user.updateActivity(true); } if (!ess.getSettings().getNetherPortalsEnabled()) { return; } final Block block = event .getPlayer() .getWorld() .getBlockAt( event.getTo().getBlockX(), event.getTo().getBlockY(), event.getTo().getBlockZ()); final List<World> worlds = server.getWorlds(); if (block.getType() == Material.PORTAL && worlds.size() > 1 && user.isAuthorized("essentials.portal")) { if (user.getJustPortaled()) { return; } World nether = server.getWorld(ess.getSettings().getNetherName()); if (nether == null) { for (World world : worlds) { if (world.getEnvironment() == World.Environment.NETHER) { nether = world; break; } } if (nether == null) { return; } } final World world = user.getWorld() == nether ? worlds.get(0) : nether; double factor; if (user.getWorld().getEnvironment() == World.Environment.NETHER && world.getEnvironment() == World.Environment.NORMAL) { factor = ess.getSettings().getNetherRatio(); } else if (user.getWorld().getEnvironment() == World.Environment.NORMAL && world.getEnvironment() == World.Environment.NETHER) { factor = 1.0 / ess.getSettings().getNetherRatio(); } else { factor = 1.0; } Location loc = event.getTo(); int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); if (user.getWorld().getBlockAt(x, y, z - 1).getType() == Material.PORTAL) { z--; } if (user.getWorld().getBlockAt(x - 1, y, z).getType() == Material.PORTAL) { x--; } x = (int) (x * factor); z = (int) (z * factor); loc = new Location(world, x + .5, y, z + .5); Block dest = world.getBlockAt(x, y, z); NetherPortal portal = NetherPortal.findPortal(dest); if (portal == null) { if (world.getEnvironment() == World.Environment.NETHER || ess.getSettings().getGenerateExitPortals()) { portal = NetherPortal.createPortal(dest); LOGGER.info(Util.format("userCreatedPortal", event.getPlayer().getName())); user.sendMessage(Util.i18n("generatingPortal")); loc = portal.getSpawn(); } } else { LOGGER.info(Util.format("userUsedPortal", event.getPlayer().getName())); user.sendMessage(Util.i18n("usingPortal")); loc = portal.getSpawn(); } event.setFrom(loc); event.setTo(loc); try { user.getTeleport().now(loc, new Trade("portal", ess)); } catch (Exception ex) { user.sendMessage(ex.getMessage()); } user.setJustPortaled(true); user.sendMessage(Util.i18n("teleportingPortal")); event.setCancelled(true); return; } user.setJustPortaled(false); }
@Override public boolean handleCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args) { boolean disabled = false; boolean overridden = false; ISettings settings = ess.getSettings(); settings.acquireReadLock(); try { disabled = settings.getData().getCommands().isDisabled(command.getName()); overridden = !disabled || settings.getData().getCommands().isOverridden(command.getName()); } finally { settings.unlock(); } // Allow plugins to override the command via onCommand if (!overridden && (!commandLabel.startsWith("e") || commandLabel.equalsIgnoreCase(command.getName()))) { final PluginCommand pc = getAlternative(commandLabel); if (pc != null) { executed(commandLabel, pc.getLabel()); try { return pc.execute(sender, commandLabel, args); } catch (final Exception ex) { final ArrayList<StackTraceElement> elements = new ArrayList<StackTraceElement>(Arrays.asList(ex.getStackTrace())); elements.remove(0); final ArrayList<StackTraceElement> toRemove = new ArrayList<StackTraceElement>(); for (final StackTraceElement e : elements) { if (e.getClassName().equals("net.ess3.Essentials")) { toRemove.add(e); } } elements.removeAll(toRemove); final StackTraceElement[] trace = elements.toArray(new StackTraceElement[elements.size()]); ex.setStackTrace(trace); ex.printStackTrace(); sender.sendMessage(ChatColor.RED + "An internal error occurred while attempting to perform this command"); return true; } } } try { IUser user = null; if (sender instanceof Player) { user = ess.getUserMap().getUser((Player)sender); LOGGER.log(Level.INFO, String.format("[PLAYER_COMMAND] %s: /%s %s ", ((Player)sender).getName(), commandLabel, EssentialsCommand.getFinalArg(args, 0))); } // Check for disabled commands if (disabled) { return true; } final String commandName = command.getName().toLowerCase(Locale.ENGLISH); IEssentialsCommand cmd = commands.get(commandName); if (cmd == null) { try { cmd = (IEssentialsCommand)classLoader.loadClass(commandPath + commandName).newInstance(); cmd.init(ess, commandName); cmd.setEssentialsModule(module); commands.put(commandName, cmd); } catch (Exception ex) { sender.sendMessage(_("commandNotLoaded", commandName)); LOGGER.log(Level.SEVERE, _("commandNotLoaded", commandName), ex); return true; } } // Check authorization if (sender != null && !cmd.isAuthorized(sender)) { LOGGER.log(Level.WARNING, _("deniedAccessCommand", user.getName())); user.sendMessage(_("noAccessCommand")); return true; } // Run the command try { if (user == null) { cmd.run(sender, command, commandLabel, args); } else { user.acquireReadLock(); try { cmd.run(user, command, commandLabel, args); } finally { user.unlock(); } } return true; } catch (NoChargeException ex) { return true; } catch (NotEnoughArgumentsException ex) { sender.sendMessage(command.getDescription()); sender.sendMessage(command.getUsage().replaceAll("<command>", commandLabel)); if (!ex.getMessage().isEmpty()) { sender.sendMessage(ex.getMessage()); } return true; } catch (Throwable ex) { showCommandError(sender, commandLabel, ex); return true; } } catch (Throwable ex) { LOGGER.log(Level.SEVERE, _("commandFailed", commandLabel), ex); return true; } }