代码
ServerEvents.commandRegistry(event => {
const { commands: Commands, arguments: Arguments } = event
event.register(Commands.literal('print')
.then(Commands.argument('variable', Arguments.STRING.create(event))
.executes(c => printVariable(c.source.player, Arguments.STRING.getResult(c, 'variable')))
)
)
/**
* 打印函数
* @param {Internal.ServerPlayer} player
* @param {string} variableName
* @returns
*/
let printVariable = (player, variableName) => {
let str = `${variableName}`
if(str.split('.').length > 0){
player.tell(`Value of ${str}: ${strfolet(str)}`);
return 1;
}
else if(str.split('.').length.toFixed() == 0) {
let O_o = global[str] == undefined ? "没有此全局变量" : global[str]
player.tell(`Value of ${str}: ${O_o}`);
return 0;
}
}
})
/**
* 转换函数,字符转同名变量
* @param {string} str
*/
function strfolet(str) {
let parts = str.split('.'); // 将字符串以 . 分割成数组
let value = Object.assign({}, global); // 创建一个新的对象,避免直接修改全局对象
for (let i = 0; i < parts.length; i++) {
let part = parts[i];
let descriptor = Object.getOwnPropertyDescriptor(value, part); // 获取属性的描述符
if (descriptor && descriptor.hasOwnProperty('value')) {
value = descriptor.value; // 获取属性的值
} else {
// 如果属性不存在或者不可读,则返回 undefined
return undefined;
}
}
return value; // 返回最终的值
}
使用方法:
如果有global.Xp = 400
则在游戏中使用/print Xp 就会输出Value of Xp: 400
同时支持json对象,如有global.json = {...,Xp:400}
则在游戏中使用/print json.Xp 就会输出Value of json.Xp: 400
部分逻辑使用GPT,可能有所问题,但我使用下来没问题