本帖最后由 EmptyLava 于 2022-2-15 20:04 编辑
我有一个朋友,他不懂一下问题,没有金粒,我就来帮他发了。(他搞得是数据包)
例如我想要实现特殊nbt的铁剑命中敌人 敌人获得减速的效果,function写出来也实现了这一效果,但是我只会把全部相关指令设置为每tick执行的,实在是太占用性能了,有什么办法可以尽可能降低指令触发的频率,只检测到命中后才触发后续指令
反正就这类似的,我也搞不懂。
整理一下大概就是以下逻辑
数据包如何检测某个事件触发之后再执行之后的操作
我有一个朋友,他不懂一下问题,没有金粒,我就来帮他发了。(他搞得是数据包)
例如我想要实现特殊nbt的铁剑命中敌人 敌人获得减速的效果,function写出来也实现了这一效果,但是我只会把全部相关指令设置为每tick执行的,实在是太占用性能了,有什么办法可以尽可能降低指令触发的频率,只检测到命中后才触发后续指令
反正就这类似的,我也搞不懂。
整理一下大概就是以下逻辑
数据包如何检测某个事件触发之后再执行之后的操作
检查玩家攻击敌人时手持的物品是否包含特殊nbt即可
每tick循环是必要的
或者弄一个dummy虚拟变量,每当玩家造成伤害的时候检查手上物品
如果是就执行你所说的下一步命令
每tick循环是必要的
或者弄一个dummy虚拟变量,每当玩家造成伤害的时候检查手上物品
如果是就执行你所说的下一步命令
在数据包的data\命名空间\advancements下面放个json,随便什么名字,英文名就行,然后这个json里面写复制代码,而那个要触发的函数,第一行要写advancement revoke @s only 命名空间:进度名,也就是把这个进度剥夺掉,这样才能接着触发,第二行再写真正起作用的指令
上面那种写法,是玩家拿着带有{qwq:3}标签的铁剑打别的玩家触发,触发成就的人,执行函数的人,都是拿剑的玩家,而下面这种写法,触发成就的人是被打的玩家复制代码你可能想问这是怎么写出来的,看这边https://minecraft.fandom.com/zh/ ... N%E6%A0%BC%E5%BC%8F
- {
- "criteria": {
- "asdfaesd": {
- "trigger": "minecraft:player_hurt_entity",
- "conditions": {
- "player": {
- "equipment": {
- "mainhand": {
- "item": "minecraft:iron_sword",
- "nbt": "{qwq:3}"
- }
- }
- },
- "entity": {
- "type": "minecraft:player"
- }
- }
- }
- },
- "rewards": {
- "function": "命名空间:函数名"
- }
- }
上面那种写法,是玩家拿着带有{qwq:3}标签的铁剑打别的玩家触发,触发成就的人,执行函数的人,都是拿剑的玩家,而下面这种写法,触发成就的人是被打的玩家
- {
- "criteria": {
- "qwewrwqrdes": {
- "trigger": "minecraft:entity_hurt_player",
- "conditions": {
- "damage": {
- "direct_entity": {
- "type": "minecraft:player",
- "equipment": {
- "mainhand": {
- "item": "minecraft:iron_sword",
- "nbt": "{qwq:3}"
- }
- }
- }
- }
- }
- }
- },
- "rewards": {
- "function": "命名空间:函数名"
- }
- }
百度!啊!
模范菌 发表于 2022-2-15 11:40
百度!啊!
谁跟你讲什么都可以百度到的