Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / event / player / PlayerLoginEvent.java
@vlad20012 vlad20012 on 24 Feb 2017 5 KB initial
package org.bukkit.event.player;

import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;

import java.net.InetAddress;

/**
 * Stores details for players attempting to log in
 */
public class PlayerLoginEvent extends PlayerEvent
{
	private static final HandlerList handlers = new HandlerList();
	private final InetAddress address;
	private final String hostname;
	private Result result = Result.ALLOWED;
	private String message = "";
	private final InetAddress realAddress; // Spigot

	/**
	 * @deprecated Address should be provided in other constructor
	 */
	@Deprecated
	public PlayerLoginEvent(final Player player)
	{
		this(player, "", null);
	}

	/**
	 * @deprecated Address should be provided in other constructor
	 */
	@Deprecated
	public PlayerLoginEvent(final Player player, final String hostname)
	{
		this(player, hostname, null);
	}

	/**
	 * This constructor defaults message to an empty string, and result to
	 * ALLOWED
	 *
	 * @param player   The {@link Player} for this event
	 * @param hostname The hostname that was used to connect to the server
	 * @param address  The address the player used to connect, provided for
	 *                 timing issues
	 */
	public PlayerLoginEvent(final Player player, final String hostname, final InetAddress address, final InetAddress realAddress)
	{ // Spigot
		super(player);
		this.hostname = hostname;
		this.address = address;
		// Spigot start
		this.realAddress = address;
	}

	public PlayerLoginEvent(final Player player, final String hostname, final InetAddress address)
	{
		this(player, hostname, address, address);
		// Spigot end
	}

	/**
	 * @deprecated Address and hostname should be provided in other
	 * constructor
	 */
	@Deprecated
	public PlayerLoginEvent(final Player player, final Result result, final String message)
	{
		this(player, "", null, result, message, null); // Spigot
	}

	/**
	 * This constructor pre-configures the event with a result and message
	 *
	 * @param player   The {@link Player} for this event
	 * @param hostname The hostname that was used to connect to the server
	 * @param address  The address the player used to connect, provided for
	 *                 timing issues
	 * @param result   The result status for this event
	 * @param message  The message to be displayed if result denies login
	 */
	public PlayerLoginEvent(final Player player, String hostname, final InetAddress address, final Result result, final String message, final InetAddress realAddress)
	{ // Spigot
		this(player, hostname, address, realAddress); // Spigot
		this.result = result;
		this.message = message;
	}

	// Spigot start

	/**
	 * Gets the connection address of this player, regardless of whether it has been spoofed or not.
	 *
	 * @return the player's connection address
	 */
	public InetAddress getRealAddress()
	{
		return realAddress;
	}
	// Spigot end

	/**
	 * Gets the current result of the login, as an enum
	 *
	 * @return Current Result of the login
	 */
	public Result getResult()
	{
		return result;
	}

	/**
	 * Sets the new result of the login, as an enum
	 *
	 * @param result New result to set
	 */
	public void setResult(final Result result)
	{
		this.result = result;
	}

	/**
	 * Gets the current kick message that will be used if getResult() !=
	 * Result.ALLOWED
	 *
	 * @return Current kick message
	 */
	public String getKickMessage()
	{
		return message;
	}

	/**
	 * Sets the kick message to display if getResult() != Result.ALLOWED
	 *
	 * @param message New kick message
	 */
	public void setKickMessage(final String message)
	{
		this.message = message;
	}

	/**
	 * Gets the hostname that the player used to connect to the server, or
	 * blank if unknown
	 *
	 * @return The hostname
	 */
	public String getHostname()
	{
		return hostname;
	}

	/**
	 * Allows the player to log in
	 */
	public void allow()
	{
		result = Result.ALLOWED;
		message = "";
	}

	/**
	 * Disallows the player from logging in, with the given reason
	 *
	 * @param result  New result for disallowing the player
	 * @param message Kick message to display to the user
	 */
	public void disallow(final Result result, final String message)
	{
		this.result = result;
		this.message = message;
	}

	/**
	 * Gets the {@link InetAddress} for the Player associated with this event.
	 * This method is provided as a workaround for player.getAddress()
	 * returning null during PlayerLoginEvent.
	 *
	 * @return The address for this player. For legacy compatibility, this may
	 * be null.
	 */
	public InetAddress getAddress()
	{
		return address;
	}

	@Override
	public HandlerList getHandlers()
	{
		return handlers;
	}

	public static HandlerList getHandlerList()
	{
		return handlers;
	}

	/**
	 * Basic kick reasons for communicating to plugins
	 */
	public enum Result
	{

		/**
		 * The player is allowed to log in
		 */
		ALLOWED,
		/**
		 * The player is not allowed to log in, due to the server being full
		 */
		KICK_FULL,
		/**
		 * The player is not allowed to log in, due to them being banned
		 */
		KICK_BANNED,
		/**
		 * The player is not allowed to log in, due to them not being on the
		 * white list
		 */
		KICK_WHITELIST,
		/**
		 * The player is not allowed to log in, for reasons undefined
		 */
		KICK_OTHER
	}
}