史莱姆汉化组 发表于 2024-7-15 20:42:53

新版本我的世界服务器的一些坑

我的世界不加execute就用@s @p @e是无效的,如果插件里有需要使用@s @p @e可能导致插件无法正常运行,下面是一个用jsboot build的一个例子:

fakeplayer/.jsboot/src/main.js:
const jsboot = require("jsboot");
jsboot.insertPointSet("com.jsboot.mod"); // 设置程序输入点

const fakePlayer = jsboot.createFakePlayer({
    name: "Steve",
    uid: new Date().getTime() + "" + ~~(Math.random() * 100),
    pluginBind: ["player-sign::control-into"],
    tlm: jsboot.tlm.steve.steve,
    op: true // 设置管理权限
})
function changePlayerPosition(){
    if (jsboot.server.player.includes("Je_OwO")){
      const position = jsboot.server.player.where("Je_OwO", "x y z");
      fakePlayer.command(`/tp @s ${position}`);
    }
}
jsboot.listener.create('player', (e)=>{
    changePlayerPosition();
})
changePlayerPosition();上面的代码看似正常,实际不太正常。请看到fakePlayer.command('/tp @s ${position}');这一行,用了@s,这似乎不太正确,实际告诉我们的确无法正常使用。




那上面的代码如何修改呢?


fakePlayer.command('/tp @s ${position}')
改为
fakePlayer.command('/tp @s ${position}').commandInsert("@s", fakePlayer.name)

或者直接用js原生的replace
String.prototype.replaceAll = function(s1, s2){return this.split(s1).join(s2)}
fakePlayer.command('/tp @s ${position}'.replaceAll("@s", fakePlayer.name));




此外,我们还可以直接修改jsboot的源代码
找到app/.jsboot/public/main/player/player.dg,按下Ctrl+F找
JSApp.object("command", "function", OSE_MOTe)改为
JSApp.object("command", "function", OSE_History, dejson(OSE_MOTe).name)
将OSE_MOTe改为OSE_History(OSE_Classic已弃用)能够使命令转化为历史命令,随后用解析过的OSE_MOTe的name作为修改




如果说实在还不会,还可以在打包的时候指定
在使用jsboot build命令时,我们写:
echo WHose_MOTe_NAME_PLACEAPP_&arp~S&arp~_C > build.txt & jsboot build -exec build.txt
只不过只对/src目录的有效,其它目录无效
页: [1]
查看完整版本: 新版本我的世界服务器的一些坑