查看: 225|回复: 5

附加包教程:9.物品(四) - 教程中心 - Minecraft(我的世界)苦力怕论坛

[复制链接]
查看: 225|回复: 5

附加包教程:9.物品(四) - 教程中心 - Minecraft(我的世界)苦力怕论坛

[复制链接]
查看: 225|回复: 5

30

主题

188

回帖

448

积分

中级会员

积分
448
暴风湛娟

30

主题

188

回帖

448

积分

中级会员

积分
448
2023-1-11 09:50:30 | 显示全部楼层 |阅读模式 IP:浙江嘉兴 来自 浙江嘉兴


前言
上期,我们学习了所有我已知的物品事件方法。也就是说,我们已经学完了物品相关知识。这一期,我们要进行实战演练。
演练目标
根据演练目标,使用对应的组件和事件,完成演练。
目标:一把剑(命名空间ID:test_pack:test_sword),伤害为26,创造模式下不能拿着它破坏方块,有附魔闪光(即使还没有附魔),附魔能力是70,耐久是5000,掉耐久几率是50%,潜行打到生物会造成范围5格伤害并掉5点耐久,潜行打破方块会有4分之1几率给持有者清除所有状态效果,然后增加状态效果(力量5、急迫5,都是30秒),然后掉5点耐久,不会刷新掉,可以放在副手。
思路

那么,让我们按照顺序完成这个任务吧!
既然是一把剑,那么首先在components里添加:
  1. "tag:minecraft:sword"

伤害是26,创造模式下不能拿着它破坏方块,有附魔闪光。这3个条件分别代表3个组件,继续添加:
  1. "minecraft:damage": 26,
  2. "minecraft:can_destroy_in_creative": false,
  3. "minecraft:glint": true

附魔能力是70,可以用minecraft:enchantable解决。
  1. "minecraft:enchantable":{"value":70,"slot":"sword"}

耐久是5000,掉耐久几率是50%,可以用minecraft:durability解决。
  1. "minecraft:durability":{"damage_chance":0.5,"max_durability":5000}

接下来的一些功能有些复杂,我们先看最后的“不会刷新掉,可以放在副手”,可以用2个组件解决。
  1. "minecraft:should_despawn": false
  2. "minecraft:allow_off_hand": true

然后,让我们看看题目里的隐藏要求。既然是剑,那么应该是破坏蜘蛛网和竹子很快,而且是装备,所以要装备在手上,最大堆叠数量应该是1。后者可以很简单地解决,前者则需要一点点功夫。剑没有效率附魔,所以use_efficiency应该是false。然后还得定义一个耐久下降的事件。
  1. "minecraft:hand_equipped":true,"minecraft:max_stack_size":1,"minecraft:digger":{"use_efficiency":false,"destroy_speeds":[{"block":"minecraft:web","speed":30,"on_dig":{"event":"damage"}},{"block":"minecraft:bamboo","speed":30,"on_dig":{"event":"damage"}}]}
  2. //上面是组件,下面是事件
  3. "damage":{"damage":{"type":"durability","amount":1,"target":"self"}}

还有,剑应该能被修复,而且应该放在创造模式物品栏的“剑”这一类里。新版本中,同类自定义物品的修复无需额外组件。
  1. "minecraft:creative_category": {"parent":"itemGroup.name.sword"}

最后是最难的地方。“潜行打到生物会造成范围5格伤害并掉5点耐久,潜行打破方块会有4分之1几率给持有者清除所有状态效果,然后增加状态效果(力量5、急迫5,都是30秒),然后掉5点耐久。”
这一堆东西可以用一个组件搞定,主要是事件怎么写。组件如下。
  1. "minecraft:weapon":{
  2.   "on_hit_block": "destroy",
  3.   "on_hurt_entity": "hurt",
  4.   "on_not_hurt_entity": "damage"
  5. } //注:1.20.40.21中移除了这个组件。

然后再运用sequence和randomize写一下事件。这个有点长,为了便于理解,我还没有像上面一样压缩代码,所以用折叠块折起来。
  1. "hurt": {
  2.   "sequence": [
  3.     {
  4.       "damage": {
  5.         "type": "durability",
  6.         "amount": 5,
  7.         "target": "self"
  8.       }
  9.     },
  10.     {
  11.       "condition": "q.is_sneaking",
  12.       "run_command": {
  13.         "command": "damage @e[r=5,rm=0.1] 26 entity_attack entity @p"
  14.       }
  15.     }
  16.   ]
  17. },
  18. "destroy": {
  19.   "randomize": [
  20.     {
  21.       "weight": 3,
  22.       "sequence": [
  23.         {
  24.           "run_command": {
  25.             "command": "effect @p clear"
  26.           }
  27.         },
  28.         {
  29.           "run_command": {
  30.             "command": [
  31.               "effect @p strength 30 4",
  32.               "effect @p haste 30 4"
  33.             ]
  34.           }
  35.         },
  36.         {
  37.           "damage": {
  38.             "type": "durability",
  39.             "amount": 5,
  40.             "target": "self"
  41.           }
  42.         }
  43.       ]
  44.     },
  45.     {
  46.       "weight": 1
  47.     }
  48.   ]
  49. }

最后,把以上写的一大堆东西结合在一起,成为一个文件,游戏内就可以起效了!
总结

这一期,我们进行了实战演练,运用之前学的组件和事件方法在代码上给原版游戏新增了一把剑。关于物品的学习即将结束,下期,我们就开始学习方块。我把我最终的成品放在下面当模板,可以按照这个改。
test_sword.json


第八期 第九期 第十期
来源:https://klpbbs.com/thread-82077-1-7.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

30

主题

152

回帖

392

积分

中级会员

积分
392
偷喝汽水

30

主题

152

回帖

392

积分

中级会员

积分
392
2023-1-11 09:55:26 | 显示全部楼层 IP:浙江嘉兴 来自 浙江嘉兴
感谢分享
回复 支持 反对

使用道具 举报

31

主题

198

回帖

492

积分

中级会员

积分
492
软芙朵朵

31

主题

198

回帖

492

积分

中级会员

积分
492
2023-1-11 09:57:39 | 显示全部楼层 IP:浙江嘉兴 来自 浙江嘉兴
教程相当高产(
回复 支持 反对

使用道具 举报

32

主题

172

回帖

439

积分

中级会员

积分
439
小鱼偶偶泡

32

主题

172

回帖

439

积分

中级会员

积分
439
2024-2-16 13:38:43 | 显示全部楼层 IP:浙江嘉兴 来自 浙江嘉兴


请问潜行打到实体的事件里,第13行的entity @p用意何在? 当我触发这个事件时,我自己也会受到伤害..
如果我想要这个范围内除了攻击发出者之外的其他实体受到伤害呢?
回复 支持 反对

使用道具 举报

27

主题

176

回帖

445

积分

中级会员

积分
445
櫻花射手

27

主题

176

回帖

445

积分

中级会员

积分
445
2024-2-16 17:34:44 | 显示全部楼层 IP:浙江嘉兴 来自 浙江嘉兴

命令/damage格式:/damage <目标> <伤害> <伤害来源> entity <施加者>。所以entity @p的意思是伤害是玩家造成的,不加这个就不会掉经验。不过也确实会对自己造成伤害,可以改成/damage @e[r=5,rm=0.1] 26 entity_attack entity @p。指定一个最小范围,可以防止选择器选择到自己。
回复 支持 反对

使用道具 举报

35

主题

193

回帖

481

积分

中级会员

积分
481
布丁果沙

35

主题

193

回帖

481

积分

中级会员

积分
481
2024-2-16 18:12:04 | 显示全部楼层 IP:浙江嘉兴 来自 浙江嘉兴

感谢分享..这样的话攻击范围就是一个"空心圆"了,这样也会产生一个小小的问题,就是在一个微乎其微的情况下,想要攻击的对象和自己重合在一起,它就不会受到伤害,不过毕竟是小概率事件,就不考虑了,这里让我好奇,r能取什么值?因为这里出现了0.1,它还能是0.01之类的吗,因为我了解一个物品的伤害和实体的生命值都必须是整数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|MCBBBS我爱你 | 萌ICP备20249110号

GMT+8, 2025-4-18 13:22 , Processed in 0.152266 second(s), 47 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.