diff --git a/PCK-Studio/Classes/Convert/FromLCE/LCEToBedrock.cs b/PCK-Studio/Classes/Convert/FromLCE/LCEToBedrock.cs index 4df1f4c4..60399fb6 100644 --- a/PCK-Studio/Classes/Convert/FromLCE/LCEToBedrock.cs +++ b/PCK-Studio/Classes/Convert/FromLCE/LCEToBedrock.cs @@ -1,16 +1,20 @@ -using ICSharpCode.SharpZipLib.Zip; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using PckStudio.Classes.FileTypes; -using PckStudio.Classes.IO; -using PckStudio.Classes.IO.LOC; -using System; +using System; using System.Collections.Generic; using System.Drawing; using System.IO; -using System.Linq; -namespace PckStudio.Classes.Convert.FromLCE +using ICSharpCode.SharpZipLib.Zip; +using ICSharpCode.SharpZipLib.Zip.Compression; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using OMI.Formats.Languages; +using OMI.Formats.Pck; +using OMI.Workers.Language; +using OMI.Workers.Pck; + +using PckStudio.Classes.Utils; + +namespace PckStudio.Classes.FromLCE { internal class LCEToBedrock { @@ -166,78 +170,68 @@ namespace PckStudio.Classes.Convert.FromLCE Dictionary ImgCopyLookup = new Dictionary() { - { "res/mob", "/textures/entity" }, { "res/art", "/textures/painting" }, { "res/environment", "/textures/environment" }, { "res/terrain", "/textures/environment" }, { "res/armor", "/textures/models/armor" } - }; #endregion #region Texture Packs - public void ConvertTexturePack(PCKFile Source, string ExportPath) + public void ConvertTexturePack(PckFile sourcePck, string exportPath) { - Directory.CreateDirectory(ExportPath); - foreach (PCKFile.FileData fd in Source.Files) + Directory.CreateDirectory(exportPath); + foreach (PckFile.FileData file in sourcePck.Files) { - switch (fd.filetype) + switch (file.Filetype) { - case PCKFile.FileData.FileType.TextureFile: - if(fd.filepath == "res/terrain.png") - SplitSheet(fd.data, ExportPath, 0); - if(fd.filepath == "res/items.png") - SplitSheet(fd.data, ExportPath, 1); + case PckFile.FileData.FileType.TextureFile: + if (file.Filename == "res/terrain.png") + SplitSheet(file.Data, exportPath, useItemsArray: false); + if (file.Filename == "res/items.png") + SplitSheet(file.Data, exportPath, useItemsArray: true); break; - case PCKFile.FileData.FileType.UIDataFile: - CopyTexture(fd, ExportPath); + case PckFile.FileData.FileType.UIDataFile: + CopyTexture(file, exportPath); break; } } } - void SplitSheet(byte[] data, string exportPath, int Type) + void SplitSheet(byte[] data, string exportPath, bool useItemsArray) { MemoryStream ms = new MemoryStream(data); // Get the inputs. + int defaultWidth = 16; + int defaultHeight = 34; + string[,] sheetArray = BlockSheetArray; string OutPath = "\\textures\\blocks\\"; - string[,] SheetArray = BlockSheetArray; - int DefaultWid = 16; - int DefaultHei = 34; - switch (Type) + + if (useItemsArray) { - case 0: - DefaultWid = 16; - DefaultHei = 34; - SheetArray = BlockSheetArray; - OutPath = "\\textures\\blocks\\"; - break; - case 1: - DefaultWid = 16; - DefaultHei = 17; - SheetArray = ItemSheetArray; - OutPath = "\\textures\\items\\"; - break; + defaultHeight = 17; + sheetArray = ItemSheetArray; + OutPath = "\\textures\\items\\"; } - Bitmap bm = (Bitmap)Bitmap.FromStream(ms); - int wid = bm.Width / DefaultWid; - int hgt = bm.Height / DefaultHei; + var bm = Image.FromStream(ms); + int width = bm.Width / defaultWidth; + int height = bm.Height / defaultHeight; Directory.CreateDirectory(exportPath + OutPath); // Start splitting the Bitmap. - Bitmap piece = new Bitmap(wid, hgt); - Rectangle dest_rect = new Rectangle(0, 0, wid, hgt); + Bitmap piece = new Bitmap(width, height); + Rectangle dest_rect = new Rectangle(0, 0, width, height); using (Graphics gr = Graphics.FromImage(piece)) { - int num_rows = bm.Height / hgt; - int num_cols = bm.Width / wid; - Rectangle source_rect = new Rectangle(0, 0, wid, hgt); + int num_rows = bm.Height / height; + int num_cols = bm.Width / width; + Rectangle source_rect = new Rectangle(0, 0, width, height); for (int row = 0; row < num_rows; row++) { source_rect.X = 0; @@ -249,37 +243,36 @@ namespace PckStudio.Classes.Convert.FromLCE GraphicsUnit.Pixel); // Save the piece. - string filename = SheetArray[row, col] + ".png"; + string filename = sheetArray[row, col] + ".png"; if(!string.IsNullOrEmpty(filename) && filename != "debug") piece.Save(exportPath + OutPath + filename, System.Drawing.Imaging.ImageFormat.Png); // Move to the next column. - source_rect.X += wid; + source_rect.X += width; } - source_rect.Y += hgt; + source_rect.Y += height; } } } - void CopyTexture(PCKFile.FileData data, string exportPath) + void CopyTexture(PckFile.FileData file, string exportPath) { - string NewFileName = data.filepath; - - foreach(KeyValuePair kvp in ImgCopyLookup) + string exportName = file.Filename; + foreach(var kvp in ImgCopyLookup) { - NewFileName = NewFileName.Replace(kvp.Key, kvp.Value); + exportName = exportName.Replace(kvp.Key, kvp.Value); } - Directory.CreateDirectory(Path.GetDirectoryName(exportPath + NewFileName)); - File.WriteAllBytes(exportPath + NewFileName, data.data); + Directory.CreateDirectory(Path.GetDirectoryName(exportPath + exportName)); + File.WriteAllBytes(exportPath + exportName, file.Data); } #endregion #region Skin Packs - public void ConvertSkinPack(PCKFile Source, string ExportFilepath) + public void ConvertSkinPack(PckFile sourcePck, string ExportFilepath) { - List objects = new List(); + List localisables = new List(); SkinJSON SJSON = new SkinJSON(); // Skins.json @@ -287,124 +280,133 @@ namespace PckStudio.Classes.Convert.FromLCE string ExportPath = Path.GetDirectoryName(ExportFilepath); Directory.CreateDirectory(Path.Combine(ExportPath, "skin_pack")); - PCKFile.FileData locFileData; - if(Source.TryGetFile("localisation.loc", PCKFile.FileData.FileType.LocalisationFile, out locFileData) || - Source.TryGetFile("languages.loc", PCKFile.FileData.FileType.LocalisationFile, out locFileData)) + if (sourcePck.TryGetFile("localisation.loc", PckFile.FileData.FileType.LocalisationFile, out PckFile.FileData locFileData) || + sourcePck.TryGetFile("languages.loc", PckFile.FileData.FileType.LocalisationFile, out locFileData)) { - LOCFile lf = LOCFileReader.Read(new MemoryStream(locFileData.data)); + var reader = new LOCFileReader(); - string newPackName = lf.GetLocEntry("IDS_DISPLAY_NAME", "en-EN").ToLower().Replace(":", ""); - if (!String.IsNullOrEmpty(newPackName)) + using (var ms = new MemoryStream(locFileData.Data)) { - PackName = newPackName.Replace(" ", "_"); - } + LOCFile locFile = reader.FromStream(ms); + string newPackName = locFile.GetLocEntry("IDS_DISPLAY_NAME", "en-EN").ToLower().Replace(":", ""); + if (!string.IsNullOrEmpty(newPackName)) + { + PackName = newPackName.Replace(" ", "_"); + } - ExportLOC(lf, ExportPath + "\\skin_pack\\texts", localisables); - } - - foreach (PCKFile.FileData fd in Source.Files) - { - switch (fd.filetype) - { - case PCKFile.FileData.FileType.SkinFile: - ExportSkin(fd, ExportPath + "\\skin_pack", objects); - break; - case PCKFile.FileData.FileType.CapeFile: - ExportCape(fd, ExportPath + "\\skin_pack"); - break; - case PCKFile.FileData.FileType.SkinDataFile: - PCKFile SubPack = PCKFileReader.Read(new MemoryStream(fd.data), false); - foreach(PCKFile.FileData file in SubPack.Files) - switch(file.filetype) - { - case PCKFile.FileData.FileType.SkinFile: - ExportSkin(file, ExportPath + "\\skin_pack", objects); - break; - case PCKFile.FileData.FileType.CapeFile: - ExportCape(file, ExportPath + "\\skin_pack"); - break; - } - break; + ExportLOC(locFile, ExportPath + "\\skin_pack\\texts", localisables); } } - SJSON.localization_name = localisables[0]; - SJSON.serialize_name = localisables[0]; - SJSON.skins = objects.ToArray(); + + SJSON.skins = ConvertSkins(sourcePck, ExportPath).ToArray(); + SJSON.localization_name = SJSON.serialize_name = localisables[0]; + CreateSkinPackManifest(ExportPath + "\\skin_pack", localisables[0]); + string SKINS_JSON = JsonConvert.SerializeObject(SJSON, Formatting.Indented); File.WriteAllText(ExportPath + "\\skin_pack\\skins.json", SKINS_JSON); + string GEO_JSON = JsonConvert.SerializeObject(GJSON, Formatting.Indented); File.WriteAllText(ExportPath + "\\skin_pack\\geometry.json", GEO_JSON); - ZipOutputStream OutputStream = new ZipOutputStream(File.Create(ExportFilepath)); - OutputStream.SetLevel(0); - string[] files = Directory.GetFiles(ExportPath + "\\skin_pack", "*", SearchOption.AllDirectories); - foreach (string file in files) + + using (var outputStream = new ZipOutputStream(File.Create(ExportFilepath))) { - ZipEntry entry = new ZipEntry(file.Replace(ExportPath+"\\", "")); - entry.DateTime = DateTime.Now; - OutputStream.PutNextEntry(entry); - byte[] sourceBytes = File.ReadAllBytes(file); - OutputStream.Write(sourceBytes, 0, sourceBytes.Length); + outputStream.SetLevel(Deflater.NO_COMPRESSION); + string[] files = Directory.GetFiles(ExportPath + "\\skin_pack", "*", SearchOption.AllDirectories); + foreach (string file in files) + { + ZipEntry entry = new ZipEntry(file.Replace(ExportPath + "\\", "")); + outputStream.PutNextEntry(entry); + + byte[] sourceBytes = File.ReadAllBytes(file); + outputStream.Write(sourceBytes, 0, sourceBytes.Length); + } + //Directory.Delete(ExportPath + "\\skin_pack", true); } - //Directory.Delete(ExportPath + "\\skin_pack", true); - OutputStream.Close(); - System.GC.Collect(); + GC.Collect(); } - void ExportLOC(LOCFile lf, string ExportPath, List LocName) + private List ConvertSkins(PckFile sourcePck, string exportPath) { - Directory.CreateDirectory(ExportPath); + List skins = new List(); + foreach (PckFile.FileData file in sourcePck.Files) + { + switch (file.Filetype) + { + case PckFile.FileData.FileType.SkinFile: + skins.Add(ExportSkin(file, exportPath + "\\skin_pack")); + break; + case PckFile.FileData.FileType.CapeFile: + ExportCape(file, exportPath + "\\skin_pack"); + break; + case PckFile.FileData.FileType.SkinDataFile: + var reader = new PckFileReader(); + using (var ms = new MemoryStream(file.Data)) + { + PckFile subPack = reader.FromStream(ms); + skins.AddRange(ConvertSkins(subPack, exportPath)); + } + break; + } + } + return skins; + } + + void ExportLOC(LOCFile locFile, string exportPath, List LocName) + { + Directory.CreateDirectory(exportPath); LocName.Add(PackName); List languages = new List(); - foreach (KeyValuePair> kvp in lf.LocKeys) - { - string PackString = kvp.Key.Replace("IDS_DISPLAY_NAME", "skinpack." + PackName).Replace("IDS_DLCSKIN", "skin." + PackName + ".").Replace("_DISPLAYNAME", "").Replace(" ", ""); - if (!PackString.EndsWith("_THEMENAME")) + foreach (var kvp in locFile.LocKeys) + { + string packString = kvp.Key.Replace("IDS_DISPLAY_NAME", "skinpack." + PackName).Replace("IDS_DLCSKIN", "skin." + PackName + ".").Replace("_DISPLAYNAME", "").Replace(" ", ""); + + if (!packString.EndsWith("_THEMENAME")) { foreach (KeyValuePair text in kvp.Value) { - string BedrockLang = languageMap[text.Key]; - if (!languages.Contains(BedrockLang)) - languages.Add(BedrockLang); - if (File.Exists(ExportPath + "\\" + BedrockLang + ".lang")) + string bedrockLang = languageMap[text.Key]; + if (!languages.Contains(bedrockLang)) + languages.Add(bedrockLang); + if (File.Exists(exportPath + "\\" + bedrockLang + ".lang")) { - if (!File.ReadAllText(ExportPath + "\\" + BedrockLang + ".lang").Contains(PackString)) + if (!File.ReadAllText(exportPath + "\\" + bedrockLang + ".lang").Contains(packString)) { - using (StreamWriter sw = new StreamWriter(ExportPath + "\\" + BedrockLang + ".lang", true)) + using (StreamWriter sw = new StreamWriter(exportPath + "\\" + bedrockLang + ".lang", true)) { - sw.WriteLine(PackString + "=" + text.Value); + sw.WriteLine(packString + "=" + text.Value); } } } else { - using (StreamWriter sw = new StreamWriter(ExportPath + "\\" + BedrockLang + ".lang", true)) + using (StreamWriter sw = new StreamWriter(exportPath + "\\" + bedrockLang + ".lang", true)) { - sw.WriteLine(PackString + "=" + text.Value); + sw.WriteLine(packString + "=" + text.Value); } } } } } - string JSON = JsonConvert.SerializeObject(languages.ToArray(), Formatting.Indented); - File.WriteAllText(ExportPath + "\\languages.json", JSON); + string serializedLanguages = JsonConvert.SerializeObject(languages.ToArray(), Formatting.Indented); + File.WriteAllText(exportPath + "\\languages.json", serializedLanguages); } - List> offsets = null; + List<(string, string)> offsets = null; - List> GetSkinOffsets(PCKProperties SkinProps) + List<(string, string)> GetSkinOffsets(PckFile.PCKProperties skinProperties) { - List> skinOffsets = new List>(); + List<(string, string)> skinOffsets = new List>(); string part_offset = ""; - foreach (string p in OffsetNames) + foreach (string offsetName in OffsetNames) { try { - var v = SkinProps.Find(prop => prop.property == "OFFSET" && prop.value.StartsWith(p)).value; + var v = skinProperties.Find(prop => prop.property == "OFFSET" && prop.value.StartsWith(offsetName)).value; if (v != null && v.Length >= 2) part_offset = v.Split(' ')[2]; else part_offset = "0"; } @@ -414,59 +416,60 @@ namespace PckStudio.Classes.Convert.FromLCE part_offset = "0"; } - switch(p) + switch (offsetName) { case "HEAD": - skinOffsets.Add(new ValueTuple("HEADWEAR", part_offset)); + skinOffsets.Add(("HEADWEAR", part_offset)); break; case "BODY": - skinOffsets.Add(new ValueTuple("JACKET", part_offset)); - skinOffsets.Add(new ValueTuple("BODYARMOR", part_offset)); + skinOffsets.Add(("JACKET", part_offset)); + skinOffsets.Add(("BODYARMOR", part_offset)); break; case "CHEST": - skinOffsets.Add(new ValueTuple("BELT", part_offset)); - skinOffsets.Add(new ValueTuple("WAIST", part_offset)); + skinOffsets.Add(("BELT", part_offset)); + skinOffsets.Add(("WAIST", part_offset)); break; case "ARM0": - skinOffsets.Add(new ValueTuple("SLEEVE0", part_offset)); - skinOffsets.Add(new ValueTuple("SHOULDER0", part_offset)); + skinOffsets.Add(("SLEEVE0", part_offset)); + skinOffsets.Add(("SHOULDER0", part_offset)); break; case "ARM1": - skinOffsets.Add(new ValueTuple("SLEEVE1", part_offset)); - skinOffsets.Add(new ValueTuple("SHOULDER1", part_offset)); + skinOffsets.Add(("SLEEVE1", part_offset)); + skinOffsets.Add(("SHOULDER1", part_offset)); break; case "LEG0": - skinOffsets.Add(new ValueTuple("PANTS0", part_offset)); - skinOffsets.Add(new ValueTuple("SOCK0", part_offset)); + skinOffsets.Add(("PANTS0", part_offset)); + skinOffsets.Add(("SOCK0", part_offset)); break; case "LEG1": - skinOffsets.Add(new ValueTuple("PANTS1", part_offset)); - skinOffsets.Add(new ValueTuple("SOCK1", part_offset)); + skinOffsets.Add(("PANTS1", part_offset)); + skinOffsets.Add(("SOCK1", part_offset)); break; } - if(skinOffsets.Find(o => o.Item1 == p).ToTuple() != null) skinOffsets.Add(new ValueTuple(p, part_offset)); + if(skinOffsets.Find(p => p.Item1 == offsetName) != default!) + skinOffsets.Add(new ValueTuple(offsetName, part_offset)); } return skinOffsets; } - modelCube[] ConvertBoxes(string part, PCKFile.FileData file, float[] pivot) + modelCube[] ConvertBoxes(string part, PckFile.FileData file, float[] pivot) { List cubes = new List(); - Utils.SkinANIM anim = new Utils.SkinANIM("0"); + var anim = new SkinANIM("0"); Console.WriteLine(part); float offset = float.Parse(offsets.Find(o => o.Item1 == part).Item2); - foreach (ValueTuple property in file.properties) + foreach (var (name, value) in file.Properties) { - string entry = property.Item2; - switch (property.Item1) + string entry = value; + switch (name) { case "ANIM": - anim = new Utils.SkinANIM(property.Item2); + anim = new SkinANIM(value); break; case "BOX": string[] args = entry.Split(' '); @@ -482,46 +485,58 @@ namespace PckStudio.Classes.Convert.FromLCE } } - bool slim = anim.GetANIMFlag(Utils.eANIM_EFFECTS.SLIM_MODEL); - bool classic_res = !(slim && anim.GetANIMFlag(Utils.eANIM_EFFECTS.RESOLUTION_64x64)); + bool slim = anim.GetFlag(ANIM_EFFECTS.SLIM_MODEL); + bool classic_res = !(slim && anim.GetFlag(ANIM_EFFECTS.RESOLUTION_64x64)); switch (part) { case "HEAD": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.HEAD_DISABLED)) cubes.Add(new modelCube(new float[]{ -4, 24 - offset, -4 }, new float[] { 8, 8, 8 }, new float[] { 0, 0 })); + if (!anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED)) + cubes.Add(new modelCube(new float[]{ -4, 24 - offset, -4 }, new float[] { 8, 8, 8 }, new float[] { 0, 0 })); break; case "BODY": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.BODY_DISABLED)) cubes.Add(new modelCube(new float[] { -4, 12 - offset, -2 }, new float[] { 8, 12, 4 }, new float[] { 16, 16 })); + if (!anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED)) + cubes.Add(new modelCube(new float[] { -4, 12 - offset, -2 }, new float[] { 8, 12, 4 }, new float[] { 16, 16 })); break; case "ARM0": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.RIGHT_ARM_DISABLED)) cubes.Add(new modelCube(new float[] { slim ? -7 : - 8, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, new float[] { 40, 16 })); + if (!anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED)) + cubes.Add(new modelCube(new float[] { slim ? -7 : - 8, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, new float[] { 40, 16 })); break; case "ARM1": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.LEFT_ARM_DISABLED)) cubes.Add(new modelCube(new float[] {4, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, classic_res ? new float[] { 40, 16 } : new float[] { 32, 48 }, classic_res)); + if (!anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) + cubes.Add(new modelCube(new float[] {4, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, classic_res ? new float[] { 40, 16 } : new float[] { 32, 48 }, classic_res)); break; case "LEG0": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.RIGHT_LEG_DISABLED)) cubes.Add(new modelCube(new float[] { -3.9f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, new float[] { 0, 16 })); + if (!anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED)) + cubes.Add(new modelCube(new float[] { -3.9f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, new float[] { 0, 16 })); break; case "LEG1": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.LEFT_LEG_DISABLED)) cubes.Add(new modelCube(new float[] {0.1f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, classic_res ? new float[] { 0, 16 } : new float[] { 16, 48 }, classic_res)); + if (!anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) + cubes.Add(new modelCube(new float[] {0.1f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, classic_res ? new float[] { 0, 16 } : new float[] { 16, 48 }, classic_res)); break; case "HEADWEAR": - if (!anim.GetANIMFlag(Utils.eANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) cubes.Add(new modelCube(new float[] { -4, 24 - offset, -4 }, new float[] { 8, 8, 8 }, new float[] { 32, 0 }, false, 0.5f)); + if (!anim.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) + cubes.Add(new modelCube(new float[] { -4, 24 - offset, -4 }, new float[] { 8, 8, 8 }, new float[] { 32, 0 }, false, 0.5f)); break; case "JACKET": - if (!classic_res && !anim.GetANIMFlag(Utils.eANIM_EFFECTS.BODY_OVERLAY_DISABLED)) cubes.Add(new modelCube(new float[] { 0, 24 - offset, 0 }, new float[] { 8, 12, 4 }, new float[] { 16, 32 }, false, 0.25f)); + if (!classic_res && !anim.GetFlag(ANIM_EFFECTS.BODY_OVERLAY_DISABLED)) + cubes.Add(new modelCube(new float[] { 0, 24 - offset, 0 }, new float[] { 8, 12, 4 }, new float[] { 16, 32 }, false, 0.25f)); break; case "SLEEVE0": - if (!classic_res && !anim.GetANIMFlag(Utils.eANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED)) cubes.Add(new modelCube(new float[] { slim ? -7 : -8, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, new float[] { 40, 32 }, false, 0.25f)); + if (!classic_res && !anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED)) + cubes.Add(new modelCube(new float[] { slim ? -7 : -8, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, new float[] { 40, 32 }, false, 0.25f)); break; case "SLEEVE1": - if (!classic_res && !anim.GetANIMFlag(Utils.eANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED)) cubes.Add(new modelCube(new float[] { 4, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, new float[] { 48, 48 }, false, 0.25f)); + if (!classic_res && !anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED)) + cubes.Add(new modelCube(new float[] { 4, 12 - offset, -2 }, new float[] { slim ? 3 : 4, 12, 4 }, new float[] { 48, 48 }, false, 0.25f)); break; case "PANTS0": - if (!classic_res && !anim.GetANIMFlag(Utils.eANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED)) cubes.Add(new modelCube(new float[] { -3.9f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, new float[] { 0, 32 }, false, 0.25f)); + if (!classic_res && !anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED)) + cubes.Add(new modelCube(new float[] { -3.9f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, new float[] { 0, 32 }, false, 0.25f)); break; case "PANTS1": - if (!classic_res && !anim.GetANIMFlag(Utils.eANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED)) cubes.Add(new modelCube(new float[] { 0.1f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, new float[] { 0, 48 }, false, 0.25f)); + if (!classic_res && !anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED)) + cubes.Add(new modelCube(new float[] { 0.1f, 0 - offset, -2 }, new float[] { 4, 12, 4 }, new float[] { 0, 48 }, false, 0.25f)); break; default: break; @@ -530,12 +545,13 @@ namespace PckStudio.Classes.Convert.FromLCE return cubes.ToArray(); } - void ExportSkin(PCKFile.FileData file, string ExportPath, List src) + SkinObject ExportSkin(PckFile.FileData file, string exportPath) { - if (file.filetype != PCKFile.FileData.FileType.SkinFile) return; + if (file.Filetype != PckFile.FileData.FileType.SkinFile) + return default!; SkinObject So = new SkinObject(); - string skinID = file.filepath.Replace(".png", "").Replace("Skins/", ""); + string skinID = file.Filename.Replace(".png", "").Replace("Skins/", ""); So.localization_name = skinID; So.texture = skinID + ".png"; @@ -549,7 +565,7 @@ namespace PckStudio.Classes.Convert.FromLCE float[] right_leg_pivot = new float[] { -1.9f, 12, 0 }; float[] left_leg_pivot = new float[] { 1.9f, 12, 0 }; - offsets = GetSkinOffsets(file.properties); + offsets = GetSkinOffsets(file.Properties); List bones = new List(); @@ -592,33 +608,39 @@ namespace PckStudio.Classes.Convert.FromLCE bones.Add(new modelBone("rightBootArmorOffset", "rightLeg", new float[] { 2f, 12f - float.Parse(offsets.Find(o => o.Item1 == "BOOT0").Item2), 0f }, null, "armor_offset")); bones.Add(new modelBone("leftBootArmorOffset", "leftLeg", new float[] { -2f, 12f - float.Parse(offsets.Find(o => o.Item1 == "BOOT1").Item2), 0f }, null, "armor_offset")); - string capepath = file.properties.Find(o => o.property == "CAPEPATH").value; + string capepath = file.Properties.Find(o => o.property == "CAPEPATH").value; JToken geo = JToken.FromObject(new skinModel(bones.ToArray())); - if(capepath != null) geo["cape"] = capepath; + if (capepath != null) + geo["cape"] = capepath; GJSON.Add(So.geometry, geo); - File.WriteAllBytes(ExportPath + "\\" + skinID + ".png", file.data); - src.Add(So); + File.WriteAllBytes(exportPath + "\\" + skinID + ".png", file.Data); + return So; } - void ExportCape(PCKFile.FileData file, string ExportPath) + void ExportCape(PckFile.FileData file, string exportPath) { - string capeID = file.filepath.Replace(".png", "").Replace("Skins/", ""); - File.WriteAllBytes(ExportPath + "\\" + capeID + ".png", file.data); + if (file.Filetype != PckFile.FileData.FileType.CapeFile) + return; + + string capeID = file.Filename.Replace(".png", string.Empty).Replace("Skins/", string.Empty); + File.WriteAllBytes(exportPath + "\\" + capeID + ".png", file.Data); } - void CreateSkinPackManifest(string ExportPath, string localizedName) + void CreateSkinPackManifest(string exportPath, string localizedName) { SkinManifest manifest = new SkinManifest(); - manifest.header = new Header(); - manifest.header.name = localizedName; - manifest.header.description = $"Exported with PCK Studio"; + manifest.header = new Header() + { + name = localizedName, + description = "Exported with PCK Studio", + }; manifest.modules = new Module[] { new Module() }; manifest.format_version = 1; string JSON = JsonConvert.SerializeObject(manifest, Formatting.Indented); - File.WriteAllText(ExportPath + "\\manifest.json", JSON); + File.WriteAllText(exportPath + "\\manifest.json", JSON); } #endregion @@ -658,6 +680,8 @@ namespace PckStudio.Classes.Convert.FromLCE public string type = "free"; } + #endregion + #region Model classes for ANIM conversion public class BOX @@ -679,7 +703,7 @@ namespace PckStudio.Classes.Convert.FromLCE mirror = arguments[10] == "1"; inflation = float.Parse(arguments[11]); } - catch (Exception e) + catch { return; } @@ -759,6 +783,5 @@ namespace PckStudio.Classes.Convert.FromLCE public modelBone[] bones; } #endregion - #endregion } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index cec27cef..51147a96 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -28,7 +28,7 @@ using PckStudio.Forms.Additional_Popups; using PckStudio.Classes.Misc; using OMI.Formats.Pck; using PckStudio.Classes.IO.PCK; -using PckStudio.Classes.Convert.FromLCE; +using PckStudio.Classes.FromLCE; namespace PckStudio { @@ -1688,982 +1688,18 @@ namespace PckStudio private void convertToBedrockToolStripMenuItem_Click(object sender, EventArgs e) { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "MCPack File|*.mcpack"; - if(sfd.ShowDialog() == DialogResult.OK) + SaveFileDialog sfd = new SaveFileDialog + { + Filter = "MCPack File|*.mcpack" + }; + if (sfd.ShowDialog() == DialogResult.OK) { LCEToBedrock lb = new LCEToBedrock(); lb.ConvertSkinPack(currentPCK, sfd.FileName); } - - //if (openedPCKS.Visible == true && MessageBox.Show("Convert " + openedPCKS.SelectedTab.Text + " to a Bedrock Edition format?", "Convert", MessageBoxButtons.YesNo, MessageBoxIcon.None) == DialogResult.Yes) - //{ - // try - // { - // string packName = openedPCKS.SelectedTab.Text.Remove(openedPCKS.SelectedTab.Text.Count() - 4, 4);//Determines skin packs name off of pck file name - - // //Lets user choose were to put generated pack - // SaveFileDialog convert = new SaveFileDialog(); - // convert.Filter = "PCK (Minecarft Bedrock DLC)|*.mcpack"; - // convert.FileName = packName; - - // if (convert.ShowDialog() == DialogResult.OK) - // { - // //creates directory for conversion - // string root = Path.GetDirectoryName(convert.FileName) + "\\" + packName; - // string rootFinal = Path.GetDirectoryName(convert.FileName) + "\\"; - - // //creates pack uuid off of the last skin id detected - // string uuid = "99999999"; //default - - // //creates list of skin display names - // List skinDisplayNames = new List(); - - // //MessageBox.Show(root);//debug thingy to make sure filepath is correct - - // //add all skins to a list - // List skinsList = new List(); - // List capesList = new List(); - // foreach (PCKFile.FileData skin in currentPCK.Files) - // { - // if (skin.name.Count() == 19) - // { - // if (skin.name.Remove(7, skin.name.Count() - 7) == "dlcskin") - // { - // skinsList.Add(skin); - // uuid = skin.name.Remove(12, 7); - // uuid = uuid.Remove(0, 7); - // uuid = "abcdefa" + uuid; - // } - // if (skin.name.Remove(7, skin.name.Count() - 7) == "dlccape") - // { - // capesList.Add(skin); - // } - // } - // } - - // if (skinsList.Count() == 0) - // { - // MessageBox.Show("No skins were found"); - // return; - // } - - // Directory.CreateDirectory(root);//Creates directory for skin pack - // Directory.CreateDirectory(root + "/texts");//create directory for skin pack text files - - // //create skins json file - // using (StreamWriter writeSkins = new StreamWriter(root + "/skins.json")) - // { - // writeSkins.WriteLine("{"); - // writeSkins.WriteLine(" \"skins\": ["); - - // int skinAmount = 0; - // foreach (PCKFile.FileData newSkin in skinsList) - // { - // skinAmount += 1; - // string skinName = "skinName"; - // string capePath = ""; - // bool hasCape = false; - - // foreach (var entry in newSkin.properties) - // { - // if (entry.Item1 == "DISPLAYNAME") - // { - // skinName = entry.Item2; - // skinDisplayNames.Add(new Item() { Id = newSkin.name.Remove(15, 4), Name = skinName }); - // } - // if (entry.Item1 == "CAPEPATH") - // { - // hasCape = true; - // capePath = entry.Item2.ToString(); - // } - // } - - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"localization_name\": " + "\"" + newSkin.name.Remove(15, 4) + "\","); - - // MemoryStream png = new MemoryStream(newSkin.data); //Gets image data from minefile data - // Image skinPicture = Image.FromStream(png); //Constructs image data into image - // if (skinPicture.Height == skinPicture.Width) - // { - // writeSkins.WriteLine(" \"geometry\": \"geometry." + packName + "." + newSkin.name.Remove(15, 4) + "\","); - // } - // writeSkins.WriteLine(" \"texture\": " + "\"" + newSkin.name + "\","); - // if (hasCape == true) - // { - // writeSkins.WriteLine(" \"cape\":" + "\"" + capePath + "\","); - // } - // writeSkins.WriteLine(" \"type\": \"free\""); - // if (skinAmount != skinsList.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"serialize_name\": \"" + packName + "\","); - // writeSkins.WriteLine(" \"localization_name\": \"" + packName + "\""); - // writeSkins.WriteLine("}"); - // } - - // //Create geometry file - // using (StreamWriter writeSkins = new StreamWriter(root + "/geometry.json")) - // { - // writeSkins.WriteLine("{"); - // int newSkinCount = 0; - // foreach (PCKFile.FileData newSkin in skinsList) - // { - - // newSkinCount += 1; - // string skinType = "steve"; - // MemoryStream png = new MemoryStream(newSkin.data); //Gets image data from minefile data - // Image skinPicture = Image.FromStream(png); //Constructs image data into image - - // if (skinPicture.Height == skinPicture.Width / 2) - // { - // skinType = "64x32"; - // continue; - // } - - // double offsetHead = 0; - // double offsetBody = 0; - // double offsetArms = 0; - // double offsetLegs = 0; - - // //creates list of skin model data - // List modelDataHead = new List(); - // List modelDataBody = new List(); - // List modelDataLeftArm = new List(); - // List modelDataRightArm = new List(); - // List modelDataLeftLeg = new List(); - // List modelDataRightLeg = new List(); - // List modelData = new List(); - - - // if (skinPicture.Height == skinPicture.Width) - // { - // //determines skin type based on image dimensions, existence of BOX tags, and the ANIM value - // foreach (var entry in newSkin.properties) - // { - // if (entry.Item1 == "BOX") - // { - // string mClass = ""; - // string mData = ""; - // foreach (char dCheck in entry.Item2) - // { - // if (dCheck.ToString() != " ") - // { - // mClass += dCheck.ToString(); - // } - // else - // { - // mData = entry.Item2.Remove(0, mClass.Count() + 1); - // break; - // } - // } - - // if (mClass == "HEAD") - // { - // mClass = "head"; - // modelDataHead.Add(new Item() { Id = mClass, Name = mData }); - // } - // else if (mClass == "BODY") - // { - // mClass = "body"; - // modelDataBody.Add(new Item() { Id = mClass, Name = mData }); - // } - // else if (mClass == "ARM0") - // { - // mClass = "rightArm"; - // modelDataRightArm.Add(new Item() { Id = mClass, Name = mData }); - // } - // else if (mClass == "ARM1") - // { - // mClass = "leftArm"; - // modelDataLeftArm.Add(new Item() { Id = mClass, Name = mData }); - // } - // else if (mClass == "LEG0") - // { - // mClass = "leftLeg"; - // modelDataLeftLeg.Add(new Item() { Id = mClass, Name = mData }); - // } - // else if (mClass == "LEG1") - // { - // mClass = "rightLeg"; - // modelDataRightLeg.Add(new Item() { Id = mClass, Name = mData }); - // } - // } - - // if (entry.Item1 == "OFFSET") - // { - // string oClass = ""; - // string oData = ""; - // foreach (char oCheck in entry.Item2.ToString()) - // { - // oData = entry.Item2.ToString(); - // if (oCheck.ToString() != " ") - // { - // oClass += oCheck.ToString(); - // } - // else - // { - // break; - // } - - // if (oClass == "HEAD") - // { - // offsetHead += Double.Parse(oData.Remove(0, 7)) * -1; - // } - // else if (oClass == "BODY") - // { - // offsetBody += Double.Parse(oData.Remove(0, 7)) * -1; - // } - // else if (oClass == "ARM0") - // { - // offsetArms += Double.Parse(oData.Remove(0, 7)) * -1; - // } - // else if (oClass == "LEG0") - // { - // offsetLegs += Double.Parse(oData.Remove(0, 7)) * -1; - // } - // } - // } - - // if (entry.Item1 == "ANIM") - // { - // if (entry.Item2 == "0x40000") - // { - - // } - // else if (entry.Item2 == "0x80000") - // { - // skinType = "alex"; - // } - // } - // } - - // if (modelDataHead.Count + modelDataBody.Count + modelDataLeftArm.Count + modelDataRightArm.Count + modelDataLeftLeg.Count + modelDataRightLeg.Count > 0) - // { - // skinType = "custom"; - // } - // } - - // writeSkins.WriteLine(" \"" + "geometry." + packName + "." + newSkin.name.Remove(15, 4) + "\": {"); - - // //makes skin model depending on what skin type the skin is - // if (skinType == "custom") - // { - // writeSkins.WriteLine(" \"bones\": ["); - - // //Head Data - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"pivot\": [ 0, 24, 0 ],"); - // writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],"); - // writeSkins.WriteLine(" \"cubes\": [ "); - // //Creates bones for each head box - // int modelAmount = 0; - // foreach (Item model in modelDataHead) - // { - // modelAmount += 1; - - // string xo = ""; - // string yo = ""; - // string zo = ""; - // string xs = ""; - // string ys = ""; - // string zs = ""; - // string xv = ""; - // string yv = ""; - - // int spaceCheck = 0; - - // foreach (char value in model.Name.ToString()) - // { - // //0X1Y2Z3X4Y5Z6X7Y - // if (value.ToString() != " " && spaceCheck == 0) - // { - // xo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 1) - // { - // yo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 2) - // { - // zo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 3) - // { - // xs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 4) - // { - // ys += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 5) - // { - // zs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 6) - // { - // xv += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 7) - // { - // yv += value.ToString(); - // } - // else if (value.ToString() == " ") - // { - // spaceCheck += 1; - // } - // } - - // writeSkins.WriteLine(" {"); - // try - // { - // writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo)) + ", " + ((Double.Parse(yo) + 0) * -1 + offsetHead + 24 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],"); - // writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + (Double.Parse(ys)) + ", " + Double.Parse(zs) + " ],"); - // writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],"); - // writeSkins.WriteLine(" \"inflate\": 0,"); - // writeSkins.WriteLine(" \"mirror\": false"); - // } - // catch (Exception) - // { - // MessageBox.Show("A HEAD BOX tag in " + newSkin.name + " has an invalid value!"); - // } - // if (modelAmount != modelDataHead.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"META_BoneType\": \"" + "clothing" + "\","); - // writeSkins.WriteLine(" \"name\": \"" + "head" + "\","); - // writeSkins.WriteLine(" \"parent\":" + " null"); - // writeSkins.WriteLine(" },"); - - - // //Body Data - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"pivot\": [ 0, 12, 0 ],"); - // writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],"); - // writeSkins.WriteLine(" \"cubes\": [ "); - // //Creates bones for each body box - // modelAmount = 0; - // foreach (Item model in modelDataBody) - // { - // modelAmount += 1; - - // string xo = ""; - // string yo = ""; - // string zo = ""; - // string xs = ""; - // string ys = ""; - // string zs = ""; - // string xv = ""; - // string yv = ""; - - // int spaceCheck = 0; - - // foreach (char value in model.Name.ToString()) - // { - // //0X1Y2Z3X4Y5Z6X7Y - // if (value.ToString() != " " && spaceCheck == 0) - // { - // xo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 1) - // { - // yo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 2) - // { - // zo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 3) - // { - // xs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 4) - // { - // ys += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 5) - // { - // zs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 6) - // { - // xv += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 7) - // { - // yv += value.ToString(); - // } - // else if (value.ToString() == " ") - // { - // spaceCheck += 1; - // } - // } - // writeSkins.WriteLine(" {"); - // try - // { - // writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo)) + ", " + ((Double.Parse(yo) + 0) * -1 + offsetBody + 24 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],"); - // writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],"); - // writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],"); - // writeSkins.WriteLine(" \"inflate\": 0,"); - // writeSkins.WriteLine(" \"mirror\": false"); - // } - // catch (Exception) - // { - // MessageBox.Show("A BODY BOX tag in " + newSkin.name + " has an invalid value!"); - // } - // if (modelAmount != modelDataBody.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\","); - // writeSkins.WriteLine(" \"name\": \"" + "body" + "\","); - // writeSkins.WriteLine(" \"parent\":" + " null"); - // writeSkins.WriteLine(" },"); - - - // //LeftArm Data - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"pivot\": [ 5, 22, 0 ],"); - // writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],"); - // writeSkins.WriteLine(" \"cubes\": [ "); - // //Creates bones for each arm1 box - // modelAmount = 0; - // foreach (Item model in modelDataLeftArm) - // { - // modelAmount += 1; - - // string xo = ""; - // string yo = ""; - // string zo = ""; - // string xs = ""; - // string ys = ""; - // string zs = ""; - // string xv = ""; - // string yv = ""; - - // int spaceCheck = 0; - - // foreach (char value in model.Name.ToString()) - // { - // //0X1Y2Z3X4Y5Z6X7Y - // if (value.ToString() != " " && spaceCheck == 0) - // { - // xo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 1) - // { - // yo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 2) - // { - // zo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 3) - // { - // xs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 4) - // { - // ys += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 5) - // { - // zs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 6) - // { - // xv += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 7) - // { - // yv += value.ToString(); - // } - // else if (value.ToString() == " ") - // { - // spaceCheck += 1; - // } - // } - // writeSkins.WriteLine(" {"); - // try - // { - // writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) + 5) + ", " + ((Double.Parse(yo)) * -1 + offsetArms + 22 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],"); - // writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],"); - // writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],"); - // writeSkins.WriteLine(" \"inflate\": 0,"); - // writeSkins.WriteLine(" \"mirror\": false"); - // } - // catch (Exception) - // { - // MessageBox.Show("A ARM0 BOX tag in " + newSkin.name + " has an invalid value!"); - // } - // if (modelAmount != modelDataLeftArm.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\","); - // writeSkins.WriteLine(" \"name\": \"" + "leftArm" + "\","); - // writeSkins.WriteLine(" \"parent\":" + " null"); - // writeSkins.WriteLine(" },"); - - // //RightArm Data - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"pivot\": [ -5, 22, 0 ],"); - // writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],"); - // writeSkins.WriteLine(" \"cubes\": [ "); - // //Creates bones for each arm0 box - // modelAmount = 0; - // foreach (Item model in modelDataRightArm) - // { - // modelAmount += 1; - - // string xo = ""; - // string yo = ""; - // string zo = ""; - // string xs = ""; - // string ys = ""; - // string zs = ""; - // string xv = ""; - // string yv = ""; - - // int spaceCheck = 0; - - // foreach (char value in model.Name.ToString()) - // { - // //0X1Y2Z3X4Y5Z6X7Y - // if (value.ToString() != " " && spaceCheck == 0) - // { - // xo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 1) - // { - // yo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 2) - // { - // zo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 3) - // { - // xs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 4) - // { - // ys += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 5) - // { - // zs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 6) - // { - // xv += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 7) - // { - // yv += value.ToString(); - // } - // else if (value.ToString() == " ") - // { - // spaceCheck += 1; - // } - // } - // writeSkins.WriteLine(" {"); - // try - // { - // writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) - 5) + ", " + ((Double.Parse(yo)) * -1 + offsetArms + 22 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],"); - // writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],"); - // writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],"); - // writeSkins.WriteLine(" \"inflate\": 0,"); - // writeSkins.WriteLine(" \"mirror\": false"); - // } - // catch (Exception) - // { - // MessageBox.Show("A ARM1 BOX tag in " + newSkin.name + " has an invalid value!"); - // } - // if (modelAmount != modelDataRightArm.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\","); - // writeSkins.WriteLine(" \"name\": \"" + "rightArm" + "\","); - // writeSkins.WriteLine(" \"parent\":" + " null"); - // writeSkins.WriteLine(" },"); - - // //LeftLeg Data - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"pivot\": [ 1.9, 12, 0 ],"); - // writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],"); - // writeSkins.WriteLine(" \"cubes\": [ "); - // //Creates bones for each leg1 box - // modelAmount = 0; - // foreach (Item model in modelDataLeftLeg) - // { - // modelAmount += 1; - - // string xo = ""; - // string yo = ""; - // string zo = ""; - // string xs = ""; - // string ys = ""; - // string zs = ""; - // string xv = ""; - // string yv = ""; - - // int spaceCheck = 0; - - // foreach (char value in model.Name.ToString()) - // { - // //0X1Y2Z3X4Y5Z6X7Y - // if (value.ToString() != " " && spaceCheck == 0) - // { - // xo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 1) - // { - // yo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 2) - // { - // zo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 3) - // { - // xs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 4) - // { - // ys += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 5) - // { - // zs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 6) - // { - // xv += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 7) - // { - // yv += value.ToString(); - // } - // else if (value.ToString() == " ") - // { - // spaceCheck += 1; - // } - // } - // writeSkins.WriteLine(" {"); - // try - // { - // writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) - 1.9) + ", " + ((Double.Parse(yo)) * -1 + offsetLegs + 12 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],"); - // writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],"); - // writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],"); - // writeSkins.WriteLine(" \"inflate\": 0,"); - // writeSkins.WriteLine(" \"mirror\": false"); - // } - // catch (Exception) - // { - // MessageBox.Show("A LEG1 BOX tag in " + newSkin.name + " has an invalid value!"); - // } - // if (modelAmount != modelDataLeftLeg.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\","); - // writeSkins.WriteLine(" \"name\": \"" + "leftLeg" + "\","); - // writeSkins.WriteLine(" \"parent\":" + " null"); - // writeSkins.WriteLine(" },"); - - // //RightLeg Data - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"pivot\": [ -1.9, 12, 0 ],"); - // writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],"); - // writeSkins.WriteLine(" \"cubes\": [ "); - // //Creates bones for each leg0 box - // modelAmount = 0; - // foreach (Item model in modelDataRightLeg) - // { - // modelAmount += 1; - - // string xo = ""; - // string yo = ""; - // string zo = ""; - // string xs = ""; - // string ys = ""; - // string zs = ""; - // string xv = ""; - // string yv = ""; - - // int spaceCheck = 0; - - // foreach (char value in model.Name.ToString()) - // { - // //0X1Y2Z3X4Y5Z6X7Y - // if (value.ToString() != " " && spaceCheck == 0) - // { - // xo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 1) - // { - // yo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 2) - // { - // zo += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 3) - // { - // xs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 4) - // { - // ys += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 5) - // { - // zs += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 6) - // { - // xv += value.ToString(); - // } - // else if (value.ToString() != " " && spaceCheck == 7) - // { - // yv += value.ToString(); - // } - // else if (value.ToString() == " ") - // { - // spaceCheck += 1; - // } - // } - // writeSkins.WriteLine(" {"); - // try - // { - // writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) + 1.9) + ", " + ((Double.Parse(yo)) * -1 + offsetLegs + 12 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],"); - // writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],"); - // writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],"); - // writeSkins.WriteLine(" \"inflate\": 0,"); - // writeSkins.WriteLine(" \"mirror\": false"); - // } - // catch (Exception) - // { - // MessageBox.Show("A LEG0 BOX tag in " + newSkin.name + " has an invalid value!"); - // } - // if (modelAmount != modelDataRightLeg.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\","); - // writeSkins.WriteLine(" \"name\": \"" + "rightLeg" + "\","); - // writeSkins.WriteLine(" \"parent\":" + " null"); - // writeSkins.WriteLine(" }"); - // writeSkins.WriteLine(" ],"); - // } - // else if (skinType == "64x32") - // { - // writeSkins.Write(" \"bones\": [ ],"); - // } - // else if (skinType == "steve") - // { - // writeSkins.Write(" \"bones\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"body\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"belt\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"head\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.5, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"hat\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmet\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -8, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 48, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -8, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegging\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegging\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"jacket\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmetArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"waist\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -6, 15, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 6, 15, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ],"); - // } - // else if (skinType == "alex") - // { - // writeSkins.Write(" \"bones\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"body\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"belt\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"head\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.5, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"hat\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmet\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -7, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 48, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -7, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegging\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"jacket\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmetArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"waist\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -6, 14.5, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 6, 14.5, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ],"); - // } - - - // writeSkins.WriteLine(" \"texturewidth\": 64 , "); - // writeSkins.WriteLine(" \"textureheight\": 64,"); - // writeSkins.WriteLine(" \"META_ModelVersion\": \"1.0.6\","); - // writeSkins.WriteLine(" \"rigtype\": \"normal\","); - // writeSkins.WriteLine(" \"animationArmsDown\": false,"); - // writeSkins.WriteLine(" \"animationArmsOutFront\": false,"); - // writeSkins.WriteLine(" \"animationStatueOfLibertyArms\": false,"); - // writeSkins.WriteLine(" \"animationSingleArmAnimation\": false,"); - // writeSkins.WriteLine(" \"animationStationaryLegs\": false,"); - // writeSkins.WriteLine(" \"animationSingleLegAnimation\": false,"); - // writeSkins.WriteLine(" \"animationNoHeadBob\": false,"); - // writeSkins.WriteLine(" \"animationDontShowArmor\": false,"); - // writeSkins.WriteLine(" \"animationUpsideDown\": false,"); - // writeSkins.WriteLine(" \"animationInvertedCrouch\": false"); - // if (newSkinCount != skinsList.Count) - // { - // writeSkins.WriteLine(" },"); - // } - // else - // { - // writeSkins.WriteLine(" }"); - // } - // } - // Console.WriteLine(writeSkins); - // } - // Random rnd = new Random(); - // int month = rnd.Next(1, 13); // creates a number between 1 and 12 - // int dice = rnd.Next(1, 7); // creates a number between 1 and 6 - // int card = rnd.Next(52); - - // string randomPlus = month.ToString() + dice.ToString() + card.ToString(); - // if (randomPlus.Count() > 12) - // { - // randomPlus.Remove(0, randomPlus.Count() - 12); - // } - // else if (randomPlus.Count() < 12) - // { - // int ii = 12 - randomPlus.Count(); - // for (int i = 0; i < ii; i++) - // { - // randomPlus += 0; - // } - // } - // else if (randomPlus.Count() == 12) - // { - // } - - // //Create Manifest file - // using (StreamWriter writeSkins = new StreamWriter(root + "/manifest.json")) - // { - // writeSkins.WriteLine("{"); - // writeSkins.WriteLine(" \"header\": {"); - // writeSkins.WriteLine(" \"version\": ["); - // writeSkins.WriteLine(" 1,"); - // writeSkins.WriteLine(" 0,"); - // writeSkins.WriteLine(" 0"); - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"description\": \"Template by Ultmate_Mario, Conversion by Nobledez\","); - // writeSkins.WriteLine(" \"name\": \"" + packName + "\","); - // writeSkins.WriteLine(" \"uuid\": \"" + uuid.Remove(0, 4) + "-" + uuid.Remove(0, 8) + "-" + uuid.Remove(1, 8) + "-" + uuid.Remove(2, 8) + "-" + randomPlus + "\""); //8-4-4-4-12 - // writeSkins.WriteLine(" },"); - // writeSkins.WriteLine(" \"modules\": ["); - // writeSkins.WriteLine(" {"); - // writeSkins.WriteLine(" \"version\": ["); - // writeSkins.WriteLine(" 1,"); - // writeSkins.WriteLine(" 0,"); - // writeSkins.WriteLine(" 0"); - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"type\": \"skin_pack\","); - // writeSkins.WriteLine(" \"uuid\": \"8dfd1d65-b3ca-4726-b9e0-9b46a40b72a4\""); - // writeSkins.WriteLine(" }"); - // writeSkins.WriteLine(" ],"); - // writeSkins.WriteLine(" \"format_version\": 1"); - // writeSkins.WriteLine("}"); - // } - - // //create lang file - // using (StreamWriter writeSkins = new StreamWriter(root + "/texts/en_US.lang")) - // { - // writeSkins.WriteLine("skinpack." + packName + "=" + Path.GetFileNameWithoutExtension(convert.FileName)); - // foreach (Item displayName in skinDisplayNames) - // { - // writeSkins.WriteLine("skin." + packName + "." + displayName.Id + "=" + displayName.Name); - // } - // } - - // //adds skin textures - // foreach (PCKFile.FileData skinTexture in skinsList) - // { - // var ms = new MemoryStream(skinTexture.data); - // Bitmap saveSkin = new Bitmap(Image.FromStream(ms)); - // if (saveSkin.Width == saveSkin.Height) - // { - // ResizeImage(saveSkin, 64, 64); - // } - // else if (saveSkin.Height == saveSkin.Width / 2) - // { - // ResizeImage(saveSkin, 64, 32); - // } - // else - // { - // ResizeImage(saveSkin, 64, 64); - // } - // saveSkin.Save(root + "/" + skinTexture.name, ImageFormat.Png); - // } - - // //adds cape textures - // foreach (PCKFile.FileData capeTexture in capesList) - // { - // File.WriteAllBytes(root + "/" + capeTexture.name, capeTexture.data); - // } - - // string startPath = root; - // string zipPath = rootFinal + "content.zipe"; - - // try - // { - // ZipFile.CreateFromDirectory(startPath, zipPath);//Creates contents zipe - // }catch (Exception) - // { - // File.Delete(zipPath); - // ZipFile.CreateFromDirectory(startPath, zipPath);//Creates contents zipe - // } - - // rootFinal = root + "temp/"; - // Directory.CreateDirectory(rootFinal); - // File.Move(zipPath, rootFinal + "content.zipe"); - // File.Copy(root + "/manifest.json", rootFinal + "/manifest.json"); - // ZipFile.CreateFromDirectory(rootFinal, convert.FileName);//Creates mcpack - // Directory.Delete(root, true); - // Directory.Delete(rootFinal, true); - - // MessageBox.Show("Conversion Complete"); - // } - // } - // catch (Exception convertEr) - // { - // MessageBox.Show(convertEr.ToString()); - // } - //} - //else if (openedPCKS.Visible == false) - //{ - // MessageBox.Show("Open PCK file first!"); - //} } - public static Bitmap ResizeImage(Image image, int width, int height) + public static Image ResizeImage(Image image, int width, int height) { var destRect = new Rectangle(0, 0, width, height); var destImage = new Bitmap(width, height);