我的世界结构方块为什么用不了?该怎么办?


获取结构方块/give @p structure_bloc 。结构方块id是minecraft:structure_block 。数字id是255 。不能直接从创造模式拿出 。必须使用give指令 。放置/破坏/开启它需要服务器权限 。这个方块有4种模式 。分别是Save Load Corner Data 。模式会使用NBT中的mode字符串保存 。同时也会用方块元数据0~3保存 。//当不一致时会按照NBT修正方块元数据 。//
其中data模式只在游戏自己自然生成建筑时能够发挥作用 。我们不会详细介绍它 。
save模式可以将结构保存成NBT文件 。首先输入相对位置(在32到-32之间(含)的整数)(NBT中posX posY posZ int)和结构大小(比32小(含)的整数)(NBT中sizeX sizeY sizeZ int)(技巧:可以使用tab切换光标到下一个文本框) 。相对位置以结构方块作为坐标原点 。当在GUI中按下save按键时即可将选中的区域用结构名称(NBT中name 字符串)为名字保存成.nbt文件 。如果该文件已存在则会覆盖已有的文件 。保存在存档文件夹中structures文件夹 。若使用红石激活将不会保存成文件 。只能够临时使用 。使用起来和真的生成了文件的情形别无二致 。只是在游戏退出后即消失 。显示隐形方块按钮可以在选中的所有的空气方块和结构方块上做出标记 。保存时会略过结构虚空方块(因此结构虚空加载时不替换原有方块 。结构中若真的有结构虚空方块也是会加载的) 。若包括实体(NBT中ignoreEntities byte)开了 。则会将碰撞箱和结构方块选择范围有公共部分的实体也保存进文件 。
corner模式用于辅助save模式 。为了避免仔细计算相对位置和结构大小 。可以将两个同样结构名称(NBT中name 字符串)corner方块放在结构外包长方体相对定点 。在同样名字的save模式方块中点击detect就能够自动设置相对位置和结构大小 。如果只找到一个同名corner模式方块 。save方块会把自己当作另外一个角 。(技巧:虽然禁止空白名字结构保存 。但是探测时可以 。可以先将save和corner名字留空 。探测好后填入save中的名字并保存 。)
load模式可以将nbt文件加载入存档 。它会寻找以结构名称(NBT中name 字符串)为名的结构文件用于加载 。//在按下加载按钮时 。为了防止意外的位置错误 。如果发现结构方块的结构大小(NBT中sizeX sizeY sizeZ int)(在这里不显示)和结构文件中的不一致 。则不会加载 。它会关闭GUI 。将结构大小改成文件中要求的 。让你检查是否正确 。//如果一致就会直接加载了 。这个过程也可以用红石完成 。红石加载不会进行这个检查 。无论是否一致都会直接加载 。加载时也可以选择是否将文件中可能存在的实体一同加载 。当然加载时会无视实体的pos和UUID这些NBT(但是其他的自然不会无视 。造成shulker仍然记住自己所在的方块的坐标 。一旦加载会立刻瞬移过去......) 。也可以选择绕y轴旋转90°的倍数或者前后反射或者左右反射 。(NBT中rotation mirror 字符串) 。可以隐藏白色边框(NBT中showboundingbox byte) 。
加载时可以选择随机性部分加载 。你可以在加载前填入结构完整性(0~1实数 。含0、1)和种子(integrity f seed L) 。结构完整性代表了里面每个方块被放置的概率 。//可以认为每个方块的放置与否是独立的 。//若种子填入0是一个特例 。表明会随机选择种子 。//方块防止与否和种子、结构完整性、和该方块在结构文件中的顺序(不是指它在结构中的坐标)(比如同样的种子和概率 。加载一个游戏产生的5*1*5的结构和10*1*10的结构 。前者在前两x方向的列的放置与否和后者在第一个x方向的列的放置与否是一致的)// 。//在种子相同的情况下 。如果某个方块在小的概率下放置 。那么在较大种子下一定放置 。(生成0至1随机数然后若小于等于结构完整性就放置?)//在游戏第一次被要求加载某个结构的时候 。游戏会读取这个结构 。之后再要求的时候 。游戏不会再读取 。
结构文件保存在存档中structures文件夹(游戏自带的在jar文件中assets/minecraft/structures) 。是压缩的nbt格式 。详见http://minecraft.gamepedia.com/Structure_block_file_format 。可以看见里面有三个list 。分别是blocks entities和palette 。
palette中有顺序地存储了结构中出现的各种方块(和他们的不同方块状态的变种) 。blocks有顺序地存放了每个方块在结构中的位置和他的种类在palette中的编号(还有NBT 。如果有的话)上文说的“方块在结构文件中的顺序”就是指在block这个list中的顺序 。entities中是结构中每个实体在结构中的位置 。还有取整后的位置(作用不明) 。
可见,文件中的方块和实体的位置完全可以超出结构大小 。甚至超过32*32*32的范围(加载几个区块也是可以的 。当然会引起一些卡顿) 。可见结构大小只是一个让使用结构的人方便用的参考 。他可以通过白色的外框知道放置的位置是否合适 。当然结构大小如果有任意一个值超过32 。就不能使用GUI加载了(这个值会被自动改回离他最近的符合要求的数 。使得结构方块的结构大小和文件要求的不一致 。其结果在上文已经写了) 。但仍然能用红石加载 。

推荐阅读