Implement core refilling when broken
This commit is contained in:
parent
94587cfdc4
commit
091ab3af89
4 changed files with 91 additions and 51 deletions
14
package-lock.json
generated
14
package-lock.json
generated
|
@ -12,7 +12,7 @@
|
|||
"minecraft-protocol": "^1.54.0",
|
||||
"prismarine-chat": "^1.10.1",
|
||||
"prismarine-chunk": "^1.38.1",
|
||||
"prismarine-world": "^3.6.3"
|
||||
"vec3": "^0.1.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@azure/msal-common": {
|
||||
|
@ -645,18 +645,6 @@
|
|||
"prismarine-nbt": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/prismarine-world": {
|
||||
"version": "3.6.3",
|
||||
"resolved": "https://registry.npmjs.org/prismarine-world/-/prismarine-world-3.6.3.tgz",
|
||||
"integrity": "sha512-zqdqPEYCDHzqi6hglJldEO63bOROXpbZeIdxBmoQq7o04Lf81t016LU6stFHo3E+bmp5+xU74eDFdOvzYNABkA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vec3": "^0.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/process": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||
|
|
|
@ -17,6 +17,6 @@
|
|||
"minecraft-protocol": "^1.54.0",
|
||||
"prismarine-chat": "^1.10.1",
|
||||
"prismarine-chunk": "^1.38.1",
|
||||
"prismarine-world": "^3.6.3"
|
||||
"vec3": "^0.1.10"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,89 @@
|
|||
import { default as c_loader } from 'prismarine-chunk';
|
||||
const c = c_loader("1.18")
|
||||
import { default as w_loader } from 'prismarine-world';
|
||||
const w = w_loader()
|
||||
const rd = 4;
|
||||
import Vec3 from 'vec3'
|
||||
const rd = 8;
|
||||
|
||||
|
||||
//Chunk data parsing placeholder, for core
|
||||
export default function load (b) {
|
||||
|
||||
b.worlds={}
|
||||
b._client.on("map_chunk", payload => {
|
||||
//console.log(payload);
|
||||
//b._chunk = new c();
|
||||
//b._chunk.load(payload.chunkData)
|
||||
})
|
||||
const c = c_loader(b._client.version)
|
||||
b.chunks = {};
|
||||
b._client.on("map_chunk", payload => {
|
||||
//payload.x payload.z
|
||||
if(!b.chunks[payload.x]){
|
||||
b.chunks[payload.x]=[]
|
||||
}
|
||||
let chunk = new c();
|
||||
chunk.load(payload.chunkData)
|
||||
b.chunks[payload.x][payload.z]=chunk
|
||||
})
|
||||
b._client.on("block_change", payload => {
|
||||
const chunkX = payload.location.x >> 4
|
||||
const chunkZ = payload.location.z >> 4
|
||||
const blockX = payload.location.x & 15
|
||||
const blockZ = payload.location.z & 15
|
||||
if(b.chunks[chunkX] && b.chunks[chunkX][chunkZ]){
|
||||
b.chunks[chunkX][chunkZ].setBlockStateId(new Vec3(blockX,payload.location.y,blockZ),payload.type)
|
||||
}
|
||||
})
|
||||
b._client.on("multi_block_change", payload => {
|
||||
for(const record of payload.records){
|
||||
const blockState = record >> 12
|
||||
const blockX = record >> 8 & 15
|
||||
const blockZ = record >> 4 & 15
|
||||
const blockY = record & 15
|
||||
if(b.chunks[payload.chunkCoordinates.x] && b.chunks[payload.chunkCoordinates.x][payload.chunkCoordinates.z]){
|
||||
b.chunks[payload.chunkCoordinates.x][payload.chunkCoordinates.z].setBlockStateId(new Vec3(blockX,blockY+16*payload.chunkCoordinates.y,blockZ),blockState)
|
||||
}
|
||||
}
|
||||
})
|
||||
b._client.on('position', function (data) {
|
||||
if (!b.ccStarted) {
|
||||
b.original_pos = { x: data.x >> 4, y: data.y, z: data.z >> 4 }
|
||||
b.currentChunk = { x: data.x >> 4, z: data.z >> 4}
|
||||
b.pos = { x: data.x, y: data.y, z: data.z }
|
||||
} else {
|
||||
b.pos = { x: data.x, y: data.y, z: data.z }
|
||||
if (data.x >> 4 !== b.original_pos.x || data.z >> 4 !== b.original_pos.z) {
|
||||
b.original_pos = { x: data.x >> 4, y: data.y, z: data.z >> 4 }
|
||||
b.sc_tasks.cc.failed = 1
|
||||
}
|
||||
}
|
||||
b.commandPos = {
|
||||
x: data.x >> 4,
|
||||
z: data.z >> 4,
|
||||
y: 55
|
||||
}
|
||||
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){
|
||||
//console.log(`Unloading X value ${i}`)
|
||||
delete b.chunks[i]
|
||||
}
|
||||
for(const z in b.chunks[i]){
|
||||
//Z-values
|
||||
if(z > b.currentChunk.z + rd || z < b.currentChunk.z - rd){
|
||||
//console.log(`Unloading Z value ${z} in X row ${i}`)
|
||||
delete b.chunks[i][z]
|
||||
}
|
||||
}
|
||||
}
|
||||
},1500)
|
||||
b.interval.coreCheck=setInterval(()=>{
|
||||
let cf = false
|
||||
if(!b.currentChunk) return
|
||||
const chunk = b.chunks[b.currentChunk.x][b.currentChunk.z];
|
||||
for(let x=0; x<=15; x++){
|
||||
for(let z=0; z<=15; z++){
|
||||
const blockName = chunk.getBlock(new Vec3(x,55,z)).name
|
||||
if(blockName !== "command_block" && blockName !== "repeating_command_block" && blockName !== "chain_command_block"){
|
||||
//console.log(`Core fault at ${x} ${z}`)
|
||||
cf = true
|
||||
if(b.sc_tasks.cc) b.sc_tasks.cc.failed = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if(cf) break
|
||||
}
|
||||
},500)
|
||||
}
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
import uuidToInt from '../util/uuidtoint.js'
|
||||
import plainParser from '../util/chatparse_plain.js'
|
||||
import mcParser from '../util/chatparse_mc.js'
|
||||
const cs = {
|
||||
const cs = { // This value will be removed soon, as changing it can break things.
|
||||
x: 16,
|
||||
y: 1,
|
||||
z: 16
|
||||
}
|
||||
|
||||
const r16 = number => {
|
||||
return Math.floor(number/16)*16
|
||||
}
|
||||
|
||||
export default function load (b) {
|
||||
b.ccq = []
|
||||
|
@ -70,8 +67,8 @@ export default function load (b) {
|
|||
})
|
||||
if (!b.host.options.useChat) {
|
||||
b.add_sc_task('cc', () => {
|
||||
const xstart = r16(b.pos.x);
|
||||
const zstart = r16(b.pos.z);
|
||||
const xstart = Math.floor(b.pos.x/16)*16;
|
||||
const zstart = Math.floor(b.pos.z/16)*16;
|
||||
b.chat(`/fill ${xstart} 55 ${zstart} ${xstart + cs.x - 1} 55 ${zstart + cs.z - 1} ${refillPayload}`)
|
||||
})
|
||||
b.add_sc_task('cc_size', () => {
|
||||
|
@ -95,24 +92,7 @@ export default function load (b) {
|
|||
b.sc_tasks.cc_size.failed = 1
|
||||
}
|
||||
})
|
||||
b._client.on('position', function (data) {
|
||||
if (!b.ccStarted) {
|
||||
b.original_pos = { x: r16(data.x), y: data.y, z: r16(data.z) }
|
||||
b.pos = { x: data.x, y: data.y, z: data.z }
|
||||
} else {
|
||||
b.pos = { x: data.x, y: data.y, z: data.z }
|
||||
if (r16(data.x) !== b.original_pos.x || r16(data.z) !== b.original_pos.z) {
|
||||
b.original_pos = { x: r16(data.x), y: data.y, z: r16(data.z) }
|
||||
b.sc_tasks.cc.failed = 1
|
||||
}
|
||||
}
|
||||
b.commandPos = {
|
||||
x: r16(data.x),
|
||||
z: r16(data.z),
|
||||
y: 55
|
||||
}
|
||||
b._client.write('teleport_confirm', { teleportId: data.teleportId })
|
||||
})
|
||||
|
||||
|
||||
b.tellraw = (uuid, message) => {
|
||||
let finalname = ''
|
||||
|
|
Loading…
Add table
Reference in a new issue