/** * Handles post-hooks for a player login, including the name and IP banlists, whitelist policy * and occupancy limit. * * @param player the login * @param hostname the hostname that was used to connect to the server * @return the completed event */ public PlayerLoginEvent onPlayerLogin(GlowPlayer player, String hostname) { Server server = player.getServer(); InetAddress address = player.getAddress().getAddress(); String addressString = address.getHostAddress(); PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, address); BanList nameBans = server.getBanList(Type.NAME); BanList ipBans = server.getBanList(Type.IP); if (nameBans.isBanned(player.getName())) { event.disallow(Result.KICK_BANNED, Kick.BANNED.get(nameBans.getBanEntry(player.getName()).getReason())); } else if (ipBans.isBanned(addressString)) { event.disallow(Result.KICK_BANNED, Kick.BANNED.get(ipBans.getBanEntry(addressString).getReason())); } else if (checkWhitelisted(player, event) && server.getOnlinePlayers().size() >= server.getMaxPlayers()) { event.disallow(Result.KICK_FULL, Kick.FULL.get(server.getMaxPlayers())); } return callEvent(event); }
if (event.getResult() != Result.ALLOWED) { disconnect(event.getKickMessage(), true); return;
@EventHandler public void onLogin(PlayerLoginEvent event) { if (!namePattern.matcher(event.getPlayer().getName()).matches()) { CommandBook.logger().info("Name verification: " + event.getPlayer().getName() + " was kicked " + "for having an invalid name (to disable, turn off the name-verification component in CommandBook)"); event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Invalid player name detected!"); } } }
@EventHandler(priority = EventPriority.LOWEST) public void onPlayerLoginFirst(PlayerLoginEvent event) { if (event.getResult() == Result.ALLOWED) { // Register a PlayerTabInfo instance getInfo(event.getPlayer()); // Ensure the listeners are registered in the right order CommonUtil.queueListenerLast(this, PlayerLoginEvent.class); CommonUtil.queueListenerFirst(this, PlayerJoinEvent.class); } }
@EventHandler(priority = EventPriority.HIGHEST) void onPlayerLogin (PlayerLoginEvent event) Player player = event.getPlayer(); if(GriefPrevention.instance.config_spam_loginCooldownSeconds > 0 && event.getResult() == Result.ALLOWED && !player.hasPermission("griefprevention.spam")) event.setResult(Result.KICK_OTHER); event.setKickMessage("You must wait " + cooldownRemaining + " seconds before logging-in again."); event.disallow(event.getResult(), event.getKickMessage()); return; if(GriefPrevention.instance.config_smartBan && event.getResult() == Result.KICK_BANNED) this.tempBannedIps.add(new IpBanInfo(event.getAddress(), now + this.MILLISECONDS_IN_DAY, player.getName())); playerData.ipAddress = event.getAddress();
@Override public String getUniqueId() { return event.getPlayer().getUniqueId().toString(); }
/** * We listen to this type of events to prevent spambots from login to the server. * * @param event * the event */ @EventHandler( priority = EventPriority.NORMAL) public void onPlayerLogin(final PlayerLoginEvent event) { if (event.getResult() != Result.ALLOWED) return; final Player player = event.getPlayer(); final IPlayerData pData = DataManager.getPlayerData(player); final ChatConfig cc = pData.getGenericInstance(ChatConfig.class); final ChatData data = pData.getGenericInstance(ChatData.class); // (No forced permission update, because the associated permissions are treated as hints rather.) // Reset captcha of player if needed. synchronized(data) { captcha.resetCaptcha(player, cc, data, pData); } // Fast relog check. if (relog.isEnabled(player, pData) && relog.unsafeLoginCheck(player, cc, data,pData)) { event.disallow(Result.KICK_OTHER, cc.relogKickMessage); } else if (logins.isEnabled(player, pData) && logins.check(player, cc, data)) { event.disallow(Result.KICK_OTHER, cc.loginsKickMessage); } }
final Player player = event.getPlayer(); final String username = player.getName(); final String ip = event.getAddress().getHostAddress().trim(); event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username is an invalid length (must be between 3 and 20 characters long)."); return; event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username contains invalid characters."); return; final String hostname = event.getHostname().replace("\u0000FML\u0000", ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 final String connectAddress = ConfigEntry.SERVER_ADDRESS.getString(); final int connectPort = server.getPort(); event.disallow(PlayerLoginEvent.Result.KICK_OTHER, ConfigEntry.FORCE_IP_KICKMSG.getString() .replace("%address%", ConfigEntry.SERVER_ADDRESS.getString() + (forceIpPort == DEFAULT_PORT ? "" : ":" + forceIpPort))); event.allow(); event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "The server is full and a player could not be kicked, sorry!"); return; event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Sorry, but this server is full."); return; event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Server is temporarily open to admins only."); return;
@EventHandler(priority = EventPriority.NORMAL) public void onPlayerLogin(final PlayerLoginEvent event) { // (NORMAL to have chat checks come after this.) if (event.getResult() != Result.ALLOWED) { return; } final Player player = event.getPlayer(); // Check if login is denied (plus expiration check). // TODO: Store by id + HashMapLOW + AsyncPlayerPreLogin. if (checkDenyLoginsNames(player.getName())) { if (DataManager.getPlayerData(player).hasPermission(Permissions.BYPASS_DENY_LOGIN, player)) { return; } // TODO: Consider using the vanilla temporary ban feature instead (for an alternative?). // TODO: Display time for which the player is banned. event.setResult(Result.KICK_OTHER); // TODO: Some basic/language configuration object, possibly independent of checks. event.setKickMessage(ColorUtil.replaceColors(ConfigManager.getConfigFile(player.getWorld().getName()).getString(ConfPaths.STRINGS + ".msgtempdenylogin"))); } }
/** * Called on player login. * * @param event Relevant event details */ @EventHandler(priority = EventPriority.NORMAL) public void playerLogin(PlayerLoginEvent event) { Player player = event.getPlayer(); Ban ban = null; if (getBanDatabase().isBanned(player.getUniqueId())) { ban = getBanDatabase().getBanned(player.getUniqueId()); } else if (getBanDatabase().isBanned(event.getAddress())) { ban = getBanDatabase().getBanned(event.getAddress().getHostAddress()); } if (ban != null) { String reason = ban.getReason(); boolean hasReason = reason != null; String how = "You are " + (ban.getAddress() != null ? "IP " : "") + "banned" + (hasReason ? " for:" : "."); String end = "Expires: " + (ban.getEnd() == 0L ? ChatColor.DARK_RED + "Never" : ChatUtil.getFriendlyTime(ban.getEnd())); event.disallow(PlayerLoginEvent.Result.KICK_BANNED, how + (hasReason ? "\n" + reason : "") + "\n" + end); } }
@EventHandler(ignoreCancelled = true) public void onPlayerLogin(PlayerLoginEvent event) { Player player = event.getPlayer(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); String hostKey = cfg.hostKeys.get(player.getUniqueId().toString()); if (hostKey == null) { hostKey = cfg.hostKeys.get(player.getName().toLowerCase()); } if (hostKey != null) { String hostname = event.getHostname(); int colonIndex = hostname.indexOf(':'); if (colonIndex != -1) { hostname = hostname.substring(0, colonIndex); } if (!hostname.equals(hostKey) && !(cfg.hostKeysAllowFMLClients && hostname.equals(hostKey + "\u0000FML\u0000"))) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You did not join with the valid host key!"); log.warning("WorldGuard host key check: " + player.getName() + " joined with '" + hostname + "' but '" + hostKey + "' was expected. Kicked!"); return; } } if (cfg.deopOnJoin) { player.setOp(false); } }
@EventHandler(priority = EventPriority.NORMAL) public void onPlayerLogin(PlayerLoginEvent event) { Static.SetPlayerHost(event.getPlayer().getName(), event.getHostname()); } }
@Override public String getResult() { return event.getResult().toString(); }
PlayerLoginEvent bukkitevent = new PlayerLoginEvent(joindata.player, hostname, networkManager.getAddress().getAddress(), networkManager.getRawAddress().getAddress()); checkBans(bukkitevent, joindata.data); Bukkit.getPluginManager().callEvent(bukkitevent); if (bukkitevent.getResult() != PlayerLoginEvent.Result.ALLOWED) { disconnect(bukkitevent.getKickMessage()); joindata.close(); return;
loginEvent.disallow(Result.KICK_WHITELIST, event.getKickMessage()); return false;
@Override public String getKickMessage() { return event.getKickMessage(); }
@Override public String getIP() { return event.getAddress().getHostAddress(); }
@Override public String getHostname() { return event.getHostname(); } }
@EventHandler(priority = EventPriority.HIGHEST) public void handleLast(PlayerLoginEvent event) { if (this.kicks.contains(event.getPlayer().getUniqueId())) { this.kicks.remove(event.getPlayer().getUniqueId()); event.disallow(PlayerLoginEvent.Result.KICK_BANNED, ChatColor.translateAlternateColorCodes('&', CloudAPI.getInstance().getCloudNetwork().getMessages().getString("server-kick-proxy-disallow"))); } }
@EventHandler(priority = EventPriority.MONITOR) public void onPlayerLogin(PlayerLoginEvent event) { try { PlayerLoginEvent.Result result = event.getResult(); UUID uuid = event.getPlayer().getUniqueId(); boolean op = event.getPlayer().isOp(); boolean banned = result == PlayerLoginEvent.Result.KICK_BANNED; processing.submit(processors.player().banAndOpProcessor(uuid, () -> banned, op)); } catch (Exception e) { errorHandler.log(L.ERROR, this.getClass(), e); } }