版本:1.19.4
如题,比如如何让玩家拿着石剑攻击生物和其他玩家时被攻击的玩家获得10秒的凋零效果,尽量包含被横扫到的玩家和生物。
如题,比如如何让玩家拿着石剑攻击生物和其他玩家时被攻击的玩家获得10秒的凋零效果,尽量包含被横扫到的玩家和生物。
可以写一个进度,像这样复制代码我们假设这个进度的命名空间id叫buff:stone_sword,触发的函数也叫buff:stone_sword,那函数就写成复制代码可以包含被横扫的生物,实际上,这个写法其实完全不能检测哪些生物被玩家用石剑砍了,就算玩家主手石剑,副手用弓射了一发也一样能触发
- {
 
-     "criteria": {
 
-         "asdfaesd": {
 
-             "trigger": "player_hurt_entity",
 
-             "conditions": {
 
-                 "player": {
 
-                     "equipment": {
 
-                         "mainhand": {
 
-                             "item": "minecraft:stone_sword"
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-     },
 
-     "rewards": {
 
-         "function": "buff:stone_sword"
 
-     }
 
- }
- advancement revoke @s only buff:stone_sword
 
- effect give @e[distance=..6,nbt={HurtTime:10s}] minecraft:wither 10

 本帖最后由 dh381 于 2023-3-23 00:00 编辑 
复制代码
这样写进度可以检查伤害来源,就能避免拿弓射也触发进度,然后函数部分可以照抄楼上的方法了
- {
 
-     "criteria": {
 
-         "asdfaesd": {
 
-             "trigger": "player_hurt_entity",
 
-             "conditions": {
 
-                 "player": {
 
-                     "equipment": {
 
-                         "mainhand": {
 
-                             "item": "minecraft:stone_sword"
 
-                         }
 
-                     }
 
-                 },
 
-                 "damage": {
 
-                     "type": {
 
-                        "is_projectile": false
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-     },
 
-     "rewards": {
 
-         "function": "buff:stone_sword"
 
-     }
 
- }
这样写进度可以检查伤害来源,就能避免拿弓射也触发进度,然后函数部分可以照抄楼上的方法了
 本帖最后由 黑茶RGO 于 2023-3-23 00:24 编辑 
那除了避免弓箭伤害,如何防止砍怪的瞬间周围没被砍的怪物被火烧,以及掉岩浆时也中凋零。以及这样能否让拿着石剑的玩家砍其他玩家时也会施加凋零buff
dh381 发表于 2023-3-22 23:50
这样写进度可以检查伤害来源,就能避免拿弓射也触发进度,然后函数部分可以照抄楼上的方法了
...
那除了避免弓箭伤害,如何防止砍怪的瞬间周围没被砍的怪物被火烧,以及掉岩浆时也中凋零。以及这样能否让拿着石剑的玩家砍其他玩家时也会施加凋零buff
 本帖最后由 Muggle2077 于 2023-3-23 19:53 编辑 
方法一:检测玩家近战攻击实体,然后用视线追踪找到被攻击的实体。
方法二:所有受伤实体用 execute on attacker 选择攻击者并检测其是否符合条件。
方法三:给实体分配 UID 并将 UID 转换为二进制,用标签存储在实体上。使用进度检测玩家攻击具有某个标签的实体。在具有 minecraft:ick 标签的函数中将检测结果转换回十进制并与实体的 UID 进行比较,确定被攻击的实体。
方法一:检测玩家近战攻击实体,然后用视线追踪找到被攻击的实体。
方法二:所有受伤实体用 execute on attacker 选择攻击者并检测其是否符合条件。
方法三:给实体分配 UID 并将 UID 转换为二进制,用标签存储在实体上。使用进度检测玩家攻击具有某个标签的实体。在具有 minecraft:ick 标签的函数中将检测结果转换回十进制并与实体的 UID 进行比较,确定被攻击的实体。
 本帖最后由 dh381 于 2023-3-23 22:37 编辑 
那就需要改成这样,这样的进度可以排除弹射物,火焰和药水的伤害,另外这个进度判据本身就可以判断玩家之间攻击
复制代码
黑茶RGO 发表于 2023-3-23 00:06
那除了避免弓箭伤害,如何防止砍怪的瞬间周围没被砍的怪物被火烧,以及掉岩浆时也中凋零。以及这样能否让 ...
那就需要改成这样,这样的进度可以排除弹射物,火焰和药水的伤害,另外这个进度判据本身就可以判断玩家之间攻击
- {
 
-     "criteria": {
 
-         "asdfaesd": {
 
-             "trigger": "player_hurt_entity",
 
-             "conditions": {
 
-                 "player": {
 
-                     "equipment": {
 
-                         "mainhand": {
 
-                             "item": "minecraft:stone_sword"
 
-                         }
 
-                     }
 
-                 },
 
-                 "damage": {
 
-                     "type": {
 
-                        "is_projectile":false,
 
-                        "is_fire":false,
 
-                        "is_magic":false
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-     },
 
-     "rewards": {
 
-         "function": "buff:stone_sword"
 
-     }
 
- }
 本帖最后由 无敌三脚猫 于 2023-3-23 22:55 编辑 
我昨天就这么写了,不过damage的type里无论写什么都没有用,不知道为啥
而且damage的direct_entity也没有用,不然用direct_entity也能判断是不是弓箭射的
dh381 发表于 2023-3-23 22:35
那就需要改成这样,这样的进度可以排除弹射物,火焰和药水的伤害,另外这个进度判据本身就可以判断玩家之 ...
我昨天就这么写了,不过damage的type里无论写什么都没有用,不知道为啥

而且damage的direct_entity也没有用,不然用direct_entity也能判断是不是弓箭射的
 本帖最后由 无敌三脚猫 于 2023-3-26 10:51 编辑 
原来"is_projectile":false之类的内容只在玩家远离受害者时生效,远距离射击时才不会触发触发这个进度
我之前在测试时一直是近距离射击导致触发这个进度,所以以为这个写法没用
mojangの奇妙逻辑
不对,看错了,是有一定距离才会设置正确地设置direct_entityhttps://bugs.mojang.com/browse/MC-137427
也不对,为什么我的direct_entity还是检测不了,算了当我没说
其实,你这个写法也不满足“防止砍怪的瞬间周围没被砍的怪物被火烧,以及掉岩浆时也中凋零”,就算damage的type能用,跟后面的指令也没有关系,还是会有刚好在同一时刻受伤的实体被指令选中
dh381 发表于 2023-3-22 18:24
那就需要改成这样,这样的进度可以排除弹射物,火焰和药水的伤害,另外这个进度判据本身就可以判断玩家之 ...
我之前在测试时一直是近距离射击导致触发这个进度,所以以为这个写法没用
mojangの奇妙逻辑
不对,看错了,是有一定距离才会设置正确地设置direct_entityhttps://bugs.mojang.com/browse/MC-137427
也不对,为什么我的direct_entity还是检测不了,算了当我没说
其实,你这个写法也不满足“防止砍怪的瞬间周围没被砍的怪物被火烧,以及掉岩浆时也中凋零”,就算damage的type能用,跟后面的指令也没有关系,还是会有刚好在同一时刻受伤的实体被指令选中