- UID
- 10461
- 2025/07/05
- 5
- 勋章
- 1
- 红宝石
- 152个红宝石
- 红宝石
- 152
- 中国
- 河北 网友
- #1
让不可坠落的方块坠落
多说无用,先看效果
如视频所示,我们使三种在原版不可能坠落的方块实现了和沙子一样的坠落效果,并且拥有共同的特性
如果直接生成在方块上,会直接变成方块
工作原理
方块在下坠时变为Minecraft的内置生物id为minecraft:falling_block
minecraft:falling_block不了生成,但是作为实体,可以被结构方块保存
结构方块保存的结构可以通过特殊手段进行导出并修改
工作准备
• 会制作Minecraft包(会编写manifest.json)
• 掌握任意一门编程语言(至少会使用其包管理器以及基础语法)或NBT解码工具(本教程使用NodeJS)
更改结构内容
一般的,我们在手机上使用一些材质包可以对mc结构方块结构进行导出,可以先装上
接下来我们会使用Nodejs对Mcstructure进行更改,大家可以根据自己用的语言选择相应的库
我们这里选择parsenbt-js作为mcstructure的解码库,他可以帮助我们解码mcbe的nbt文件
至于为什么选择parsenbt-js,因为作者测试代码用的文件是mcstructure,这样可以方便我们参考和开发
安装之后我们需要去Mc里得到一个带有minecraft:falling_block实体的结构,可以用我这种结构,然后使用结构方块保存导出
如果懒也可以直接用我保存好的(
(不让插入下载,见下文吧)
导出之后,将文件移到我们的工作目录
使用Nodejs代码对mcstructure进行解码
将代码保存到一个js中并执行,可以看到mcstructure中的数据结构和内容
代码中littleEndian的意思是,使用小端序对数据进行解码,mcbe的结构文件需要用小端序进行解码
TIP: 结构json数据名呈>前的表示数据类型,具体可以看parsenbt-js的github仓库中的类型表
嗯,具体的内容你可以接下来自己研究,只是让你更好理解接下来的做法的目的是什么
接下来更改代码
经过上述代码,我们将结构中的falling_block实体的nbt标签中的FallingBlock对象中的name改成了石头的id,也就是坠落方块所代表的id
TIP: 只是替换方块的话不需要更改其他的内容
现在我们将结构保存到一个mc行为包文件夹的structures文件夹里,打包,导入
接下来我们就可以在mc里通过structure生成我们的自定义falling_block实体啦
命令
更简单的方法
你也可以使用PackMc2框架(咱的自研框架)进行编写)
安装pack-mc-2 和 packmc2-fallblock Npm包之后
开头效果的代码实现
执行文件,打包falling_blocks文件夹里的data文件夹为mcaddon,在游戏中就可以调用三种方块的mcfunction生成三种不同的坠落方块
函数命名在聊天栏输入/function 就可以看到啦!
-----
本帖内容到此结束,感谢您的阅读w
有什么疑问可以在下面提出,有问题轻点喷
[DEL]接下来我会同步帖子到我的博客上,为什么不直接发博客呢,因为这样就没法白嫖utc的图床了[/DEL]
多说无用,先看效果
如视频所示,我们使三种在原版不可能坠落的方块实现了和沙子一样的坠落效果,并且拥有共同的特性
如果直接生成在方块上,会直接变成方块
工作原理
方块在下坠时变为Minecraft的内置生物id为minecraft:falling_block
minecraft:falling_block不了生成,但是作为实体,可以被结构方块保存
结构方块保存的结构可以通过特殊手段进行导出并修改
工作准备
• 会制作Minecraft包(会编写manifest.json)
• 掌握任意一门编程语言(至少会使用其包管理器以及基础语法)或NBT解码工具(本教程使用NodeJS)
更改结构内容
一般的,我们在手机上使用一些材质包可以对mc结构方块结构进行导出,可以先装上
接下来我们会使用Nodejs对Mcstructure进行更改,大家可以根据自己用的语言选择相应的库
我们这里选择parsenbt-js作为mcstructure的解码库,他可以帮助我们解码mcbe的nbt文件
至于为什么选择parsenbt-js,因为作者测试代码用的文件是mcstructure,这样可以方便我们参考和开发
Bash:
npm i parsenbt-js
如果懒也可以直接用我保存好的(
(不让插入下载,见下文吧)
导出之后,将文件移到我们的工作目录
使用Nodejs代码对mcstructure进行解码
代码:
// 偷懒,直接从作者的测试文件中拽两行代码过来
const fs = require('fs'), NBT = require('parsenbt-js');
// parsenbt-js只做了对ArrayBuffer的处理,应该是为了适配浏览器的运行环境
// ArrayBuffer和Buffer同种数据类型,我感觉其实是开发者在偷懒
function toArrayBuffer(buf) {
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}
var binData = toArrayBuffer(fs.readFileSync( './改成你的文件名,需要后缀' ))
// 我们的代码
// 输出结构,可用于分析
console.log( JSON.stringify( NBT.Reader(binData, { littleEndian: true } ),0, 2))
代码中littleEndian的意思是,使用小端序对数据进行解码,mcbe的结构文件需要用小端序进行解码
TIP: 结构json数据名呈>前的表示数据类型,具体可以看parsenbt-js的github仓库中的类型表
嗯,具体的内容你可以接下来自己研究,只是让你更好理解接下来的做法的目的是什么
接下来更改代码
代码:
// ...顺来的代码(
var data = NBT.Reader(binData, {littleEndian: true})
// 对nbt对象进行更改
data[ "comp>" ]
[ "comp>structure" ]
[ "list>entities" ][ 1 ]
[ "comp>FallingBlock" ]
[ "str>name" ]
= "minecraft:stone"
// 生成石头,可以改成其他的
// 保存到文件,这里保存到mystructures2,你可以改成其他的
fs.writeFileSync( "mystructure2.mcstructure", Buffer.from(NBT.Writer( data, {littleEndian: true})))
TIP: 只是替换方块的话不需要更改其他的内容
现在我们将结构保存到一个mc行为包文件夹的structures文件夹里,打包,导入
接下来我们就可以在mc里通过structure生成我们的自定义falling_block实体啦
命令
Bash:
structure load 结构名(文件名不带后缀) ~~10~
更简单的方法
你也可以使用PackMc2框架(咱的自研框架)进行编写)
安装pack-mc-2 和 packmc2-fallblock Npm包之后
开头效果的代码实现
代码:
var pmc2 = require( "pack-mc-2" )
var Fall = require( "./plugin" )
var addon = pmc2.Addon.fromJSON( "./falling_blocks" )
var ctx = addon.getAddonCtx()
ctx.loadActivePlugin( Fall )
ctx.plugins.FallingBlock.generateFunction = true
ctx.Fall( "minecraft:crafting_table" )
ctx.Fall( "minecraft:furnace" )
ctx.Fall( "minecraft:bedrock" )
addon.generate()
函数命名在聊天栏输入/function 就可以看到啦!
-----
本帖内容到此结束,感谢您的阅读w
有什么疑问可以在下面提出,有问题轻点喷
[DEL]接下来我会同步帖子到我的博客上,为什么不直接发博客呢,因为这样就没法白嫖utc的图床了[/DEL]
- 版权许可
- CC BY-NC 4.0-署名且禁止商用,可用于非盈利分享