经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
Minecraft-1.16.2-数据包开发学习#1
来源:cnblogs  作者:Coder_42  时间:2020/12/14 17:02:57  对本文有异议

学习方法

首先,数据包是JAVA版Minecraft且是1.13版本之后才有的,如果是基岩版或者版本过老,可能不会支持数据包。

主要通过Minecraft Wiki学习(文章内容很多地方都会引用Wiki的原文,我就不一一注明了),借助一些教学视频进行辅助。

当然,最重要的还是应该应用于游戏中,多实践才是关键。

大概看了一下,在开始学习之前应该学会JSON的相关知识,很简单,有面向对象编程基础的话一看就会。


先从框架来说

数据包下的根目录有一个文件夹data,两个文件pack.mcmetapack.png,这里详细说一下两个文件,data文件夹将会作为重点单独介绍。

pack.mcmeta

这个文件相当于数据包的标识,有了这个文件,这个文件包才能被Minecraft识别为数据包。

其中的内容为JSON格式。

例如1.16.4原版的数据包中,pack.mcmeta文件的内容如下:

注意,根据JSON规范(http://www.json.org, RFC 4627, RFC 7159),JSON是不支持注释的,但是为了学习做笔记方便,仍然按照C/C++中的注释方法做一些注释。如果想要直接用我的代码,请将所有注释删除后再使用。

  1. {
  2. "pack"/*存放数据包信息*/:
  3. {
  4. "pack_format":6,
  5. //数据包版本,可以是任何数字,但是其实有标准,后面会说明。
  6. "description":"The default data for Minecraft"
  7. //一段原始JSON文本。在数据包列表下,光标移动到对应的数据包时会显示此处填写的描述。
  8. }
  9. }

pack_format的标准

如果数据包用于1.17快照,则 pack_format应该为7。如果数据包用于1.16.2版本,则 pack_format应该设为6。如果数据包用于1.15~1.16.1,则 pack_format应该为5。如果数据包用于1.13~1.14,则 pack_format应该为4。

pack.png

是一个png格式的图片,尽量是正方形的图片,用于给你的数据包一个好看的图标。

数据包的测试

数据包的安装

在存档的datapacks文件夹下放入数据包,将修改之后的数据包保存后,在游戏中输入/reload,即可重新加载数据包(有的数据包需要启动游戏才能重新加载完成)。

建议使用VScode,这样可以加载文件夹的文本编辑器,方便管理和修改各种文件。特别是安装“Datapack Helper Plus”,“datapack-helper”,“mcfunction”等等插件之后,编辑起来十分方便。

在游戏中输入/datapack list查看游戏加载好的数据包。

data文件夹

以上内容都是很基本的东西,包括创建一个空的数据包,还有如何给数据包添加描述信息。

当然,仅仅依靠上面的东西是绝对不够的。重头戏就是data,这是才是数据包实现功能的核心。

data文件夹下可以创建文件夹,在这里创建的文件夹的名称将会作为命名空间的名称。

原版Minecraft使用的命名空间为Minecraft,这意味着只有当数据包需要覆盖现有的Minecraft数据或将内容添加到原版标签时才应使用此命名空间。

实现打僵尸掉钻石

小测试,我希望打僵尸掉落的钻石而不是腐肉。具体操作如下:

data文件夹下创建新的文件夹,并命名为Minecraft,进入这个新创建的文件夹。

打怪掉落属于战利品表的内容,所以在Minecraft文件夹下创建新的文件夹,并命名为loot_tables,进入这个新创建的文件夹。

注意:中文Wiki上的内容需要更新,按照上面的说法,直接在loot_tables文件夹下创建json文件就可以了,但是在1.16.2版本上并不能实现。
使用解压软件打开minecraft客户端核心的jar包,进入\data\minecraft\loot_tables\发现下面还有文件夹,分别为blocks,chests,entities,gameplay。先不管其他的内容,我们可以在entities下找到僵尸的文件zombie.json
这说明我们数据包的loot_tables文件夹下也应该创建命名相同的文件夹。

loot_tables文件夹下创建新的文件夹,并命名为entities进入这个新创建的文件夹。

创建json文件,文件全称为zombie.json,这样就可以覆盖原版的内容了。

稍微修改原版zombie.json的内容,并保存即可。

  1. {
  2. "type": "minecraft:entity",
  3. "pools": [
  4. {
  5. "rolls": 1,
  6. "entries": [
  7. {
  8. "type": "minecraft:item",
  9. "functions": [
  10. {
  11. "function": "minecraft:set_count",
  12. "count": {
  13. "min": 0.0,
  14. "max": 2.0,
  15. "type": "minecraft:uniform"
  16. }
  17. },
  18. {
  19. "function": "minecraft:looting_enchant",
  20. "count": {
  21. "min": 0.0,
  22. "max": 1.0
  23. }
  24. }
  25. ],
  26. "name": "minecraft:rotten_flesh"//将这一行修改为 "name": "minecraft:diamond" 就可以让僵尸掉钻石啦。
  27. }
  28. ]
  29. },
  30. {
  31. "rolls": 1,
  32. "entries": [
  33. {
  34. "type": "minecraft:item",
  35. "name": "minecraft:iron_ingot"
  36. },
  37. {
  38. "type": "minecraft:item",
  39. "name": "minecraft:carrot"
  40. },
  41. {
  42. "type": "minecraft:item",
  43. "name": "minecraft:potato"
  44. }
  45. ],
  46. "conditions": [
  47. {
  48. "condition": "minecraft:killed_by_player"
  49. },
  50. {
  51. "condition": "minecraft:random_chance_with_looting",
  52. "chance": 0.025,
  53. "looting_multiplier": 0.01
  54. }
  55. ]
  56. }
  57. ]
  58. }

至于更加详细的内容修改,比如物品掉落的概率什么的,之后慢慢细谈。现在就是直观的感受一下数据包对原版内容的修改。

当然,数据包的制作肯定要考虑游戏的平衡性,打僵尸掉钻石什么的太不合理了,这样很容易让游戏失去乐趣,在制作数据包的时候一定要注意这一点。

原文链接:http://www.cnblogs.com/Coder-42/p/14133063.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号