feat: 完善功能

This commit is contained in:
2022-10-24 18:03:19 +08:00
parent 7a694eff01
commit db4d68103a
9 changed files with 102 additions and 57 deletions

View File

@@ -13,6 +13,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerLoginEvent;
@@ -84,7 +85,7 @@ public class BallBukkitListener extends BallListener implements Listener {
Bukkit.shutdown();
}
@EventHandler(ignoreCancelled = true)
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
public void onPlayerLogin(PlayerLoginEvent event) {
Player player = event.getPlayer();
Location location = playerToLocation.remove(player.getUniqueId());
@@ -93,7 +94,7 @@ public class BallBukkitListener extends BallListener implements Listener {
}
}
@EventHandler(ignoreCancelled = true)
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
}

View File

@@ -13,6 +13,7 @@ import cn.hamster3.mc.plugin.ball.common.event.player.*;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOfflineEvent;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
import cn.hamster3.mc.plugin.ball.common.listener.BallListener;
import cn.hamster3.mc.plugin.ball.common.listener.ListenerPriority;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.constant.CoreConstantObjects;
import cn.hamster3.mc.plugin.core.common.data.Message;
@@ -75,8 +76,8 @@ public abstract class BallAPI {
addListener(new BallListener() {
@Override
public int getPriority() {
return 0;
public ListenerPriority getPriority() {
return ListenerPriority.LOW;
}
@Override
@@ -431,9 +432,9 @@ public abstract class BallAPI {
/**
* 给玩家发送一条消息
*
* @param receiver 玩家
* @param message 消息
* @param cache 当玩家不在线时,是否缓存消息等待玩家上线再发送
* @param receiver 玩家
* @param message 消息
* @param cache 当玩家不在线时,是否缓存消息等待玩家上线再发送
*/
public void sendMessageToPlayer(@NotNull Set<UUID> receiver, @NotNull Message message, boolean cache) {
for (UUID uuid : receiver) {
@@ -662,7 +663,7 @@ public abstract class BallAPI {
public void addListener(@NotNull BallListener listener) {
listeners.add(listener);
listeners.sort(Comparator.comparingInt(BallListener::getPriority));
listeners.sort(Comparator.comparing(BallListener::getPriority));
}
public void removeListener(@NotNull BallListener listener) {

View File

@@ -109,33 +109,11 @@ public class BallChannelInboundHandler extends SimpleChannelInboundHandler<Strin
}
break;
}
case BallPlayerChatEvent.ACTION: {
BallPlayerChatEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerChatEvent.class);
case BallPlayerPreLoginEvent.ACTION: {
BallPlayerPreLoginEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerPreLoginEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onPlayerChat(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
}
break;
}
case BallPlayerConnectServerEvent.ACTION: {
BallPlayerConnectServerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerConnectServerEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerConnectServer(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
}
break;
}
case BallPlayerLogoutEvent.ACTION: {
BallPlayerLogoutEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerLogoutEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerLogout(event);
listener.onBallPlayerPreLogin(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
@@ -153,17 +131,6 @@ public class BallChannelInboundHandler extends SimpleChannelInboundHandler<Strin
}
break;
}
case BallPlayerPostConnectServerEvent.ACTION: {
BallPlayerPostConnectServerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerPostConnectServerEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerPostConnectServer(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
}
break;
}
case BallPlayerPostLoginEvent.ACTION: {
BallPlayerPostLoginEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerPostLoginEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
@@ -186,11 +153,44 @@ public class BallChannelInboundHandler extends SimpleChannelInboundHandler<Strin
}
break;
}
case BallPlayerPreLoginEvent.ACTION: {
BallPlayerPreLoginEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerPreLoginEvent.class);
case BallPlayerConnectServerEvent.ACTION: {
BallPlayerConnectServerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerConnectServerEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerPreLogin(event);
listener.onBallPlayerConnectServer(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
}
break;
}
case BallPlayerPostConnectServerEvent.ACTION: {
BallPlayerPostConnectServerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerPostConnectServerEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerPostConnectServer(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
}
break;
}
case BallPlayerLogoutEvent.ACTION: {
BallPlayerLogoutEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerLogoutEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerLogout(event);
} catch (Exception | Error e) {
e.printStackTrace();
}
}
break;
}
case BallPlayerChatEvent.ACTION: {
BallPlayerChatEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerChatEvent.class);
for (BallListener listener : BallAPI.getInstance().getListeners()) {
try {
listener.onBallPlayerChat(event);
} catch (Exception | Error e) {
e.printStackTrace();
}

View File

@@ -7,7 +7,6 @@ import lombok.Data;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

View File

@@ -6,7 +6,6 @@ import lombok.Data;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

View File

@@ -8,6 +8,8 @@ import org.jetbrains.annotations.Nullable;
/**
* 玩家准备进入子服
* <p>
* 仅在使用 velocity 代理端时才会触发这个事件
*/
@Data
@AllArgsConstructor

View File

@@ -5,7 +5,7 @@ import lombok.Data;
import org.jetbrains.annotations.NotNull;
/**
* 玩家准备连接到服务器
* 玩家准备连接到代理服务器
*/
@Data
@AllArgsConstructor

View File

@@ -10,13 +10,11 @@ import org.jetbrains.annotations.NotNull;
public abstract class BallListener {
/**
* 该监听器的执行优先级
* <p>
* 数字越低越先执行
*
* @return 优先级
*/
public int getPriority() {
return 100;
public ListenerPriority getPriority() {
return ListenerPriority.NORMAL;
}
public void onBroadcastPlayerMessage(@NotNull BroadcastPlayerMessageEvent event) {
@@ -61,7 +59,7 @@ public abstract class BallListener {
public void onBallPlayerLogout(@NotNull BallPlayerLogoutEvent event) {
}
public void onPlayerChat(@NotNull BallPlayerChatEvent event) {
public void onBallPlayerChat(@NotNull BallPlayerChatEvent event) {
}
public void onServerOffline(@NotNull ServerOfflineEvent event) {
@@ -70,10 +68,10 @@ public abstract class BallListener {
public void onServerOnline(@NotNull ServerOnlineEvent event) {
}
public void onMessageReceived(@NotNull MessageInfo event) {
public void onMessageSend(@NotNull MessageInfo event) {
}
public void onMessageSend(@NotNull MessageInfo event) {
public void onMessageReceived(@NotNull MessageInfo event) {
}
public void onConnectInactive() {

View File

@@ -0,0 +1,45 @@
package cn.hamster3.mc.plugin.ball.common.listener;
@SuppressWarnings("unused")
public enum ListenerPriority {
/**
* Event call is of very low importance and should be ran first, to allow
* other plugins to further customise the outcome
*/
LOWEST(0),
/**
* Event call is of low importance
*/
LOW(1),
/**
* Event call is neither important nor unimportant, and may be ran
* normally
*/
NORMAL(2),
/**
* Event call is of high importance
*/
HIGH(3),
/**
* Event call is critical and must have the final say in what happens
* to the event
*/
HIGHEST(4),
/**
* Event is listened to purely for monitoring the outcome of an event.
* <p>
* No modifications to the event should be made under this priority
*/
MONITOR(5);
private final int slot;
ListenerPriority(int slot) {
this.slot = slot;
}
public int getSlot() {
return slot;
}
}