UID196429性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-12-18最后登录1970-1-1
| 本帖最后由 782 于 2022-5-20 20:20 编辑
物品(四) 武器进阶 一、前言
上一期,我们了解了武器的基本组件,
今天,我们就来给上一期制作的剑添加其他功能与事件。
本期教程假定读者已基本了解第八期(物品:基础)和上一期的内容。 提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!
二、正文 “minecraft:weapon”组件
上一期是基础武器的教程,但你可能希望能够在游戏中显示剑会造成的伤害点数。
要做到这一点,需要添加“minecraft:weapon”组件,即使它只是空的,这也足以让mc在内部知道,这是武器。
因此,如果将上述组件添加到上一期制作的武器的json文件中,现在将在其工具提示中看到 +10攻击伤害。
你可能在想“你为什么不在上一期添加这个?”答案是,我们将扩充这个组件,在本期教程中添加更多很酷的东西,所以我想把它分开讲述。
添加伤害时事件
如果你想做这样的事情,我们需要利用“minecraft:weapon”组件,并在武器击中实体时执行一个事件。
就像这样:
- "minecraft:weapon": {
- "on_hurt_entity": {
- "event": "demo:my_sword.hurt_entity"
- }
- }
复制代码
我们添加这一部分之后,那么每次用这把剑伤害实体时,它都会引发事件demo:my_sword.hurt_entity。
你可以随心所欲地命名它,但如果你有很多事件,建议有一定规则地命名,比较常用的是“命名空间:物品.名称”
例如,在这个示例中,demo是命名空间,my_sword指定事件运用在什么物品上,hurt_entity是该物品的事件名称。
我们可以用事件做我们想做的事。在下面这个例子中,我将做三件事:
- 25%的概率传送玩家
- 传送后,发出一条消息,让玩家知道发生了什么事。
- 消耗剑的耐久度
然后,回到my_sword.item.json,并在components部分之后添加一个像这样的新部分。
- "events": {
- "demo:my_sword.hurt_entity": {
- "sequence": [
- {
- "randomize": [
- {
- "weight": 1,
- "teleport": {
- "target": "holder",
- "max_range": [8, 8, 8]
- },
- "run_command": {
- "command": [
- "tellraw @s{\"rawtext\":[{\"text\":\"§a你的剑大显神威§r\"}]}"
- ]
- }
- },
- {
- "weight": 4
- }
- ]
- },
- {
- "damage": {
- "type": "durability",
- "target": "self",
- "amount": 1
- }
- }
- ]
- }
- }
复制代码 详解:
“sequence”用于执行多个事件,是数组,内含各个事件的JSON对象。
“randomize”定义了多个随机运行的事件,是数组,内含各个事件的JSON对象。
这里面还有其他的内容:
“weight”表示执行事件的概率,填写整数。
“teleport”是事件的组成部分之一,表示传送实体。它里面有两个组件:
- “target”指传送的实体,填写字符串。
这里的“holder”表示“拿着该物品的生物”,也就是你。 - “max_range”指传送的最大范围,是一个数组。
顺序(应该)是[x, y, z]。
“run_command”是事件组成的部分之一,表示执行命令。
其中的“command”定义要运行的命令,是一个数组,里面可以填写带有命令的字符串。 要注意的是,如果要在命令中使用双引号,必须使用转义符号(\),否则会引发重大错误!
不知道大家有没有注意,在主事件下面还有一个空的事件,这个空的事件可以理解为虚拟事件。
这个空的事件有一个重要的作用:调整概率。
我们有一个比重(weight)为1的主事件和第二个比重(weight)为4的第二个空事件,所以这说明有四分之一(25%)的概率执行主事件(传送玩家)。
如果我们使用比重(weight)为100的空事件,那么我们将有一百分之一(1%)的概率会执行主事件(传送玩家)。
如果我们没有第二个空事件,那么第一个事件的比重(weight)将被忽略,并且它会100%发生。
后面还有一个“damage”事件,是为了减少剑的耐久度。
- “type”指定伤害类型,填写字符串。
这里的“durability”表示耐久度减少 - “target”指定目标,填写字符串。
这里的“self”表示物品本身 - “amount”表示数量,填写整数。
拓展
在“minecraft:weapon”组件中,还可以添加其他内容
例如:
“on_hit_block”指定当破坏方块的时候执行的事件;
“on_not_hurt_entity”指定攻击生物但没有造成伤害的时候执行的事件。
三、本期文件下载
行为包文件示例:
my_sword.item.json(2.22 KB, 下载次数: 74)
预告:下一期会教大家制作自定义工具
附加包教程系列导航 上一期 下一期
|
评分查看全部评分
|