开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[BE教程] 附加包教程:42.方块(八)

 发表于 2023-12-10 12:27:32 来自手机|显示全部楼层|阅读模式 IP:天津
本帖最后由 Cat_Anchor 于 2024-1-13 12:57 编辑

巧克力活板门
稀有度常见
创造分类建筑
材料固体
合适挖掘工具
硬度0.5
爆炸抗性1.2
亮度0
窒息生物
红石导体
光照透明1
可被火破坏
可被熔岩生成火
可再生
最大堆叠64
命名空间IDchocolate_trapdoor


前言

最近我的糖果大陆附加包涉及到活板门和门的实现,所以这期和下期我们来放出它们的教程。
目标

制作一个尽可能与原版一样的活板门,包括可以打开/关闭,可以放置在方块的上面/下面等。
分析与解决

今天的任务比之前的液体方块简单得多。首先,既然是活板门,那么它肯定有4个方向;还需要指定放置在方块的上方还是下方;最后,还需要指定它是否打开了。这就是三个方块状态。
活板门的上下取决于它放置在方块的上半部分还是下半部分,所以可以用方块特征里的minecraft:placement_position实现。4个方向是根据我们放置时的朝向决定的,所以使用minecraft:placement_direction实现。至于开关与否,就单独定义一个方块状态。
  1. {
  2.   "format_version": "1.20.30", //使用较新的格式版本才可以使用方块特征
  3.   "minecraft:block": { //定义一个方块
  4.     "description": {
  5.       "identifier": "supplementary:chocolate_trapdoor", //方块ID
  6.       "menu_category": { //指定方块要放在创造模式物品栏的哪里
  7.         "category": "construction", //指定放在建材分类下
  8.         "group": "itemGroup.name.trapdoor" //指定放在活板门一组里
  9.       },
  10.       "traits": { //定义方块特征
  11.         "minecraft:placement_position": {
  12.           "enabled_states": [
  13.             "minecraft:vertical_half" //启用minecraft:placement_position中的minecraft:vertical_half状态,检测放置在方块的上半部分还是下半部分
  14.           ]
  15.         },
  16.         "minecraft:placement_direction": {
  17.           "enabled_states": [
  18.             "minecraft:cardinal_direction" //启用minecraft:placement_direction中的minecraft:cardinal_direction状态,检测放置的4个方向,忽略向上和向下
  19.           ]
  20.         }
  21.       },
  22.       "states": { //定义方块状态
  23.         "supplementary:open_bit": [ //定义一个叫supplementary:open_bit的状态,接受布尔值,默认值为false
  24.           false,
  25.           true
  26.         ]
  27.       }
  28.     }, ...
  29.   }
  30. }
复制代码

然后定义一些基本的方块组件,例如爆炸抗性、光照等。
  1. ... "components": {
  2.       "tag:stone": {}, //让自定义镐子识别用的标签,所以这个方块用镐子挖掘更快
  3.       "minecraft:destructible_by_mining": { //定义可挖掘性
  4.         "seconds_to_destroy": 0.5 //需要0.5秒钟破坏
  5.       },
  6.       "minecraft:destructible_by_explosion": { //定义可被爆炸摧毁性
  7.         "explosion_resistance": 1.2 //爆炸抗性为1.2
  8.       },
  9.       "minecraft:collision_box": { //定义实体碰撞箱,这里是活板门的碰撞箱
  10.         "origin": [
  11.           -8,
  12.           0,
  13.           -8
  14.         ],
  15.         "size": [
  16.           16,
  17.           3,
  18.           16
  19.         ]
  20.       },
  21.       "minecraft:selection_box": { //定义挖掘判定箱,这里是活板门的判定箱
  22.         "origin": [
  23.           -8,
  24.           0,
  25.           -8
  26.         ],
  27.         "size": [
  28.           16,
  29.           3,
  30.           16
  31.         ]
  32.       },
  33.       "minecraft:geometry": "geometry.trapdoor", //这个方块要使用活板门的模型
  34.       "minecraft:material_instances": {
  35.         "*": {
  36.           "texture": "chocolate_trapdoor", //由于使用了模型,我们可以直接定义纹理。这里还定义了渲染方法。
  37.           "render_method": "blend" //允许透明/半透明,它上面不能放置红石线且不能刷怪,它也不能被红石充能。
  38.         }
  39.       },
  40.       "minecraft:on_interact": {
  41.         "event": "toggle"
  42.       }, //当我们点击它的时候,活板门会打开或关闭。
  43.       "minecraft:light_dampening": 0 //不阻挡光线
  44.     }, ...
复制代码

刚才我们定义了一个事件,用来打开/关闭活板门。事件代码如下。
  1. "toggle": {
  2.   "sequence": [ //按顺序执行事件
  3.     {
  4.       "set_block_state": {
  5.         "supplementary:open_bit": "!q.block_state('supplementary:open_bit')" //把“是否打开”的方块状态变为原来的相反值(打开变为关上,关上变为打开)
  6.       }
  7.     },
  8.     {
  9.       "condition": "q.block_state('supplementary:open_bit')", //当活板门打开时...
  10.       "run_command": {
  11.         "command": "playsound close.wooden_trapdoor @a ~~~ 0.9 0.9" //播放关闭木活板门的声音
  12.       }
  13.     },
  14.     {
  15.       "condition": "!q.block_state('supplementary:open_bit')", //当活板门关闭时...
  16.       "run_command": {
  17.         "command": "playsound open.wooden_trapdoor @a ~~~ 0.9 0.9" //播放打开木活板门的声音
  18.       }
  19.     }
  20.   ]
  21. }
复制代码

接下来定义方块排列。
活板门的开关、上下、方向都可以通过旋转实现。可以按三个轴旋转。比如,把活板门打开就是沿Z轴旋转-90度,上下通过沿X或Z轴旋转180度实现,方向通过沿Y轴旋转90/180/-90度实现,等等。
总共有16(4*2*2)个排列,代码太长,请看下面的完整示例。
那么活板门方块就做好了,下面是我的chocolate_trapdoor.json中的代码。
以下是模型文件。
这里我本来是想通过texture_mesh实现镂空模型效果的,但是由于texture_mesh的texture字段指定的是附着物文档中的键名而不是方块文档中minecraft:material_instances的键名,不能实现这个功能。如果非得实现,模型代码会长很多,所以我还是选择了与原版保持一致。下期讲门的时候,拿在手里的门就是一个附着物,所以可以实现镂空效果。
总结

这一期,我们制作了一个与原版极其相似的活板门。
最后,我放出我为这个活板门做的纹理,以及所有的示例文档,可以参考一下。
 示例文档和纹理.zip(2.6 KB, 下载次数: 4)


苦力怕论坛,感谢有您~
 楼主|  发表于 2023-12-26 06:51:56 来自手机|显示全部楼层 IP:天津
HuaV 发表于 2023-12-26 00:00
嘿,你知道附加包中可以添加世界包(世界模板)吗?是否有了解过其相关内容.. ...

世界模板好像是和附加包不同的.mctemplate文件,可以导入一个模板,创建世界时使用,似乎也可以在世界模板中包含附加包(和.mcworld差不多)
4#2023-12-26 06:51:56回复收起回复
苦力怕论坛,感谢有您~
 发表于 2023-12-26 00:00:05 来自手机|显示全部楼层 IP:广西
嘿,你知道附加包中可以添加世界包(世界模板)吗?是否有了解过其相关内容..
3#2023-12-26 00:00:05回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 发表于 2023-12-10 12:28:10 来自手机|显示全部楼层 IP:浙江省
感谢分享
2#2023-12-10 12:28:10回复收起回复
苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-12-12 13:44

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号-3