我的世界结构方块怎么用 我的世界结构方块不能用是怎么回事( 二 )


palette中有顺序地存储了结构中出现的各种方块(和他们的不同方块状态的变种) 。blocks有顺序地存放了每个方块在结构中的位置和他的种类在palette中的编号(还有NBT,如果有的话)上文说的“方块在结构文件中的顺序”就是指在block这个list中的顺序 。entities中是结构中每个实体在结构中的位置,还有取整后的位置(作用不明) 。
可见,文件中的方块和实体的位置完全可以超出结构大小,甚至超过32*32*32的范围(加载几个区块也是可以的,当然会引起一些卡顿) 。可见结构大小只是一个让使用结构的人方便用的参考,他可以通过白色的外框知道放置的位置是否合适 。当然结构大小如果有任意一个值超过32,就不能使用GUI加载了(这个值会被自动改回离他最近的符合要求的数,使得结构方块的结构大小和文件要求的不一致,其结果在上文已经写了) 。但仍然能用红石加载 。
save方块在载入文件的时候按照坐标的字典序将方块写入文件 。加载时方块按照方块在结构文件中的顺序依次放置 。比如用加载红石块的方法激活方块,命令方块会按照红石块的的放置顺序激活 。如果有两个方块占据在同一个位置,后放置的会将前面的覆盖 。所以如果在list里先有一个红石块,后有一个石块在同一个位置,被放置的位置本来是空气,结构完整性是0.5,那么加载后有二分之一的概率是石块,四分之一的概率是红石块,四分之一的概率是空气 。
当结构被加载时,文件中每个方块都会引起方块更新 。即使方块前后没有变化,或者随机放置时该方块没被随机到(人工更新某区域内方块(概率设为0)) 。如果方块前后没有变化,不会引起观察者响应//(除非该方快具有方块实体)// 。如果方块结构中有两个方块占据在同一个位置,比如一开始是红石块,文件要求先换成石头再换成红石块,也会让观察者响应,虽然前后都是红石块 。
结构方块有一个充能标志(powered byte) 。若加载模式结构方块发现自己被充能(或者接触充能方块)并且充能标志为0,自然会加载并且把充能标志改成1 。但是,被加载的或者clone的//或者fill的或者setblock的//或者手动放置到被充能位置的加载模式方块不会自己更新自己 。也就是说放(不论什么方式)的时候就放在红石块边上的加载模式方块处于BUD态 。当然,如果被加载的或clone的时候相邻位置有其他方块一同被加载(clone),那么就会更新到它让他加载(当然,必须周围有红石块之类的和他接触)(一同加载的方块产生更新条件见上) 。
那么如何用cb在某地加载结构呢?可以想到先setblock结构方块然后setblock红石块 。但如果直接把相邻的结构方块和红石块一同clone过去(或者想让加载的结构里的结构方块继续加载其他的结构使得不修改文件立即加载很大的建筑),结构方块已经是被激活的,clone过去的也是被激活的,这时就不会让结构方块激活 。所以应当让使用blockdata指令修改clone前的结构方块的充能标志,再它被clone过去的时候结构方块周围的方块放置更新它让他加载 。
结构方块有一个自我保护机制 。具体保护机制触发条件并不清楚 。似乎是为了保护自己不陷入死循环 。他会将“肇事”的加载模式结构方块替换成屏障方块 。

标签:

推荐阅读