开发环境:
Minecraft:1.20.1 Forge-47.4.0
KubeJS:2001.6.5-build.16
Rhino:2001.2.3-build.10
ProbeJS:6.0.1
Function Storage:1.20.1-1.2.12
Titanium:3.8.32
本教程核心依靠犀牛的 new JavaAdapter() 进行Java的方法重写 犀牛还是太好用了
let $StorageUpgradeItem = Java.loadClass("com.buuz135.functionalstorage.item.StorageUpgradeItem")
let $StorageUpgradeItem$StorageTier = Java.loadClass("com.buuz135.functionalstorage.item.StorageUpgradeItem$StorageTier")
let $Style = Java.loadClass("net.minecraft.network.chat.Style")
StartupEvents.registry("item", (event) => {
/**
*
* @param {string} name 名称
* @param {number} multiplier 倍率
*/
function addDrawerUpgrade(name, multiplier) {
let itemMultiplier = multiplier
let fluidMultiplier = itemMultiplier * 0.5
let controllerMultiplier = fluidMultiplier * 0.5
event.createCustom(`kubejs:${name}_upgrade`, () => {
return new JavaAdapter($StorageUpgradeItem, {
// 重写getStorageMultiplier()方法设置升级的倍率
getStorageMultiplier() {
return multiplier
},
// 这里重写的是Item.getName()方法混淆后的名称m_7626_
m_7626_(stack) {
if (Client.level) {
let _ = Component.translate(`item.kubejs.${name}_upgrade`)
_.setStyle($Style.EMPTY.applyTo(_.getStyle()))
return _
} else {
return Component.empty()
}
},
addTooltipDetails(key, stack, tooltip, advanced) {
let itemTranslateKey = "tooltip.kubejs.storage_upgrade.itemMultiplier"
let fluidTranslateKey = "tooltip.kubejs.storage_upgrade.fluidMultiplier"
let controllerTranslateKey = "tooltip.kubejs.storage_upgrade.controllerMultiplier"
// 显示物品容器的倍率
tooltip.add(Component.translate(itemTranslateKey, itemMultiplier).gray()) // .gray()也可以用.setStyle("gray")
// 显示流体容器的倍率
tooltip.add(Component.translate(fluidTranslateKey, fluidMultiplier).gray()) // .gray()也可以用.setStyle("gray")
// 显示控制器的范围
tooltip.add(Component.translate(controllerTranslateKey, controllerMultiplier).gray()) // .gray()也可以用.setStyle("gray")
}
}, $StorageUpgradeItem$StorageTier.DIAMOND)
}).tag("functionalstorage:upgrades")
// 生成物品模型文件, 由于createCutom()方法下没有.texture()方法, 只能通过JsonIO.write()方法去生成文件
JsonIO.write(`kubejs/assets/kubejs/models/item/${name}_upgrade.json`, {
"parent": "minecraft:item/generated",
"textures": {
// 纹理放在kubejs:item/upgrade/${name}
"layer0": `kubejs:item/upgrade/${name}`
}
})
}
// 示例
addDrawerUpgrade("steel", 10)
})