【原版模组教程】对玩家的攻击检测和受击检测
13ovo13
编辑于 2021年08月25日 17:36

在b站上看到许多关于此内容的教学,但几乎是基岩版的专享,由于很多语法上的不同,无法应用在Java版,不过此专栏的检测教学是Java版,版本为1.16.5。

在开始前,需要新建一个数据包,该数据包仅涉及自定义进度,函数。

我们需要有一个当玩家攻击实体时,会自动执行函数的数据包,流程大概是:循环一个攻击检测{玩家做出了攻击---->攻击被检测---->执行某个函数}

要检测玩家的攻击,我们可以使用进度帮助我们做到这一点,例如,现在有一个自定义进度:

命名空间/advancements/a/ad

是不是感觉头昏脑涨?别担心,看懂了就十分简单。

我们只需要看底下的criteria和rewards,其余都是一些华而不实的东西。

criteria规定了这个进度的触发器,即minecraft:player_hurt_entity,当玩家伤害生物时便会触发这个进度,"qq&#​34;是一个条件名,只要不和其余进度条件名相同即可。

rewards为这个触发进度的奖励,奖励其内部的"function&#​34;: "dataname:a&#​34;,效果等同于/function dataname:a,你可以将dataname:a替换为其他函数。

此外,由于规定了"show_toast&#​34;: false,"announce_to_chat&#​34;: false,"hidden&#​34;: true,所以玩家触发进度时不会受到任何提示,只会在L键打开的进度列表中有该进度的一个图标。

进度写好后,只需要在你的函数dataname:a中,写入指令:advancement revoke @s only dataname:a/ad这里为你的进度文件路径,格式为:{命名空间:路径}),以此来取消掉这个进度,以便下一次这个进度仍能被触发。

例如:

命名空间:a

这样,当你攻击生物时,就会在你的聊天框中发送提示“你攻击了生物”。

如果要靠同样的方法来做到受击检测,你只需要修改进度json文件,即可。(玩家受击的触发器:minecraft:entity_hurt_player

具体有关进度的知识可以前往wiki查看:https://minecraft.fandom.com/zh/wiki/Minecraft_Wiki

mcbbs上也有进度相关的教程:https://www.mcbbs.net/thread-685310-1-1.html