示例#1
0
        /// <inheritdoc />
        internal override bool Load()
        {
            try
            {
                List <LoadedSkin> skins = new List <LoadedSkin>();

                using (var archive = new ZipFileSystem(Entry.Open(), Entry.Name))
                {
                    var skinsEntry = archive.GetEntry("skins.json");
                    Info = MCJsonConvert.DeserializeObject <MCPackSkins>(skinsEntry.ReadAsString());

                    var geometryEntry = archive.GetEntry("geometry.json");

                    Dictionary <string, EntityModel> models =
                        MCJsonConvert.DeserializeObject <Dictionary <string, EntityModel> >(geometryEntry.ReadAsString());

                    foreach (var skin in Info.Skins)
                    {
                        EntityModel model;

                        if (!models.TryGetValue(skin.Geometry, out model))
                        {
                            continue;
                        }

                        var textureEntry = archive.GetEntry(skin.Texture);

                        if (textureEntry == null)
                        {
                            continue;
                        }

                        Image <Rgba32> img;

                        using (var s = textureEntry.Open())
                        {
                            //img = new Bitmap(s);
                            img = Image.Load <Rgba32>(s.ReadToSpan(textureEntry.Length), PngDecoder);
                        }

                        LoadedSkin loaded = new LoadedSkin(skin.LocalizationName, model, img);
                        skins.Add(loaded);
                        //skin.
                    }
                }

                Skins = skins.ToArray();

                return(true);
            }
            catch (InvalidDataException ex)
            {
                Log.Debug(ex, $"Could not load module.");
            }

            return(false);
        }
示例#2
0
        /// <inheritdoc />
        internal override void Load()
        {
            List <LoadedSkin> skins = new List <LoadedSkin>();

            using (var archive = new ZipArchive(Entry.Open(), ZipArchiveMode.Read))
            {
                var skinsEntry = archive.GetEntry("skins.json");
                Info = MCJsonConvert.DeserializeObject <MCPackSkins>(skinsEntry.ReadAsString());

                var geometryEntry = archive.GetEntry("geometry.json");

                Dictionary <string, EntityModel> models =
                    MCJsonConvert.DeserializeObject <Dictionary <string, EntityModel> >(geometryEntry.ReadAsString());

                foreach (var skin in Info.Skins)
                {
                    EntityModel model;
                    if (!models.TryGetValue(skin.Geometry, out model))
                    {
                        continue;
                    }

                    var textureEntry = archive.GetEntry(skin.Texture);
                    if (textureEntry == null)
                    {
                        continue;
                    }

                    Image <Rgba32> img;
                    using (var s = textureEntry.Open())
                    {
                        //img = new Bitmap(s);
                        img = Image.Load <Rgba32>(s.ReadToSpan(textureEntry.Length), PngDecoder);
                    }

                    LoadedSkin loaded = new LoadedSkin(skin.LocalizationName, model, img);
                    skins.Add(loaded);
                    //skin.
                }
            }

            Skins = skins.ToArray();
        }