本篇教程由作者设定使用 CC BY-NC-SA 协议。

如图所示,ARIP配件包添加了几个瞄具,它们在同一镜座上安装了多个瞄具,而目前tacz并不能快速的切换瞄具,只能玩家手动切换,使它们在激烈的战斗中失去了意义。

使用KubeJS让你快速切换瞄具-第1张图片使用KubeJS让你快速切换瞄具-第2张图片
使用KubeJS让你快速切换瞄具-第3张图片

因此,我使用KubeJS注册了一个按键,只要按下它就可以快速切换同一镜座上的多个瞄具。

注册按键方法同KubeJS注册按键,这里仅展示server_scripts中的内容

NetworkEvents.dataReceived('global.toggle_sight.consumeClick', (event) => {
    const { player } = event
    const { mainHandItem } = player
    const { nbt } = mainHandItem
    const scope_list = [
        [
            'arip:sight_eotech_hhs5_ogl_ftc_nozoom',
            'arip:sight_eotech_hhs5_ogl_ftc',
            'arip:sight_eotech_hhs5_ogl_ftc_aiminlaser'
        ],
        ['arip:sight_eotech_hhs8_nozoom', 'arip:sight_eotech_hhs8'],
        [
            'arip:sight_vortex_razorhdg3_6t36x56_but_venom_rd',
            'arip:sight_vortex_razorhdg3_6t36x56'
        ]
    ]

    if (nbt != undefined && nbt.contains('GunId')) {
        let scope_id = String(nbt.AttachmentSCOPE?.tag?.AttachmentId)

        scope_list.forEach((scope) => {
            if (scope.indexOf(scope_id) != -1) {
                let i = scope.indexOf(scope_id)
                nbt.AttachmentSCOPE.tag.AttachmentId =
                    scope[(i + 1) % scope.length]
            }
        })
    }
})

tacz的枪都带有nbt,通过读取nbt,可以获取瞄具id;通过修改nbt,可以修改瞄具。