001 package org.bukkit.event.player; 002 003 import java.net.InetAddress; 004 005 import org.bukkit.entity.Player; 006 import org.bukkit.event.HandlerList; 007 008 /** 009 * Stores details for players attempting to log in 010 */ 011 public class PlayerLoginEvent extends PlayerEvent { 012 private static final HandlerList handlers = new HandlerList(); 013 private final InetAddress address; 014 private final String hostname; 015 private Result result = Result.ALLOWED; 016 private String message = ""; 017 018 /** 019 * @deprecated Address should be provided in other constructor 020 */ 021 @Deprecated 022 public PlayerLoginEvent(final Player player) { 023 this(player, "", null); 024 } 025 026 /** 027 * @deprecated Address should be provided in other constructor 028 */ 029 @Deprecated 030 public PlayerLoginEvent(final Player player, final String hostname) { 031 this(player, hostname, null); 032 } 033 034 /** 035 * This constructor defaults message to an empty string, and result to 036 * ALLOWED 037 * 038 * @param player The {@link Player} for this event 039 * @param hostname The hostname that was used to connect to the server 040 * @param address The address the player used to connect, provided for 041 * timing issues 042 */ 043 public PlayerLoginEvent(final Player player, final String hostname, final InetAddress address) { 044 super(player); 045 this.hostname = hostname; 046 this.address = address; 047 } 048 049 /** 050 * @deprecated Address and hostname should be provided in other 051 * constructor 052 */ 053 @Deprecated 054 public PlayerLoginEvent(final Player player, final Result result, final String message) { 055 this(player, "", null, result, message); 056 } 057 058 /** 059 * This constructor pre-configures the event with a result and message 060 * 061 * @param player The {@link Player} for this event 062 * @param hostname The hostname that was used to connect to the server 063 * @param address The address the player used to connect, provided for 064 * timing issues 065 * @param result The result status for this event 066 * @param message The message to be displayed if result denies login 067 */ 068 public PlayerLoginEvent(final Player player, String hostname, final InetAddress address, final Result result, final String message) { 069 this(player, hostname, address); 070 this.result = result; 071 this.message = message; 072 } 073 074 /** 075 * Gets the current result of the login, as an enum 076 * 077 * @return Current Result of the login 078 */ 079 public Result getResult() { 080 return result; 081 } 082 083 /** 084 * Sets the new result of the login, as an enum 085 * 086 * @param result New result to set 087 */ 088 public void setResult(final Result result) { 089 this.result = result; 090 } 091 092 /** 093 * Gets the current kick message that will be used if getResult() != 094 * Result.ALLOWED 095 * 096 * @return Current kick message 097 */ 098 public String getKickMessage() { 099 return message; 100 } 101 102 /** 103 * Sets the kick message to display if getResult() != Result.ALLOWED 104 * 105 * @param message New kick message 106 */ 107 public void setKickMessage(final String message) { 108 this.message = message; 109 } 110 111 /** 112 * Gets the hostname that the player used to connect to the server, or 113 * blank if unknown 114 * 115 * @return The hostname 116 */ 117 public String getHostname() { 118 return hostname; 119 } 120 121 /** 122 * Allows the player to log in 123 */ 124 public void allow() { 125 result = Result.ALLOWED; 126 message = ""; 127 } 128 129 /** 130 * Disallows the player from logging in, with the given reason 131 * 132 * @param result New result for disallowing the player 133 * @param message Kick message to display to the user 134 */ 135 public void disallow(final Result result, final String message) { 136 this.result = result; 137 this.message = message; 138 } 139 140 /** 141 * Gets the {@link InetAddress} for the Player associated with this event. 142 * This method is provided as a workaround for player.getAddress() 143 * returning null during PlayerLoginEvent. 144 * 145 * @return The address for this player. For legacy compatibility, this may 146 * be null. 147 */ 148 public InetAddress getAddress() { 149 return address; 150 } 151 152 @Override 153 public HandlerList getHandlers() { 154 return handlers; 155 } 156 157 public static HandlerList getHandlerList() { 158 return handlers; 159 } 160 161 /** 162 * Basic kick reasons for communicating to plugins 163 */ 164 public enum Result { 165 166 /** 167 * The player is allowed to log in 168 */ 169 ALLOWED, 170 /** 171 * The player is not allowed to log in, due to the server being full 172 */ 173 KICK_FULL, 174 /** 175 * The player is not allowed to log in, due to them being banned 176 */ 177 KICK_BANNED, 178 /** 179 * The player is not allowed to log in, due to them not being on the 180 * white list 181 */ 182 KICK_WHITELIST, 183 /** 184 * The player is not allowed to log in, for reasons undefined 185 */ 186 KICK_OTHER 187 } 188 }