发表于 2023-1-30 16:05:50

Script Api - 实例:实体显示生命

显得没事,今天再出一期教程
话不多说,上代码
function Tick1(){
system.run(Tick1)
for(let player of Array.from(world.getPlayers())){
for(let entity of player.dimension.getEntities()){
if(entity.getComponent('health') != undefined&&entity.typeId != 'minecraft:player'){
entity.nameTag = `${entity.getComponent('health').current}/${entity.getComponent('health').value}`
}
}
}
system.run(Tick1)
以上代码就可以让实体显示血量了
原理:首先,要循环检测循环改,因为呢1.19.70没有tick了,所以用system.run()来代替,效果不能说是互不相干吧,几乎就是一模一样,循环的代码就是
function 函数名(){
system.run(函数名)
//要执行的js代码
}
system.run(函数名)
因为要修改实体嘛,所以第一步是获取,由于gt的限制,需要先获取纬度,那我们这先获取玩家,遍历一下,player.dimension就是该玩家所在纬度[不在的也没改的必要]
player.dimension这就是一个Dimension类,后面直接用Dimension的方法getEntities()返回该纬度所有实体,
然后我们再对这个进行遍历,对每个实体进行单独操作
,但是获取了,我们还要进一步筛选,并不是每个实体都有生命值的,比如掉落物,你肯定要出问题,还有就是玩家,这个没显血的必要了吧,用if排除了
如果没有生命值,那entity.getComponent('health')肯定不能获取,自然是undefined,如果是玩家那entity.typeId肯定是minecraft:player,排除了
最后,终于可以对实体进行操作了
我们可以直接修改nameTag,让他等于实体当前生命值,也就是entity.getComponent('health').current,current换成value,那就是最大生命值。
感觉这一帖好氵

巅疯狂魔 发表于 2023-1-30 16:39:41

感谢分享

果宝呐呐呐 发表于 2023-1-30 21:55:04

水中干货[哔哩_脱单]

果宝呐呐呐 发表于 2023-1-30 22:20:08

但不是整数而是浮点数啊,这个问题困扰我很久了

发表于 2023-1-31 08:11:01

微笑:) 发表于 2023-1-30 22:20
但不是整数而是浮点数啊,这个问题困扰我很久了

你可以用Math.ceil方法来让他显示整数

发表于 2023-1-31 08:15:16

显示整数生命值的代码在这
function Tick1(){
system.run(Tick1)
for(let player of Array.from(world.getPlayers())){
for(let entity of player.dimension.getEntities()){
if(entity.getComponent('health') != undefined&&entity.typeId != 'minecraft:player'){
entity.nameTag = `${Math.ceil(entity.getComponent('health').current)}/${entity.getComponent('health').value}`
}
}
}
system.run(Tick1)

其实就是对entity.getComponent('health').current用了Math.ceil()方法

叶清玄 发表于 2023-2-1 20:06:41

看懂了,感谢分享

MC平明 发表于 2023-2-3 19:21:36

废了,支持
页: [1]
查看完整版本: Script Api - 实例:实体显示生命