开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

Minecraft(我的世界)苦力怕论坛

[BE教程] Script Api - 实例:实体显示生命

头像被屏蔽
发表于 2023-1-30 16:05:50 来自手机 | 显示全部楼层 |阅读模式 IP:安徽省
显得没事,今天再出一期教程
话不多说,上代码
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 来自手机 | 显示全部楼层 IP:福建省
感谢分享
2# 2023-1-30 16:39:41 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 2023-1-30 21:55:04 来自手机 | 显示全部楼层 IP:四川省
水中干货
3# 2023-1-30 21:55:04 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 2023-1-30 22:20:08 来自手机 | 显示全部楼层 IP:四川省
但不是整数而是浮点数啊,这个问题困扰我很久了
Screenshot_2023-01-30-22-18-32-45_5c8300b655012b1930f2e0a7b81bf6a9.jpg
4# 2023-1-30 22:20:08 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-1-31 08:11:01 来自手机 | 显示全部楼层 IP:安徽省
微笑:) 发表于 2023-1-30 22:20
但不是整数而是浮点数啊,这个问题困扰我很久了

你可以用Math.ceil方法来让他显示整数
5# 2023-1-31 08:11:01 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-1-31 08:15:16 来自手机 | 显示全部楼层 IP:安徽省
显示整数生命值的代码在这
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()方法

评分

参与人数 1铁粒 +1 收起 理由
果宝呐呐呐 + 1 感谢

查看全部评分

6# 2023-1-31 08:15:16 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 2023-2-1 20:06:41 来自手机 | 显示全部楼层 IP:广东省
看懂了,感谢分享
7# 2023-2-1 20:06:41 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 2023-2-3 19:21:36 | 显示全部楼层 IP:四川省
废了,支持
8# 2023-2-3 19:21:36 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-5-19 05:03

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号