MC新人新
Java版中/damege指令的一种用法如下:
  1. damage <target> <amount> [<damageType>] [by <entity>] [from <cause>]
复制代码
根据中文及英文Wiki的说法,其中<target>是被伤害的目标;<entity>指伤害的直接来源,会影响击退方向;<cause>指则伤害的实际来源(如射箭的骷髅)。


但我经过测试,发现了问题。


简单来说就是,我执行了这个命令,<target>指定为一个生物(不妨称其为A),<entity>指定为生物B,<cause>指定为我自己(玩家)。
按照Wiki的说法,实际效果应该是A受到来自B方向的击退,但实际效果却是来自我自己。
再次执行了这个命令,A被杀死,掉出了经验,说明伤害的实际来源确实是玩家(我自己)。
在1.19.4,1.20,1.20.1测试均为如此(这个命令在1.19.4才被加入)。


不知道是bug还是我不会用,期待大佬解疑!

MC小沅
应该是个bug吧……我测试的时候<cause>部分的实体才是攻击后的决定击退方向的实体,而entity貌似并没有实际作用……至少我没有测试出来

剩哲伪旺
刚刚帮你实测了一下子,
target指的是目标生物,这点没错。
amount指的是伤害点数,这点也没错。
damagetype指的是伤害类型,这点也没错。
但是,by后面<entity>应该跟着的是伤害目标的击打,意思就是说该实体受到的伤害具体是由谁击打的。
而from后面<cause>就是来自该伤害的总执行者。
可以理解为:A击打了一个实体B,但是这个实体却是被C所伤。
如果<cause>参数不存在,则默认from参数是继承至<entity>的。
倒数第二行这个不存在,这个是我猜的,因为我打开游戏实际测试了之后,如果后面<cause>没有接,则默认<entity>会取代cause。

MC新人新
剩哲伪旺 发表于 2023-7-20 11:27
刚刚帮你实测了一下子,
target指的是目标生物,这点没错。
amount指的是伤害点数,这点也没错。

感谢实测,这些内容我先前已知晓。
希望你可以给予我有效的建议

无敌三脚猫
不是bug,是特性
不过你可以先召唤一个已驯服的生物,比如狼,把玩家做为主人,把狼作为伤害来源,不写cause,这样生物A会收到来自狼方向的击退,并且死后掉落经验,可以让狼隐身固定在生物B的位置,看起来就是受到来自B方向的击退了

MC新人新
无敌三脚猫 发表于 2023-7-20 15:06
不是bug,是特性
不过你可以先召唤一个已驯服的生物,比如狼,把玩家做为主人,把狼作为伤害来源,不写caus ...

感谢大佬解疑
不过对于命令这种技术性内容,存在影响使用的特性(而不称为bug),本人确实没见过
大佬的方法也存在不足之处。这样执行命令,会导致被攻击生物对狼产生仇恨,而非玩家,与预期效果不同;命令结束后,要杀死狼时会产生不希望出现的死亡效果

无敌三脚猫
MC新人新 发表于 2023-7-20 15:49
感谢大佬解疑
不过对于命令这种技术性内容,存在影响使用的特性(而不称为bug),本人确实没见过
大佬的 ...

哦,还有仇恨问题啊……那就再让玩家对生物A造成一次0伤害,选择没有击退的那种伤害类型,这样仇恨应该能到玩家身上
狼可以tp到虚空里杀死,这样就看不见了
这不是命令的特性,是受伤的特性,你射出一箭,被击中的生物也会以你的方位,而不是箭的方位被击退,不过这种事一般看不出来,除非tp

8784
我做了一些实验,不知道能否对你有所启发:
1.生成一个火球和一个恶魂,然后执行
/damage @e[type=ghast,limit=1] 50 minecraft:fireball by @e[type=fireball,limit=1] from @s
结果获得【见鬼去吧】进度,而其他指令都不行
2.朝地上乱射一箭,在50格外对骷髅执行
/damage @e[type=minecraft:skeleton,limit=1] 50 minecraft:arrow by @e[type=minecraft:arrow,limit=1] from @s
结果获得【狙击手的对决】进度,而其他指令都不行
3.用瞬间伤害II的药水瓶丢怪物,结果发现击退方向与药水瓶无关,只与怪物与玩家位置有关

这个第3点就很诡异,简直可以算作bug,应该和楼主的困惑有异曲同工之处
所以我有如下猜测:
一.by entity并非没有作用,从1,2就可以看出,在涉及间接实体的时候提供判定作用
二.wiki的表述不准确,当引入了 from cause 后情况就发生了变化,至少我们的实验结果都是这样
三.wiki中有提到“可用于指定弹射物或被激活的TNT为伤害的直接来源”,但是我用这两种实体作为by entity,却都无法改变击退方向,所以我觉得可能by entity是代码层面的,普通指令无法指定,毕竟这两种实体都是转瞬即逝,在造成伤害后就消失了
综上,我觉得是代码层面的问题,属于是Mojang乱来(

MC新人新
无敌三脚猫 发表于 2023-7-20 16:07
哦,还有仇恨问题啊……那就再让玩家对生物A造成一次0伤害,选择没有击退的那种伤害类型,这样仇恨应该能 ...

感谢答复
关于特性的问题是本人理解有问题

第一页 上一页 下一页 最后一页