using System; using System.Collections.Generic; using System.Linq; using System.IO; namespace MinecraftClient.Mapping.BlockPalettes { /// /// Generator for MCC Palette mappings /// public static class PaletteGenerator { /// /// Generate mapping from Minecraft blocks.jsom /// /// path to blocks.json /// output path for blocks.cs /// output path for material.cs /// java -cp minecraft_server.jar net.minecraft.data.Main --reports /// state => block name mappings public static void JsonToClass(string blocksJsonFile, string outputClass, string outputEnum = null) { Dictionary blocks = new Dictionary(); Json.JSONData palette = Json.ParseJson(File.ReadAllText(blocksJsonFile)); foreach (KeyValuePair item in palette.Properties) { string blockType = item.Key; foreach (Json.JSONData state in item.Value.Properties["states"].DataArray) { int id = int.Parse(state.Properties["id"].StringValue); blocks[id] = blockType; } } HashSet materials = new HashSet(); List outFile = new List(); outFile.AddRange(new[] { "using System;", "using System.Collections.Generic;", "", "namespace MinecraftClient.Mapping.BlockPalettes", "{", " public class PaletteXXX : PaletteMapping", " {", " private static Dictionary materials = new Dictionary()", " {", }); foreach (KeyValuePair item in blocks) { //minecraft:item_name => ItemName string name = String.Concat( item.Value.Replace("minecraft:", "") .Split('_') .Select(word => char.ToUpper(word[0]) + word.Substring(1)) ); outFile.Add(" { " + item.Key + ", Material." + name + " },"); materials.Add(name); } outFile.AddRange(new[] { " };", "", " protected override Dictionary GetDict()", " {", " return materials;", " }", " }", "}" }); File.WriteAllLines(outputClass, outFile); if (outputEnum != null) { outFile = new List(); outFile.Add(" public enum Material"); outFile.Add(" {"); foreach (string material in materials) outFile.Add(" " + material + ","); outFile.Add(" }"); File.WriteAllLines(outputEnum, outFile); } } } }