Cat_Anchor 发表于 2023-3-6 19:02:29

附加包教程:29.实体

本帖最后由 Cat_Anchor 于 2024-6-6 19:57 编辑




前言



终于到了实体教程了,但我要写在前面的是:我不知道怎么写实体教程,于是就略过了。这主要是因为实体的组件太多了,无法像学习方块或物品那样。因此,需要——



https://klpbbs.com/static/image/hrline/line5.png


自学实体。



首先,实体的组件特别特别多,因为它基本是官方的主要数据驱动对象。想要让我把所有实体的代码内容全放出来是不可能的。所以,各位附加包制作者就要学会自己写代码。打开官方实体文档,这里的内容十分详细,而且有官方性质,是学习附加包的好地方。只需要随便点开一个组件,立马就能蹦出来它的详细信息和例子等内容。虽然它还没有汉化,但是把浏览器的翻译模式打开就好了。我相信,只要玩MC的,那么对这些代码总是不会感到陌生。
另外,也可以参考一下这里,这也是一个我常用的网站,内容十分实用。
当然了,我怎么可能只教这些普通的内容?我还要教各位一个新东西——实体属性。这就是我说实体文档和方块文档相似的原因。在官方文档的英文版,你可以找到关于实体属性的描述,而且原版实体“蜜蜂”也运用了这个新特性。看到这个以后,我立刻放弃了教实体属性的打算,我要告诉各位,实体也可以有排列(Permutations)!甚至还可以有别名(Aliases)!(这两个特性现已弃用。)



https://klpbbs.com/static/image/hrline/line1.png

实验性内容



注意:此段落所述功能已于1.21.10.22被弃用,请勿使用此系统。
然而,出于学习并理解旧版附加包的必要性,我保留了这个段落。

首先,我放一篇示例文档,这样大家就可以学会这些新特性了。值得注意的是,这两个与实体属性有很大关系,建议你先去官方文档把实体属性学了。

{
"format_version": "1.19.0",
"minecraft:entity": {
    "description": {
      "identifier": "supplementary:container", //实体ID
      "is_spawnable": false, //是否有刷怪蛋,是否可以自然生成
      "is_summonable": true, //是否可以被/summon命令生成
      "is_experimental": false, //是否属于实验性内容
      "properties": { //指定了实体属性
      "supplementary:slot_count": { //一个属性,名叫supplementary:slot_count。
          "type": "int", //属性的类型
          "range": [ //属性的范围,根据属性的类型决定有没有这一项
            0, //最小值
            256 //最大值
          ],
          "default": 0 //默认值
      }
      },
      "aliases": { //指定了实体的别名
      "supplementary:container.0": {}, //这里,supplementary:container.0是别名,后面没有东西代表这个别名使用默认的实体属性值(这里是0)。
      "supplementary:container.1": { //这里,supplementary:container.1是别名,后面的supplementary:slot_count是实体属性名称,1代表这个属性的值
          "supplementary:slot_count": 1
      },
      "supplementary:container.2": {
          "supplementary:slot_count": 2
      },
      "supplementary:container.7": {
          "supplementary:slot_count": 7
      } //注意,这些别名可以通过/summon命令使用。在这个例子里,/summon supplementary:container和/summon supplementary:container.0的作用是一样的。
      }
    },
    "component_groups": {吧啦吧啦一大堆,都不重要},
    "components": {又吧啦吧啦一大堆,还是都不重要},
    "permutations": [ //看到这个,你应该立刻就想到方块属性。没错,又是一样的格式。
      {
      "condition": "query.property('supplementary:slot_count') == 1", //Molang表达式,如果输出true,那么用下面的这些组件替换掉原本的组件。这里的意思是查询属性supplementary:slot_count的值是否为1。
      "components": { //组件列表
          "minecraft:inventory": { //实体拥有的物品栏
            "container_type": "container", //物品栏类型:容器
            "inventory_size": 1, //物品栏大小
            "can_be_siphoned_from": false //是否可以被漏斗吸走物品或输入物品。false是不行,true是可以。
          }
      }
      },
      {
      "condition": "query.property('supplementary:slot_count') == 2",
      "components": {
          "minecraft:inventory": {
            "container_type": "container",
            "inventory_size": 2,
            "can_be_siphoned_from": false
          }
      }
      },
      {
      "condition": "query.property('supplementary:slot_count') == 7",
      "components": {
          "minecraft:inventory": {
            "container_type": "container",
            "inventory_size": 7,
            "can_be_siphoned_from": false
          }
      }
      }
    ],
    "events": {
      "supplementary:set_slot_count_0": {
      "set_property": {
          "supplementary:slot_count": 0 //这里的这个事件方法用于设置实体属性的值,这里是把supplementary:slot_count设置为0。
      }
      },
      "supplementary:set_slot_count_1": {
      "set_property": {
          "supplementary:slot_count": 1
      }
      },
      "supplementary:set_slot_count_2": {
      "set_property": {
          "supplementary:slot_count": 2
      }
      },
      "supplementary:set_slot_count_7": {
      "set_property": {
          "supplementary:slot_count": 7
      }
      }
    }
}
}



https://klpbbs.com/static/image/hrline/line3.png


总结



这一期,我们学习了实体的属性(Properties)、排列(Permutations)和别名(Aliases)。属性可以控制动画效果,与排列和别名合起来就可以控制实体代码了。到这里,实体教程基本上就结束了,但这不意味着以后我们不会学习实体了。相反,以后我会用具体情景告诉各位实体代码怎么写。如果想了解更多,请持续关注本系列。下一期,我们即将学习粒子。





第二十八期 第二十九期 第三十期

巅疯狂魔 发表于 2023-3-6 19:11:20

感谢分享

Gfunhud 发表于 2023-3-6 19:14:57

感谢分享
页: [1]
查看完整版本: 附加包教程:29.实体