1.12.2 api
EntityRegainHealthEvent 这个事件有一个方法 setAmount()可以设置回复生命的数值,我设置了10点血。但是实际游戏里,我吃肉将饥饿值回满后每0.5s(大概)就会回复10点血,也就是血量10点10点的一直加(很快)。正常情况是三四秒回一次血
请问怎么弄这个回血间隔,这样太快了
EntityRegainHealthEvent 这个事件有一个方法 setAmount()可以设置回复生命的数值,我设置了10点血。但是实际游戏里,我吃肉将饥饿值回满后每0.5s(大概)就会回复10点血,也就是血量10点10点的一直加(很快)。正常情况是三四秒回一次血
请问怎么弄这个回血间隔,这样太快了
能不能新建一个Map<UUID,Double> playerRegainMap计数一下
对每次回血进行计数
然后每次回血时计算
复制代码
对每次回血进行计数
然后每次回血时计算
- double cnt = Objects.nonNull(playerRegainMap.get(player.getUniqueId())) ?
- playerRegainMap.get(player.getUniqueId()) : 0;
- cnt += 0.5;
- if (cnt >= regainInterval){
- cnt = 0;
- } else {
- event.setCancelled(true);
- }
- playerRegainMap.put(player.getUniqueId(),cnt);
吃饱之后一阵子,饱和度超额,半秒回一次血是正常情况,后面4秒回一次血也是正常情况
“1.12.2 api”这个词意义不明,我只能从事件名字上看出你用的是bukkit,你直接说1.12.2bukkit或者1.12.2spigot不就好了吗
setAmount之前,对玩家用getSaturation获取一下饱和度,大于0的话就不setAmount了
“1.12.2 api”这个词意义不明,我只能从事件名字上看出你用的是bukkit,你直接说1.12.2bukkit或者1.12.2spigot不就好了吗
setAmount之前,对玩家用getSaturation获取一下饱和度,大于0的话就不setAmount了
无敌三脚猫 发表于 2023-2-12 00:00
吃饱之后一阵子,饱和度超额,半秒回一次血是正常情况,后面4秒回一次血也是正常情况
“1.12.2 api”这个词 ...
但是这样写之后,吃饱了一血一血回复,只有当饱和度低于0才正常,但是饱和度低于0的话很快就会饥饿,然后不回血。所以我还是选择计时器回血。
我那个写法大概有点问题,你也可以用System.currentTimeMills();通过计算时间差的方式来控制