ruhuasiyu
本帖最后由 SHEEP_REALMS 于 2021-10-16 12:13 编辑

方块通用处理

本模组并非具有实际效果的模组,而是为了给原版模组的方块基本操作提供功能。使用本模组作为前置后,方块的放置、破坏、机器的基本操作都无需再编写函数来处理了。


例如,放置模组内方块时,本来用视线追踪即可实现,然而放置不完整方块(作物、树苗、告示牌等),或者在台阶上放置方块等情形,要做进一步的调整才可将bug调至最低。而使用本前置模组后,无需再考虑这些问题,只需要专心设计方块内容即可。


本模组支持的版本为:19w38a-19w39a


事件与接口

方块的放置

  • 事件:玩家放置方块
  • 条件:方块拥有tag.id标签
  • 结果:在方块位置align xyz positioned ~0.5 ~ ~0.5处生成盔甲架,盔甲架头部为放置的方块物品,标签为cpp_block;执行函数标签#cpp_block:put
  • 接口:使用函数标签#cpp_block:put来添加额外的指令,其中
    • @s为放置方块的玩家
    • @e[type=minecraft:armor_stand,tag=cpp_block,distance=..0.1,limit=1] 为放置的盔甲架
    • 执行位置为盔甲架位置
    • 若要改变盔甲架位置,请勿将其放置在方块中心0.5米外的位置
  • 注意事项
    • 一般而言,放置告示牌等不完整方块,需要做额外处理
    • 一般而言,放置植物等物品和方块为不同模型的方块,需要做额外处理
    • 支持原版所有生存可破坏的方块和屏障

方块的破坏

  • 事件:玩家破坏方块
  • 条件:方块处拥有标签为cpp_block的盔甲架
  • 结果:执行函数标签#cpp_block:break,将最近的Age:0sAge:1s的物品修改为盔甲架头部物品,杀死相应盔甲架
  • 接口:使用函数标签#cpp_block:break来添加额外的指令,其中
    • @s为盔甲架
    • 执行位置为盔甲架位置
    • 通过修改盔甲架头部物来实现修改掉落品
  • 注意事项
    • 若放置时对物品做了修改,破坏时需要反向修改会原物品
    • 屏障默认无掉落

机器的处理

  • 目标:拥有cpp_block标签的盔甲架,且其头部物品拥有hasGUI:1b标签
  • 目标:下方漏斗,下方漏斗矿车,掉落物,玩家
  • 结果:禁止漏斗吸取,清除漏斗和漏斗矿车内、地面、玩家背包内拥有标签isMachineBg:1b的物品
  • 接口:为你的机器内的所有用于图形界面的物品添加标签isMachineBg:1b即可
  • 默认只支持物品石化橡木台阶、淡灰色染色玻璃板和烟火之星,如果需要可以在物品标签#cpp_block:machine_gui中额外添加

机器的输出

  • 事件:执行函数cpp_block:dist
  • 结果:将存储的物品信息输出到当前位置的容器,支持大箱子
    • 位置:根据执行者记分板cppOutputFace修改输出位置(1-6,东南西北上下);若修改后的位置处容器已满,会尝试输出到大箱子的另一半
    • 物品信息来源:storage cpp_block:dist Item
    • 若当前位置无容器、容器已满、大箱子两个全满,则输出失败;否则会成功输出,会为执行者添加标签cpp_block_dist_success
  • 也可执行函数cpp_block:dist/pos来直接指定当前位置为输出位置
  • 扩展:若要支持更多容器
    • 方块标签#container:all内添加容器方块id
    • 方块标签#container:chests内添加占据两格的大箱子方块id,需与原版橡木箱子拥有相同的方块状态
    • 函数标签#container:check内添加函数,函数指令为
      1. execute if block ~ ~ ~ [方块id] run scoreboard players remove @s container [容器容量]
      复制代码

    • 可以直接添加原版模组容器扩展中的数据包来支持相应模组

检测强充能

  • 事件:执行函数cpp_block:check_power
  • 结果:若当前位置被强充能(不识别本身方块是否可被充能),则为执行者添加标签cpp_block_redstone_powered
  • 注意:
    • 仅识别原版红石元件
    • 不识别陷阱箱

例子
  1. give @s gold_block{display:{Name:'{"translate":"item.cpp.moon_stone"}'},id:"cpp:moon_stone",CustomModelData:12970001}
复制代码
然后创建相应模型,即可自动放置和破坏。


  1. give @s barrel{display:{Name:'{"translate":"item.cpp.all_in_one_machine"}'},id:"cpp:all_in_one_machine",CustomModelData:12970001,hasGUI:1b}
复制代码
然后创建相应模型和机器背景板。机器的背景高频放置、产出、经验条、选项等操作需要额外编写。


安装方式

将文件 方块通用处理1.1.zip (19.27 KB, 下载次数: 89) 下载后放入存档datapacks文件夹即可。

本模组支持的版本为:19w38a-19w39a。

若你安装了模组【更多箱子】或【更多潜影盒】,你还需要下载原版模组容器扩展中相应的数据包以支持相应容器。

备用下载地址: Github

原理简述

方块的放置


机器的输出



其它略。

更新日志

1.1 2019/09/30

  • 移除了无用的函数。
  • 物品标签`#cpp_block:machine_gui`中添加了石化橡木台阶。


v1.0 2019/09/29

  • 提交第一个版本。


Powered by MM2BC - MCBBS Markdown To BBCode Converter


ruhuasiyu
排版炸了,去github看吧……

腿短啊
看不懂也学不会

(=°ω°)丿
我觉得你说的很有道理,然后我选择自己写(跑

ruhuasiyu
隐退 发表于 2019-9-30 15:38
我觉得你说的很有道理,然后我选择自己写(跑

我认为你重头写的话,可能会遇到一些不易发觉的bug,而我都帮你调试好了多方便啊。。。

凌空的猫
我决定重新造轮子

CR_019
研究了一个月的方块,没搞出来。。
所以我来“借鉴”了

SolidBlock
Minecraft不支持方块自定义,甚至连方块实体的自定义模型也不行,而且物品的自定义模型必须是数字且替换原版资源包有关的模型文件,而不能直接给方块实体数据设置模型,造成很大的不便以及兼容性低,这是很大的遗憾。不过自定义模型数据相对于之前的版本而言,已经是很大的进步了。希望Minecraft 1.16能够继续改进。

神经幺
SolidBlock 发表于 2020-2-18 12:03
Minecraft不支持方块自定义,甚至连方块实体的自定义模型也不行,而且物品的自定义模型必须是数字且替换原 ...

真的太遗憾了, 我翻了整整两天教程才发现局限性这么大