AsyncPlayerPreLoginEvent
AsyncPlayerPreLoginEvent
=> org.bukkit.event.Event
=> org.bukkit.event.player.AsyncPlayerPreLoginEvent
Stores details for players attempting to log in.This event is asynchronous, and not run using main thread.本事件存储了试图登录服务器的玩家的有关数据。本事件是异步的,不会在主线程内触发。译注:Mojang
在架构本游戏时,几乎没有考虑线程安全问题。整个服务端中的大部分集合、大部分方法,都没有考虑异步操作。在服务端内部,如生成生物、如破坏方块等方法,都运行在主线程上,虽然效率低,但是这样一来也没有线程安全问题。一旦让插件在异步线程中操作实体、方块、物品栏等对象,就可能出现并发修改等错误。整个服务端里几乎没有什么方法是线程安全的。除非某方法仅涉及到数据包的发送,否则它就不能运行在异步线程里。比如发送消息给玩家,这个方法仅仅涉及到玩家聊天消息相关数据包的发送,因此它可以异步运行。本事件运 行在异步线程里,在异步线程中不可以调用Bukkit API
里那些线程不安全的方法。如必为之,可用BukkitScheduler
调度一个同步任务,使代码在主线程内运行。事件不是用来完成数据的持久化存储的。此处所谓“存储”意为事件的字段中含有一些与涉事玩家有关的信息,该事件从服务端底层得到这些信息,存储于一些字段中,再给插件进行读取。当插件处理完毕以后,事件对象应该被销毁。不能使用事件对象来对数据进行保存。在AsyncPlayerPreLoginEvent
、PlayerPreLoginEvent
、PlayerLoginEvent
事件触发时,服务器里还不存在玩家实体。这几个事件是在客户端尝试与服务端建立联系时触发的,插件可以通过事件所提供的disallow()
等方法拒绝客户端登录。这样拒绝时,服务端内不会出现玩家实体。玩家登录过程将会尽早被切断。而PlayerSpawnLocationEvent
触发时玩家已经成功加入了服务器,即将生成玩家实体。该事件不可取消,也无法将玩家踢出服务器。PlayerJoinEvent
事件触发时,服务器内已经生成了玩家实体。可通过Player#kickPlayer(String)
方法将玩家踢出服务器。
方法声明: public Result getLoginResult()
方法签名: ()Lorg/bukkit/event/player/AsyncPlayerPreLoginEvent/Result;
Gets the current result of the login, as an enum@return Current Result of the login该方法用于获取目前的登录结果,返回一个AsyncPlayerPreLoginEvent.Result
枚举值。@return 一个Result
枚举字段,用于确定目前的登录结果。
方法声明: public PlayerPreLoginEvent.Result getResult()
方法签名: ()Lorg/bukkit/event/player/PlayerPreLoginEvent/Result;
Gets the current result of the login, as an enum@return Current Result of the login@see #getLoginResult()@deprecated This method uses a deprecated enum from {@linkPlayerPreLoginEvent}该方法用于获取目前的登录结果,返回一个PlayerPreLoginEvent.Result
枚举值。@return 一个Result
枚举字段,用于确定目前的登录结果。@see 参见本事件的getLoginResult()
方法文档。@deprecated 本方法所使用的PlayerPreLoginEvent.Result
枚举已过时,请不要使用本方法,而是使用本事件的getLoginResult()
方法。
方法声明: public void setLoginResult(@NotNull final Result result)
方法签名: (Lorg/bukkit/event/player/AsyncPlayerPreLoginEvent/Result;)V
Sets the new result of the login, as an enum@param result New result to set该方法用于设置登录结果,接收一个AsyncPlayerPreLoginEvent.Result
枚举值作为参数。@param result 一个Result
枚举字段,用于确定新的登录结果。
方法声明: public void setResult(@NotNull final PlayerPreLoginEvent.Result result)
方法签名: (Lorg/bukkit/event/player/PlayerPreLoginEvent/Result;)V
Sets the new result of the login, as an enum@param result New result to set@see #setLoginResult(Result)@deprecated This method uses a deprecated enum from {@linkPlayerPreLoginEvent}该方法用于设置登录结果,接收一个PlayerPreLoginEvent.Result
枚举值作为参数。@param result 一个Result
枚举字段,用于确定新的登录结果。@see 参见本事件的setLoginResult(Result)
方法文档。@deprecated 本方法所使用的PlayerPreLoginEvent.Result
枚举已过时,请不要使用本方法,而是使用本事件的setLoginResult(Result)
方法。
方法声明: public String getKickMessage()
方法签名: ()Ljava/lang/String;
Gets the current kick message that will be used if getResult() !=Result.ALLOWED@return Current kick message该方法用于获取将展示给玩家的拒绝登录原因字符串。如果getResult() != Result.ALLOWED
则将会把该字符串显示给玩家。@return 拒绝登录原因字符串。
方法声明: public void setKickMessage(@NotNull final String message)
方法签名: (Ljava/lang/String;)V
Sets the kick message to display if getResult() != Result.ALLOWED@param message New kick message该方法用于设置将展示给玩家的拒绝登录原因字符串。如果getResult() != Result.ALLOWED
则将会把该字符串显示给玩家。@param message 拒绝登录原因字符串。
方法声明: public void allow()
方法签名: ()V
Allows the player to log in该方法用于允许玩家登录。
方法声明: public void disallow(@NotNull final Result result, @NotNull final String message)
方法签名: (Lorg/bukkit/event/player/AsyncPlayerPreLoginEvent/Result;Ljava/lang/String;)V
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该方法用于以给定原因拒绝玩家登录。@param result 一个Result
枚举字段,用于指明拒绝玩家登录的原因。@param message 将展示给玩家的拒绝登录原因字符串。
方法声明: public void disallow(@NotNull final PlayerPreLoginEvent.Result result, @NotNull final String message)
方法签名: (Lorg/bukkit/event/player/PlayerPreLoginEvent/Result;Ljava/lang/String;)V
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@see #disallow(Result, String)@deprecated This method uses a deprecated enum from {@linkPlayerPreLoginEvent}该方法用于以给定原因拒绝玩家登录。@param result 一个Result
枚举字段,用于指明拒绝玩家登录的原因。@param message 将展示给玩家的拒绝登录原因字符串。@see 参见本事件的disallow(Result, String)
方法文档。@deprecated 本方法所使用的PlayerPreLoginEvent.Result
枚举已过时,请不要使用本方法,而是使用本事件的disallow(@NotNull final Result result, @NotNull final String message)
方法。
方法声明: public String getName()
方法签名: ()Ljava/lang/String;
Gets the player's name.@return the player's name该方法用于获取涉事玩家的用户名。@return 涉事玩家的用户名。
方法声明: public InetAddress getAddress()
方法签名: ()Ljava/net/InetAddress;
Gets the player IP address.@return The IP address该方法用于获取涉事玩家的IP
地址。@return 涉事玩家的IP
地址。
方法声明: public UUID getUniqueId()
方法签名: ()Ljava/util/UUID;
Gets the player's unique ID.@return The unique ID该方法用于获取涉事玩家的UUID
。@return 涉事玩家的UUID
。
方法声明: public HandlerList getHandlers()
方法签名: ()Lorg/bukkit/event/HandlerList;
方法声明: public static HandlerList getHandlerList()
方法签名: ()Lorg/bukkit/event/HandlerList;
Basic kick reasons for communicating to plugins用于帮助插件确定玩家被踢出原因的枚举。译注:玩家被允许登录也是该枚举的一个枚举项,本枚举并不只适用于玩家被踢出时。
The player is allowed to log in玩家被允许登录。
The player is not allowed to log in, due to the server being full由于服务器人数已满,因而不允许登录。
The player is not allowed to log in, due to them being banned由于玩家被服务器封禁,因而不允许登录。
The player is not allowed to log in, due to them not being on thewhite list由于玩家不在服务器白名单内,因而不允许登录。
The player is not allowed to log in, for reasons undefined由于未知原因,玩家不被允许登录。