开发环境:

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)
})