Skip to content

Instantly share code, notes, and snippets.

@rom1504
Created August 24, 2015 16:52
Show Gist options
  • Save rom1504/0d41cc284de99dfc8b6e to your computer and use it in GitHub Desktop.
Save rom1504/0d41cc284de99dfc8b6e to your computer and use it in GitHub Desktop.
Transform the types in minecraft-data protocol.json
var proto=require("./../../enums/protocol");
var fs=require("fs");
function transformProtocol(protocol)
{
var transformedProtocol = Object
.keys(protocol)
.reduce(function(transformedProtocol, state) {
transformedProtocol[state] = Object
.keys(protocol[state])
.reduce(function(stateO, direction) {
stateO[direction] = Object
.keys(protocol[state][direction])
.reduce(function(packetsO, packetName) {
packetsO[packetName] = transformPacket(protocol[state][direction][packetName]);
return packetsO;
}, {});
return stateO;
}, {});
return transformedProtocol;
}, {});
transformedProtocol=reorder(["handshaking","status","login","play"],transformedProtocol);
return transformedProtocol;
}
function reorder (order, obj) {
return order.reduce (function (rslt, prop) {
rslt[prop] = obj[prop];
return rslt;
}, {});
}
function write(protocol){
fs.writeFile("../../enums/protocol.json", JSON.stringify(protocol,null,2));
}
function transformPacket(packet)
{
return {
"id":packet.id,
"fields":transformFields(packet["fields"])
};
}
function transformFields(fields)
{
return fields.map(function(field){return transformField(field);});
}
function transformField(field)
{
return {
"name":field["name"],
"type":transformType(field)
}
}
function transformType(field) {
if(field.type == "container")
return ["container", transformFields(field.typeArgs["fields"])];
if(field.type == "buffer")
return ["buffer", {"countType": field.typeArgs["countType"]}];
if(field.type == "condition") {
return ["condition", {
"type":transformType(field.typeArgs),
"field":field.typeArgs["field"],
"values":field.typeArgs["values"],
"this":field.typeArgs["this"],
"different":field.typeArgs["different"]
}];
}
if(field.type=="array")
return ["array", field.typeArgs["count"] ? field.typeArgs : {
"type":transformType(field.typeArgs),
"countType":field.typeArgs["countType"]
}];
return field["type"];
}
write(transformProtocol(proto));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment