本帖最后由 萌萌萌萌星 于 2022-2-13 16:18 编辑
我使用MCProtocolLib库开发机器人时遇到了一个问题
我需要获取附近的方块信息和方块的坐标,我猜测是读取ServerChunkDataPacket包得到区块然后解析
但我并不太理解wiki.vg的描述,所以需要大神提供一些示例代码
我使用MCProtocolLib库开发机器人时遇到了一个问题
我需要获取附近的方块信息和方块的坐标,我猜测是读取ServerChunkDataPacket包得到区块然后解析
但我并不太理解wiki.vg的描述,所以需要大神提供一些示例代码
获取玩家附近的方块信息直接遍历玩家附近的Location, 执行 getBlock() 就能获取方块了, 没必要使用 ProtocolLib, 而且这个只会在玩家加载区块的时候发送, 不能随时随地获取
本帖最后由 萌萌萌萌星 于 2022-2-12 23:02 编辑
你可能觉得我正在进行服务端插件的开发,实际上我在进行客户端方面开发
确实是我没说清楚
在MCProtocolLib客户端貌似只能通过处理ServerChunkDataPacket获取区块(也许只能获取区块),需要自己处理区块,比较麻烦,其中的算法我不太了解
Rothes 发表于 2022-2-12 22:00
获取玩家附近的方块信息直接遍历玩家附近的Location, 执行 getBlock() 就能获取方块了, 没必要使用 Protoco ...
你可能觉得我正在进行服务端插件的开发,实际上我在进行客户端方面开发
确实是我没说清楚
在MCProtocolLib客户端貌似只能通过处理ServerChunkDataPacket获取区块(也许只能获取区块),需要自己处理区块,比较麻烦,其中的算法我不太了解
没有了解过易语言,但是如果只是处理区块的话,这个packet说明和区块数据格式说明也许可以帮到你,区块数据格式说明往下翻有各种语言各种版本的样例
本帖最后由 萌萌萌萌星 于 2022-2-13 16:15 编辑
问题自己解决了.jpg
我翻阅各维基资料,最后编写出以下代码完成解析
Kotlin:
is ServerChunkDataPacket -> {
val p = event.getPacket<ServerChunkDataPacket>()
val column = p.column
val columnX = column.x
val columnZ = column.z
val chunks = column.chunks//16
var i = 0
chunks.forEach {
it ?: return
for (x in 0..1) {//4095
for (z in 0..1) {//255
for (y in 0..15) {
val block = it.blocks[x, y, z] ?: return
val positionX = (columnX shl 4) + x
val positionZ = (columnZ shl 4) + z
val positionY = y + (i shl 4)
println("$positionX $positionY $positionZ block:${block.id}")
}
}
}
i++
}
}
shl 4可以理解成*16
简单测试了下,应该没问题
也非常感谢二位能来帮忙
问题自己解决了.jpg
我翻阅各维基资料,最后编写出以下代码完成解析
Kotlin:
is ServerChunkDataPacket -> {
val p = event.getPacket<ServerChunkDataPacket>()
val column = p.column
val columnX = column.x
val columnZ = column.z
val chunks = column.chunks//16
var i = 0
chunks.forEach {
it ?: return
for (x in 0..1) {//4095
for (z in 0..1) {//255
for (y in 0..15) {
val block = it.blocks[x, y, z] ?: return
val positionX = (columnX shl 4) + x
val positionZ = (columnZ shl 4) + z
val positionY = y + (i shl 4)
println("$positionX $positionY $positionZ block:${block.id}")
}
}
}
i++
}
}
shl 4可以理解成*16
简单测试了下,应该没问题
也非常感谢二位能来帮忙