static List <BlockState> GetBlockData(Stream InputStream) { /* * This whole section is just a tangled mess to parse the blockstate JSON files. * * Rather than even try to parse the JSON myself with string operators (cancer), * I decided to use an external function library. */ List <BlockState> BlockStates = new List <BlockState>(); //Generate the lists List <ModelReference> ModelList = new List <ModelReference>(); //before using them Dictionary <string, string> ModelDictionary = new Dictionary <string, string>(); using (StreamReader sr = new StreamReader(InputStream)) { JObject JsonOutput = JObject.Parse(sr.ReadToEnd()); foreach (KeyValuePair <string, JToken> Token in JsonOutput) { if (Token.Key == "variants") { BlockStates = new List <BlockState>(); foreach (JToken Variants in Token.Value) { foreach (JToken StateToken in Variants.Values <JToken>()) { ModelList = new List <ModelReference>(); ModelDictionary = new Dictionary <string, string>(); foreach (JToken ModelToken in StateToken.Children()) { ModelDictionary.Add(ModelToken.ToObject <JProperty>().Name, ModelToken.ToObject <string>()); } ModelList.Add(new ModelReference(ModelDictionary)); BlockStates.Add(new BlockState(Variants.ToObject <JProperty>().Name, ModelList)); } } //PackBlocks.Add(new Block(Entry.Name.Split('.')[0], BlockStates)); } else { throw new TrashMonkeyException("Model is multipart!"); } } } return(BlockStates); }
static void GetBlockStates(string PathInput) { List <Block> Blocks = new List <Block>(); using (ZipArchive MinecraftJar = ZipFile.OpenRead(PathInput)) { IEnumerable <ZipArchiveEntry> BlockStateEntries = MinecraftJar.Entries.Where(Entry => (Entry.Name.EndsWith(".json")) && (Entry.FullName.EndsWith(@"minecraft/blockstates/" + Entry.Name))); foreach (ZipArchiveEntry Entry in BlockStateEntries) { /* * This whole section is just a tangled mess to parse the blockstate JSON files. * * Rather than even try to parse the JSON myself with string operators (cancer), * I decided to use an external function library. */ List <BlockState> BlockStates = new List <BlockState>(); //Generate the lists List <ModelReference> ModelList = new List <ModelReference>(); //before using them Dictionary <string, string> ModelDictionary = new Dictionary <string, string>(); using (StreamReader sr = new StreamReader(Entry.Open())) { try { JObject JsonOutput = JObject.Parse(sr.ReadToEnd()); foreach (KeyValuePair <string, JToken> Token in JsonOutput) { if (Token.Key == "variants") { BlockStates = new List <BlockState>(); foreach (JToken Variants in Token.Value) { foreach (JToken StateToken in Variants.Values <JToken>()) { ModelList = new List <ModelReference>(); ModelDictionary = new Dictionary <string, string>(); foreach (JToken ModelToken in StateToken.Children()) { ModelDictionary.Add(ModelToken.ToObject <JProperty>().Name, ModelToken.ToObject <string>()); } ModelList.Add(new ModelReference(ModelDictionary)); BlockStates.Add(new BlockState(Variants.ToObject <JProperty>().Name, ModelList)); } } Blocks.Add(new Block(Entry.Name.Split('.')[0], BlockStates)); } } } catch { /* * For some reason Mojang has a crappy blockstate for acacia_wall_sign. * It has a random 'n' after all the data, which gives my code AIDS * unless I put it all in a try/catch. :P */ } } } ResourcePack[] ResourcePacks = null; foreach (ResourcePack Pack in ResourcePacks) { switch (Pack.Type) { case ResourcePack.PackType.Mod: case ResourcePack.PackType.Jar: case ResourcePack.PackType.Zip: break; case ResourcePack.PackType.Folder: break; default: break; } } List <ZipArchiveEntry> BlockModelEntries = new List <ZipArchiveEntry>(); foreach (Block block in Blocks) { BlockModelEntries.Add(MinecraftJar.GetEntry("assets/minecraft/models/" + block.BlockStates[0].Models[0].ModelData["model"] + ".json")); } BlockModelEntries = BlockModelEntries.Distinct().ToList(); List <BlockModel> BlockModels = new List <BlockModel>(); foreach (ZipArchiveEntry Entry in BlockModelEntries) { } Console.Write(""); //IEnumerable<ZipArchiveEntry> BlockModelEntries = MinecraftJar.Entries.Where(Entry => (Entry.Name.EndsWith(".json")) && (Entry.FullName.EndsWith(@"minecraft/models/block/" + Entry.Name))); //foreach (ZipArchiveEntry Entry in BlockModelEntries) //{ //} } }