mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-31 19:54:44 +00:00
Move Common functionality to Core project & rendering and Model support as well
This commit is contained in:
71
PckStudio.Core/Extensions/SkinExtensions.cs
Normal file
71
PckStudio.Core/Extensions/SkinExtensions.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using OMI.Formats.Languages;
|
||||
using OMI.Formats.Pck;
|
||||
using PckStudio.Core.Skin;
|
||||
|
||||
namespace PckStudio.Core.Extensions
|
||||
{
|
||||
public static class SkinExtensions
|
||||
{
|
||||
public static PckAsset CreateFile(this Skin.Skin skin, LOCFile localizationFile)
|
||||
{
|
||||
string skinId = skin.Identifier.ToString("d08");
|
||||
PckAsset skinFile = new PckAsset($"dlcskin{skinId}.png", PckAssetType.SkinFile);
|
||||
|
||||
skinFile.AddProperty("DISPLAYNAME", skin.MetaData.Name);
|
||||
if (localizationFile is not null)
|
||||
{
|
||||
string skinLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME";
|
||||
skinFile.AddProperty("DISPLAYNAMEID", skinLocKey);
|
||||
localizationFile.AddLocKey(skinLocKey, skin.MetaData.Name);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(skin.MetaData.Theme))
|
||||
{
|
||||
skinFile.AddProperty("THEMENAME", skin.MetaData.Theme);
|
||||
if (localizationFile is not null)
|
||||
{
|
||||
skinFile.AddProperty("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME");
|
||||
localizationFile.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", skin.MetaData.Theme);
|
||||
}
|
||||
}
|
||||
|
||||
if (skin.HasCape)
|
||||
{
|
||||
skinFile.AddProperty("CAPEPATH", $"dlccape{skinId}.png");
|
||||
}
|
||||
|
||||
skinFile.AddProperty("ANIM", skin.Anim);
|
||||
skinFile.AddProperty("GAME_FLAGS", "0x18");
|
||||
skinFile.AddProperty("FREE", "1");
|
||||
|
||||
foreach (SkinBOX box in skin.Model.AdditionalBoxes)
|
||||
{
|
||||
skinFile.AddProperty(box.ToProperty());
|
||||
}
|
||||
foreach (SkinPartOffset offset in skin.Model.PartOffsets)
|
||||
{
|
||||
skinFile.AddProperty(offset.ToProperty());
|
||||
}
|
||||
|
||||
skinFile.SetTexture(skin.Texture);
|
||||
|
||||
return skinFile;
|
||||
}
|
||||
|
||||
public static PckAsset CreateCapeFile(this Skin.Skin skin)
|
||||
{
|
||||
if (!skin.HasCape)
|
||||
throw new InvalidOperationException("Skin does not contain a cape.");
|
||||
string skinId = skin.Identifier.ToString("d08");
|
||||
PckAsset capeFile = new PckAsset($"dlccape{skinId}.png", PckAssetType.CapeFile);
|
||||
capeFile.SetTexture(skin.CapeTexture);
|
||||
return capeFile;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user