4e29246441c49929ac4118ea628da163873c0294
HamsterBall
基于 Redis 的 Minecraft 服务端通用消息中间件
该插件依赖于 仓鼠核心
手动构建
- 将源代码下载或克隆至本地
- 在源代码根目录中打开命令行窗口
- 命令行窗口中执行
./gradlew clean build
- 构建成品在
build
文件夹
也可访问我的Jenkins网站获取最新版
安装步骤
- 关闭服务器
- 安装前置插件 HamsterCore
- 将 HamsterBall 放入 plugins 文件夹
- 启动服务器并生成默认配置文件
- 修改配置文件以符合预期
- 重启服务器
- 完成
环境变量
为了适配 docker 环境,本插件除了从 config.yml
中配置服务器信息以外,还支持从环境变量中读取
环境变量 | 描述 | 对应 config 值 |
---|---|---|
BALL_SERVER_ID | 本服务器唯一识别码,最长 32 字符 | server-info.id |
BALL_SERVER_NAME | 本服务端名称,用于展示给玩家看 | server-info.name |
开发
添加依赖
Gradle
// 添加仓库
repositories {
maven {
url = uri("https://maven.airgame.net/maven-public/")
}
}
dependencies {
// 对于 Bukkit 插件
compileOnly("cn.hamster3.mc.plugin:ball-bukkit:1.6.2")
// 对于 BungeeCord 插件
compileOnly("cn.hamster3.mc.plugin:ball-bungee:1.6.2")
}
Maven
<project>
<!--添加仓库-->
<repositories>
<repository>
<id>airgame-repo</id>
<name>AirGame Maven仓库</name>
<url>https://maven.airgame.net/maven-public</url>
</repository>
</repositories>
<dependencies>
<!--对于 Bukkit 插件-->
<dependency>
<groupId>cn.hamster3.mc.plugin</groupId>
<artifactId>ball-bukkit</artifactId>
<version>1.6.2</version>
</dependency>
<!--对于 BungeeCord 插件-->
<dependency>
<groupId>cn.hamster3.mc.plugin</groupId>
<artifactId>ball-bungee</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
</project>
使用 API
所有 API 相关的方法都位于 cn.hamster3.mc.plugin.ball.common.api.BallAPI
类中
使用方法为:BallAPI.getInstance().xxx
收发消息
若想要消息能够在不同的服务器之间互相正常收发,你必须按照以下步骤来做:
- 使用
BallAPI.getInstance().subscribe()
订阅一个消息频道(频道名称通常是你的插件名) - 使用
BallAPI.getInstance().getEventBus().register()
注册一个消息监听器 - 在消息监听器中对业务代码使用
@com.google.common.eventbus.Subscribe
注解
所有事件都位于 cn.hamster3.mc.plugin.ball.common.event
包中
示例
在下面这个例子中我将实现一个功能:跨服聊天
插件名称为:GlobalChat
第一步:监听 Bukkit 的聊天事件(省略通过BukkitAPI注册该监听器的代码)
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
import com.google.gson.JsonObject;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class ChatListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
JsonObject object = new JsonObject();
object.addProperty("name", player.getName());
object.addProperty("world", player.getWorld().getName());
object.addProperty("message", message);
BallAPI.getInstance().sendBallMessage("Chat", "playerChat", object);
event.setCancelled(true);
}
}
第二步:监听 MessageReceivedEvent 事件完成业务代码
import cn.hamster3.mc.plugin.ball.common.data.BallMessage;
import cn.hamster3.mc.plugin.ball.common.event.message.MessageReceivedEvent;
import com.google.common.eventbus.Subscribe;
import com.google.gson.JsonObject;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class BallListener {
@Subscribe
public void onMessageReceived(MessageReceivedEvent event) {
if (!"GlobalChat".equals(event.getChannel())) {
return;
}
String action = event.getAction();
switch (action) {
case "onPlayerChat": {
JsonObject object = event.getContentAsJsonObject();
String name = object.get("name").getAsString();
String message = object.get("message").getAsString();
String world = object.get("world").getAsString();
String format = String.format("[%s][%s]: %s", world, name, message);
for (Player player : Bukkit.getOnlinePlayers()) {
player.sendMessage(format);
}
break;
}
case "othersAction": {
// 处理其他业务代码
break;
}
}
}
}
第三步:在插件启动时注册上述两个监听器,并订阅 `GlobalChat` 频道
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
public class GlobalChatPlugin extends JavaPlugin {
@Override
public void onEnable() {
// 注册 ChatListener 事件监听器
Bukkit.getPluginManager().registerEvents(new ChatListener(), this);
// 注册 BallListener 事件监听器
BallAPI.getInstance().getEventBus().register(new BallListener());
// 订阅 GlobalChat 频道
// 只有在需要收到消息的子服中才需要订阅频道
// 如果一个子服只负责发送消息而不负责处理消息,则可以不用订阅频道
BallAPI.getInstance().subscribe("GlobalChat");
}
}
Description
仓鼠球:一个基于 Redis 的 Minecraft 服务端通用消息中间件
https://www.hamster3.cn/docs/minecraft-plugins/free-plugins/HamsterBall
1.8.1
Latest
Languages
Java
100%