Created
July 30, 2020 07:59
-
-
Save alice-cash/99fe16e5960bbaaf3b8f7b0ecc995e3f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Newtonsoft.Json.Linq; | |
using System; | |
using System.IO; | |
using System.Text; | |
namespace ConsoleApp1 | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
dynamic Data = JValue.Parse(File.ReadAllText("read.json")); | |
foreach (var State in new string[] { "handshaking", "login", "status", "play" }) | |
foreach (var Direction in new string[] { "toClient", "toServer" }) | |
foreach (var Packet in Data[State][Direction]["types"]["packet"][1][0]["type"][1]["mappings"]) | |
{ | |
var packetID = Packet.Name; | |
var packetName = "packet_" + Packet.Value; | |
var myState = char.ToUpper(State[0]) + State.Substring(1); | |
var Namespace = "SLUM.lib.Client.Protocol.Netty." + myState + "State." + (Direction == "toClient" ? "ClientBound" : "ServerBound"); | |
var ClassName = SetCamelCase(packetName); | |
var FilePath = Namespace.Replace('.', '/'); | |
var FileName = FilePath + "/" + ClassName + ".cs"; | |
Directory.CreateDirectory(FilePath); | |
StringBuilder stringBuilder = new StringBuilder(); | |
WriteLine("using System;", stringBuilder); | |
WriteLine("using SLUM.lib.Data.DataTypes;", stringBuilder); | |
WriteLine("namespace " + Namespace, stringBuilder); | |
WriteLine("{", stringBuilder); | |
WriteLine(" public struct " + ClassName + " : IPacket", stringBuilder); | |
WriteLine(" {", stringBuilder); | |
WriteLine(" public static int PacketID => " + packetID + ";", stringBuilder); | |
WriteLine(" public int GetPacketID => PacketID;", stringBuilder); | |
WriteLine(" public bool PacketGood { get; set; }", stringBuilder); | |
WriteLine(" public int PacketLength { get; set; }", stringBuilder); | |
int i = 0; | |
foreach (var field in Data[State][Direction]["types"][packetName][1]) | |
{ | |
var FieldName = field["name"].Value; | |
string fieldType = ""; | |
if (field["type"].Type.ToString() == "String") | |
fieldType = GetType(field["type"].Value); | |
if (field["type"].Type.ToString() == "Array") | |
fieldType = GetType(field["type"][0].Value); | |
WriteLine(" [PacketField(" + i + ", Types." + fieldType + ")]", stringBuilder); | |
WriteLine(" public " + fieldType + " " + FieldName + " { get; set; }", stringBuilder); | |
i++; | |
} | |
WriteLine(" }", stringBuilder); | |
WriteLine("}", stringBuilder); | |
File.WriteAllText(FileName, stringBuilder.ToString()); | |
} | |
Console.ReadKey(); | |
} | |
static void WriteLine(string line, StringBuilder sb) | |
{ | |
sb.Append(line + "\n"); | |
} | |
static string SetCamelCase(string text) | |
{ | |
text = text.Substring("packet_".Length); | |
string returnval = char.ToUpper(text[0]).ToString(); | |
text = text.Substring(1); | |
while(text.IndexOf('_') > 0) | |
{ | |
returnval += text.Substring(0, text.IndexOf('_')); | |
text = char.ToUpper(text[text.IndexOf('_')+1]) + text.Substring(text.IndexOf('_')+2); | |
} | |
//returnval += char.ToUpper(text[0]).ToString() + text.Substring(1); | |
returnval += text; | |
return returnval; | |
} | |
static string GetType(string type) | |
{ | |
if (type == "varint") return "VarInt"; | |
if (type == "optvarint") return "VarInt"; | |
if (type == "pstring") return "VarString"; | |
if (type == "u16") return "UInt16"; | |
if (type == "u8") return "Byte"; | |
if (type == "i8") return "SByte"; | |
if (type == "i32") return "Int32"; | |
if (type == "i64") return "Int64"; | |
if (type == "buffer") return "ByteArray"; | |
if (type == "bool") return "Boolean"; | |
if (type == "f32") return "Float"; | |
if (type == "f64") return "Double"; | |
if (type == "UUID") return "UUID"; | |
if (type == "option") return "ERROR"; | |
if (type == "entityMetadataLoop") return "ERROR"; | |
if (type == "topBitSetTerminatedArray") return "ERROR"; | |
if (type == "bitfield") return "ERROR"; | |
if (type == "container") return "ERROR"; | |
if (type == "switch") return "ERROR"; | |
if (type == "void") return "ERROR"; | |
if (type == "array") return "ERROR"; | |
if (type == "restBuffer") return "ERROR"; | |
if (type == "nbt") return "ERROR"; | |
if (type == "optionalNbt") return "ERROR"; | |
if (type == "string") return "VarString"; | |
if (type == "slot") return "ERROR"; | |
if (type == "particle") return "ERROR"; | |
if (type == "ingredient") return "ERROR"; | |
if (type == "position") return "ERROR"; | |
if (type == "entityMetadataItem") return "ERROR"; | |
if (type == "entityMetadata") return "ERROR"; | |
return "ERROR_x2"; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment