简单易用的FancyMenu Api脚本
教程-KubeJS教程浏览 730回复 0发布于 2025-07-11 16:19:38
该脚本将FancyMenu自身的部分Command以KJS脚本形式重新实现,旨在方便开发者在KJS脚本中控制玩家的gui展示和fm变量控制。
使用示例:
BlockEvents.rightClicked(event=>{
if (event.hand == "MAIN_HAND") {
//玩家右击方块会进入esc界面
FancyMenuApi.openGui(event.player,'pause_screen')
//log中打印玩家所有的fm变量
console.log(FancyMenuApi.setPlayer(event.player).getAllVars())
}
})
脚本主体:
const FancyMenuApi = {
/**
* @version v1.0.0
* @author WhiseNT
*/
classes:{
OpenGuiCommandPacket: Java.loadClass('de.keksuccino.fancymenu.networking.packets.commands.opengui.OpenGuiCommandPacket'),
CloseGuiCommandPacket: Java.loadClass('de.keksuccino.fancymenu.networking.packets.commands.closegui.CloseGuiCommandPacket'),
PacketHandler: Java.loadClass('de.keksuccino.fancymenu.networking.PacketHandler'),
Collection: Java.loadClass('java.util.Collection'),
VariableCommandPacket: Java.loadClass('de.keksuccino.fancymenu.networking.packets.commands.variable.command.VariableCommandPacket'),
VariableCommand: Java.loadClass('de.keksuccino.fancymenu.commands.VariableCommand'),
},
/**
* 从服务端打开玩家的GUI
* @param {Internal.Collection_<Internal.ServerPlayer_> | Internal.ServerPlayer_} targets
* @param {String} guiName
*/
openGui(targets,guiName) {
try {
let packet = new this.classes.OpenGuiCommandPacket()
packet.screen_identifier = guiName
if (targets instanceof this.classes.Collection) {
for (let player of targets) {
this.classes.PacketHandler.sendToClient(player, packet)
}
} else {
this.classes.PacketHandler.sendToClient(targets, packet)
}
} catch (error) {
console.log(error)
}
},
/**
* 从服务端关闭玩家的GUI
* @param {Internal.Collection_<Internal.ServerPlayer_> | Internal.ServerPlayer_} targets
* @param {String} guiName
*/
closeGui(targets,guiName) {
try {
let packet = new this.classes.CloseGuiCommandPacket()
if (targets instanceof this.classes.Collection) {
for (let player of targets) {
this.classes.PacketHandler.sendToClient(player, packet)
}
} else {
this.classes.PacketHandler.sendToClient(targets, packet)
}
} catch (error) {
console.log(error)
}
},
/**
* 获取玩家的fm变量
* @param {Internal.ServerPlayer_} player
* @param {String} varName
*/
getVar(player,varName) {
try {
if (varName != null) {
let packet = new this.classes.VariableCommandPacket();
packet.set = false;
packet.variable_name = varName;
this.classes.PacketHandler.sendToClient(player, packet);
}
} catch (ex) {
ex.printStackTrace();
}
},
/**
* 设置玩家的fm变量
* @param {Internal.ServerPlayer_} player
* @param {String} varName
*/
setVar(player,varName,value) {
try {
if ((varName != null) && (value != null)) {
let packet = new this.classes.VariableCommandPacket();
packet.set = true;
packet.variable_name = varName
packet.set_to_value = value
packet.feedback = false
this.classes.PacketHandler.sendToClient(player, packet);
}
} catch (ex) {
ex.printStackTrace();
}
},
/**
* 获取玩家的所有fm变量
* @param {Internal.ServerPlayer_} player
* @returns {Internal.ArrayList_}
*/
getAllVars(player) {
return this.classes.VariableCommand.CACHED_VARIABLE_SUGGESTIONS.get(player.uuid.toString())
},
/**
* 以特定玩家为对象
* @param {Internal.ServerPlayer_} player
*/
setPlayer(player) {
this.player = player
return {
getVar(varName) {
FancyMenuApi.getVar(player,varName)
},
setVar(varName,value) {
FancyMenuApi.setVar(player,varName,value)
},
getAllVars() {
return FancyMenuApi.getAllVars(player)
},
openGui(guiName) {
FancyMenuApi.openGui(player,guiName)
},
closeGui(guiName) {
FancyMenuApi.closeGui(player,guiName)
}
}
}
}
帖子打赏
参与人数打赏物品(0)
正在加载内容…
回复帖子善语结善缘,恶语伤人心。要记得文明发言哦!
登录后参与讨论登录账号后即可发表您的回复和看法
