一个基于 Forge 的 Minecraft 1.20.1 模组,为 KubeJS 增加网络能力:
- HTTP 请求(GET / POST)
- WebSocket 连接、收发与回调
- Minecraft
1.20.1 - Forge
47.x(当前项目为47.4.0) - Java
17 - KubeJS(
mods.toml中声明为必需)
- 准备好 Forge
1.20.1运行环境。 - 安装 KubeJS(以及其要求的依赖)。
- 将本模组 JAR 放入
.minecraft/mods(或服务器mods)目录。 - 启动后在模组列表确认
KubeJS HTTP (mkjs)已加载。
在项目根目录执行:
.\gradlew build构建产物位于:
build/libs/
本模组向 KubeJS 脚本暴露两个绑定对象:
HttpPluginWSPlugin
建议在 kubejs/server_scripts/*.js 中使用。
可用方法:
HttpPlugin.get(url)HttpPlugin.get(url, headersMap)HttpPlugin.post(url, jsonString)HttpPlugin.post(url, headersMap, jsonString)
示例:
ServerEvents.loaded(event => {
const getResult = HttpPlugin.get("https://httpbin.org/get");
console.log("GET result: " + getResult);
const headers = new java.util.HashMap();
headers.put("Authorization", "Bearer your-token");
headers.put("Content-Type", "application/json");
const body = JSON.stringify({ msg: "hello from KubeJS" });
const postResult = HttpPlugin.post("https://httpbin.org/post", headers, body);
console.log("POST result: " + postResult);
});可用方法:
WSPlugin.connect(url, onMessage, onOpen, onClose, onError)WSPlugin.connect(url, onMessage, onOpen, onClose, onError, autoReconnect, maxRetries, reconnectDelayMs)WSPlugin.send(connectionId, message)WSPlugin.close(connectionId)WSPlugin.isConnected(connectionId)
示例:
let wsId = null;
ServerEvents.loaded(event => {
wsId = WSPlugin.connect(
"wss://echo.websocket.events",
(message, url) => console.log("[WS message] " + message + " from " + url),
(url) => console.log("[WS open] " + url),
(reason, code, url) => console.log("[WS close] " + code + " " + reason + " " + url),
(error, url) => console.log("[WS error] " + error + " " + url)
);
if (wsId && WSPlugin.isConnected(wsId)) {
WSPlugin.send(wsId, "hello websocket");
}
});
ServerEvents.unloaded(event => {
if (wsId) WSPlugin.close(wsId);
});仓库已集成工作流:.github/workflows/release.yml。
当你推送符合格式 v[a].[b].[c] 的标签(如 v1.2.3)时,会自动:
- 使用 Java 17 构建项目。
- 打包
build/libs/*.jar。 - 创建或更新同名 GitHub Release,并上传 JAR。
常用命令:
git tag v1.2.3
git push origin v1.2.3当你向 main 或 master 推送代码时,会自动构建并发布 preview 版本。
规则:
- 每次发布前会删除旧的
previewrelease/tag。 - 因此仓库中始终只保留一个
preview版本。
- HTTP 请求为同步调用,避免在高频事件中直接大量请求。
- 建议网络调用都使用
try/catch。 - WebSocket 回调应尽量保持轻量逻辑。