diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java index d2a3716..842449b 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java @@ -506,26 +506,28 @@ public abstract class BallAPI { *

* 会自动加上 config 中设置的频道前缀 * - * @param channel 频道名称 + * @param channels 频道名称 */ - public void subscribe(@NotNull String... channel) { - for (int i = 0; i < channel.length; i++) { - channel[i] = ballConfig.getChannelPrefix() + channel[i]; + public void subscribe(@NotNull String... channels) { + for (int i = 0; i < channels.length; i++) { + channels[i] = ballConfig.getChannelPrefix() + channels[i]; } - CoreAPI.getInstance().getExecutorService().submit( - () -> redisSub.subscribe(BallRedisListener.INSTANCE, channel) - ); + subscribeRaw(channels); } /** * 忽略频道前缀配置,订阅 redis 消息频道 * - * @param channel 频道名称 + * @param channels 频道名称 */ - public void subscribeRaw(@NotNull String... channel) { - CoreAPI.getInstance().getExecutorService().submit( - () -> redisSub.subscribe(BallRedisListener.INSTANCE, channel) - ); + public void subscribeRaw(@NotNull String... channels) { + CoreAPI.getInstance().getExecutorService().submit(() -> { + try { + redisSub.subscribe(BallRedisListener.INSTANCE, channels); + } catch (Exception | Error e) { + e.printStackTrace(); + } + }); } /** diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java index 8a51458..2b5faca 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java @@ -15,23 +15,26 @@ public class BallRedisListener extends JedisPubSub { @Override public void onMessage(String channel, String message) { - if (channel.startsWith(BallAPI.getInstance().getBallConfig().getChannelPrefix())) { - channel = channel.substring(BallAPI.getInstance().getBallConfig().getChannelPrefix().length()); - } - BallMessage ballMessage = CoreAPI.getInstance().getGson().fromJson(message, BallMessage.class); - BallAPI ballAPI = BallAPI.getInstance(); - EventBus eventBus = ballAPI.getEventBus(); - if (ballMessage.getReceiverType() != null && ballMessage.getReceiverType() != ballAPI.getLocalServerInfo().getType()) { - return; - } - if (ballMessage.getReceiverID() != null && !ballAPI.isLocalServer(ballMessage.getReceiverID())) { - return; - } - try { - eventBus.post(new MessageReceivedEvent(channel, ballMessage)); - } catch (Exception | Error e) { - e.printStackTrace(); - } + CoreAPI.getInstance().getExecutorService().submit(() -> { + try { + String finalChannel = channel; + if (finalChannel.startsWith(BallAPI.getInstance().getBallConfig().getChannelPrefix())) { + finalChannel = finalChannel.substring(BallAPI.getInstance().getBallConfig().getChannelPrefix().length()); + } + BallMessage ballMessage = CoreAPI.getInstance().getGson().fromJson(message, BallMessage.class); + BallAPI ballAPI = BallAPI.getInstance(); + EventBus eventBus = ballAPI.getEventBus(); + if (ballMessage.getReceiverType() != null && ballMessage.getReceiverType() != ballAPI.getLocalServerInfo().getType()) { + return; + } + if (ballMessage.getReceiverID() != null && !ballAPI.isLocalServer(ballMessage.getReceiverID())) { + return; + } + eventBus.post(new MessageReceivedEvent(finalChannel, ballMessage)); + } catch (Exception | Error e) { + e.printStackTrace(); + } + }); } @Override