001    package org.bukkit.event.player;
002    
003    import java.net.InetAddress;
004    import java.util.UUID;
005    
006    import org.bukkit.event.Event;
007    import org.bukkit.event.HandlerList;
008    
009    /**
010     * Stores details for players attempting to log in.
011     * <p>
012     * This event is asynchronous, and not run using main thread.
013     */
014    public class AsyncPlayerPreLoginEvent extends Event {
015        private static final HandlerList handlers = new HandlerList();
016        private Result result;
017        private String message;
018        private final String name;
019        private final InetAddress ipAddress;
020        private final UUID uniqueId;
021    
022        @Deprecated
023        public AsyncPlayerPreLoginEvent(final String name, final InetAddress ipAddress) {
024            this(name, ipAddress, null);
025        }
026    
027        public AsyncPlayerPreLoginEvent(final String name, final InetAddress ipAddress, final UUID uniqueId) {
028            super(true);
029            this.result = Result.ALLOWED;
030            this.message = "";
031            this.name = name;
032            this.ipAddress = ipAddress;
033            this.uniqueId = uniqueId;
034        }
035    
036        /**
037         * Gets the current result of the login, as an enum
038         *
039         * @return Current Result of the login
040         */
041        public Result getLoginResult() {
042            return result;
043        }
044    
045        /**
046         * Gets the current result of the login, as an enum
047         *
048         * @return Current Result of the login
049         * @deprecated This method uses a deprecated enum from {@link
050         *     PlayerPreLoginEvent}
051         * @see #getLoginResult()
052         */
053        @Deprecated
054        public PlayerPreLoginEvent.Result getResult() {
055            return result == null ? null : result.old();
056        }
057    
058        /**
059         * Sets the new result of the login, as an enum
060         *
061         * @param result New result to set
062         */
063        public void setLoginResult(final Result result) {
064            this.result = result;
065        }
066    
067        /**
068         * Sets the new result of the login, as an enum
069         *
070         * @param result New result to set
071         * @deprecated This method uses a deprecated enum from {@link
072         *     PlayerPreLoginEvent}
073         * @see #setLoginResult(Result)
074         */
075        @Deprecated
076        public void setResult(final PlayerPreLoginEvent.Result result) {
077            this.result = result == null ? null : Result.valueOf(result.name());
078        }
079    
080        /**
081         * Gets the current kick message that will be used if getResult() !=
082         * Result.ALLOWED
083         *
084         * @return Current kick message
085         */
086        public String getKickMessage() {
087            return message;
088        }
089    
090        /**
091         * Sets the kick message to display if getResult() != Result.ALLOWED
092         *
093         * @param message New kick message
094         */
095        public void setKickMessage(final String message) {
096            this.message = message;
097        }
098    
099        /**
100         * Allows the player to log in
101         */
102        public void allow() {
103            result = Result.ALLOWED;
104            message = "";
105        }
106    
107        /**
108         * Disallows the player from logging in, with the given reason
109         *
110         * @param result New result for disallowing the player
111         * @param message Kick message to display to the user
112         */
113        public void disallow(final Result result, final String message) {
114            this.result = result;
115            this.message = message;
116        }
117    
118        /**
119         * Disallows the player from logging in, with the given reason
120         *
121         * @param result New result for disallowing the player
122         * @param message Kick message to display to the user
123         * @deprecated This method uses a deprecated enum from {@link
124         *     PlayerPreLoginEvent}
125         * @see #disallow(Result, String)
126         */
127        @Deprecated
128        public void disallow(final PlayerPreLoginEvent.Result result, final String message) {
129            this.result = result == null ? null : Result.valueOf(result.name());
130            this.message = message;
131        }
132    
133        /**
134         * Gets the player's name.
135         *
136         * @return the player's name
137         */
138        public String getName() {
139            return name;
140        }
141    
142        /**
143         * Gets the player IP address.
144         *
145         * @return The IP address
146         */
147        public InetAddress getAddress() {
148            return ipAddress;
149        }
150    
151        /**
152         * Gets the player's unique ID.
153         *
154         * @return The unique ID
155         */
156        public UUID getUniqueId() {
157            return uniqueId;
158        }
159    
160        @Override
161        public HandlerList getHandlers() {
162            return handlers;
163        }
164    
165        public static HandlerList getHandlerList() {
166            return handlers;
167        }
168    
169        /**
170         * Basic kick reasons for communicating to plugins
171         */
172        public enum Result {
173    
174            /**
175             * The player is allowed to log in
176             */
177            ALLOWED,
178            /**
179             * The player is not allowed to log in, due to the server being full
180             */
181            KICK_FULL,
182            /**
183             * The player is not allowed to log in, due to them being banned
184             */
185            KICK_BANNED,
186            /**
187             * The player is not allowed to log in, due to them not being on the
188             * white list
189             */
190            KICK_WHITELIST,
191            /**
192             * The player is not allowed to log in, for reasons undefined
193             */
194            KICK_OTHER;
195    
196            @Deprecated
197            private PlayerPreLoginEvent.Result old() {
198                return PlayerPreLoginEvent.Result.valueOf(name());
199            }
200        }
201    }