botv12/plugins/chunk.js

61 lines
2 KiB
JavaScript
Raw Permalink Normal View History

2025-02-12 23:59:41 -05:00
import loader from 'prismarine-chunk'
2025-02-12 23:30:49 -05:00
import Vec3 from 'vec3'
const rd = 8
2025-02-11 20:58:35 -05:00
2025-02-10 17:06:26 -05:00
export default function load (b) {
2025-02-12 23:59:41 -05:00
const Chunk = loader(b._client.version)
b.chunks = {}
b._client.on('map_chunk', data => {
if (!b.chunks[data.x]) {
b.chunks[data.x] = []
2025-02-12 23:30:49 -05:00
}
2025-02-12 23:59:41 -05:00
const chunk = new Chunk()
2025-02-12 23:48:02 -05:00
chunk.load(data.chunkData)
b.chunks[data.x][data.z] = chunk
2025-02-12 23:30:49 -05:00
})
b._client.on('block_change', data => {
2025-02-12 23:48:02 -05:00
const chunkX = data.location.x >> 4
const chunkZ = data.location.z >> 4
const blockX = data.location.x & 15
const blockZ = data.location.z & 15
if (b.chunks[chunkX] && b.chunks[chunkX][chunkZ]) {
b.chunks[chunkX][chunkZ].setBlockStateId(new Vec3(blockX, data.location.y, blockZ), data.type)
2025-02-12 23:30:49 -05:00
}
})
b._client.on('multi_block_change', data => {
for (const record of data.records) {
2025-02-12 23:30:49 -05:00
const blockState = record >> 12
const blockX = record >> 8 & 15
const blockZ = record >> 4 & 15
const blockY = record & 15
if (b.chunks[data.chunkCoordinates.x] && b.chunks[data.chunkCoordinates.x][data.chunkCoordinates.z]) {
b.chunks[data.chunkCoordinates.x][data.chunkCoordinates.z].setBlockStateId(new Vec3(blockX, blockY + 16 * data.chunkCoordinates.y, blockZ), blockState)
2025-02-12 23:30:49 -05:00
}
}
})
2025-02-12 23:48:02 -05:00
b._client.on('position', data => {
2025-02-12 23:30:49 -05:00
if (!b.ccStarted) {
b.currentChunk = { x: data.x >> 4, z: data.z >> 4 }
2025-02-12 23:30:49 -05:00
b.pos = { x: data.x, y: data.y, z: data.z }
} else {
b.currentChunk = { x: data.x >> 4, z: data.z >> 4 }
2025-02-13 00:14:24 -05:00
b.pos = { x: data.x, y: data.y, z: data.z }
2025-02-12 23:30:49 -05:00
}
b._client.write('teleport_confirm', { teleportId: data.teleportId })
})
b.interval.unloadChunks = setInterval(() => {
for (const i in b.chunks) {
// X-values
if (i > b.currentChunk.x + rd || i < b.currentChunk.x - rd) {
2025-02-12 23:30:49 -05:00
delete b.chunks[i]
}
for (const z in b.chunks[i]) {
// Z-values
if (z > b.currentChunk.z + rd || z < b.currentChunk.z - rd) {
2025-02-12 23:30:49 -05:00
delete b.chunks[i][z]
}
}
}
}, 1500)
2025-02-10 17:06:26 -05:00
}