把 JS 导入我的世界服务器,实质是把 .js 文件放进服务端指定的脚本目录,再让对应的宿主引擎去加载它Java 版走 ScriptCraft 插件、KubeJS 模组或外部 Node 进程,基岩版走行为包里的 Script API;路径放错、引擎版本和服务端版本对不上,是绝大多数人卡住的地方。
我的世界服务器怎么导入js脚本:先认清”谁来执行你的代码”
原版服务端不认识 JavaScript,你把一个 .js 文件丢进服务器根目录,它不会自己跑起来,因为没有解释器去读它,所以第一步不是写代码,而是选一个宿主,目前主流的四条路,差别很大:
| 方案 | 适用服务端 | 脚本存放位置 | 生效方式 |
|---|---|---|---|
| ScriptCraft 插件 | Java 版 Spigot/Paper 等 Bukkit 系 | plugins/scriptcraft/plugins/ |
游戏内 /js refresh() |
| KubeJS 模组 | Java 版 Forge/Fabric/NeoForge | kubejs/server_scripts/ |
/reload 或 /kubejs reload server_scripts |
| 行为包 Script API | 基岩版官方服务端 BDS | behavior_packs/<包名>/scripts/ |
/reload 或重启 |
| 外部 Node 进程 | 任意(通过 RCON 通信) | 任意位置 | 重启该进程 |
业内专家指出,选型的判断依据其实很简单:你要改的是游戏逻辑,还是只想让外部程序发指令,改逻辑用前三种,发指令用第四种。
ScriptCraft:老牌方案,适合写小工具
这是 Bukkit 生态里存在时间最长的 JS 插件之一,操作路径如下:
- 从 SpigotMC 的插件页面下载对应 Minecraft 版本的 jar,丢进
plugins/目录; - 首次启动后,服务端会自动生成
plugins/scriptcraft/,里面plugins/子目录就是你的工作区; - 自己建一个文件夹,
plugins/scriptcraft/plugins/mycode/,把hello.js放进去; - 重启服务端,游戏内输入
/js 1+1,返回 2 说明引擎已就绪; - 改完代码不用重启,输入
/js refresh()即可热重载。
常见的写法是注册事件和自定义命令:
command('hi', function(args, player){
player.sendMessage('你好,' + player.name);
});
events.on('block.BreakEvent', function(evt){
// evt.block、evt.player 都可以直接用
});
小提示:如果你的服务器装了别的插件,/js 可能被占用,这时用 /jsp 别名,ScriptCraft 更新节奏跟着社区走,版本落后于最新版 Minecraft 是常态,开新版服务端前先确认插件页面写的兼容范围。
KubeJS 服务端脚本放哪个文件夹?路径、命名与重载命令
这个问题在搜索里出现频率很高,答案很明确:kubejs/server_scripts/,整个 KubeJS 的目录在服务端根目录下的 kubejs/,里面按执行时机分三层:
startup_scripts/注册物品、方块这类启动期内容,改完必须重启;server_scripts/配方、战利品表、事件监听,支持热重载;client_scripts/纯客户端,专服上放这里不会生效,别白费功夫。
文件名随便起,后缀是 .js,子文件夹会自动递归加载,写好之后 OP 执行 /kubejs reload server_scripts,或者在支持的服务端上直接 /reload。
ServerEvents.recipes(event => {
event.shaped('minecraft:diamond_block', [
'DDD', 'DDD', 'DDD'
], { D: 'minecraft:diamond' });
});
需要提前说明一个坑:KubeJS 用的是自研脚本引擎,不是浏览器环境,没有 document、没有 window、也装不了 npm 包,能用的 API 全部来自 KubeJS 自己的文档,把它当”长得像 JS 的配置语言”来理解,反而少走弯路。
外部 Node 进程 + RCON:只发指令的轻量路线
如果你想让一个 JavaScript 程序去读服务器状态、定时广播、做跨服通知,可以不必碰插件,开启 RCON 就行:
- 在
server.properties里设置enable-rcon=true、rcon.port=25575、rcon.password=你的密码; - 重启服务端,用
npm i rcon-client装依赖; - 连接后调用
conn.send('/say 大家好')即可发送命令。
局限也很清楚:它只能单向发命令,收不到方块破坏、玩家加入这类游戏事件,想要事件级交互,还是得回到插件或模组方案,顺带区分一个容易混淆的东西mineflayer 这类库是把自己伪装成客户端连进服务器,视角是玩家不是服务端,别和”导入服务器”搞混。
我的世界基岩版服务器js脚本教程:行为包写法与加载
基岩版的 JS 是官方支持的,走的是附加包体系,和 Java 版插件完全不是一回事。
行为包结构与 manifest 关键字段
- 在服务端目录下建
behavior_packs/你的包名/; - 里面放
manifest.json和scripts/main.js; manifest.json的两个关键块:modules里要有一条"type": "script"、"language": "javascript"、"entry": "scripts/main.js";dependencies里要声明@minecraft/server模块及其版本号;- 版本号必须按微软 Learn 平台 Minecraft 创作者文档给出的稳定版填写,写错会直接加载失败。
然后在世界目录的 world_behavior_packs.json 里登记包 ID 和版本,重启服务端,新版 BDS 支持 /reload 热重载脚本,老版本只能重启进程。
代码长这样:
import { world, system } from "@minecraft/server";
world.afterEvents.playerSpawn.subscribe(ev => {
ev.player.sendMessage("欢迎回来");
});
注意两点:使用 beta 版模块时,世界设置里要打开对应的实验性开关;不同大版本之间 API 有过重命名,网上抄来的代码先核对文档再贴。
js 脚本和 Java 插件哪个好:按需求选,别按喜好选
这是新手最容易纠结的问题,直接给结论:
- 只想改配方、加指令、做小玩法:KubeJS 或 ScriptCraft 更划算,改一行存一次,
/reload就见效,不用配 JDK、不用打包; - 要做深度性能优化、复杂网络同步、长期维护的商业服:Java 插件仍然是主流,工具链成熟,社区库多,出问题能查到答案;
- 基岩版服务端:没有第二个选择,官方 Script API 就是唯一正路。
行业共识认为,脚本层的性能开销主要来自高频事件回调。tick、playerMove 这类事件里做重计算,服务器 TPS 会明显下滑,能放到低频事件里的逻辑,就别塞进每帧执行。
自己开服还是租服:费用差在哪
JS 方案本身的成本是零,插件和模组都开源免费,真正的支出在服务端:
- 本地开服:电费加带宽,适合自己和朋友玩,公网联机要处理端口映射;
- 面板服或云主机:按月计费,配置越高越贵,跑 KubeJS 的整合服内存建议 4G 起步,基岩版 BDS 因为要跑脚本引擎,1核2G 容易吃紧;
- 关键差别在热重载权限:部分面板服默认关闭
/reload和文件管理器,改脚本得走 FTP,效率差不少,下单前问清楚。
国内服务器部署的几个实际坑
用国内云主机开服时,server.properties 里的 online-mode 和正版验证、安全组端口放行、防火墙规则要一次性配好,另外上传 .js 文件时注意编码,统一保存成 UTF-8 无 BOM,带 BOM 的文件在部分引擎里会直接报语法错误,这个坑几乎人人都踩过一次,路径里也别用中文和空格,Linux 下大小写敏感,Scripts 和 scripts 是两个目录。
关于我的世界服务器导入js脚本的常见问题
Q:我的世界服务器导入js脚本后没反应,怎么排查?
按顺序看三件事:文件是不是放在引擎认的目录里、服务端日志有没有抛出脚本错误、引擎版本和服务端版本是否匹配,九成问题出在第一步文件放对了位置但没触发重载,或者放错了一层目录。
Q:脚本改了要重启服务器吗?
取决于方案,ScriptCraft 用 /js refresh(),KubeJS 的 server_scripts 用 /reload,基岩版新版 BDS 用 /reload,外部 Node 进程直接重启该进程即可,只有 KubeJS 的 startup_scripts 和改动了 manifest.json 的情况必须完整重启服务端。
Q:插件服和模组服能同时装 JS 引擎吗?
不能混装,ScriptCraft 属于 Bukkit 插件,只能跑在 Spigot/Paper 系;KubeJS 是模组,只能跑在 Forge/Fabric/NeoForge 系,两套加载器互不兼容,选一边就得放弃另一边。
把文件放进对的目录、让引擎版本和服务端对上、用对重载命令,这三件事做到,JS 就能稳稳跑在你的服务器里,剩下的是写代码的手艺活,那部分没有捷径,只有多改多试。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/794350.html


