TaCZ的无限子弹

本章涉及内容:按键注册和使用、forgeevent、loadclass、paint、玩家数据 涉及模组及版本:

  1. rhino-forge-2001.2.3-build.6

  2. tacz-1.20.1-1.0.3-all

  3. architectury-9.2.14-forge

  4. kubejs-forge-2001.6.5-build.16

  5. probejs-6.0.1-forge

完整代码 startup_scripts

主要部分

const $GunShootEvent = Java.loadClass("com.tacz.guns.api.event.common.GunShootEvent")
const $Integer = Java.loadClass("java.lang.Integer")
const $ModSyncedEntityData = Java.loadClass("com.tacz.guns.entity.sync.ModSyncedEntityData")
const $AbstractGunItem = Java.loadClass("com.tacz.guns.api.item.gun.AbstractGunItem")

ForgeEvents.onEvent($GunShootEvent,event=>{global.gse(event)})
global.gse = event =>{
    try{
        // 处理事件,如果为客户端则不处理
        if(event.logicalSide.isClient()) return;
        let item = event.getGunItemStack();
        // 获取玩家数据,判断玩家是否处于无限子弹模式
        if(event.getShooter().data.get("frenzyOpen"))
            item.nbt.merge({GunCurrentAmmoCount:$Integer.decode​(
                item.nbt.getInt("GunCurrentAmmoCount")+1+""
            )});
    }catch(err){
        console.warn(err);
    }
}

该代码获取枪械物品的nbt,然后将子弹改为不消耗

注册按键

关于注册按键

注册按键的汉化和处理 client_scripts

完整代码 server_scripts

一些注意事项

  1. 该项目只是作为示例,很多地方并不是最优解,可自行进行解决

  2. 如果对该项目代码部分不满可以将修改好的代码上传至gitee项目仓库

  3. 注册按键不要打包给服务器(具体看关于按键注册的注释)

Last updated