Skip to content

Commit

Permalink
Add mc protocol example
Browse files Browse the repository at this point in the history
  • Loading branch information
Karang committed May 15, 2020
1 parent 20d36ae commit 729189d
Show file tree
Hide file tree
Showing 6 changed files with 4,876 additions and 6 deletions.
15 changes: 15 additions & 0 deletions examples/compiled_mc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const { ProtoDefCompiler } = require('protodef').Compiler

const compiler = new ProtoDefCompiler()
compiler.addTypes(require('./nbt-compound'))
compiler.addTypesToCompile(require('./nbt.json'))
compiler.addTypesToCompile({ 'optionalNbt': ['option', 'nbt'] })
compiler.addTypes(require('./mcDatatypes'))
compiler.addProtocol(require('./protocol.json'), ['play', 'toClient'])
// compiler.addProtocol(require('./protocol.json'), ['play', 'toServer'])

async function main () {
await compiler.compileProtoDef({ printCode: true })
}

main()
61 changes: 61 additions & 0 deletions examples/mcDatatypes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
const UUID = require('uuid-1345')

module.exports = {
Read: {
'UUID': ['native', (buffer, offset) => {
return {
value: UUID.stringify(buffer.slice(offset, 16 + offset)),
size: 16
}
}],
'restBuffer': ['native', (buffer, offset) => {
return {
value: buffer.slice(offset),
size: buffer.length - offset
}
}],
'entityMetadataLoop': ['parametrizable', (compiler, { type, endVal }) => {
let code = 'let cursor = offset\n'
code += 'const data = []\n'
code += 'while (true) {\n'
code += ` if (ctx.u8(buffer, cursor) === ${endVal}) return { value: data, size: cursor + 1 - offset }\n`
code += ' const elem = ' + compiler.callType(type) + '\n'
code += ' data.push(elem.value)\n'
code += ' cursor += elem.size\n'
code += '}'
return compiler.wrapCode(code)
}]
},
Write: {
'UUID': ['native', (value, buffer, offset) => {
const buf = UUID.parse(value)
buf.copy(buffer, offset)
return offset + 16
}],
'restBuffer': ['native', (value, buffer, offset) => {
value.copy(buffer, offset)
return offset + value.length
}],
'entityMetadataLoop': ['parametrizable', (compiler, { type, endVal }) => {
let code = 'for (const i in value) {\n'
code += ' offset = ' + compiler.callType('value[i]', type) + '\n'
code += '}\n'
code += `return offset + ctx.u8(${endVal}, buffer, offset)`
return compiler.wrapCode(code)
}]
},
SizeOf: {
'UUID': ['native', 16],
'restBuffer': ['native', (value) => {
return value.length
}],
'entityMetadataLoop': ['parametrizable', (compiler, { type }) => {
let code = 'let size = 1\n'
code += 'for (const i in value) {\n'
code += ' size += ' + compiler.callType('value[i]', type) + '\n'
code += '}\n'
code += `return size`
return compiler.wrapCode(code)
}]
}
}
Loading

0 comments on commit 729189d

Please sign in to comment.