diff --git a/PCK-Studio/Controls/PckEditor.cs b/PCK-Studio/Controls/PckEditor.cs
index 75fbaa82..b27d7e84 100644
--- a/PCK-Studio/Controls/PckEditor.cs
+++ b/PCK-Studio/Controls/PckEditor.cs
@@ -38,7 +38,19 @@ namespace PckStudio.Controls
private PckFile _pck;
private string _location = string.Empty;
- private bool _wasModified = false;
+ bool __modified = false;
+ bool _wasModified
+ {
+ get => __modified;
+ set
+ {
+ if (__modified == value)
+ return;
+ __modified = value;
+ pckFileLabel.Text = !pckFileLabel.Text.StartsWith("*") && __modified ? "*" + pckFileLabel.Text : pckFileLabel.Text.Substring(1);
+ }
+ }
+
private bool _isTemplateFile = false;
private int _timesSaved = 0;
@@ -86,19 +98,49 @@ namespace PckStudio.Controls
[PckFileType.TextureFile] = HandleTextureFile,
[PckFileType.UIDataFile] = _ => throw new NotSupportedException("unused in-game"),
[PckFileType.InfoFile] = null,
- [PckFileType.TexturePackInfoFile] = null,
+ [PckFileType.TexturePackInfoFile] = HandleInnerPckFile,
[PckFileType.LocalisationFile] = HandleLocalisationFile,
[PckFileType.GameRulesFile] = HandleGameRuleFile,
[PckFileType.AudioFile] = HandleAudioFile,
[PckFileType.ColourTableFile] = HandleColourFile,
[PckFileType.GameRulesHeader] = HandleGameRuleFile,
- [PckFileType.SkinDataFile] = null,
+ [PckFileType.SkinDataFile] = HandleInnerPckFile,
[PckFileType.ModelsFile] = HandleModelsFile,
[PckFileType.BehavioursFile] = HandleBehavioursFile,
[PckFileType.MaterialFile] = HandleMaterialFile,
};
}
+ private void HandleInnerPckFile(PckFileData file)
+ {
+ if (Settings.Default.LoadSubPcks &&
+ (file.Filetype == PckFileType.SkinDataFile || file.Filetype == PckFileType.TexturePackInfoFile) &&
+ file.Size > 0 && treeViewMain.SelectedNode.Nodes.Count == 0)
+ {
+ using (var stream = new MemoryStream(file.Data))
+ {
+ try
+ {
+ var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
+ PckFile subPCKfile = reader.FromStream(stream);
+ BuildPckTreeView(treeViewMain.SelectedNode.Nodes, subPCKfile);
+ treeViewMain.SelectedNode.ExpandAll();
+
+ }
+ catch (OverflowException ex)
+ {
+ MessageBox.Show("Failed to open pck\n" +
+ "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.",
+ "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ Debug.WriteLine(ex.Message);
+ }
+ }
+ return;
+ }
+ treeViewMain.SelectedNode.Nodes.Clear();
+ treeViewMain.SelectedNode.Collapse();
+ }
+
///
/// wrapper that allows the use of in TreeNode.Nodes.Find(, ...) and TreeNode.Nodes.ContainsKey()
///
@@ -117,7 +159,7 @@ namespace PckStudio.Controls
{
if (_pck.TryGetFile("0", PckFileType.InfoFile, out PckFileData file))
{
- file.Properties.RemoveAll(t => t.Key.Equals("LOCK"));
+ file.RemoveProperties("LOCK");
}
}
@@ -334,7 +376,8 @@ namespace PckStudio.Controls
if (node.Tag is PckFileData node_file)
{
PckFileData new_file = newPCKFile.CreateNewFile(node_file.Filename.Replace(parent_file.Filename + "/", String.Empty), node_file.Filetype);
- foreach (var prop in node_file.Properties) new_file.Properties.Add(prop);
+ foreach (var prop in node_file.GetProperties())
+ new_file.AddProperty(prop);
new_file.SetData(node_file.Data);
}
}
@@ -408,7 +451,7 @@ namespace PckStudio.Controls
if (treeViewMain.SelectedNode is TreeNode node &&
node.Tag is PckFileData file)
{
- foreach (var property in file.Properties)
+ foreach (var property in file.GetProperties())
{
treeMeta.Nodes.Add(CreateNode(property.Key, property));
}
@@ -527,7 +570,7 @@ namespace PckStudio.Controls
{
}
- mfNew.Properties.Add(new KeyValuePair(key, value));
+ mfNew.AddProperty(key, value);
}
_wasModified = true;
}
@@ -590,13 +633,13 @@ namespace PckStudio.Controls
if (e.Node is TreeNode t && t.Tag is PckFileData file)
{
viewFileInfoToolStripMenuItem.Visible = true;
- if (file.Properties.HasProperty("BOX"))
+ if (file.HasProperty("BOX"))
{
buttonEdit.Text = "EDIT BOXES";
buttonEdit.Visible = true;
}
- else if (file.Properties.HasProperty("ANIM") &&
- file.Properties.GetPropertyValue("ANIM", s => SkinANIM.FromString(s) == (SkinAnimMask.RESOLUTION_64x64 | SkinAnimMask.SLIM_MODEL)))
+ else if (file.HasProperty("ANIM") &&
+ file.GetProperty("ANIM", s => SkinANIM.FromString(s) == (SkinAnimMask.RESOLUTION_64x64 | SkinAnimMask.SLIM_MODEL)))
{
buttonEdit.Text = "View Skin";
buttonEdit.Visible = true;
@@ -679,55 +722,52 @@ namespace PckStudio.Controls
private void createSkinToolStripMenuItem_Click(object sender, EventArgs e)
{
- if (!TryGetLocFile(out LOCFile locFile))
+ LOCFile locFile = null;
+ TryGetLocFile(out locFile);
+ using AddNewSkin add = new AddNewSkin(locFile);
+ if (add.ShowDialog() == DialogResult.OK)
{
- MessageBox.Show("No .loc file found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return;
- }
- using (AddNewSkin add = new AddNewSkin(locFile))
- if (add.ShowDialog() == DialogResult.OK)
- {
+ if (_pck.HasFile("Skins.pck", PckFileType.SkinDataFile)) // Prioritize Skins.pck
+ {
+ TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault();
+ if (subPCK.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/");
+ add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins.pck/");
+ TreeNode newNode = new TreeNode(Path.GetFileName(add.SkinFile.Filename));
+ newNode.Tag = add.SkinFile;
+ SetNodeIcon(newNode, PckFileType.SkinFile);
+ subPCK.Nodes.Add(newNode);
+ RebuildSubPCK(newNode.FullPath);
+ }
+ else
+ {
+ if (treeViewMain.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/"); // Then Skins folder
+ _pck.AddFile(add.SkinFile);
+ }
+ if (add.HasCape)
+ {
if (_pck.HasFile("Skins.pck", PckFileType.SkinDataFile)) // Prioritize Skins.pck
{
TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault();
- if (subPCK.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/");
- add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins.pck/");
- TreeNode newNode = new TreeNode(Path.GetFileName(add.SkinFile.Filename));
- newNode.Tag = add.SkinFile;
- SetPckFileIcon(newNode, PckFileType.SkinFile);
+ if (subPCK.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/");
+ add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins.pck/");
+ TreeNode newNode = new TreeNode(Path.GetFileName(add.CapeFile.Filename));
+ newNode.Tag = add.CapeFile;
+ SetNodeIcon(newNode, PckFileType.SkinFile);
subPCK.Nodes.Add(newNode);
RebuildSubPCK(newNode.FullPath);
}
else
{
- if (treeViewMain.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/"); // Then Skins folder
- _pck.AddFile(add.SkinFile);
+ if (treeViewMain.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/"); // Then Skins folder
+ _pck.AddFile(add.CapeFile);
}
- if (add.HasCape)
- {
- if (_pck.HasFile("Skins.pck", PckFileType.SkinDataFile)) // Prioritize Skins.pck
- {
- TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault();
- if (subPCK.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/");
- add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins.pck/");
- TreeNode newNode = new TreeNode(Path.GetFileName(add.CapeFile.Filename));
- newNode.Tag = add.CapeFile;
- SetPckFileIcon(newNode, PckFileType.SkinFile);
- subPCK.Nodes.Add(newNode);
- RebuildSubPCK(newNode.FullPath);
- }
- else
- {
- if (treeViewMain.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/"); // Then Skins folder
- _pck.AddFile(add.CapeFile);
- }
- }
-
- TrySetLocFile(locFile);
- _wasModified = true;
- BuildMainTreeView();
}
+
+ TrySetLocFile(locFile);
+ _wasModified = true;
+ BuildMainTreeView();
+ }
}
private void createAnimatedTextureToolStripMenuItem_Click(object sender, EventArgs e)
@@ -870,7 +910,7 @@ namespace PckStudio.Controls
{
string[] param = property.Split(':');
if (param.Length < 2) continue;
- newFile.Properties.Add((param[0], param[1]));
+ newFile.AddProperty(param[0], param[1]);
//switch (param[0])
//{
// case "DISPLAYNAMEID":
@@ -1000,7 +1040,7 @@ namespace PckStudio.Controls
"File path: " + file.Filename +
"\nAssigned File type: " + (int)file.Filetype + " (" + file.Filetype + ")" +
"\nFile size: " + file.Size +
- "\nProperties count: " + file.Properties.Count
+ "\nProperties count: " + file.PropertyCount
, Path.GetFileName(file.Filename) + " file info");
}
}
@@ -1009,9 +1049,10 @@ namespace PckStudio.Controls
{
if (treeViewMain.SelectedNode is TreeNode node && node.Tag is PckFileData file && file.Filetype == PckFileType.SkinFile)
{
- foreach (var p in file.Properties.FindAll(s => s.Key == "BOX" || s.Key == "OFFSET"))
+ foreach (var p in file.GetProperties())
{
- file.Properties[file.Properties.IndexOf(p)] = new KeyValuePair(p.Key, p.Value.Replace(',', '.'));
+ if (p.Key == "BOX" || p.Key == "OFFSET")
+ file.SetProperty(file.GetPropertyIndex(p), new KeyValuePair(p.Key, p.Value.Replace(',', '.')));
}
ReloadMetaTreeView();
RebuildSubPCK(node.FullPath);
@@ -1034,10 +1075,13 @@ namespace PckStudio.Controls
string extractFilePath = exFile.FileName;
File.WriteAllBytes(extractFilePath, file.Data);
- if (file.Properties.Count > 0)
+ if (file.PropertyCount > 0)
{
using var fs = File.CreateText($"{extractFilePath}.txt");
- file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}"));
+ foreach (var property in file.GetProperties())
+ {
+ fs.WriteLine($"{property.Key}: {property.Value}");
+ }
}
// Verification that file extraction path was successful
MessageBox.Show("File Extracted");
@@ -1058,10 +1102,13 @@ namespace PckStudio.Controls
{
Directory.CreateDirectory($"{dialog.SelectedPath}/{Path.GetDirectoryName(file.Filename)}");
File.WriteAllBytes($"{dialog.SelectedPath}/{file.Filename}", file.Data);
- if (file.Properties.Count > 0)
+ if (file.PropertyCount > 0)
{
using var fs = File.CreateText($"{dialog.SelectedPath}/{file.Filename}.txt");
- file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}"));
+ foreach (var property in file.GetProperties())
+ {
+ fs.WriteLine($"{property.Key}: {property.Value}");
+ }
}
}
}
@@ -1075,10 +1122,13 @@ namespace PckStudio.Controls
{
Directory.CreateDirectory($"{dialog.SelectedPath}/{Path.GetDirectoryName(_file.Filename)}");
File.WriteAllBytes($"{dialog.SelectedPath}/{_file.Filename}", _file.Data);
- if (_file.Properties.Count > 0)
+ if (_file.PropertyCount > 0)
{
using var fs = File.CreateText($"{dialog.SelectedPath}/{_file.Filename}.txt");
- _file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}"));
+ foreach (var property in _file.GetProperties())
+ {
+ fs.WriteLine($"{property.Key}: {property.Value}");
+ }
}
}
};
@@ -1105,7 +1155,10 @@ namespace PckStudio.Controls
TreeNode newNode = new TreeNode();
newNode.Text = Path.GetFileName(diag.NewText);
var NewFile = new PckFileData(diag.NewText, file.Filetype);
- file.Properties.ForEach(p => NewFile.Properties.Add(p));
+ foreach (var property in file.GetProperties())
+ {
+ NewFile.AddProperty(property);
+ }
NewFile.SetData(file.Data);
NewFile.Filename = diag.NewText;
newNode.Tag = NewFile;
@@ -1145,6 +1198,11 @@ namespace PckStudio.Controls
{
if (node.Tag is PckFileData file)
{
+ if (_pck.TryGetFile(diag.NewText, file.Filetype, out _))
+ {
+ MessageBox.Show($"{diag.NewText} already exists", "File already exists");
+ return;
+ }
file.Filename = diag.NewText;
}
else // folders
@@ -1154,6 +1212,7 @@ namespace PckStudio.Controls
{
if (childNode.Tag is PckFileData folderFile)
{
+ if (folderFile.Filename == diag.NewText) continue;
folderFile.Filename = childNode.FullPath;
}
}
@@ -1198,41 +1257,50 @@ namespace PckStudio.Controls
MessageBox.Show("Can't replace a folder.");
}
+ ///
+ /// Action to run before a file will be deleted
+ ///
+ /// File to remove
+ /// True if the remove should be canceled, otherwise False
+ private bool BeforeFileRemove(PckFileData file)
+ {
+ string itemPath = "res/textures/items/";
+
+ // warn the user about deleting compass.png and clock.png
+ if (file.Filetype == PckFileType.TextureFile &&
+ (file.Filename == itemPath + "compass.png" || file.Filename == itemPath + "clock.png"))
+ {
+ if (MessageBox.Show("Are you sure want to delete this file? If \"compass.png\" or \"clock.png\" are missing, your game will crash upon loading this pack.", "Warning",
+ MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
+ return true;
+ }
+
+ // remove loc key if its a skin/cape
+ if (file.Filetype == PckFileType.SkinFile || file.Filetype == PckFileType.CapeFile)
+ {
+ if (TryGetLocFile(out LOCFile locFile))
+ {
+ if (file.TryGetProperty("THEMENAMEID", out string value))
+ locFile.RemoveLocKey(value);
+ if (file.TryGetProperty("DISPLAYNAMEID", out value))
+ locFile.RemoveLocKey(value);
+ TrySetLocFile(locFile);
+ }
+ }
+ return false;
+ }
+
private void deleteFileToolStripMenuItem_Click(object sender, EventArgs e)
{
var node = treeViewMain.SelectedNode;
- if (node == null) return;
+ if (node == null)
+ return;
string path = node.FullPath;
- if (node.Tag is PckFileData)
+ if (node.TryGetTagData(out PckFileData file))
{
- PckFileData file = node.Tag as PckFileData;
-
- string itemPath = "res/textures/items/";
-
- // warn the user about deleting compass.png and clock.png
- if (file.Filetype == PckFileType.TextureFile &&
- (file.Filename == itemPath + "compass.png" || file.Filename == itemPath + "clock.png"))
- {
- if (MessageBox.Show("Are you sure want to delete this file? If \"compass.png\" or \"clock.png\" are missing, your game will crash upon loading this pack.", "Warning",
- MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return;
- }
-
- // remove loc key if its a skin/cape
- if (file.Filetype == PckFileType.SkinFile || file.Filetype == PckFileType.CapeFile)
- {
- if (TryGetLocFile(out LOCFile locFile))
- {
- foreach (var property in file.Properties)
- {
- if (property.Key == "THEMENAMEID" || property.Key == "DISPLAYNAMEID")
- locFile.RemoveLocKey(property.Value);
- }
- TrySetLocFile(locFile);
- }
- }
- if (_pck.RemoveFile(file))
+ if (!BeforeFileRemove(file) && _pck.RemoveFile(file))
{
node.Remove();
_wasModified = true;
@@ -1242,7 +1310,7 @@ namespace PckStudio.Controls
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
string pckFolderDir = node.FullPath;
- _pck.RemoveAll(file => file.Filename.StartsWith(pckFolderDir));
+ _pck.RemoveAll(file => !BeforeFileRemove(file) && file.Filename.StartsWith(pckFolderDir));
node.Remove();
_wasModified = true;
}
@@ -1284,18 +1352,18 @@ namespace PckStudio.Controls
if (treeViewMain.SelectedNode is TreeNode node &&
node.Tag is PckFileData file)
{
- var props = file.Properties.Select(p => p.Key + " " + p.Value);
+ var props = file.GetProperties().Select(p => p.Key + " " + p.Value);
using (var input = new MultiTextPrompt(props.ToArray()))
{
if (input.ShowDialog(this) == DialogResult.OK)
{
- file.Properties.Clear();
+ file.ClearProperties();
foreach (var line in input.TextOutput)
{
int idx = line.IndexOf(' ');
if (idx == -1 || line.Length - 1 == idx)
continue;
- file.Properties.Add((line.Substring(0, idx).Replace(":", string.Empty), line.Substring(idx + 1)));
+ file.AddProperty(line.Substring(0, idx).Replace(":", string.Empty), line.Substring(idx + 1));
}
ReloadMetaTreeView();
RebuildSubPCK(node.FullPath);
@@ -1310,7 +1378,7 @@ namespace PckStudio.Controls
if (treeMeta.SelectedNode is TreeNode subnode && subnode.Tag is KeyValuePair property &&
treeViewMain.SelectedNode is TreeNode node && node.Tag is PckFileData file)
{
- int i = file.Properties.IndexOf(property);
+ int i = file.GetPropertyIndex(property);
if (i != -1)
{
switch (property.Key)
@@ -1321,7 +1389,7 @@ namespace PckStudio.Controls
using ANIMEditor diag = new ANIMEditor(property.Value);
if (diag.ShowDialog(this) == DialogResult.OK)
{
- file.Properties[i] = new KeyValuePair("ANIM", diag.ResultAnim.ToString());
+ file.SetProperty(i, new KeyValuePair("ANIM", diag.ResultAnim.ToString()));
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
ReloadMetaTreeView();
_wasModified = true;
@@ -1341,7 +1409,7 @@ namespace PckStudio.Controls
using BoxEditor diag = new BoxEditor(property.Value, IsSubPCKNode(treeViewMain.SelectedNode.FullPath));
if (diag.ShowDialog(this) == DialogResult.OK)
{
- file.Properties[i] = new KeyValuePair("BOX", diag.Result.ToString());
+ file.SetProperty(i, new KeyValuePair("BOX", diag.Result.ToString()));
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
ReloadMetaTreeView();
_wasModified = true;
@@ -1364,7 +1432,7 @@ namespace PckStudio.Controls
{
if (addProperty.ShowDialog() == DialogResult.OK)
{
- file.Properties[i] = addProperty.Property;
+ file.SetProperty(i, addProperty.Property);
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
ReloadMetaTreeView();
_wasModified = true;
@@ -1394,7 +1462,7 @@ namespace PckStudio.Controls
int idx = line.IndexOf(' ');
if (idx == -1 || line.Length - 1 == idx)
continue;
- file.Properties.Add((line.Substring(0, idx), line.Substring(idx + 1)));
+ file.AddProperty(line.Substring(0, idx), line.Substring(idx + 1));
}
ReloadMetaTreeView();
RebuildSubPCK(node.FullPath);
@@ -1411,7 +1479,7 @@ namespace PckStudio.Controls
using BoxEditor diag = new BoxEditor(SkinBOX.Empty, IsSubPCKNode(treeViewMain.SelectedNode.FullPath));
if (diag.ShowDialog(this) == DialogResult.OK)
{
- file.Properties.Add("BOX", diag.Result);
+ file.AddProperty("BOX", diag.Result);
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
ReloadMetaTreeView();
_wasModified = true;
@@ -1427,7 +1495,7 @@ namespace PckStudio.Controls
using ANIMEditor diag = new ANIMEditor(SkinANIM.Empty);
if (diag.ShowDialog(this) == DialogResult.OK)
{
- file.Properties.Add("ANIM", diag.ResultAnim);
+ file.AddProperty("ANIM", diag.ResultAnim);
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
ReloadMetaTreeView();
_wasModified = true;
@@ -1440,7 +1508,7 @@ namespace PckStudio.Controls
{
if (treeMeta.SelectedNode is TreeNode t && t.Tag is KeyValuePair property &&
treeViewMain.SelectedNode is TreeNode main && main.Tag is PckFileData file &&
- file.Properties.Remove(property))
+ file.RemoveProperty(property))
{
treeMeta.SelectedNode.Remove();
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
@@ -1456,7 +1524,7 @@ namespace PckStudio.Controls
using AddPropertyPrompt addProperty = new AddPropertyPrompt();
if (addProperty.ShowDialog() == DialogResult.OK)
{
- file.Properties.Add(addProperty.Property);
+ file.AddProperty(addProperty.Property);
RebuildSubPCK(treeViewMain.SelectedNode.FullPath);
ReloadMetaTreeView();
_wasModified = true;
@@ -1474,39 +1542,90 @@ namespace PckStudio.Controls
return;
}
- if (file.Filename == "res/terrain.png" || file.Filename == "res/items.png")
- {
- using var ms = new MemoryStream(file.Data);
+ bool isTerrain = file.Filename == "res/terrain.png";
+ bool isItems = file.Filename == "res/items.png";
+ bool isParticles = file.Filename == "res/particles.png";
+ bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png";
+ bool isMapIcons = file.Filename == "res/misc/mapicons.png";
+ bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png";
+ bool isXPOrbs = file.Filename == "res/item/xporb.png";
+ bool isExplosions = file.Filename == "res/misc/explosion.png";
+ bool isPaintings = file.Filename == "res/art/kz.png";
+ bool isBanners = file.Filename == "res/item/banner/Banner_Atlas.png";
- var img = Image.FromStream(ms);
- var res = img.Width / 16; // texture count on X axes
- var size = new Size(res, res);
- var viewer = new TextureAtlasEditor(_pck, file.Filename, img, size);
+ if (
+ isTerrain || isItems || isParticles || isMoonPhases || isPaintings ||
+ isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions || isBanners
+ )
+ {
+ var img = file.GetTexture();
+ var tile_size = new Size();
+
+ var banner_scale = img.Width / Resources.banners_atlas.Width;
+
+ if (isBanners)
+ {
+ // The banner atlas has extra space on it that has to be truncated for the editor
+ img = img.GetArea(new Rectangle(0, 0, img.Width - (4 * banner_scale), img.Height - (1 * banner_scale)));
+
+ // banners are 42x41 because of course they are
+ tile_size = new Size(42 * banner_scale, 41 * banner_scale);
+ }
+
+ // most atlases have 4 columns
+ var columnCount = isBanners ? 6 : 4;
+
+ if (isTerrain || isItems || isParticles || isPaintings) columnCount = 16;
+
+ if (!isBanners)
+ {
+ var resolution = img.Width / columnCount;
+ tile_size = new Size(resolution, resolution);
+ }
+
+ var viewer = new TextureAtlasEditor(_pck, file.Filename, img, tile_size);
if (viewer.ShowDialog() == DialogResult.OK)
{
- using (var result = new MemoryStream())
+ var texture = viewer.FinalTexture;
+ if (isBanners)
{
- viewer.FinalTexture.Save(result, ImageFormat.Png);
- file.SetData(result.ToArray());
+ var graphicsConfig = new GraphicsConfig()
+ {
+ InterpolationMode = InterpolationMode.NearestNeighbor,
+ PixelOffsetMode = PixelOffsetMode.HighQuality
+ };
+
+ var _img = new Bitmap((Resources.banners_atlas.Width + 4) * banner_scale,
+ (Resources.banners_atlas.Height + 1) * banner_scale);
+
+ using (var g = Graphics.FromImage(_img))
+ {
+ g.ApplyConfig(graphicsConfig);
+ g.DrawImage(texture, 0, 0, texture.Width, texture.Height);
+ }
+
+ texture = _img;
}
+
+ file.SetData(texture, ImageFormat.Png);
_wasModified = true;
BuildMainTreeView();
}
return;
}
- if (file.Filename.StartsWith("res/textures/blocks/") || file.Filename.StartsWith("res/textures/items/"))
- {
- var animation = AnimationHelper.GetAnimationFromFile(file);
- using (AnimationEditor animationEditor = new AnimationEditor(animation, Path.GetFileNameWithoutExtension(file.Filename)))
- {
- if (animationEditor.ShowDialog(this) == DialogResult.OK)
- {
- _wasModified = true;
- BuildMainTreeView();
- }
- }
+ if (!file.Filename.StartsWith("res/textures/blocks/") && !file.Filename.StartsWith("res/textures/items/"))
return;
+ var animation = AnimationHelper.GetAnimationFromFile(file);
+ using (AnimationEditor animationEditor = new AnimationEditor(animation, Path.GetFileNameWithoutExtension(file.Filename)))
+ {
+ if (animationEditor.ShowDialog(this) == DialogResult.OK)
+ {
+ _wasModified = true;
+ file.Filename = animationEditor.FinalPath;
+ AnimationHelper.SaveAnimationToFile(file, animation);
+ BuildMainTreeView();
+ }
}
}
@@ -1550,7 +1669,7 @@ namespace PckStudio.Controls
using (var ms = new MemoryStream(file.Data))
{
var texture = Image.FromStream(ms);
- if (file.Properties.HasProperty("BOX"))
+ if (file.HasProperty("BOX"))
{
using generateModel generate = new generateModel(file);
if (generate.ShowDialog() == DialogResult.OK)
@@ -1562,7 +1681,7 @@ namespace PckStudio.Controls
}
else
{
- SkinPreview frm = new SkinPreview(texture, file.Properties.GetPropertyValue("ANIM", SkinANIM.FromString));
+ SkinPreview frm = new SkinPreview(texture, file.GetProperty("ANIM", SkinANIM.FromString));
frm.ShowDialog(this);
frm.Dispose();
}
@@ -1676,14 +1795,117 @@ namespace PckStudio.Controls
BuildMainTreeView();
}
+ private void SetNodeIcon(TreeNode node, PckFileType type)
+ {
+ switch (type)
+ {
+ case PckFileType.AudioFile:
+ node.ImageIndex = 1;
+ node.SelectedImageIndex = 1;
+ break;
+ case PckFileType.LocalisationFile:
+ node.ImageIndex = 3;
+ node.SelectedImageIndex = 3;
+ break;
+ case PckFileType.TexturePackInfoFile:
+ node.ImageIndex = 4;
+ node.SelectedImageIndex = 4;
+ break;
+ case PckFileType.ColourTableFile:
+ node.ImageIndex = 6;
+ node.SelectedImageIndex = 6;
+ break;
+ case PckFileType.ModelsFile:
+ node.ImageIndex = 8;
+ node.SelectedImageIndex = 8;
+ break;
+ case PckFileType.SkinDataFile:
+ node.ImageIndex = 7;
+ node.SelectedImageIndex = 7;
+ break;
+ case PckFileType.GameRulesFile:
+ node.ImageIndex = 9;
+ node.SelectedImageIndex = 9;
+ break;
+ case PckFileType.GameRulesHeader:
+ node.ImageIndex = 10;
+ node.SelectedImageIndex = 10;
+ break;
+ case PckFileType.InfoFile:
+ node.ImageIndex = 11;
+ node.SelectedImageIndex = 11;
+ break;
+ case PckFileType.SkinFile:
+ node.ImageIndex = 12;
+ node.SelectedImageIndex = 12;
+ break;
+ case PckFileType.CapeFile:
+ node.ImageIndex = 13;
+ node.SelectedImageIndex = 13;
+ break;
+ case PckFileType.TextureFile:
+ node.ImageIndex = 14;
+ node.SelectedImageIndex = 14;
+ break;
+ case PckFileType.BehavioursFile:
+ node.ImageIndex = 15;
+ node.SelectedImageIndex = 15;
+ break;
+ case PckFileType.MaterialFile:
+ node.ImageIndex = 16;
+ node.SelectedImageIndex = 16;
+ break;
+ default: // unknown file format
+ node.ImageIndex = 5;
+ node.SelectedImageIndex = 5;
+ break;
+ }
+ }
+
private void buttonEdit_Click(object sender, EventArgs e)
{
treeViewMain_DoubleClick(sender, e);
}
+ [Obsolete] // the move functions are to eventually be removed in favor of drag and drop
private void moveFile(int amount)
{
+ if (treeViewMain.SelectedNode is not TreeNode t || t.Tag is null) return;
+ var file = t.Tag as PckFileData;
+ var path = t.FullPath;
+
+ // skin and cape files only
+ if (!(file.Filetype == PckFileType.SkinFile || file.Filetype == PckFileType.CapeFile)) return;
+
+ PckFile pck = _pck;
+ bool IsSubPCK = IsSubPCKNode(path);
+ if (IsSubPCK)
+ {
+ using (var stream = new MemoryStream((GetSubPCK(path).Tag as PckFileData).Data))
+ {
+ var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
+ pck = reader.FromStream(stream);
+ }
+ }
+
+ int index = pck.IndexOfFile(file);
+
+ if (index + amount < 0 || index + amount > pck.FileCount) return;
+ pck.RemoveFile(file);
+ pck.InsertFile(index + amount, file);
+
+ if (IsSubPCK)
+ {
+ using (var stream = new MemoryStream())
+ {
+ var writer = new PckFileWriter(pck, LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
+ writer.WriteToStream(stream);
+ (GetSubPCK(path).Tag as PckFileData).SetData(stream.ToArray());
+ }
+ }
+ BuildMainTreeView();
+ _wasModified = true;
}
[Obsolete]
diff --git a/PCK-Studio/Extensions/LocFileExtensions.cs b/PCK-Studio/Extensions/LocFileExtensions.cs
new file mode 100644
index 00000000..787ac540
--- /dev/null
+++ b/PCK-Studio/Extensions/LocFileExtensions.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OMI.Formats.Languages;
+
+namespace PckStudio.Extensions
+{
+ internal static class LocFileExtensions
+ {
+
+ public static void InitializeDefault(this LOCFile locFile, string packName) => locFile.Initialize("en-EN", ("IDS_DISPLAY_NAME", packName));
+
+ public static void Initialize(this LOCFile locFile, string language, params (string, string)[] locKeyValuePairs)
+ {
+ locFile.AddLanguage(language);
+ foreach (var locKeyValue in locKeyValuePairs)
+ locFile.AddLocKey(locKeyValue.Item1, locKeyValue.Item2);
+ }
+ }
+}
diff --git a/PCK-Studio/Features/WiiUPanel.cs b/PCK-Studio/Features/WiiUPanel.cs
index ab6aa5f4..adc3baac 100644
--- a/PCK-Studio/Features/WiiUPanel.cs
+++ b/PCK-Studio/Features/WiiUPanel.cs
@@ -237,7 +237,7 @@ namespace PckStudio.Features
currentPCK = reader.FromFile(filepath);
if (currentPCK is null) return string.Empty;
return currentPCK.TryGetFile("0", PckFileType.InfoFile, out var file)
- ? file.Properties.GetPropertyValue("PACKID")
+ ? file.GetProperty("PACKID")
: string.Empty;
}
diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs
index 0bef8b08..2fe99dca 100644
--- a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs
+++ b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs
@@ -12,10 +12,10 @@ namespace PckStudio.Forms.Additional_Popups.Animation
internal partial class ChangeTile : MetroForm
{
string selectedTile = "";
- Internal.AnimationCategory category = Internal.AnimationCategory.Blocks;
+ AnimationCategory category = AnimationCategory.Blocks;
public string SelectedTile => selectedTile;
- public Internal.AnimationCategory Category => category;
+ public AnimationCategory Category => category;
List treeViewBlockCache = new List();
List treeViewItemCache = new List();
@@ -31,8 +31,8 @@ namespace PckStudio.Forms.Additional_Popups.Animation
private void InitializeTreeviews()
{
Profiler.Start();
- GetTileDataToView(Internal.AnimationCategory.Blocks, treeViewBlocks.Nodes, treeViewBlockCache.Add);
- GetTileDataToView(Internal.AnimationCategory.Items, treeViewItems.Nodes, treeViewItemCache.Add);
+ GetTileDataToView(AnimationCategory.Blocks, treeViewBlocks.Nodes, treeViewBlockCache.Add);
+ GetTileDataToView(AnimationCategory.Items, treeViewItems.Nodes, treeViewItemCache.Add);
Profiler.Stop();
}
@@ -41,35 +41,34 @@ namespace PckStudio.Forms.Additional_Popups.Animation
if (e.Node.Tag is JsonTileInfo tileData)
{
selectedTile = tileData.InternalName;
- Debug.WriteLine(selectedTile);
category = e.Node.TreeView == treeViewItems
- ? Internal.AnimationCategory.Items
- : Internal.AnimationCategory.Blocks;
+ ? AnimationCategory.Items
+ : AnimationCategory.Blocks;
}
}
- private void GetTileDataToView(Internal.AnimationCategory key, TreeNodeCollection collection, Action additinalAction)
+ private void GetTileDataToView(AnimationCategory key, TreeNodeCollection collection, Action additionalAction)
{
List textureInfos = key switch
{
- Internal.AnimationCategory.Blocks => Tiles.BlockTileInfos,
- Internal.AnimationCategory.Items => Tiles.ItemTileInfos,
+ AnimationCategory.Blocks => Tiles.BlockTileInfos,
+ AnimationCategory.Items => Tiles.ItemTileInfos,
_ => throw new InvalidOperationException(nameof(key))
};
Profiler.Start();
if (textureInfos is not null)
{
- foreach ((int i, var content) in textureInfos.enumerate())
+ foreach ((int i, var tileData) in textureInfos.enumerate())
{
- if (string.IsNullOrEmpty(content.InternalName) || collection.ContainsKey(content.InternalName))
+ if (string.IsNullOrEmpty(tileData.InternalName) || collection.ContainsKey(tileData.InternalName))
continue;
- TreeNode tileNode = new TreeNode(content.DisplayName, i, i)
+ TreeNode tileNode = new TreeNode(tileData.DisplayName, i, i)
{
- Name = content.InternalName,
- Tag = content
+ Name = tileData.InternalName,
+ Tag = tileData
};
collection.Add(tileNode);
- additinalAction(tileNode);
+ additionalAction(tileNode);
}
}
Profiler.Stop();
@@ -90,7 +89,7 @@ namespace PckStudio.Forms.Additional_Popups.Animation
foreach (TreeNode _node in treeViewBlockCache)
{
if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()) ||
- (_node.Tag as string).ToLower().Contains(metroTextBox1.Text.ToLower()))
+ (_node.Tag as JsonTileInfo).InternalName.ToLower().Contains(metroTextBox1.Text.ToLower()))
{
treeViewBlocks.Nodes.Add((TreeNode)_node.Clone());
}
@@ -98,7 +97,7 @@ namespace PckStudio.Forms.Additional_Popups.Animation
foreach (TreeNode _node in treeViewItemCache)
{
if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()) ||
- (_node.Tag as string).ToLower().Contains(metroTextBox1.Text.ToLower()))
+ (_node.Tag as JsonTileInfo).InternalName.ToLower().Contains(metroTextBox1.Text.ToLower()))
{
treeViewItems.Nodes.Add((TreeNode)_node.Clone());
}
diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs
index aae1adf3..456c5b32 100644
--- a/PCK-Studio/Forms/Editor/AnimationEditor.cs
+++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs
@@ -44,6 +44,8 @@ namespace PckStudio.Forms.Editor
private string _tileName = string.Empty;
+ public string FinalPath => $"res/textures/{_animation.CategoryString}/{_tileName}.png";
+
private static readonly string[] specialTileNames = { "clock", "compass" };
private static bool IsSpecialTile(string name)
@@ -72,14 +74,20 @@ namespace PckStudio.Forms.Editor
animationPictureBox.BlendColor = blendColor;
}
+ private void ValidateToolStrip()
+ {
+ bulkAnimationSpeedToolStripMenuItem.Enabled =
+ importToolStripMenuItem.Enabled =
+ exportAsToolStripMenuItem.Enabled =
+ changeTileToolStripMenuItem.Enabled =
+ InterpolationCheckbox.Visible = !IsSpecialTile(_tileName);
+ }
+
private void AnimationEditor_Load(object sender, EventArgs e)
{
- bulkAnimationSpeedToolStripMenuItem.Enabled =
- importToolStripMenuItem.Enabled =
- exportAsToolStripMenuItem.Enabled =
- InterpolationCheckbox.Visible = !IsSpecialTile(_tileName);
+ ValidateToolStrip();
- SetTileLabel();
+ SetTileLabel();
LoadAnimationTreeView();
}
@@ -124,12 +132,17 @@ namespace PckStudio.Forms.Editor
animationPictureBox.SelectFrame(_animation, frameTreeView.SelectedNode.Index);
}
+ private void StopAnimation()
+ {
+ animationPictureBox.Stop();
+ AnimationStartStopBtn.Text = "Play Animation";
+ }
+
private void AnimationStartStopBtn_Click(object sender, EventArgs e)
{
if (animationPictureBox.IsPlaying)
{
- animationPictureBox.Stop();
- AnimationStartStopBtn.Text = "Play Animation";
+ StopAnimation();
return;
}
if (_animation.FrameCount > 1)
@@ -157,7 +170,7 @@ namespace PckStudio.Forms.Editor
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
{
- if (!IsSpecialTile(_tileName) && _animation is not null)
+ if (!IsSpecialTile(_tileName) && _animation is not null && _animation.FrameCount > 0)
{
DialogResult = DialogResult.OK;
return;
@@ -337,19 +350,17 @@ namespace PckStudio.Forms.Editor
private void changeTileToolStripMenuItem_Click(object sender, EventArgs e)
{
+ StopAnimation();
using (ChangeTile diag = new ChangeTile())
{
if (diag.ShowDialog(this) != DialogResult.OK)
return;
- Debug.WriteLine(diag.SelectedTile);
+ Debug.WriteLine($"{diag.SelectedTile}");
_animation.Category = diag.Category;
_tileName = diag.SelectedTile;
- bulkAnimationSpeedToolStripMenuItem.Enabled =
- importToolStripMenuItem.Enabled =
- exportAsToolStripMenuItem.Enabled =
- InterpolationCheckbox.Visible = !IsSpecialTile(_tileName);
+ ValidateToolStrip();
SetTileLabel();
}
@@ -364,19 +375,6 @@ namespace PckStudio.Forms.Editor
_ => throw new ArgumentOutOfRangeException(_animation.Category.ToString())
};
tileLabel.Text = textureInfos.FirstOrDefault(p => p.InternalName == _tileName)?.DisplayName ?? _tileName;
-
- //switch (MessageBox.Show(this,
- // $"{TileName} is not a valid tile for animation, and will not play in game. Would you like to choose a new tile?",
- // "Not a valid tile",
- // MessageBoxButtons.YesNo))
- //{
- // case DialogResult.Yes:
- // changeTileToolStripMenuItem_Click(null, EventArgs.Empty);
- // break;
- // default:
- // DialogResult = DialogResult.Abort;
- // break;
- //}
}
private void exportJavaAnimationToolStripMenuItem_Click(object sender, EventArgs e)
@@ -454,6 +452,8 @@ namespace PckStudio.Forms.Editor
return;
}
+ var oldResolution = _animation.BuildTexture().Width;
+
FrameDimension dimension = new FrameDimension(gif.FrameDimensionsList[0]);
int frameCount = gif.GetFrameCount(dimension);
@@ -462,9 +462,15 @@ namespace PckStudio.Forms.Editor
for (int i = 0; i < frameCount; i++)
{
gif.SelectActiveFrame(dimension, i);
- textures.Add(new Bitmap(gif));
+
+ textures.Add(new Bitmap(gif, oldResolution, oldResolution));
}
+
+ var animCat = _animation.Category;
+
_animation = new Animation(textures, string.Empty);
+ _animation.Interpolate = InterpolationCheckbox.Checked;
+ _animation.Category = animCat;
LoadAnimationTreeView();
}
diff --git a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs
index d4daade9..1a820646 100644
--- a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs
+++ b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs
@@ -17,7 +17,6 @@
**/
using System;
using System.Collections.Generic;
-using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
@@ -272,7 +271,7 @@ namespace PckStudio.Forms.Editor
{
try
{
- _pckfile?.SetData(new GameRuleFileWriter(_file, compressionLevel, compressionType));
+ _pckfile?.SetData(new GameRuleFileWriter(_file));
DialogResult = DialogResult.OK;
MessageBox.Show("Saved!");
}
diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs
index ce1049e5..7d93ab77 100644
--- a/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs
+++ b/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs
@@ -54,12 +54,11 @@
this.treeView1.Location = new System.Drawing.Point(20, 84);
this.treeView1.Margin = new System.Windows.Forms.Padding(0);
this.treeView1.Name = "treeView1";
- this.treeView1.Size = new System.Drawing.Size(136, 176);
+ this.treeView1.Size = new System.Drawing.Size(246, 234);
this.treeView1.TabIndex = 13;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown);
- this.treeView1.MouseHover += new System.EventHandler(this.treeView1_MouseHover);
//
// metroContextMenu1
//
@@ -92,7 +91,7 @@
this.helpToolStripMenuItem});
this.menuStrip.Location = new System.Drawing.Point(20, 60);
this.menuStrip.Name = "menuStrip";
- this.menuStrip.Size = new System.Drawing.Size(348, 24);
+ this.menuStrip.Size = new System.Drawing.Size(246, 24);
this.menuStrip.TabIndex = 14;
this.menuStrip.Text = "menuStrip1";
//
@@ -123,7 +122,7 @@
// xLabel
//
this.xLabel.AutoSize = true;
- this.xLabel.Location = new System.Drawing.Point(159, 147);
+ this.xLabel.Location = new System.Drawing.Point(98, 325);
this.xLabel.Name = "xLabel";
this.xLabel.Size = new System.Drawing.Size(91, 19);
this.xLabel.TabIndex = 30;
@@ -141,9 +140,9 @@
"entity_emissive_alpha_only",
"entity_alphatest_change_color",
"entity_change_color"});
- this.materialComboBox.Location = new System.Drawing.Point(159, 169);
+ this.materialComboBox.Location = new System.Drawing.Point(20, 347);
this.materialComboBox.Name = "materialComboBox";
- this.materialComboBox.Size = new System.Drawing.Size(209, 29);
+ this.materialComboBox.Size = new System.Drawing.Size(246, 29);
this.materialComboBox.TabIndex = 31;
this.materialComboBox.Theme = MetroFramework.MetroThemeStyle.Dark;
this.materialComboBox.UseSelectable = true;
@@ -153,7 +152,7 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(388, 280);
+ this.ClientSize = new System.Drawing.Size(286, 399);
this.Controls.Add(this.materialComboBox);
this.Controls.Add(this.xLabel);
this.Controls.Add(this.menuStrip);
diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.cs
index 88bb11e8..614487e1 100644
--- a/PCK-Studio/Forms/Editor/MaterialsEditor.cs
+++ b/PCK-Studio/Forms/Editor/MaterialsEditor.cs
@@ -23,6 +23,11 @@ namespace PckStudio.Forms.Editor
private readonly JObject EntityJSONData = JObject.Parse(Properties.Resources.entityData);
+ private bool showInvalidEntries;
+
+ //Holds invalid entries so they can be added back to the material file on save should the user decide to hide them
+ List hiddenInvalidEntries = new List();
+
void SetUpTree()
{
treeView1.BeginUpdate();
@@ -31,6 +36,8 @@ namespace PckStudio.Forms.Editor
{
TreeNode EntryNode = new TreeNode(entry.Name);
+ EntryNode.ImageIndex = -1;
+
foreach (JObject content in EntityJSONData["materials"].Children())
{
var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.Name);
@@ -38,13 +45,27 @@ namespace PckStudio.Forms.Editor
{
EntryNode.Text = (string)prop.Value;
EntryNode.ImageIndex = EntityJSONData["materials"].Children().ToList().IndexOf(content);
- EntryNode.SelectedImageIndex = EntryNode.ImageIndex;
break;
}
}
EntryNode.Tag = entry;
+ // check for invalid material entry
+ if (EntryNode.ImageIndex == -1)
+ {
+ EntryNode.ImageIndex = 127; // icon for invalid entry
+ EntryNode.Text += " (Invalid)";
+
+ if (!showInvalidEntries)
+ {
+ hiddenInvalidEntries.Add(entry);
+ continue;
+ }
+ }
+
+ EntryNode.SelectedImageIndex = EntryNode.ImageIndex;
+
treeView1.Nodes.Add(EntryNode);
}
treeView1.EndUpdate();
@@ -58,13 +79,20 @@ namespace PckStudio.Forms.Editor
using (var stream = new MemoryStream(file.Data))
{
var reader = new MaterialFileReader();
- materialFile = reader.FromStream(stream);
- }
+ materialFile = reader.FromStream(stream);
- treeView1.ImageList = new ImageList();
- ApplicationScope.EntityImages.ToList().ForEach(treeView1.ImageList.Images.Add);
- treeView1.ImageList.ColorDepth = ColorDepth.Depth32Bit;
- SetUpTree();
+ if (materialFile.hasInvalidEntries())
+ {
+ DialogResult dr = MessageBox.Show(this, "Unsupported entities were found in this file. Would you like to display them?", "Invalid data found", MessageBoxButtons.YesNo);
+
+ showInvalidEntries = dr == DialogResult.Yes;
+ }
+
+ treeView1.ImageList = new ImageList();
+ ApplicationScope.EntityImages.ToList().ForEach(treeView1.ImageList.Images.Add);
+ treeView1.ImageList.ColorDepth = ColorDepth.Depth32Bit;
+ SetUpTree();
+ }
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
@@ -93,26 +121,11 @@ namespace PckStudio.Forms.Editor
materialComboBox.Enabled = false;
}
- private void addNewPositionOverrideToolStripMenuItem_Click(object sender, EventArgs e)
- {
-
- }
-
- private void addNewEntryToolStripMenuItem_Click(object sender, EventArgs e)
- {
-
- }
-
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete) removeToolStripMenuItem_Click(sender, e);
}
- private void treeView1_MouseHover(object sender, EventArgs e)
- {
-
- }
-
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
{
materialFile = new MaterialContainer();
@@ -125,6 +138,11 @@ namespace PckStudio.Forms.Editor
}
}
+ foreach (MaterialContainer.Material mat in hiddenInvalidEntries)
+ {
+ materialFile.Add(mat);
+ }
+
_file.SetData(new MaterialFileWriter(materialFile));
DialogResult = DialogResult.OK;
@@ -158,8 +176,6 @@ namespace PckStudio.Forms.Editor
}
}
treeView1.Nodes.Add(NewEntryNode);
-
- addNewPositionOverrideToolStripMenuItem_Click(sender, e); // adds a Position Override to the new Override
}
}
diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.resx b/PCK-Studio/Forms/Editor/MaterialsEditor.resx
index 64662fee..b78bf73d 100644
--- a/PCK-Studio/Forms/Editor/MaterialsEditor.resx
+++ b/PCK-Studio/Forms/Editor/MaterialsEditor.resx
@@ -127,11 +127,11 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8
- QLt++3yTGbf/Fm599P/Nh49wfPXxq/+rTt37f+Dak/8gOSBgAGEMANIMxGBFyAasPf/0v8GE8//z1t8C
- y4HU4DIALIluwLpLL+HiMANAGKoNAWASCavv/n/57gPcgOvP3oENOXj7NViOoAFGU6791+k4ghWD5Aga
- QCyGakMAkODcU89R/I8Ng9TgNADk14dPn/8/c+kqVgySgwUqVBsCwAx49urN/zsPHmPFIDmaGvAXJInN
- 38gYasBfqDYE0K7dOn/Wvut/sfkdGYPUgJI9VNuAAwYGAGn6yvdevWgPAAAAAElFTkSuQmCC
+ vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADdSURBVDhPzZJB
+ CoJQEIa9jy0iPFAnCDpAtG3ZooUE4b6oVtIuClpJIAgqZEVlKpqEHUAm5pGPmhTbRA18G//5P5iHgvA3
+ I7ZniiQ7aVM9QZzcOKYbwVDbw8I6A2YAICBvg2VJdtjSs2Cse1Dt6tCYbliGO0UCFlLBxAj590yA0D4X
+ 1Ec7CK8JF9j+lUmWzoVlpYJaz4JKZ5ULZqWCT6F9Jhhowcv9eeBOoQBvPXoBrA0zF8yyR6V9LvCjGLYH
+ NxfMvipIMaQ3Ux6ClPYFsaUq/bmd0rspuIO/Pe3/bu5p+sr3gTvFEQAAAABJRU5ErkJggg==
diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs
index 0b9c0290..a9e55d22 100644
--- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs
+++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs
@@ -29,11 +29,10 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TextureAtlasEditor));
- this.variantLabel = new MetroFramework.Controls.MetroLabel();
+ this.internalTileNameLabel = new MetroFramework.Controls.MetroLabel();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.extractTileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -41,8 +40,13 @@
this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox();
this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox();
this.replaceButton = new MetroFramework.Controls.MetroButton();
- this.animationButton = new MetroFramework.Controls.MetroButton();
this.tileNameLabel = new MetroFramework.Controls.MetroLabel();
+ this.setColorButton = new MetroFramework.Controls.MetroButton();
+ this.animationButton = new MetroFramework.Controls.MetroButton();
+ this.clearColorButton = new MetroFramework.Controls.MetroButton();
+ this.extractButton = new MetroFramework.Controls.MetroButton();
+ this.colorSlider = new MetroFramework.Controls.MetroTrackBar();
+ this.colorSliderLabel = new MetroFramework.Controls.MetroLabel();
this.variantComboBox = new MetroFramework.Controls.MetroComboBox();
this.menuStrip1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
@@ -50,19 +54,20 @@
((System.ComponentModel.ISupportInitialize)(this.selectTilePictureBox)).BeginInit();
this.SuspendLayout();
//
- // variantLabel
+ // internalTileNameLabel
//
- this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.internalTileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.variantLabel.AutoSize = true;
- this.variantLabel.Location = new System.Drawing.Point(3, 254);
- this.variantLabel.Name = "variantLabel";
- this.variantLabel.Size = new System.Drawing.Size(82, 28);
- this.variantLabel.TabIndex = 18;
- this.variantLabel.Text = "Variant:";
- this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.variantLabel.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.tableLayoutPanel1.SetColumnSpan(this.internalTileNameLabel, 2);
+ this.internalTileNameLabel.FontSize = MetroFramework.MetroLabelSize.Small;
+ this.internalTileNameLabel.Location = new System.Drawing.Point(3, 281);
+ this.internalTileNameLabel.Name = "internalTileNameLabel";
+ this.internalTileNameLabel.Size = new System.Drawing.Size(208, 15);
+ this.internalTileNameLabel.TabIndex = 18;
+ this.internalTileNameLabel.Text = "InternalTileName";
+ this.internalTileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.internalTileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.internalTileNameLabel.WrapToLine = true;
//
// menuStrip1
//
@@ -80,8 +85,7 @@
//
this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.saveToolStripMenuItem,
- this.extractTileToolStripMenuItem});
+ this.saveToolStripMenuItem});
this.fileToolStripMenuItem.ForeColor = System.Drawing.SystemColors.Menu;
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
@@ -90,17 +94,10 @@
// saveToolStripMenuItem
//
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
- this.saveToolStripMenuItem.Size = new System.Drawing.Size(131, 22);
+ this.saveToolStripMenuItem.Size = new System.Drawing.Size(98, 22);
this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
- // extractTileToolStripMenuItem
- //
- this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem";
- this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(131, 22);
- this.extractTileToolStripMenuItem.Text = "Extract Tile";
- this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click);
- //
// viewToolStripMenuItem
//
this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -136,38 +133,49 @@
this.tableLayoutPanel1.AutoSize = true;
this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.tableLayoutPanel1.ColumnCount = 3;
- this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F));
- this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
- this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F));
this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0);
- this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 5);
- this.tableLayoutPanel1.Controls.Add(this.animationButton, 0, 4);
+ this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 8);
this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1);
- this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 1, 2);
- this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2);
+ this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 5);
+ this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 8);
+ this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 5);
+ this.tableLayoutPanel1.Controls.Add(this.extractButton, 0, 7);
+ this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 4);
+ this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 4);
+ this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 3);
+ this.tableLayoutPanel1.Controls.Add(this.internalTileNameLabel, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 6;
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 42.82212F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.938088F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.350623F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565);
this.tableLayoutPanel1.TabIndex = 17;
//
// originalPictureBox
//
+ this.originalPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
this.originalPictureBox.BackColor = System.Drawing.Color.Transparent;
- this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
- this.originalPictureBox.Location = new System.Drawing.Point(238, 3);
+ this.originalPictureBox.Location = new System.Drawing.Point(217, 3);
this.originalPictureBox.Name = "originalPictureBox";
- this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 6);
- this.originalPictureBox.Size = new System.Drawing.Size(349, 559);
+ this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9);
+ this.originalPictureBox.Size = new System.Drawing.Size(370, 535);
this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.originalPictureBox.TabIndex = 4;
this.originalPictureBox.TabStop = false;
@@ -186,7 +194,7 @@
this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3);
this.selectTilePictureBox.Name = "selectTilePictureBox";
- this.selectTilePictureBox.Size = new System.Drawing.Size(229, 220);
+ this.selectTilePictureBox.Size = new System.Drawing.Size(208, 227);
this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.selectTilePictureBox.TabIndex = 0;
this.selectTilePictureBox.TabStop = false;
@@ -198,53 +206,131 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.replaceButton.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2);
- this.replaceButton.Location = new System.Drawing.Point(3, 539);
+ this.replaceButton.Location = new System.Drawing.Point(3, 515);
this.replaceButton.Name = "replaceButton";
- this.replaceButton.Size = new System.Drawing.Size(229, 23);
+ this.replaceButton.Size = new System.Drawing.Size(208, 23);
this.replaceButton.TabIndex = 14;
- this.replaceButton.Text = "Replace";
+ this.replaceButton.Text = "Replace Tile on Atlas";
this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark;
this.replaceButton.UseSelectable = true;
this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click);
//
+ // tileNameLabel
+ //
+ this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2);
+ this.tileNameLabel.Location = new System.Drawing.Point(3, 233);
+ this.tileNameLabel.Name = "tileNameLabel";
+ this.tileNameLabel.Size = new System.Drawing.Size(208, 48);
+ this.tileNameLabel.TabIndex = 19;
+ this.tileNameLabel.Text = "TileName";
+ this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.tileNameLabel.WrapToLine = true;
+ //
+ // setColorButton
+ //
+ this.setColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2);
+ this.setColorButton.Location = new System.Drawing.Point(3, 434);
+ this.setColorButton.Name = "setColorButton";
+ this.setColorButton.Size = new System.Drawing.Size(208, 17);
+ this.setColorButton.TabIndex = 25;
+ this.setColorButton.Text = "Set Custom Colour";
+ this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.setColorButton.UseSelectable = true;
+ this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click);
+ //
// animationButton
//
this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.animationButton.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2);
- this.animationButton.Location = new System.Drawing.Point(3, 511);
+ this.animationButton.Location = new System.Drawing.Point(3, 544);
this.animationButton.Name = "animationButton";
- this.animationButton.Size = new System.Drawing.Size(229, 22);
+ this.animationButton.Size = new System.Drawing.Size(208, 18);
this.animationButton.TabIndex = 16;
this.animationButton.Text = "Animation";
this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark;
this.animationButton.UseSelectable = true;
this.animationButton.Click += new System.EventHandler(this.animationButton_Click);
//
- // tileNameLabel
+ // clearColorButton
//
- this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ this.clearColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.tileNameLabel.AutoSize = true;
- this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2);
- this.tileNameLabel.Location = new System.Drawing.Point(3, 235);
- this.tileNameLabel.Name = "tileNameLabel";
- this.tileNameLabel.Size = new System.Drawing.Size(229, 19);
- this.tileNameLabel.TabIndex = 19;
- this.tileNameLabel.Text = "TileName";
- this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.clearColorButton.AutoSize = true;
+ this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2);
+ this.clearColorButton.Location = new System.Drawing.Point(3, 457);
+ this.clearColorButton.Name = "clearColorButton";
+ this.clearColorButton.Size = new System.Drawing.Size(208, 23);
+ this.clearColorButton.TabIndex = 24;
+ this.clearColorButton.Text = "Clear Custom Colour";
+ this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.clearColorButton.UseSelectable = true;
+ this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click);
+ //
+ // extractButton
+ //
+ this.extractButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.extractButton.AutoSize = true;
+ this.tableLayoutPanel1.SetColumnSpan(this.extractButton, 2);
+ this.extractButton.Location = new System.Drawing.Point(3, 486);
+ this.extractButton.Name = "extractButton";
+ this.extractButton.Size = new System.Drawing.Size(208, 23);
+ this.extractButton.TabIndex = 27;
+ this.extractButton.Text = "Extract Tile from Atlas";
+ this.extractButton.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.extractButton.UseSelectable = true;
+ this.extractButton.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click);
+ //
+ // colorSlider
+ //
+ this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
+ this.colorSlider.BackColor = System.Drawing.Color.Transparent;
+ this.colorSlider.Location = new System.Drawing.Point(64, 380);
+ this.colorSlider.Maximum = 255;
+ this.colorSlider.Name = "colorSlider";
+ this.colorSlider.Size = new System.Drawing.Size(147, 42);
+ this.colorSlider.TabIndex = 26;
+ this.colorSlider.Text = "metroTrackBar1";
+ this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.colorSlider.Value = 255;
+ this.colorSlider.Visible = false;
+ this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged);
+ //
+ // colorSliderLabel
+ //
+ this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent;
+ this.colorSliderLabel.FontSize = MetroFramework.MetroLabelSize.Small;
+ this.colorSliderLabel.Location = new System.Drawing.Point(3, 377);
+ this.colorSliderLabel.Name = "colorSliderLabel";
+ this.colorSliderLabel.Size = new System.Drawing.Size(55, 48);
+ this.colorSliderLabel.TabIndex = 19;
+ this.colorSliderLabel.Text = "Color Value:";
+ this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.colorSliderLabel.Visible = false;
+ this.colorSliderLabel.WrapToLine = true;
//
// variantComboBox
//
this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2);
this.variantComboBox.Enabled = false;
this.variantComboBox.FormattingEnabled = true;
this.variantComboBox.ItemHeight = 23;
- this.variantComboBox.Location = new System.Drawing.Point(91, 257);
+ this.variantComboBox.Location = new System.Drawing.Point(3, 338);
this.variantComboBox.Name = "variantComboBox";
- this.variantComboBox.Size = new System.Drawing.Size(141, 29);
+ this.variantComboBox.Size = new System.Drawing.Size(208, 29);
this.variantComboBox.TabIndex = 17;
this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark;
this.variantComboBox.UseSelectable = true;
@@ -287,12 +373,16 @@
private PckStudio.ToolboxItems.InterpolationPictureBox originalPictureBox;
private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
private MetroFramework.Controls.MetroButton animationButton;
- private System.Windows.Forms.ToolStripMenuItem extractTileToolStripMenuItem;
private MetroFramework.Controls.MetroComboBox variantComboBox;
private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem applyColorMaskToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem playAnimationsToolStripMenuItem;
private MetroFramework.Controls.MetroLabel tileNameLabel;
- private MetroFramework.Controls.MetroLabel variantLabel;
+ private MetroFramework.Controls.MetroLabel internalTileNameLabel;
+ private MetroFramework.Controls.MetroButton clearColorButton;
+ private MetroFramework.Controls.MetroButton setColorButton;
+ private MetroFramework.Controls.MetroTrackBar colorSlider;
+ private MetroFramework.Controls.MetroLabel colorSliderLabel;
+ private MetroFramework.Controls.MetroButton extractButton;
}
}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs
index 1d71098f..2f93d182 100644
--- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs
+++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs
@@ -1,4 +1,4 @@
-/* Copyright (c) 2023-present miku-666
+/* Copyright (c) 2023-present miku-666, MattNL
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
@@ -37,13 +37,14 @@ namespace PckStudio.Forms.Editor
{
internal partial class TextureAtlasEditor : MetroForm
{
+ private Image _workingTexture;
public Image FinalTexture
{
get
{
if (DialogResult != DialogResult.OK)
return null;
- return (Image)originalPictureBox.Image.Clone();
+ return _workingTexture;
}
}
@@ -56,6 +57,8 @@ namespace PckStudio.Forms.Editor
private readonly List _tiles;
private AtlasTile _selectedTile;
+ // the "parent" tile for tiles that share name; i.e. parts of water_flow
+ private AtlasTile dataTile;
private sealed class AtlasTile
{
internal readonly int Index;
@@ -74,7 +77,17 @@ namespace PckStudio.Forms.Editor
private int SelectedIndex
{
- set => SetImageDisplayed(value);
+ set {
+ if (value < 0)
+ {
+ value = _tiles.Count + value;
+ }
+ else if (value >= _tiles.Count)
+ {
+ value = value - _tiles.Count;
+ }
+ SetImageDisplayed(value);
+ }
}
private const ImageLayoutDirection _imageLayout = ImageLayoutDirection.Horizontal;
@@ -84,6 +97,9 @@ namespace PckStudio.Forms.Editor
InitializeComponent();
AcquireColorTable(pckFile);
+
+ _workingTexture = atlas;
+
_areaSize = areaSize;
_pckFile = pckFile;
_rowCount = atlas.Width / areaSize.Width;
@@ -92,17 +108,61 @@ namespace PckStudio.Forms.Editor
{
"terrain" => (Tiles.BlockTileInfos, "blocks"),
"items" => (Tiles.ItemTileInfos, "items"),
+ "particles" => (Tiles.ParticleTileInfos, "particles"),
+ "mapicons" => (Tiles.MapIconTileInfos, "map_icons"),
+ "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"),
+ "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"),
+ "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"),
+ "explosion" => (Tiles.ExplosionTileInfos, "explosions"),
+ "kz" => (Tiles.PaintingTileInfos, "paintings"),
+ "Banner_Atlas" => (Tiles.BannerTileInfos, "banners"),
_ => (null, null),
};
- originalPictureBox.Image = atlas;
+
+ originalPictureBox.Image = atlas.GetArea(new Rectangle(0, 0, atlas.Width, atlas.Height));
+
var images = atlas.Split(_areaSize, _imageLayout);
var tiles = images.enumerate().Select(
- p => new AtlasTile(p.index, GetAtlasArea(p.index, _rowCount, _columnCount, _areaSize, _imageLayout), tileInfos.IndexInRange(p.index) ? tileInfos[p.index] : null, p.value)
+ p => new AtlasTile(
+ p.index,
+
+ GetAtlasArea(
+ p.index,
+ tileInfos.IndexInRange(p.index)
+ ? tileInfos[p.index].Width : 1,
+ tileInfos.IndexInRange(p.index)
+ ? tileInfos[p.index].Height : 1,
+ _rowCount,
+ _columnCount,
+ _areaSize,
+ _imageLayout),
+
+ tileInfos.IndexInRange(p.index)
+ ? tileInfos[p.index] : null,
+
+ // get texture for tiles that are not 1x1 tiles
+ tileInfos.IndexInRange(p.index)
+ ? atlas.GetArea(
+ new Rectangle(
+ GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).X * _areaSize.Width,
+ GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).Y * _areaSize.Height,
+ tileInfos[p.index].Width * _areaSize.Width,
+ tileInfos[p.index].Height * _areaSize.Height))
+ : p.value)
);
_tiles = new List(tiles);
SelectedIndex = 0;
+
+ bool isParticles = _atlasType == "particles";
+
+ // this is directly based on Java's source code for handling enchanted hits
+ // the particle is assigned a random grayscale color between roughly 154 and 230
+ // since critical hit is the only particle with this distinction, we just need to check the atlas type
+ colorSlider.Maximum = isParticles ? 230 : 255;
+ colorSlider.Minimum = isParticles ? 154 : 0;
+ colorSlider.Value = isParticles ? colorSlider.Maximum : colorSlider.Minimum;
}
private bool AcquireColorTable(PckFile pckFile)
@@ -119,11 +179,37 @@ namespace PckStudio.Forms.Editor
return false;
}
+ private void UpdateAtlasDisplay()
+ {
+ var graphicsConfig = new GraphicsConfig()
+ {
+ InterpolationMode = selectTilePictureBox.InterpolationMode,
+ PixelOffsetMode = PixelOffsetMode.HighQuality
+ };
+ using (var g = Graphics.FromImage(originalPictureBox.Image))
+ {
+ g.ApplyConfig(graphicsConfig);
+ g.Clear(Color.Transparent);
+ g.DrawImage(_workingTexture, 0, 0, _workingTexture.Width, _workingTexture.Height);
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(127, 255, 255, 255));
+
+ var rect = new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y,
+ _areaSize.Width, _areaSize.Height);
+
+ g.FillRectangle(brush, rect);
+ }
+
+ originalPictureBox.Invalidate();
+ }
+
private void SetImageDisplayed(int index)
{
tileNameLabel.Text = string.Empty;
-
- variantLabel.Visible = false;
+ internalTileNameLabel.Text = string.Empty;
+
+ colorSlider.Visible = false;
+ colorSliderLabel.Visible = false;
variantComboBox.Visible = false;
variantComboBox.Items.Clear();
variantComboBox.SelectedItem = null;
@@ -137,37 +223,58 @@ namespace PckStudio.Forms.Editor
if (_tiles is null || !_tiles.IndexInRange(index) || (_selectedTile = _tiles[index]) is null)
return;
- if(string.IsNullOrEmpty(_selectedTile.Tile.DisplayName))
- {
- // changes the selected tile to the base flowing tile (carries all properties over) - Matt
- _selectedTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName);
- }
+ dataTile = _selectedTile;
- tileNameLabel.Text = $"{_selectedTile.Tile.DisplayName}";
+ UpdateAtlasDisplay();
+
+ if (string.IsNullOrEmpty(dataTile.Tile.DisplayName) && !string.IsNullOrEmpty(dataTile.Tile.InternalName))
+ {
+ dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName);
+ }
+
+ selectTilePictureBox.Image = dataTile.Texture;
+ tileNameLabel.Text = $"{dataTile.Tile.DisplayName}";
+ internalTileNameLabel.Text = $"{dataTile.Tile.InternalName}";
selectTilePictureBox.BlendColor = GetBlendColor();
selectTilePictureBox.UseBlendColor = applyColorMaskToolStripMenuItem.Checked;
- bool hasAnimation =
- _pckFile.TryGetValue($"res/textures/{_atlasType}/{_selectedTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile);
- animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation";
- replaceButton.Enabled = !hasAnimation;
-
- if (playAnimationsToolStripMenuItem.Checked &&
- hasAnimation &&
- animationFile.Size > 0)
+ if (animationButton.Enabled = _atlasType == "blocks" || _atlasType == "items")
{
- var animation = AnimationHelper.GetAnimationFromFile(animationFile);
- selectTilePictureBox.Start(animation);
- return;
+ bool hasAnimation =
+ _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile);
+ animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation";
+
+ if (playAnimationsToolStripMenuItem.Checked &&
+ hasAnimation &&
+ animationFile.Size > 0)
+ {
+ var animation = AnimationHelper.GetAnimationFromFile(animationFile);
+ selectTilePictureBox.Start(animation);
+ }
}
- if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = _selectedTile.Tile.HasColourEntry && _selectedTile.Tile.ColourEntry.Variants.Length > 1)
+ if (setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.HasColourEntry)
{
- variantComboBox.Items.AddRange(_selectedTile.Tile.ColourEntry.Variants);
- variantComboBox.SelectedItem = _selectedTile.Tile.ColourEntry.DefaultName;
+ setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.ColourEntry.HasCustomColour;
+ clearColorButton.Enabled = false;
+
+ variantComboBox.Enabled = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1;
+
+ if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0)
+ {
+ foreach (var col in _colourTable.WaterColors)
+ {
+ if(!variantComboBox.Items.Contains(col.Name))
+ variantComboBox.Items.Add(col.Name);
+ }
+
+ dataTile.Tile.ColourEntry.DefaultName = _colourTable.WaterColors[0].Name;
+ }
+
+ variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants);
+
+ variantComboBox.SelectedItem = dataTile.Tile.ColourEntry.DefaultName;
}
-
- selectTilePictureBox.Image = _selectedTile.Texture;
}
private static int GetSelectedImageIndex(
@@ -253,11 +360,11 @@ namespace PckStudio.Forms.Editor
};
}
- private static Rectangle GetAtlasArea(int index, int rowCount, int columnCount, Size size, ImageLayoutDirection imageLayout)
+ private static Rectangle GetAtlasArea(int index, int width, int height, int rowCount, int columnCount, Size size, ImageLayoutDirection imageLayout)
{
var p = GetSelectedPoint(index, rowCount, columnCount, imageLayout);
var ap = new Point(p.X * size.Width, p.Y * size.Height);
- return new Rectangle(ap, size);
+ return new Rectangle(ap, new Size(size.Width * width, size.Height * height));
}
private static Point GetSelectedPoint(int index, int rowCount, int columnCount, ImageLayoutDirection imageLayout)
@@ -277,41 +384,78 @@ namespace PckStudio.Forms.Editor
};
if (texture.Size != _areaSize)
texture = texture.Resize(_areaSize, graphicsConfig);
- using (var g = Graphics.FromImage(originalPictureBox.Image))
+ using (var g = Graphics.FromImage(_workingTexture))
{
g.ApplyConfig(graphicsConfig);
- g.Fill(_selectedTile.Area, Color.Transparent);
- g.DrawImage(texture, _selectedTile.Area);
+ g.Fill(dataTile.Area, Color.Transparent);
+ g.DrawImage(texture, dataTile.Area);
}
- _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture);
- selectTilePictureBox.Image = texture;
- originalPictureBox.Invalidate();
+ var _finalTexture = _workingTexture.GetArea(new Rectangle(dataTile.Area.X, dataTile.Area.Y, dataTile.Area.Width, dataTile.Area.Height));
+
+ if(_selectedTile != dataTile)
+ _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, _finalTexture);
+ else
+ _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, _finalTexture);
+ selectTilePictureBox.Image = _finalTexture;
+
+ UpdateAtlasDisplay();
}
private Color GetBlendColor()
{
- if (_selectedTile.Tile.HasColourEntry && _selectedTile.Tile.ColourEntry is not null)
- return FindBlendColorByKey(_selectedTile.Tile.ColourEntry.DefaultName);
+ if (dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry is not null)
+ {
+ var col = FindBlendColorByKey(dataTile.Tile.ColourEntry.DefaultName);
+ return col;
+ }
+
return Color.White;
}
+ private Color HandleSpecialTiles(string colorKey)
+ {
+ colorSlider.Visible = colorSliderLabel.Visible = true;
+
+ // Simply, Experience orbs red value is just sliding between 255 and 0
+ if (colorKey == "experience_orb") return Color.FromArgb(colorSlider.Value, 255, 0);
+
+ //similar story for critical hits, but for all values
+ var final_color = Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value);
+
+ // enchanted hits are modified critical hit particles
+ if (dataTile.Tile.InternalName == "enchanted_hit")
+ // this is directly based on Java's source code for handling enchanted hits
+ // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle
+ final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B);
+
+ return final_color;
+ }
+
private Color FindBlendColorByKey(string colorKey)
{
+ // The following tiles are hardcoded within a range and do not have color table entries
+ if (colorKey == "experience_orb" || colorKey == "critical_hit")
+ return HandleSpecialTiles(colorKey);
+
if (_colourTable is not null &&
- _selectedTile.Tile.HasColourEntry &&
- _selectedTile.Tile.ColourEntry is not null)
+ dataTile.Tile.HasColourEntry &&
+ dataTile.Tile.ColourEntry is not null)
{
- if (_selectedTile.Tile.ColourEntry.IsWaterColour &&
- _colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor)
+ // basic way to check for classic water colors
+ if(!dataTile.Tile.ColourEntry.IsWaterColour || colorKey.StartsWith("Water_"))
+ {
+ if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color)
+ {
+ return color.ColorPallette;
+ }
+ }
+ else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor)
{
return waterColor.SurfaceColor;
}
- else if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color)
- {
- return color.ColorPallette;
- }
}
+
return Color.White;
}
@@ -319,35 +463,22 @@ namespace PckStudio.Forms.Editor
{
switch (keyData)
{
+ case Keys.R:
+ // Refreshes the specific tile
+ SelectedIndex = _selectedTile.Index;
+ return true;
case Keys.Left:
- if (_tiles.IndexInRange(_selectedTile.Index - 1))
- {
- SelectedIndex = _selectedTile.Index - 1;
- return true;
- }
- break;
+ SelectedIndex = _selectedTile.Index - 1;
+ return true;
case Keys.Right:
- if (_tiles.IndexInRange(_selectedTile.Index + 1))
- {
- SelectedIndex = _selectedTile.Index + 1;
- return true;
- }
- break;
+ SelectedIndex = _selectedTile.Index + 1;
+ return true;
case Keys.Up:
- if (_tiles.IndexInRange(_selectedTile.Index - _rowCount))
- {
- SelectedIndex = _selectedTile.Index - _rowCount;
- return true;
- }
- break;
-
+ SelectedIndex = _selectedTile.Index - _rowCount;
+ return true;
case Keys.Down:
- if (_tiles.IndexInRange(_selectedTile.Index + _rowCount))
- {
- SelectedIndex = _selectedTile.Index + _rowCount;
- return true;
- }
- break;
+ SelectedIndex = _selectedTile.Index + _rowCount;
+ return true;
}
return false;
@@ -358,9 +489,11 @@ namespace PckStudio.Forms.Editor
if (e.Button != MouseButtons.Left)
return;
+ ActiveControl = null;
+
int index = GetSelectedImageIndex(
originalPictureBox.Size,
- originalPictureBox.Image.Size,
+ _workingTexture.Size,
_areaSize,
e.Location,
originalPictureBox.SizeMode,
@@ -408,6 +541,8 @@ namespace PckStudio.Forms.Editor
}
AnimationHelper.SaveAnimationToFile(file, animation);
+ // so animations can automatically update upon saving
+ SelectedIndex = _selectedTile.Index;
}
private void extractTileToolStripMenuItem_Click(object sender, EventArgs e)
@@ -419,18 +554,18 @@ namespace PckStudio.Forms.Editor
};
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
- selectTilePictureBox.Image.Save(saveFileDialog.FileName, ImageFormat.Png);
+ dataTile.Texture.Save(saveFileDialog.FileName, ImageFormat.Png);
}
}
private void variantComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
- if (_selectedTile.Tile.ColourEntry is not null &&
- _selectedTile.Tile.ColourEntry.Variants.IndexInRange(variantComboBox.SelectedIndex))
+ if (dataTile.Tile.ColourEntry is not null)
{
- string colorKey = _selectedTile.Tile.ColourEntry.Variants[variantComboBox.SelectedIndex];
+ string colorKey = variantComboBox.SelectedItem.ToString();
+
selectTilePictureBox.BlendColor = FindBlendColorByKey(colorKey);
- selectTilePictureBox.Image = _selectedTile.Texture;
+ selectTilePictureBox.Image = dataTile.Texture;
}
}
@@ -449,5 +584,57 @@ namespace PckStudio.Forms.Editor
if (selectTilePictureBox.IsPlaying)
selectTilePictureBox.Stop();
}
+
+ private void setColorButton_Click(object sender, EventArgs e)
+ {
+ ColorDialog colorPick = new ColorDialog();
+ colorPick.AllowFullOpen = true;
+ colorPick.AnyColor = true;
+ colorPick.SolidColorOnly = true;
+
+ // custom colors are read as BGR for some reason, so hex values are "backwards"
+ // values below are the default Minecraft dyed leather armor values for convenience
+
+ colorPick.CustomColors = new int[] {
+ 0xfefff9, // White
+ 0x1d80f9, // Orange
+ 0xbd4ec7, // Magenta
+ 0xdab33a, // Light Blue
+ 0x3dd8fe, // Yellow
+ 0x1fc780, // Lime
+ 0xaa8bf3, // Pink
+ 0x524f47, // Gray
+ 0x979d9d, // Light Gray
+ 0x9c9c16, // Cyan
+ 0xb83289, // Purple
+ 0xaa443c, // Blue
+ 0x325483, // Brown
+ 0x167c5e, // Green
+ 0x262eb0, // Red
+ 0x211d1d // Black
+ };
+
+ if (colorPick.ShowDialog() != DialogResult.OK) return;
+
+ selectTilePictureBox.BlendColor = colorPick.Color;
+ selectTilePictureBox.Image = dataTile.Texture;
+ variantComboBox.Enabled = false;
+ clearColorButton.Enabled = true;
+ }
+
+ private void clearColorButton_Click(object sender, EventArgs e)
+ {
+ variantComboBox.Enabled = true;
+
+ variantComboBox_SelectedIndexChanged(sender, e);
+
+ clearColorButton.Enabled = false;
+ }
+
+ private void colorSlider_ValueChanged(object sender, EventArgs e)
+ {
+ selectTilePictureBox.BlendColor = GetBlendColor();
+ selectTilePictureBox.Image = dataTile.Texture;
+ }
}
}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs
index 3f34cb3d..bae14ad6 100644
--- a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs
+++ b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs
@@ -242,24 +242,32 @@ namespace PckStudio.Popups
}
string skinId = _skinId.ToString("d08");
skin.Filename = $"dlcskin{skinId}.png";
- string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME";
- currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text);
- skin.Properties.Add("DISPLAYNAME", textSkinName.Text);
- skin.Properties.Add("DISPLAYNAMEID", skinDisplayNameLocKey);
+ skin.AddProperty("DISPLAYNAME", textSkinName.Text);
+
+ if (currentLoc is not null)
+ {
+ string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME";
+ skin.AddProperty("DISPLAYNAMEID", skinDisplayNameLocKey);
+ currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text);
+ }
+
if (!string.IsNullOrEmpty(textThemeName.Text))
{
- skin.Properties.Add("THEMENAME", textThemeName.Text);
- skin.Properties.Add("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME");
- currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text);
+ skin.AddProperty("THEMENAME", textThemeName.Text);
+ if (currentLoc is not null)
+ {
+ skin.AddProperty("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME");
+ currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text);
+ }
}
- skin.Properties.Add("ANIM", anim);
- skin.Properties.Add("GAME_FLAGS", "0x18");
- skin.Properties.Add("FREE", "1");
+ skin.AddProperty("ANIM", anim);
+ skin.AddProperty("GAME_FLAGS", "0x18");
+ skin.AddProperty("FREE", "1");
if (HasCape)
{
cape.Filename = $"dlccape{skinId}.png";
- skin.Properties.Add("CAPEPATH", cape.Filename);
+ skin.AddProperty("CAPEPATH", cape.Filename);
}
skin.SetData(skinPictureBox.Image, ImageFormat.Png);
DialogResult = DialogResult.OK;
diff --git a/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs b/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs
index 65f15c65..e536a96f 100644
--- a/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs
+++ b/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs
@@ -67,7 +67,7 @@ namespace PckStudio.Popups
if (index == -1 || (Enum.IsDefined(typeof(PckFileType), index) && (int)file.Filetype == index))
{
- file.Properties.Add(propertyKeyTextBox.Text, propertyValueTextBox.Text);
+ file.AddProperty(propertyKeyTextBox.Text, propertyValueTextBox.Text);
}
}
diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs
index 64e7dadb..9171edf1 100644
--- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs
+++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs
@@ -141,7 +141,7 @@ namespace PckStudio.Forms
}
comboParent.Items.Clear();
comboParent.Items.AddRange(ValidModelBoxTypes);
- LoadData(file.Properties);
+ LoadData(file);
}
private static readonly Regex sWhitespace = new Regex(@"\s+");
public static string ReplaceWhitespace(string input, string replacement)
@@ -149,9 +149,9 @@ namespace PckStudio.Forms
return sWhitespace.Replace(input, replacement);
}
- private void LoadData(PckFileProperties properties)
+ private void LoadData(PckFileData file)
{
- comboParent.Enabled = properties.GetProperties("BOX").All(kv => {
+ comboParent.Enabled = file.GetMultipleProperties("BOX").All(kv => {
var box = SkinBOX.FromString(kv.Value);
if (ValidModelBoxTypes.Contains(box.Type))
{
@@ -160,7 +160,7 @@ namespace PckStudio.Forms
}
return false;
});
- properties.GetProperties("OFFSET").All(kv => {
+ file.GetMultipleProperties("OFFSET").All(kv => {
string[] offset = ReplaceWhitespace(kv.Value, ",").TrimEnd('\n', '\r', ' ').Split(',');
if (offset.Length < 3)
return false;
@@ -176,7 +176,7 @@ namespace PckStudio.Forms
return false;
});
- _ANIM = properties.GetPropertyValue("ANIM", SkinANIM.FromString);
+ _ANIM = file.GetProperty("ANIM", SkinANIM.FromString);
UpdateListView();
Rerender();
}
@@ -1094,7 +1094,7 @@ namespace PckStudio.Forms
{
foreach (var part in modelBoxes)
{
- _file.Properties.Add("BOX", part);
+ _file.AddProperty("BOX", part);
}
//Bitmap bitmap2 = new Bitmap(64, 64);
diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs
index 3bdc4fd7..4676107e 100644
--- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs
+++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs
@@ -182,7 +182,7 @@ namespace PckStudio.Forms
string capePath = "";
bool hasCape = false;
- foreach (var entry in newSkin.Properties)
+ foreach (var entry in newSkin.GetProperties())
{
if (entry.Key == "DISPLAYNAME")
{
@@ -264,7 +264,7 @@ namespace PckStudio.Forms
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)
+ foreach (var entry in newSkin.GetProperties())
{
if (entry.Key == "BOX")
{
diff --git a/PCK-Studio/Helper/AnimationHelper.cs b/PCK-Studio/Helper/AnimationHelper.cs
index a9714d15..0312624a 100644
--- a/PCK-Studio/Helper/AnimationHelper.cs
+++ b/PCK-Studio/Helper/AnimationHelper.cs
@@ -18,7 +18,7 @@ namespace PckStudio.Helper
internal static void SaveAnimationToFile(PckFileData file, Animation animation)
{
string anim = animation.BuildAnim();
- file.Properties.SetProperty("ANIM", anim);
+ file.SetProperty("ANIM", anim);
var texture = animation.BuildTexture();
file.SetData(texture, ImageFormat.Png);
}
@@ -30,7 +30,7 @@ namespace PckStudio.Helper
{
var texture = file.GetTexture();
var frameTextures = texture.Split(ImageLayoutDirection.Vertical);
- var _animation = new Animation(frameTextures, file.Properties.GetPropertyValue("ANIM"));
+ var _animation = new Animation(frameTextures, file.GetProperty("ANIM"));
_animation.Category = file.Filename.Split('/').Contains("items")
? AnimationCategory.Items
: AnimationCategory.Blocks;
diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs
index 361ad2e4..e3812620 100644
--- a/PCK-Studio/Internal/ApplicationScope.cs
+++ b/PCK-Studio/Internal/ApplicationScope.cs
@@ -21,11 +21,24 @@ namespace PckStudio.Internal
{
Profiler.Start();
{
- _entityImages ??= Resources.entities_sheet.SplitHorizontal(32).ToArray();
+ _entityImages ??= Resources.entities_atlas.SplitHorizontal(32).ToArray();
DataCacher ??= new FileCacher(Program.AppDataCache);
- _ = Tiles.JsonTileData;
- _ = Tiles.ItemImageList;
+ _ = Tiles.JsonBlockData;
+ _ = Tiles.JsonItemData;
+ _ = Tiles.JsonParticleData;
+ _ = Tiles.JsonMoonPhaseData;
+ _ = Tiles.JsonExplosionData;
+ _ = Tiles.JsonMapIconData;
+ _ = Tiles.JsonExperienceOrbData;
+ _ = Tiles.JsonPaintingData;
_ = Tiles.BlockImageList;
+ _ = Tiles.ItemImageList;
+ _ = Tiles.ParticleImageList;
+ _ = Tiles.ExplosionImageList;
+ _ = Tiles.MapIconImageList;
+ _ = Tiles.ExperienceOrbImageList;
+ _ = Tiles.MoonPhaseImageList;
+ _ = Tiles.PaintingImageList;
SettingsManager.Initialize();
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
}
diff --git a/PCK-Studio/Internal/Json/ColorEntry.cs b/PCK-Studio/Internal/Json/ColorEntry.cs
index 8523a311..39390d81 100644
--- a/PCK-Studio/Internal/Json/ColorEntry.cs
+++ b/PCK-Studio/Internal/Json/ColorEntry.cs
@@ -15,6 +15,9 @@ namespace PckStudio.Internal.Json
[JsonProperty("isWaterColour", DefaultValueHandling = DefaultValueHandling.Populate)]
public bool IsWaterColour { get; set; }
+ [JsonProperty("hasCustomColour", DefaultValueHandling = DefaultValueHandling.Populate)]
+ public bool HasCustomColour { get; set; }
+
[JsonProperty("variants", DefaultValueHandling = DefaultValueHandling.Populate)]
public string[] Variants { get; set; }
}
diff --git a/PCK-Studio/Internal/Json/TileInfo.cs b/PCK-Studio/Internal/Json/TileInfo.cs
index 1ff8b0f0..54e27d2f 100644
--- a/PCK-Studio/Internal/Json/TileInfo.cs
+++ b/PCK-Studio/Internal/Json/TileInfo.cs
@@ -15,6 +15,12 @@ namespace PckStudio.Internal.Json
[JsonProperty("internalName")]
public string InternalName { get; set; }
+ [JsonProperty("width")]
+ public int Width { get; set; } = 1;
+
+ [JsonProperty("height")]
+ public int Height { get; set; } = 1;
+
[JsonProperty("hasColourEntry", DefaultValueHandling = DefaultValueHandling.Populate)]
public bool HasColourEntry { get; set; }
diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs
index b6e7942c..921407a2 100644
--- a/PCK-Studio/Internal/Json/Tiles.cs
+++ b/PCK-Studio/Internal/Json/Tiles.cs
@@ -13,55 +13,108 @@ namespace PckStudio.Internal.Json
{
internal class JsonTiles
{
- [JsonProperty("blocks")]
- public List Blocks { get; set; }
- [JsonProperty("items")]
- public List Items { get; set; }
+ [JsonProperty("entries")]
+ public List Entries { get; set; }
+
+ [JsonProperty("additional_entries")]
+ public List AdditionalEntries { get; set; }
}
internal static class Tiles
{
- private static JsonTiles _jsonData;
- internal static JsonTiles JsonTileData => _jsonData ??= JsonConvert.DeserializeObject(Resources.tileData);
+ private static JsonTiles
+ _jsonBlockData, _jsonItemData,
+ _jsonParticleData, _jsonMoonPhaseData,
+ _jsonMapIconData, _jsonExplosionData,
+ _jsonExperienceOrbData, _jsonPaintingData, _jsonBannerData;
+ internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData);
+ internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData);
+ internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData);
+ internal static JsonTiles JsonMoonPhaseData => _jsonMoonPhaseData ??= JsonConvert.DeserializeObject(Resources.moonPhaseData);
+ internal static JsonTiles JsonMapIconData => _jsonMapIconData ??= JsonConvert.DeserializeObject(Resources.mapIconData);
+ internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData);
+ internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData);
+ internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData);
+ internal static JsonTiles JsonBannerData => _jsonBannerData ??= JsonConvert.DeserializeObject(Resources.bannerData);
- internal static List ItemTileInfos => JsonTileData.Items;
-
- internal static List BlockTileInfos => JsonTileData.Blocks;
+ internal static List ItemTileInfos => JsonItemData.Entries;
+ internal static List BlockTileInfos => JsonBlockData.Entries;
+ internal static List ParticleTileInfos => JsonParticleData.Entries;
+ internal static List MoonPhaseTileInfos => JsonMoonPhaseData.Entries;
+ internal static List MapIconTileInfos => JsonMapIconData.Entries;
+ internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalEntries;
+ internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.Entries;
+ internal static List ExplosionTileInfos => JsonExplosionData.Entries;
+ internal static List PaintingTileInfos => JsonPaintingData.Entries;
+ internal static List BannerTileInfos => JsonBannerData.Entries;
private static Image[] _itemImages;
- public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray();
+ public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray();
private static Image[] _blockImages;
- public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray();
+ public static Image[] BlockImages => _blockImages ??= Resources.terrain_atlas.SplitHorizontal(16).ToArray();
- private static ImageList _itemImageList;
- public static ImageList ItemImageList
+ private static Image[] _particleImages;
+ public static Image[] ParticleImages => _particleImages ??= Resources.particles_atlas.SplitHorizontal(16).ToArray();
+
+ private static Image[] _moonPhaseImages;
+ public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_atlas.SplitHorizontal(4).ToArray();
+
+ private static Image[] _mapIconImages;
+ public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_atlas.SplitHorizontal(4).ToArray();
+
+ private static Image[] _additionalMapIconImages;
+ public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_atlas.SplitHorizontal(4).ToArray();
+
+ private static Image[] _experienceOrbIconImages;
+ public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_atlas.SplitHorizontal(4).ToArray();
+
+ private static Image[] _explosionImages;
+ public static Image[] ExplosionImages => _explosionImages ??= Resources.explosions_atlas.SplitHorizontal(4).ToArray();
+
+ private static Image[] _paintingImages;
+ public static Image[] PaintingImages => _paintingImages ??= Resources.paintings_atlas.SplitHorizontal(16).ToArray();
+
+ private static Image[] _bannerImages;
+ public static Image[] BannerImages => _bannerImages ??= Resources.banners_atlas.SplitHorizontal(6).ToArray();
+
+ private static ImageList GetImageList(Image[] images)
{
- get
- {
- if (_itemImageList is null)
- {
- _itemImageList = new ImageList();
- _itemImageList.ColorDepth = ColorDepth.Depth32Bit;
- _itemImageList.Images.AddRange(ItemImages);
- }
- return _itemImageList;
- }
+ ImageList _imageList = new ImageList();
+ _imageList.ColorDepth = ColorDepth.Depth32Bit;
+ _imageList.Images.AddRange(images);
+
+ return _imageList;
}
- private static ImageList _blockImageList;
- public static ImageList BlockImageList
- {
- get
- {
- if (_blockImageList is null)
- {
- _blockImageList = new ImageList();
- _blockImageList.ColorDepth = ColorDepth.Depth32Bit;
- _blockImageList.Images.AddRange(BlockImages);
- }
- return _blockImageList;
- }
- }
+ private static ImageList _blockImageList = GetImageList(BlockImages);
+ public static ImageList BlockImageList { get { return _blockImageList; } }
+
+ private static ImageList _itemImageList = GetImageList(ItemImages);
+ public static ImageList ItemImageList { get { return _itemImageList; } }
+
+ private static ImageList _particleImageList = GetImageList(ParticleImages);
+ public static ImageList ParticleImageList { get { return _particleImageList; } }
+
+ private static ImageList _moonPhaseImageList = GetImageList(MoonPhaseImages);
+ public static ImageList MoonPhaseImageList { get { return _moonPhaseImageList; } }
+
+ private static ImageList _mapIconImageList = GetImageList(MapIconImages);
+ public static ImageList MapIconImageList { get { return _mapIconImageList; } }
+
+ private static ImageList _additionalMapIconImageList = GetImageList(AdditionalMapIconImages);
+ public static ImageList AdditionalMapIconImageList { get { return _additionalMapIconImageList; } }
+
+ private static ImageList _experienceOrbsImageList = GetImageList(ExperienceOrbImages);
+ public static ImageList ExperienceOrbImageList { get { return _experienceOrbsImageList; } }
+
+ private static ImageList _explosionImageList = GetImageList(ExplosionImages);
+ public static ImageList ExplosionImageList { get { return _explosionImageList; } }
+
+ private static ImageList _paintingImageList = GetImageList(PaintingImages);
+ public static ImageList PaintingImageList { get { return _paintingImageList; } }
+
+ private static ImageList _bannerImageList = GetImageList(BannerImages);
+ public static ImageList BannerImageList { get { return _bannerImageList; } }
}
}
diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs
index 62ea4c82..3680c6a1 100644
--- a/PCK-Studio/MainForm.Designer.cs
+++ b/PCK-Studio/MainForm.Designer.cs
@@ -87,9 +87,7 @@
this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.quickChangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.convertToBedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.addCustomPackImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openPckManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.convertMusicFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.wavBinkaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -174,12 +172,12 @@
this.renameFileToolStripMenuItem,
this.replaceToolStripMenuItem,
this.deleteFileToolStripMenuItem});
- this.contextMenuPCKEntries.Name = "contextMenuStrip1";
- resources.ApplyResources(this.contextMenuPCKEntries, "contextMenuPCKEntries");
- //
- // createToolStripMenuItem
- //
- this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.contextMenuPCKEntries.Name = "contextMenuStrip1";
+ resources.ApplyResources(this.contextMenuPCKEntries, "contextMenuPCKEntries");
+ //
+ // createToolStripMenuItem
+ //
+ this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.folderToolStripMenuItem,
this.skinToolStripMenuItem,
this.createAnimatedTextureToolStripMenuItem,
@@ -295,72 +293,72 @@
this.modelsFileBINToolStripMenuItem,
this.behavioursFileBINToolStripMenuItem,
this.entityMaterialsFileBINToolStripMenuItem});
- this.setFileTypeToolStripMenuItem.Name = "setFileTypeToolStripMenuItem";
- resources.ApplyResources(this.setFileTypeToolStripMenuItem, "setFileTypeToolStripMenuItem");
- //
- // skinToolStripMenuItem1
- //
- this.skinToolStripMenuItem1.Name = "skinToolStripMenuItem1";
- resources.ApplyResources(this.skinToolStripMenuItem1, "skinToolStripMenuItem1");
- //
- // capeToolStripMenuItem
- //
- this.capeToolStripMenuItem.Name = "capeToolStripMenuItem";
- resources.ApplyResources(this.capeToolStripMenuItem, "capeToolStripMenuItem");
- //
- // textureToolStripMenuItem
- //
- this.textureToolStripMenuItem.Name = "textureToolStripMenuItem";
- resources.ApplyResources(this.textureToolStripMenuItem, "textureToolStripMenuItem");
- //
- // languagesFileLOCToolStripMenuItem
- //
- this.languagesFileLOCToolStripMenuItem.Name = "languagesFileLOCToolStripMenuItem";
- resources.ApplyResources(this.languagesFileLOCToolStripMenuItem, "languagesFileLOCToolStripMenuItem");
- //
- // gameRulesFileGRFToolStripMenuItem
- //
- this.gameRulesFileGRFToolStripMenuItem.Name = "gameRulesFileGRFToolStripMenuItem";
- resources.ApplyResources(this.gameRulesFileGRFToolStripMenuItem, "gameRulesFileGRFToolStripMenuItem");
- //
- // audioPCKFileToolStripMenuItem
- //
- this.audioPCKFileToolStripMenuItem.Name = "audioPCKFileToolStripMenuItem";
- resources.ApplyResources(this.audioPCKFileToolStripMenuItem, "audioPCKFileToolStripMenuItem");
- //
- // coloursCOLFileToolStripMenuItem
- //
- this.coloursCOLFileToolStripMenuItem.Name = "coloursCOLFileToolStripMenuItem";
- resources.ApplyResources(this.coloursCOLFileToolStripMenuItem, "coloursCOLFileToolStripMenuItem");
- //
- // gameRulesHeaderGRHToolStripMenuItem
- //
- this.gameRulesHeaderGRHToolStripMenuItem.Name = "gameRulesHeaderGRHToolStripMenuItem";
- resources.ApplyResources(this.gameRulesHeaderGRHToolStripMenuItem, "gameRulesHeaderGRHToolStripMenuItem");
- //
- // skinsPCKToolStripMenuItem
- //
- this.skinsPCKToolStripMenuItem.Name = "skinsPCKToolStripMenuItem";
- resources.ApplyResources(this.skinsPCKToolStripMenuItem, "skinsPCKToolStripMenuItem");
- //
- // modelsFileBINToolStripMenuItem
- //
- this.modelsFileBINToolStripMenuItem.Name = "modelsFileBINToolStripMenuItem";
- resources.ApplyResources(this.modelsFileBINToolStripMenuItem, "modelsFileBINToolStripMenuItem");
- //
- // behavioursFileBINToolStripMenuItem
- //
- this.behavioursFileBINToolStripMenuItem.Name = "behavioursFileBINToolStripMenuItem";
- resources.ApplyResources(this.behavioursFileBINToolStripMenuItem, "behavioursFileBINToolStripMenuItem");
- //
- // entityMaterialsFileBINToolStripMenuItem
- //
- this.entityMaterialsFileBINToolStripMenuItem.Name = "entityMaterialsFileBINToolStripMenuItem";
- resources.ApplyResources(this.entityMaterialsFileBINToolStripMenuItem, "entityMaterialsFileBINToolStripMenuItem");
- //
- // miscFunctionsToolStripMenuItem
- //
- this.miscFunctionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.setFileTypeToolStripMenuItem.Name = "setFileTypeToolStripMenuItem";
+ resources.ApplyResources(this.setFileTypeToolStripMenuItem, "setFileTypeToolStripMenuItem");
+ //
+ // skinToolStripMenuItem1
+ //
+ this.skinToolStripMenuItem1.Name = "skinToolStripMenuItem1";
+ resources.ApplyResources(this.skinToolStripMenuItem1, "skinToolStripMenuItem1");
+ //
+ // capeToolStripMenuItem
+ //
+ this.capeToolStripMenuItem.Name = "capeToolStripMenuItem";
+ resources.ApplyResources(this.capeToolStripMenuItem, "capeToolStripMenuItem");
+ //
+ // textureToolStripMenuItem
+ //
+ this.textureToolStripMenuItem.Name = "textureToolStripMenuItem";
+ resources.ApplyResources(this.textureToolStripMenuItem, "textureToolStripMenuItem");
+ //
+ // languagesFileLOCToolStripMenuItem
+ //
+ this.languagesFileLOCToolStripMenuItem.Name = "languagesFileLOCToolStripMenuItem";
+ resources.ApplyResources(this.languagesFileLOCToolStripMenuItem, "languagesFileLOCToolStripMenuItem");
+ //
+ // gameRulesFileGRFToolStripMenuItem
+ //
+ this.gameRulesFileGRFToolStripMenuItem.Name = "gameRulesFileGRFToolStripMenuItem";
+ resources.ApplyResources(this.gameRulesFileGRFToolStripMenuItem, "gameRulesFileGRFToolStripMenuItem");
+ //
+ // audioPCKFileToolStripMenuItem
+ //
+ this.audioPCKFileToolStripMenuItem.Name = "audioPCKFileToolStripMenuItem";
+ resources.ApplyResources(this.audioPCKFileToolStripMenuItem, "audioPCKFileToolStripMenuItem");
+ //
+ // coloursCOLFileToolStripMenuItem
+ //
+ this.coloursCOLFileToolStripMenuItem.Name = "coloursCOLFileToolStripMenuItem";
+ resources.ApplyResources(this.coloursCOLFileToolStripMenuItem, "coloursCOLFileToolStripMenuItem");
+ //
+ // gameRulesHeaderGRHToolStripMenuItem
+ //
+ this.gameRulesHeaderGRHToolStripMenuItem.Name = "gameRulesHeaderGRHToolStripMenuItem";
+ resources.ApplyResources(this.gameRulesHeaderGRHToolStripMenuItem, "gameRulesHeaderGRHToolStripMenuItem");
+ //
+ // skinsPCKToolStripMenuItem
+ //
+ this.skinsPCKToolStripMenuItem.Name = "skinsPCKToolStripMenuItem";
+ resources.ApplyResources(this.skinsPCKToolStripMenuItem, "skinsPCKToolStripMenuItem");
+ //
+ // modelsFileBINToolStripMenuItem
+ //
+ this.modelsFileBINToolStripMenuItem.Name = "modelsFileBINToolStripMenuItem";
+ resources.ApplyResources(this.modelsFileBINToolStripMenuItem, "modelsFileBINToolStripMenuItem");
+ //
+ // behavioursFileBINToolStripMenuItem
+ //
+ this.behavioursFileBINToolStripMenuItem.Name = "behavioursFileBINToolStripMenuItem";
+ resources.ApplyResources(this.behavioursFileBINToolStripMenuItem, "behavioursFileBINToolStripMenuItem");
+ //
+ // entityMaterialsFileBINToolStripMenuItem
+ //
+ this.entityMaterialsFileBINToolStripMenuItem.Name = "entityMaterialsFileBINToolStripMenuItem";
+ resources.ApplyResources(this.entityMaterialsFileBINToolStripMenuItem, "entityMaterialsFileBINToolStripMenuItem");
+ //
+ // miscFunctionsToolStripMenuItem
+ //
+ this.miscFunctionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.generateMipMapTextureToolStripMenuItem1,
this.viewFileInfoToolStripMenuItem,
this.correctSkinDecimalsToolStripMenuItem});
@@ -441,42 +439,42 @@
this.skinPackToolStripMenuItem,
this.texturePackToolStripMenuItem,
this.mashUpPackToolStripMenuItem});
- resources.ApplyResources(this.newToolStripMenuItem, "newToolStripMenuItem");
- this.newToolStripMenuItem.Name = "newToolStripMenuItem";
- //
- // skinPackToolStripMenuItem
- //
- this.skinPackToolStripMenuItem.Name = "skinPackToolStripMenuItem";
- resources.ApplyResources(this.skinPackToolStripMenuItem, "skinPackToolStripMenuItem");
- this.skinPackToolStripMenuItem.Click += new System.EventHandler(this.skinPackToolStripMenuItem_Click);
- //
- // texturePackToolStripMenuItem
- //
- this.texturePackToolStripMenuItem.Name = "texturePackToolStripMenuItem";
- resources.ApplyResources(this.texturePackToolStripMenuItem, "texturePackToolStripMenuItem");
- this.texturePackToolStripMenuItem.Click += new System.EventHandler(this.texturePackToolStripMenuItem_Click);
- //
- // mashUpPackToolStripMenuItem
- //
- this.mashUpPackToolStripMenuItem.Name = "mashUpPackToolStripMenuItem";
- resources.ApplyResources(this.mashUpPackToolStripMenuItem, "mashUpPackToolStripMenuItem");
- this.mashUpPackToolStripMenuItem.Click += new System.EventHandler(this.mashUpPackToolStripMenuItem_Click);
- //
- // openToolStripMenuItem
- //
- resources.ApplyResources(this.openToolStripMenuItem, "openToolStripMenuItem");
- this.openToolStripMenuItem.Name = "openToolStripMenuItem";
- this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
- //
- // extractToolStripMenuItem1
- //
- resources.ApplyResources(this.extractToolStripMenuItem1, "extractToolStripMenuItem1");
- this.extractToolStripMenuItem1.Name = "extractToolStripMenuItem1";
- this.extractToolStripMenuItem1.Click += new System.EventHandler(this.extractToolStripMenuItem1_Click);
- //
- // packSettingsToolStripMenuItem
- //
- this.packSettingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ resources.ApplyResources(this.newToolStripMenuItem, "newToolStripMenuItem");
+ this.newToolStripMenuItem.Name = "newToolStripMenuItem";
+ //
+ // skinPackToolStripMenuItem
+ //
+ this.skinPackToolStripMenuItem.Name = "skinPackToolStripMenuItem";
+ resources.ApplyResources(this.skinPackToolStripMenuItem, "skinPackToolStripMenuItem");
+ this.skinPackToolStripMenuItem.Click += new System.EventHandler(this.skinPackToolStripMenuItem_Click);
+ //
+ // texturePackToolStripMenuItem
+ //
+ this.texturePackToolStripMenuItem.Name = "texturePackToolStripMenuItem";
+ resources.ApplyResources(this.texturePackToolStripMenuItem, "texturePackToolStripMenuItem");
+ this.texturePackToolStripMenuItem.Click += new System.EventHandler(this.texturePackToolStripMenuItem_Click);
+ //
+ // mashUpPackToolStripMenuItem
+ //
+ this.mashUpPackToolStripMenuItem.Name = "mashUpPackToolStripMenuItem";
+ resources.ApplyResources(this.mashUpPackToolStripMenuItem, "mashUpPackToolStripMenuItem");
+ this.mashUpPackToolStripMenuItem.Click += new System.EventHandler(this.mashUpPackToolStripMenuItem_Click);
+ //
+ // openToolStripMenuItem
+ //
+ resources.ApplyResources(this.openToolStripMenuItem, "openToolStripMenuItem");
+ this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+ this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
+ //
+ // extractToolStripMenuItem1
+ //
+ resources.ApplyResources(this.extractToolStripMenuItem1, "extractToolStripMenuItem1");
+ this.extractToolStripMenuItem1.Name = "extractToolStripMenuItem1";
+ this.extractToolStripMenuItem1.Click += new System.EventHandler(this.extractToolStripMenuItem1_Click);
+ //
+ // packSettingsToolStripMenuItem
+ //
+ this.packSettingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fullBoxSupportToolStripMenuItem});
this.packSettingsToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ranch;
this.packSettingsToolStripMenuItem.Name = "packSettingsToolStripMenuItem";
@@ -516,8 +514,7 @@
// editToolStripMenuItem
//
this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.quickChangeToolStripMenuItem,
- this.convertToBedrockToolStripMenuItem});
+ this.quickChangeToolStripMenuItem});
this.editToolStripMenuItem.ForeColor = System.Drawing.Color.Silver;
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem");
@@ -528,57 +525,44 @@
this.quickChangeToolStripMenuItem.Name = "quickChangeToolStripMenuItem";
this.quickChangeToolStripMenuItem.Click += new System.EventHandler(this.quickChangeToolStripMenuItem_Click);
//
- // convertToBedrockToolStripMenuItem
- //
- resources.ApplyResources(this.convertToBedrockToolStripMenuItem, "convertToBedrockToolStripMenuItem");
- this.convertToBedrockToolStripMenuItem.Name = "convertToBedrockToolStripMenuItem";
- this.convertToBedrockToolStripMenuItem.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click);
- //
// miscToolStripMenuItem
//
this.miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.addCustomPackImageToolStripMenuItem,
this.openPckManagerToolStripMenuItem,
this.convertMusicFilesToolStripMenuItem});
- this.miscToolStripMenuItem.ForeColor = System.Drawing.Color.Silver;
- this.miscToolStripMenuItem.Name = "miscToolStripMenuItem";
- resources.ApplyResources(this.miscToolStripMenuItem, "miscToolStripMenuItem");
- //
- // addCustomPackImageToolStripMenuItem
- //
- this.addCustomPackImageToolStripMenuItem.Name = "addCustomPackImageToolStripMenuItem";
- resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem");
- this.addCustomPackImageToolStripMenuItem.Click += new System.EventHandler(this.addCustomPackIconToolStripMenuItem_Click);
- //
- // openPckManagerToolStripMenuItem
- //
- this.openPckManagerToolStripMenuItem.Name = "openPckManagerToolStripMenuItem";
- resources.ApplyResources(this.openPckManagerToolStripMenuItem, "openPckManagerToolStripMenuItem");
- this.openPckManagerToolStripMenuItem.Click += new System.EventHandler(this.openPckManagerToolStripMenuItem_Click);
- //
- // convertMusicFilesToolStripMenuItem
- //
- this.convertMusicFilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.miscToolStripMenuItem.ForeColor = System.Drawing.Color.Silver;
+ this.miscToolStripMenuItem.Name = "miscToolStripMenuItem";
+ resources.ApplyResources(this.miscToolStripMenuItem, "miscToolStripMenuItem");
+ //
+ // openPckManagerToolStripMenuItem
+ //
+ this.openPckManagerToolStripMenuItem.Name = "openPckManagerToolStripMenuItem";
+ resources.ApplyResources(this.openPckManagerToolStripMenuItem, "openPckManagerToolStripMenuItem");
+ this.openPckManagerToolStripMenuItem.Click += new System.EventHandler(this.openPckManagerToolStripMenuItem_Click);
+ //
+ // convertMusicFilesToolStripMenuItem
+ //
+ this.convertMusicFilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.wavBinkaToolStripMenuItem,
this.binkaWavToolStripMenuItem});
- this.convertMusicFilesToolStripMenuItem.Name = "convertMusicFilesToolStripMenuItem";
- resources.ApplyResources(this.convertMusicFilesToolStripMenuItem, "convertMusicFilesToolStripMenuItem");
- //
- // wavBinkaToolStripMenuItem
- //
- this.wavBinkaToolStripMenuItem.Name = "wavBinkaToolStripMenuItem";
- resources.ApplyResources(this.wavBinkaToolStripMenuItem, "wavBinkaToolStripMenuItem");
- this.wavBinkaToolStripMenuItem.Click += new System.EventHandler(this.wavBinkaToolStripMenuItem_Click);
- //
- // binkaWavToolStripMenuItem
- //
- this.binkaWavToolStripMenuItem.Name = "binkaWavToolStripMenuItem";
- resources.ApplyResources(this.binkaWavToolStripMenuItem, "binkaWavToolStripMenuItem");
- this.binkaWavToolStripMenuItem.Click += new System.EventHandler(this.binkaWavToolStripMenuItem_Click);
- //
- // storeToolStripMenuItem
- //
- this.storeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.convertMusicFilesToolStripMenuItem.Name = "convertMusicFilesToolStripMenuItem";
+ resources.ApplyResources(this.convertMusicFilesToolStripMenuItem, "convertMusicFilesToolStripMenuItem");
+ //
+ // wavBinkaToolStripMenuItem
+ //
+ this.wavBinkaToolStripMenuItem.Name = "wavBinkaToolStripMenuItem";
+ resources.ApplyResources(this.wavBinkaToolStripMenuItem, "wavBinkaToolStripMenuItem");
+ this.wavBinkaToolStripMenuItem.Click += new System.EventHandler(this.wavBinkaToolStripMenuItem_Click);
+ //
+ // binkaWavToolStripMenuItem
+ //
+ this.binkaWavToolStripMenuItem.Name = "binkaWavToolStripMenuItem";
+ resources.ApplyResources(this.binkaWavToolStripMenuItem, "binkaWavToolStripMenuItem");
+ this.binkaWavToolStripMenuItem.Click += new System.EventHandler(this.binkaWavToolStripMenuItem_Click);
+ //
+ // storeToolStripMenuItem
+ //
+ this.storeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.openPckCenterToolStripMenuItem,
this.joinDevelopmentDiscordToolStripMenuItem,
this.trelloBoardToolStripMenuItem});
@@ -875,7 +859,6 @@
private System.Windows.Forms.ToolStripMenuItem folderToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem skinToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem createAnimatedTextureToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem convertToBedrockToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem storeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem openPckCenterToolStripMenuItem;
private PckStudio.Controls.CustomTabControl tabControl;
@@ -923,7 +906,6 @@
private System.Windows.Forms.ToolStripMenuItem viewFileInfoToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem correctSkinDecimalsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem miscToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem addCustomPackImageToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem CreateSkinsPCKToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem editAllEntriesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem addFileToolStripMenuItem;
diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs
index cd33f1c3..f872ddd5 100644
--- a/PCK-Studio/MainForm.cs
+++ b/PCK-Studio/MainForm.cs
@@ -153,8 +153,8 @@ namespace PckStudio
var pack = new PckFile(3);
var zeroFile = pack.CreateNewFile("0", PckFileType.InfoFile);
- zeroFile.Properties.Add("PACKID", packId.ToString());
- zeroFile.Properties.Add("PACKVERSION", packVersion.ToString());
+ zeroFile.AddProperty("PACKID", packId);
+ zeroFile.AddProperty("PACKVERSION", packVersion);
var locFile = new LOCFile();
locFile.InitializeDefault(packName);
@@ -181,8 +181,8 @@ namespace PckStudio
var texturepackInfo = pack.CreateNewFile($"{res}/{res}Info.pck", PckFileType.TexturePackInfoFile);
- texturepackInfo.Properties.Add("PACKID", "0");
- texturepackInfo.Properties.Add("DATAPATH", $"{res}Data.pck");
+ texturepackInfo.AddProperty("PACKID", "0");
+ texturepackInfo.AddProperty("DATAPATH", $"{res}Data.pck");
texturepackInfo.SetData(new PckFileWriter(infoPCK, LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian));
@@ -346,7 +346,7 @@ namespace PckStudio
//attempts to generate reimportable metadata file out of minefiles metadata
string metaData = "";
- foreach (var entry in file.Properties)
+ foreach (var entry in file.GetProperties())
{
metaData += $"{entry.Key}: {entry.Value}{Environment.NewLine}";
}
@@ -393,11 +393,6 @@ namespace PckStudio
//System.Diagnostics.Process.Start(hosturl + "pckStudio#faq");
}
- private void convertToBedrockToolStripMenuItem_Click(object sender, EventArgs e)
- {
- MessageBox.Show("This feature is currently being reworked.", "Currently unavailable", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
-
private void openPckCenterToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("This feature is currently being reworked.", "Currently unavailable", MessageBoxButtons.OK, MessageBoxIcon.Information);
@@ -522,91 +517,6 @@ namespace PckStudio
}
}
- private void addCustomPackIconToolStripMenuItem_Click(object sender, EventArgs e)
- {
- string packID = "0";
-
- using NumericPrompt numericPrompt = new NumericPrompt(0);
- numericPrompt.Minimum = 0; // TODO: put min pack ID value (keeping this 0 just to be safe)
- numericPrompt.Maximum = int.MinValue; // TODO: put max pack ID value
- numericPrompt.ContextLabel.Text = "Please insert the desired Pack ID";
- numericPrompt.TextLabel.Text = "Pack ID";
-
- if (TryGetEditor(out var editor))
- {
- DialogResult prompt = MessageBox.Show(this,
- "Would you like to use the current PackID? You can enter any PackID if not.",
- "",
- MessageBoxButtons.YesNoCancel);
-
- switch (prompt)
- {
- case DialogResult.Yes:
- if (!editor.Value.TryGetFile("0", PckFileType.InfoFile, out PckFileData file) ||
- string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID")))
- {
- MessageBox.Show(this,
- "No PackID is present in this PCK. " +
- "To avoid this error, ensure that the PCK has a proper PackID property on the \"0\" Info file before trying again.",
- "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return;
- }
-
- packID = file.Properties.GetPropertyValue("PACKID");
- break;
- case DialogResult.No:
- break;
- case DialogResult.Cancel:
- default:
- MessageBox.Show(this, "Operation cancelled");
- return;
- }
- }
- else if (numericPrompt.ShowDialog(this) == DialogResult.OK) packID = numericPrompt.SelectedValue.ToString();
- else
- {
- MessageBox.Show(this, "Operation cancelled");
- return;
- }
-
- OpenFileDialog fileDialog = new OpenFileDialog();
- fileDialog.Filter = "Minecraft Archive|*.arc";
- if (fileDialog.ShowDialog(this) == DialogResult.OK)
- {
- var reader = new ARCFileReader();
- ConsoleArchive archive = reader.FromFile(fileDialog.FileName);
-
- fileDialog.Filter = "Pack Icon|*.png";
- if (fileDialog.ShowDialog(this) == DialogResult.OK)
- {
- string key = string.Format("Graphics\\PackGraphics\\{0}.png", packID);
-
- if (archive.Keys.Contains(key))
- {
- DialogResult prompt = MessageBox.Show(this,
- "This pack already has a pack icon present in the chosen file. Would you like to replace the pack icon?",
- "Icon already exists",
- MessageBoxButtons.YesNoCancel);
- switch (prompt)
- {
- case DialogResult.Yes:
- archive.Remove(key); // remove file so it can be injected
- break;
- case DialogResult.No:
- case DialogResult.Cancel:
- default:
- Trace.WriteLine("Operation cancelled", category: nameof(addCustomPackIconToolStripMenuItem_Click));
- return;
- }
- }
- archive.Add(key, File.ReadAllBytes(fileDialog.FileName));
- var writer = new ARCFileWriter(archive);
- writer.WriteToFile(fileDialog.FileName);
- MessageBox.Show($"Successfully added {key} to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- }
- }
-
private void trelloBoardToolStripMenuItem_Click(object sender, EventArgs e)
{
Process.Start("https://trello.com/b/0XLNOEbe/pck-studio");
diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx
index 080cb5bd..03099370 100644
--- a/PCK-Studio/MainForm.resx
+++ b/PCK-Studio/MainForm.resx
@@ -247,7 +247,7 @@
- 180, 22
+ 157, 22
Create
@@ -314,7 +314,7 @@
- 180, 22
+ 157, 22
Import
@@ -326,7 +326,7 @@
Export as 3DS Texture
- 180, 22
+ 157, 22
Export
@@ -404,7 +404,7 @@
Entity Materials File (.BIN)
- 180, 22
+ 157, 22
Set File Type
@@ -428,19 +428,19 @@
Correct Skin Decimals
- 180, 22
+ 157, 22
Misc. Functions
- 180, 22
+ 157, 22
Move Up
- 180, 22
+ 157, 22
Move Down
@@ -455,13 +455,13 @@
- 180, 22
+ 157, 22
Extract
- 180, 22
+ 157, 22
Clone
@@ -474,7 +474,7 @@
- 180, 22
+ 157, 22
Rename
@@ -490,7 +490,7 @@
- 180, 22
+ 157, 22
Replace
@@ -505,13 +505,13 @@
- 180, 22
+ 157, 22
Delete
- 181, 290
+ 158, 268
contextMenuPCKEntries
@@ -686,46 +686,14 @@
Quick Change
-
- False
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAAJeSURBVDhPhVFp
- TxNRFH1/RbGdlsQElaWzdaQgbadFtnkznWlLCm2Q2UCxTqdFFAzTRONSYheIoCjRpmoErBiKW/hi4q+q
- bxpoSPzgyfnw7r3nvHvveyD92W/UQ5l9Vt6h5B1S2/Wntnr1977lHxDltVr/7FtaqTLJbc/YU+f8x0GQ
- rgfmPgw9aoj390dX6uMSgWlVMvkGT7zqLR5PF34lzL3w9HZXunZNfuedr/nAw+9RnnZt/dHl1+SN2lWO
- cS3sDsVxbOEgsPwTFo9Tz38nRdIRK15MvvRIlBtIFKboSoTGRMp5e4+VaEeEdoi0Y2r7kkBjyqcBjsEW
- x3s4xomUWUiAkhoweLqiBRurEFLujVl/lvfkICESFyK0M0qc1xU5KxAlOSzQbtuQm+iWiHMVjd2Q++9A
- b0X3C2SHSHYIpNPgGZMnRbIzLeBZrs8QmH1rEuw+iEVo1xLfl+O6nqzcvQd7MpDay6cQm2fwTBnO8sQL
- xQcaFq+GLm/eGtm8OfY4N2NN+VBhbWawmhmzhQDYbDatSSafGECDgC/WFFLUrdTBanRNGUbLoDADiTVt
- 5KwBJQvaaFG9Dspq0Ji4YghEWQtlJvCCHLJ1bZwa2rANJZ2VvO5FAUdEh1a6pfuXJ4a5EdTxWz6GaPL4
- fw0hkydysK+khdFUh5ZkG9o41bUBDA6HjGsd7Qo9ZR0tzR5ZcdRwietu1U8M6NKv+XjDioIM5ylqYfRB
- izwRoZwmpCoqW9KDJjwzW7N5aMXLGoveEBRV1uQ9EarzKB/LQlyiXOj/JS+GmtiGU6BwXQ2sa8G/5oRp
- fQPDL0EAAAAASUVORK5CYII=
-
-
-
- 192, 22
-
-
- Convert to Bedrock
-
39, 20
Edit
-
- 195, 22
-
-
- Add Custom Pack Icon
-
- 195, 22
+ 180, 22
Pck Manager
@@ -743,7 +711,7 @@
Binka -> Wav
- 195, 22
+ 180, 22
Audio Converter
@@ -25404,24 +25372,12 @@
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- convertToBedrockToolStripMenuItem
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
miscToolStripMenuItem
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- addCustomPackImageToolStripMenuItem
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
openPckManagerToolStripMenuItem
diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj
index 49712e51..97d3659e 100644
--- a/PCK-Studio/PckStudio.csproj
+++ b/PCK-Studio/PckStudio.csproj
@@ -4,7 +4,7 @@
preview
true
- NDEBUG
+ NDEBUG
publish\
true
Disk
@@ -133,12 +133,18 @@
+
+
+ True
+ True
+ Resources.resx
+
Component
@@ -470,6 +476,7 @@
AddEntry.cs
+ Designer
AddLanguage.cs
@@ -545,6 +552,7 @@
AddParameter.cs
+ Designer
InProgressPrompt.cs
@@ -625,11 +633,6 @@
SettingsSingleFileGenerator
Settings.Designer.cs
-
- True
- True
- Resources.resx
-
True
Settings.settings
@@ -640,7 +643,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -656,16 +668,13 @@
-
-
-
@@ -691,7 +700,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs
index 88909123..f5d3c9f8 100644
--- a/PCK-Studio/Properties/Resources.Designer.cs
+++ b/PCK-Studio/Properties/Resources.Designer.cs
@@ -70,6 +70,16 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap additional_map_icons_atlas {
+ get {
+ object obj = ResourceManager.GetObject("additional_map_icons_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -90,6 +100,53 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "banners": [
+ /// {
+ /// "internalName": "base",
+ /// "displayName": "Base"
+ /// },
+ /// {
+ /// "internalName": "border",
+ /// "displayName": "Bordure"
+ /// },
+ /// {
+ /// "internalName": "bricks",
+ /// "displayName": "Field Masoned"
+ /// },
+ /// {
+ /// "internalName": "circle",
+ /// "displayName": "Roundel"
+ /// },
+ /// {
+ /// "internalName": "creeper",
+ /// "displayName": "Creeper Charge"
+ /// },
+ /// {
+ /// "internalName": "cross",
+ /// "displayName": "Saltire"
+ /// },
+ /// {
+ /// "internalName": "curly_bo [rest of string was truncated]";.
+ ///
+ public static string bannerData {
+ get {
+ return ResourceManager.GetString("bannerData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap banners_atlas {
+ get {
+ object obj = ResourceManager.GetObject("banners_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -140,6 +197,38 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "Tile data research by MattNL",
+ /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)",
+ /// "blocks": [
+ /// {
+ /// "internalName": "grass_top",
+ /// "displayName": "Grass Block (Top)",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "Grass_Common",
+ /// "variants": [
+ /// "Grass_Common",
+ /// "Grass_Mesa",
+ /// "Grass_Swamp1",
+ /// "Grass_Swamp2"
+ /// ]
+ /// }
+ /// },
+ /// {
+ /// "internalName": "stone",
+ /// "displayName": "Stone"
+ /// },
+ /// {
+ /// "internalName": [rest of string was truncated]";.
+ ///
+ public static string blockData {
+ get {
+ return ResourceManager.GetString("blockData", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -235,9 +324,9 @@ namespace PckStudio.Properties {
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
- public static System.Drawing.Bitmap entities_sheet {
+ public static System.Drawing.Bitmap entities_atlas {
get {
- object obj = ResourceManager.GetObject("entities_sheet", resourceCulture);
+ object obj = ResourceManager.GetObject("entities_atlas", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -284,6 +373,87 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap experience_orbs_atlas {
+ get {
+ object obj = ResourceManager.GetObject("experience_orbs_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "experience_orbs": [
+ /// {
+ /// "internalName": "experience_orb_0",
+ /// "displayName": "Experience Orb (Size 1)",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "experience_orb",
+ /// "variants": ["experience_orb"]
+ /// }
+ /// },
+ /// {
+ /// "internalName": "experience_orb_1",
+ /// "displayName": "Experience Orb (Size 2)",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "experience_orb",
+ /// "variants": ["experience_orb"]
+ /// }
+ /// },
+ /// [rest of string was truncated]";.
+ ///
+ public static string experienceOrbData {
+ get {
+ return ResourceManager.GetString("experienceOrbData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "explosions": [
+ /// {
+ /// "internalName": "explosion_0",
+ /// "displayName": "Explosion (Stage 1)",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "Particle_Explode",
+ /// "variants": [
+ /// "Particle_Explode",
+ /// "Particle_HugeExplosion"
+ /// ]
+ /// }
+ /// },
+ /// {
+ /// "internalName": "explosion_1",
+ /// "displayName": "Explosion (Stage 2)",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "Particle_Explode",
+ /// "variants": [
+ /// [rest of string was truncated]";.
+ ///
+ public static string explosionData {
+ get {
+ return ResourceManager.GetString("explosionData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap explosions_atlas {
+ get {
+ object obj = ResourceManager.GetObject("explosions_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -384,12 +554,40 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "Tile data research by MattNL",
+ /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)",
+ /// "items": [
+ /// {
+ /// "internalName": "helmetCloth",
+ /// "displayName": "Leather Cap",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "hasCustomColour": true,
+ /// "defaultName": "Armour_Default_Leather_Colour",
+ /// "variants": [ "Armour_Default_Leather_Colour" ]
+ /// }
+ /// },
+ /// {
+ /// "internalName": "helmetChain",
+ /// "displayName": "Chain Helmet"
+ /// },
+ /// {
+ /// "internalName": "he [rest of string was truncated]";.
+ ///
+ public static string itemData {
+ get {
+ return ResourceManager.GetString("itemData", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
- public static System.Drawing.Bitmap items_sheet {
+ public static System.Drawing.Bitmap items_atlas {
get {
- object obj = ResourceManager.GetObject("items_sheet", resourceCulture);
+ object obj = ResourceManager.GetObject("items_atlas", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -404,6 +602,53 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap map_icons_atlas {
+ get {
+ object obj = ResourceManager.GetObject("map_icons_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "map_icons": [
+ /// {
+ /// "internalName": "player_1",
+ /// "displayName": "Player 1"
+ /// },
+ /// {
+ /// "internalName": "player_2",
+ /// "displayName": "Player 2"
+ /// },
+ /// {
+ /// "internalName": "player_3",
+ /// "displayName": "Player 3"
+ /// },
+ /// {
+ /// "internalName": "player_4",
+ /// "displayName": "Player 4"
+ /// },
+ /// {
+ /// "internalName": "target_x",
+ /// "displayName": "Unused"
+ /// },
+ /// {
+ /// "internalName": "target_point",
+ /// "displayName": "Target Point (Unused)"
+ /// },
+ /// {
+ /// [rest of string was truncated]";.
+ ///
+ public static string mapIconData {
+ get {
+ return ResourceManager.GetString("mapIconData", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -414,6 +659,50 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap moon_phases_atlas {
+ get {
+ object obj = ResourceManager.GetObject("moon_phases_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "moon_phases": [
+ /// {
+ /// "internalName": "moon_phase_0",
+ /// "displayName": "Full Moon"
+ /// },
+ /// {
+ /// "internalName": "moon_phase_1",
+ /// "displayName": "Waning Gibbous"
+ /// },
+ /// {
+ /// "internalName": "moon_phase_2",
+ /// "displayName": "Last Quarter"
+ /// },
+ /// {
+ /// "internalName": "moon_phase_3",
+ /// "displayName": "Waning Crescent"
+ /// },
+ /// {
+ /// "internalName": "moon_phase_4",
+ /// "displayName": "New Moon"
+ /// },
+ /// {
+ /// "internalName": "moon_phase_5",
+ /// "displayNa [rest of string was truncated]";.
+ ///
+ public static string moonPhaseData {
+ get {
+ return ResourceManager.GetString("moonPhaseData", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.Byte[].
///
@@ -454,6 +743,87 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "paintings": [
+ /// {
+ /// "internalName": "Kebab",
+ /// "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand"
+ /// },
+ /// {
+ /// "internalName": "Aztec",
+ /// "displayName": "\"de_aztec\" by Kristoffer Zetterstrand"
+ /// },
+ /// {
+ /// "internalName": "Alban",
+ /// "displayName": "\"Albanian\" by Kristoffer Zetterstrand"
+ /// },
+ /// {
+ /// "internalName": "Aztec2",
+ /// "displayName": "\"de_aztec\" by Kristoffer Zetterstrand"
+ /// },
+ /// {
+ /// "internalName": "Bomb",
+ /// "di [rest of string was truncated]";.
+ ///
+ public static string paintingData {
+ get {
+ return ResourceManager.GetString("paintingData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap paintings_atlas {
+ get {
+ object obj = ResourceManager.GetObject("paintings_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT_1": "JSON by MattNL",
+ /// "particles": [
+ /// {
+ /// "internalName": "generic_0",
+ /// "displayName": "Generic (Stage 1)",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "None",
+ /// "variants": [
+ /// "None",
+ /// "Particle_Smoke",
+ /// "Particle_NetherPortal",
+ /// "Particle_EnderPortal",
+ /// "Particle_Ender",
+ /// "Particle_DragonBreathMin",
+ /// "Particle_DragonBreathMax"
+ /// ]
+ /// }
+ /// },
+ /// {
+ /// "internalName": "generic_1",
+ /// "displayName": "Generic (Stage 2)", [rest of string was truncated]";.
+ ///
+ public static string particleData {
+ get {
+ return ResourceManager.GetString("particleData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap particles_atlas {
+ get {
+ object obj = ResourceManager.GetObject("particles_atlas", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -587,9 +957,9 @@ namespace PckStudio.Properties {
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
- public static System.Drawing.Bitmap terrain_sheet {
+ public static System.Drawing.Bitmap terrain_atlas {
get {
- object obj = ResourceManager.GetObject("terrain_sheet", resourceCulture);
+ object obj = ResourceManager.GetObject("terrain_atlas", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -614,40 +984,6 @@ namespace PckStudio.Properties {
}
}
- ///
- /// Looks up a localized string similar to {
- /// "COMMENT_1": "Tile data research by MattNL",
- /// "COMMENT_2": "JSON conversion by PhoenixARC",
- /// "blocks": [
- /// {
- /// "internalName": "grass_top",
- /// "displayName": "Grass Block (Top)"
- /// },
- /// {
- /// "internalName": "stone",
- /// "displayName": "Stone"
- /// },
- /// {
- /// "internalName": "dirt",
- /// "displayName": "Dirt"
- /// },
- /// {
- /// "internalName": "grass_side",
- /// "displayName": "Grass Block (Side)"
- /// },
- /// {
- /// "internalName": "planks_oak",
- /// "displayName": "Oak Planks"
- /// },
- /// {
- /// "internalName": [rest of string was truncated]";.
- ///
- public static string tileData {
- get {
- return ResourceManager.GetString("tileData", resourceCulture);
- }
- }
-
///
/// Looks up a localized resource of type System.Byte[].
///
diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx
index 58f5451c..52fb4d8c 100644
--- a/PCK-Studio/Properties/Resources.resx
+++ b/PCK-Studio/Properties/Resources.resx
@@ -172,9 +172,6 @@
..\Resources\iconImageList\GRH ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
-
..\Resources\pckClosed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -226,8 +223,8 @@
..\Resources\iconImageList\INFO ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\atlases\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\fileTemplates\tu53colours.col;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -235,8 +232,8 @@
..\Resources\icons\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\atlases\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\..\CHANGELOG.md;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
@@ -280,11 +277,11 @@
..\Resources\iconImageList\blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\atlases\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Resources\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+ ..\Resources\atlases\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
..\Resources\icons\file_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -328,4 +325,55 @@
..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\additional_mapicons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\blockData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\experienceOrbData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\itemData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\mapIconData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\moonPhaseData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\particleData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\bannerData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\banners.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\paintingData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\Resources\atlases\paintings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/PCK-Studio/Resources/atlases/additional_mapicons.png b/PCK-Studio/Resources/atlases/additional_mapicons.png
new file mode 100644
index 00000000..11b7256a
Binary files /dev/null and b/PCK-Studio/Resources/atlases/additional_mapicons.png differ
diff --git a/PCK-Studio/Resources/atlases/bannerData.json b/PCK-Studio/Resources/atlases/bannerData.json
new file mode 100644
index 00000000..88c3685f
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/bannerData.json
@@ -0,0 +1,1053 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "base",
+ "displayName": "Base",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "border",
+ "displayName": "Bordure",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "bricks",
+ "displayName": "Field Masoned",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "circle",
+ "displayName": "Roundel",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "creeper",
+ "displayName": "Creeper Charge",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "cross",
+ "displayName": "Saltire",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "curly_border",
+ "displayName": "Bordure Indented",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "diagonal_left",
+ "displayName": "Per Bend Sinister",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "diagonal_right",
+ "displayName": "Per Bend",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "diagonal_up_left",
+ "displayName": "Per Bend Inverted",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "diagonal_up_right",
+ "displayName": "Per Bend Sinister Inverted",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "flower",
+ "displayName": "Flower Charge",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "gradient",
+ "displayName": "Gradient",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "gradient_up",
+ "displayName": "Base Gradient",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "half_horizontal",
+ "displayName": "Per Fess",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "half_horizontal_bottom",
+ "displayName": "Per Fess Inverted",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "half_vertical",
+ "displayName": "Per Pale",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "half_vertical_right",
+ "displayName": "Per Pale Inverted",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "mojang",
+ "displayName": "Thing",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "rhombus",
+ "displayName": "Lozenge",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "skull",
+ "displayName": "Skull Charge",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "small_stripes",
+ "displayName": "Paly",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "square_bottom_left",
+ "displayName": "Base Dexter Canton",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "square_bottom_right",
+ "displayName": "Base Sinister Canton",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "square_top_left",
+ "displayName": "Chief Dexter Canton",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "square_top_right",
+ "displayName": "Chief Sinister Canton",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "straight_cross",
+ "displayName": "Cross",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_bottom",
+ "displayName": "Base Fess",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_center",
+ "displayName": "Pale",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "strip_downleft",
+ "displayName": "Bend Sinister",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_downright",
+ "displayName": "Bend",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_left",
+ "displayName": "Pale Dexter",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_middle",
+ "displayName": "Fess",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_right",
+ "displayName": "Pale Sinister",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "stripe_top",
+ "displayName": "Chief Fess",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "triangle_bottom",
+ "displayName": "Chevron",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "triangle_top",
+ "displayName": "Inverted Chevron",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "triangles_bottom",
+ "displayName": "Base Indented",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "triangles_top",
+ "displayName": "Chief Indented",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "mask",
+ "displayName": "Mask"
+ },
+ {
+ "internalName": "illager",
+ "displayName": "Ominous Banner [PS4 ONLY]"
+ },
+ {
+ "internalName": "globe",
+ "displayName": "Globe [PS4 ONLY]",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Banner_White",
+ "variants": [
+ "Banner_Black",
+ "Banner_Blue",
+ "Banner_Brown",
+ "Banner_Cyan",
+ "Banner_Gray",
+ "Banner_Green",
+ "Banner_Light_Blue",
+ "Banner_Lime",
+ "Banner_Magenta",
+ "Banner_Orange",
+ "Banner_Pink",
+ "Banner_Purple",
+ "Banner_Red",
+ "Banner_Silver",
+ "Banner_White",
+ "Banner_Yellow"
+ ]
+ }
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/atlases/banners.png b/PCK-Studio/Resources/atlases/banners.png
new file mode 100644
index 00000000..952a0eff
Binary files /dev/null and b/PCK-Studio/Resources/atlases/banners.png differ
diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/atlases/blockData.json
similarity index 69%
rename from PCK-Studio/Resources/tileData.json
rename to PCK-Studio/Resources/atlases/blockData.json
index 221d62de..c2cb1b8f 100644
--- a/PCK-Studio/Resources/tileData.json
+++ b/PCK-Studio/Resources/atlases/blockData.json
@@ -1,13 +1,12 @@
{
"COMMENT_1": "Tile data research by MattNL",
"COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)",
- "blocks": [
+ "entries": [
{
"internalName": "grass_top",
"displayName": "Grass Block (Top)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Grass_Common",
"variants": [
"Grass_Common",
@@ -170,7 +169,6 @@
"displayName": "Grass Side (Overlay)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Grass_Common",
"variants": [
"Grass_Common",
@@ -185,7 +183,6 @@
"displayName": "Tall Grass",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Grass_Common",
"variants": [
"Grass_Common",
@@ -248,7 +245,6 @@
"displayName": "Oak Leaves",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -264,7 +260,6 @@
"displayName": "Oak Leaves (Opaque)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -288,7 +283,6 @@
"displayName": "Fern",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Grass_Common",
"variants": [
"Grass_Common",
@@ -521,7 +515,15 @@
},
{
"internalName": "stem_straight",
- "displayName": "Stem"
+ "displayName": "Stem",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Tile_StemMin",
+ "variants": [
+ "Tile_StemMin",
+ "Tile_StemMax"
+ ]
+ }
},
{
"internalName": "rail_normal_turned",
@@ -585,7 +587,15 @@
},
{
"internalName": "stem_bent",
- "displayName": "Stem (Attached)"
+ "displayName": "Stem (Attached)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Tile_StemMin",
+ "variants": [
+ "Tile_StemMin",
+ "Tile_StemMax"
+ ]
+ }
},
{
"internalName": "rail_normal",
@@ -608,7 +618,6 @@
"displayName": "Spruce Leaves",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Evergreen",
"variants": [
"Foliage_Default",
@@ -624,7 +633,6 @@
"displayName": "Spruce Leaves (Opaque)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Evergreen",
"variants": [
"Foliage_Default",
@@ -673,7 +681,18 @@
},
{
"internalName": "vine",
- "displayName": "Vines"
+ "displayName": "Vines",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Foliage_Default",
+ "variants": [
+ "Foliage_Default",
+ "Foliage_Evergreen",
+ "Foliage_Birch",
+ "Foliage_Mesa",
+ "Foliage_Swampland"
+ ]
+ }
},
{
"internalName": "lapis_block",
@@ -760,7 +779,6 @@
"displayName": "Redstone Dust (Cross)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Tile_RedstoneDust",
"variants": [
"Tile_RedstoneDust",
@@ -775,7 +793,6 @@
"displayName": "Redstone Dust (Line)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Tile_RedstoneDust",
"variants": [
"Tile_RedstoneDust",
@@ -910,7 +927,6 @@
"displayName": "Jungle Leaves",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -926,7 +942,6 @@
"displayName": "Jungle Leaves (Opaque)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -971,18 +986,102 @@
"hasColourEntry": true,
"colourEntry": {
"isWaterColour": true,
- "defaultName": "default",
- "variants": [ "default" ]
+ "defaultName": "Water_Plains",
+ "variants": [
+ "Water_Ocean",
+ "Water_Plains",
+ "Water_Desert",
+ "Water_ExtremeHills",
+ "Water_Forest",
+ "Water_Taiga",
+ "Water_Swampland",
+ "Water_River",
+ "Water_Hell",
+ "Water_Sky",
+ "Water_FrozenOcean",
+ "Water_FrozenRiver",
+ "Water_IcePlains",
+ "Water_IceMountains",
+ "Water_MushroomIsland",
+ "Water_MushroomIslandShore",
+ "Water_Beach",
+ "Water_DesertHills",
+ "Water_ForestHills",
+ "Water_TaigaHills",
+ "Water_ExtremeHillsEdge",
+ "Water_Jungle",
+ "Water_JungleHills",
+ "Water_JungleEdge",
+ "Water_DeepOcean",
+ "Water_StoneBeach",
+ "Water_ColdBeach",
+ "Water_BirchForest",
+ "Water_BirchForestHills",
+ "Water_RoofedForest",
+ "Water_ColdTaiga",
+ "Water_ColdTaigaHills",
+ "Water_MegaTaiga",
+ "Water_MegaTaigaHills",
+ "Water_ExtremeHillsPlus",
+ "Water_Savanna",
+ "Water_SavannaPlateau",
+ "Water_Mesa",
+ "Water_MesaPlateauF",
+ "Water_MesaPlateau"
+ ]
}
},
{
"internalName": "water_flow",
"displayName": "Flowing Water",
"hasColourEntry": true,
+ "width": 2,
+ "height": 2,
"colourEntry": {
"isWaterColour": true,
- "defaultName": "default",
- "variants": [ "default" ]
+ "defaultName": "Water_Plains",
+ "variants": [
+ "Water_Ocean",
+ "Water_Plains",
+ "Water_Desert",
+ "Water_ExtremeHills",
+ "Water_Forest",
+ "Water_Taiga",
+ "Water_Swampland",
+ "Water_River",
+ "Water_Hell",
+ "Water_Sky",
+ "Water_FrozenOcean",
+ "Water_FrozenRiver",
+ "Water_IcePlains",
+ "Water_IceMountains",
+ "Water_MushroomIsland",
+ "Water_MushroomIslandShore",
+ "Water_Beach",
+ "Water_DesertHills",
+ "Water_ForestHills",
+ "Water_TaigaHills",
+ "Water_ExtremeHillsEdge",
+ "Water_Jungle",
+ "Water_JungleHills",
+ "Water_JungleEdge",
+ "Water_DeepOcean",
+ "Water_StoneBeach",
+ "Water_ColdBeach",
+ "Water_BirchForest",
+ "Water_BirchForestHills",
+ "Water_RoofedForest",
+ "Water_ColdTaiga",
+ "Water_ColdTaigaHills",
+ "Water_MegaTaiga",
+ "Water_MegaTaigaHills",
+ "Water_ExtremeHillsPlus",
+ "Water_Savanna",
+ "Water_SavannaPlateau",
+ "Water_Mesa",
+ "Water_MesaPlateauF",
+ "Water_MesaPlateau"
+ ]
}
},
{
@@ -1111,7 +1210,9 @@
},
{
"internalName": "lava_flow",
- "displayName": "Flowing Lava"
+ "displayName": "Flowing Lava",
+ "width": 2,
+ "height": 2
},
{
"internalName": "lava_flow",
@@ -1439,11 +1540,31 @@
},
{
"internalName": "double_plant_fern_top",
- "displayName": "Large Fern (Top)"
+ "displayName": "Large Fern (Top)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Grass_Common",
+ "variants": [
+ "Grass_Common",
+ "Grass_Mesa",
+ "Grass_Swamp1",
+ "Grass_Swamp2"
+ ]
+ }
},
{
"internalName": "double_plant_grass_top",
- "displayName": "Double Tall Grass (Top)"
+ "displayName": "Double Tall Grass (Top)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Grass_Common",
+ "variants": [
+ "Grass_Common",
+ "Grass_Mesa",
+ "Grass_Swamp1",
+ "Grass_Swamp2"
+ ]
+ }
},
{
"internalName": "double_plant_paeonia_top",
@@ -1486,7 +1607,6 @@
"displayName": "Acacia Leaves",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -1502,7 +1622,6 @@
"displayName": "Acacia Leaves (Opaque)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -1527,11 +1646,31 @@
},
{
"internalName": "double_plant_fern_bottom",
- "displayName": "Large Fern (Bottom)"
+ "displayName": "Large Fern (Bottom)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Grass_Common",
+ "variants": [
+ "Grass_Common",
+ "Grass_Mesa",
+ "Grass_Swamp1",
+ "Grass_Swamp2"
+ ]
+ }
},
{
"internalName": "double_plant_grass_bottom",
- "displayName": "Double Tall Grass (Bottom)"
+ "displayName": "Double Tall Grass (Bottom)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Grass_Common",
+ "variants": [
+ "Grass_Common",
+ "Grass_Mesa",
+ "Grass_Swamp1",
+ "Grass_Swamp2"
+ ]
+ }
},
{
"internalName": "double_plant_paeonia_bottom",
@@ -1574,7 +1713,6 @@
"displayName": "Dark Oak Leaves",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -1590,7 +1728,6 @@
"displayName": "Dark Oak Leaves (Opaque)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Default",
"variants": [
"Foliage_Default",
@@ -1662,7 +1799,6 @@
"displayName": "Birch Leaves",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Birch",
"variants": [
"Foliage_Default",
@@ -1678,7 +1814,6 @@
"displayName": "Birch Leaves (Opaque)",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
"defaultName": "Foliage_Birch",
"variants": [
"Foliage_Default",
@@ -2151,18 +2286,40 @@
},
{
"internalName": "shulker_top",
- "displayName": "Shulker Box (Break Particles)"
+ "displayName": "Shulker Box (Break Particles)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Shulker_Box_Purple",
+ "variants": [
+ "Shulker_Box_Black",
+ "Shulker_Box_Blue",
+ "Shulker_Box_Brown",
+ "Shulker_Box_Cyan",
+ "Shulker_Box_Grey",
+ "Shulker_Box_Green",
+ "Shulker_Box_Light_Blue",
+ "Shulker_Box_Light_Green",
+ "Shulker_Box_Magenta",
+ "Shulker_Box_Orange",
+ "Shulker_Box_Pink",
+ "Shulker_Box_Purple",
+ "Shulker_Box_Red",
+ "Shulker_Box_Silver",
+ "Shulker_Box_White",
+ "Shulker_Box_Yellow"
+ ]
+ }
},
{
- "internalName": "",
- "displayName": ""
+ "internalName": "shulker_top_overlay",
+ "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)"
},
{
"internalName": "cauldron_water",
"displayName": "Cauldron Water",
"hasColourEntry": true,
"colourEntry": {
- "isWaterColour": false,
+ "hasCustomColour": true,
"defaultName": "Cauldron_Water",
"variants": [
"Cauldron_Water",
@@ -2318,15 +2475,15 @@
"displayName": "Kelp (Bottom)"
},
{
- "internalName": "",
+ "internalName": "kelp_a",
"displayName": ""
},
{
- "internalName": "",
+ "internalName": "kelp_a",
"displayName": ""
},
{
- "internalName": "",
+ "internalName": "kelp_a",
"displayName": ""
},
{
@@ -2334,15 +2491,15 @@
"displayName": "Kelp (Top)"
},
{
- "internalName": "",
+ "internalName": "kelp_top_a",
"displayName": ""
},
{
- "internalName": "",
+ "internalName": "kelp_top_a",
"displayName": ""
},
{
- "internalName": "",
+ "internalName": "kelp_top_a",
"displayName": ""
},
{
@@ -2761,1248 +2918,5 @@
"internalName": "",
"displayName": ""
}
- ],
- "items": [
- {
- "internalName": "helmetCloth",
- "displayName": "Leather Cap",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Armour_Default_Leather_Colour",
- "variants": [ "Armour_Default_Leather_Colour" ]
- }
- },
- {
- "internalName": "helmetChain",
- "displayName": "Chain Helmet"
- },
- {
- "internalName": "helmetIron",
- "displayName": "Iron Helmet"
- },
- {
- "internalName": "helmetDiamond",
- "displayName": "Diamond Helmet"
- },
- {
- "internalName": "helmetGold",
- "displayName": "Golden Helmet"
- },
- {
- "internalName": "flintAndSteel",
- "displayName": "Flint and Steel"
- },
- {
- "internalName": "flint",
- "displayName": "Flint"
- },
- {
- "internalName": "coal",
- "displayName": "Coal"
- },
- {
- "internalName": "string",
- "displayName": "String"
- },
- {
- "internalName": "seeds",
- "displayName": "Seeds"
- },
- {
- "internalName": "apple",
- "displayName": "Apple"
- },
- {
- "internalName": "appleGold",
- "displayName": "Golden Apple"
- },
- {
- "internalName": "egg",
- "displayName": "Egg"
- },
- {
- "internalName": "sugar",
- "displayName": "Sugar"
- },
- {
- "internalName": "snowball",
- "displayName": "Snowball"
- },
- {
- "internalName": "elytra",
- "displayName": "Elytra"
- },
- {
- "internalName": "chestplateCloth",
- "displayName": "Leather Tunic",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Armour_Default_Leather_Colour",
- "variants": [ "Armour_Default_Leather_Colour" ]
- }
- },
- {
- "internalName": "chestplateChain",
- "displayName": "Chain Chestplate"
- },
- {
- "internalName": "chestplateIron",
- "displayName": "Iron Chestplate"
- },
- {
- "internalName": "chestplateDiamond",
- "displayName": "Diamond Chestplate"
- },
- {
- "internalName": "chestplateGold",
- "displayName": "Golden Chestplate"
- },
- {
- "internalName": "bow",
- "displayName": "Bow"
- },
- {
- "internalName": "brick",
- "displayName": "Brick"
- },
- {
- "internalName": "ingotIron",
- "displayName": "Iron Ingot"
- },
- {
- "internalName": "feather",
- "displayName": "Feather"
- },
- {
- "internalName": "wheat",
- "displayName": "Wheat"
- },
- {
- "internalName": "painting",
- "displayName": "Painting"
- },
- {
- "internalName": "reeds",
- "displayName": "Sugar Canes"
- },
- {
- "internalName": "bone",
- "displayName": "Bone"
- },
- {
- "internalName": "cake",
- "displayName": "Cake"
- },
- {
- "internalName": "slimeball",
- "displayName": "Slimeball"
- },
- {
- "internalName": "broken_elytra",
- "displayName": "Elytra (Broken)"
- },
- {
- "internalName": "leggingsCloth",
- "displayName": "Leather Pants",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Armour_Default_Leather_Colour",
- "variants": [ "Armour_Default_Leather_Colour" ]
- }
- },
- {
- "internalName": "leggingsChain",
- "displayName": "Chain Leggings"
- },
- {
- "internalName": "leggingsIron",
- "displayName": "Iron Leggings"
- },
- {
- "internalName": "leggingsDiamond",
- "displayName": "Diamond Leggings"
- },
- {
- "internalName": "leggingsGold",
- "displayName": "Golden Leggings"
- },
- {
- "internalName": "arrow",
- "displayName": "Arrow"
- },
- {
- "internalName": "end_crystal",
- "displayName": "End Crystal"
- },
- {
- "internalName": "ingotGold",
- "displayName": "Gold Ingot"
- },
- {
- "internalName": "sulphur",
- "displayName": "Gunpowder"
- },
- {
- "internalName": "bread",
- "displayName": "Bread"
- },
- {
- "internalName": "sign",
- "displayName": "Oak Sign"
- },
- {
- "internalName": "doorWood",
- "displayName": "Oak Door"
- },
- {
- "internalName": "doorIron",
- "displayName": "Iron Door"
- },
- {
- "internalName": "bed",
- "displayName": "Bed"
- },
- {
- "internalName": "fireball",
- "displayName": "Fire Charge"
- },
- {
- "internalName": "chorus_fruit",
- "displayName": "Chorus Fruit"
- },
- {
- "internalName": "bootsCloth",
- "displayName": "Leather Boots",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Armour_Default_Leather_Colour",
- "variants": [ "Armour_Default_Leather_Colour" ]
- }
- },
- {
- "internalName": "bootsChain",
- "displayName": "Chain Boots"
- },
- {
- "internalName": "bootsIron",
- "displayName": "Iron Boots"
- },
- {
- "internalName": "bootsDiamond",
- "displayName": "Diamond Boots"
- },
- {
- "internalName": "bootsGold",
- "displayName": "Golden Boots"
- },
- {
- "internalName": "stick",
- "displayName": "Stick"
- },
- {
- "internalName": "compass",
- "displayName": "Compass"
- },
- {
- "internalName": "diamond",
- "displayName": "Diamond"
- },
- {
- "internalName": "redstone",
- "displayName": "Redstone"
- },
- {
- "internalName": "clay",
- "displayName": "Clay"
- },
- {
- "internalName": "paper",
- "displayName": "Paper"
- },
- {
- "internalName": "book",
- "displayName": "Book"
- },
- {
- "internalName": "map",
- "displayName": "Map"
- },
- {
- "internalName": "seeds_pumpkin",
- "displayName": "Pumpkin Seeds"
- },
- {
- "internalName": "seeds_melon",
- "displayName": "Melon Seeds"
- },
- {
- "internalName": "chorus_fruit_popped",
- "displayName": "Popped Chorus Fruit"
- },
- {
- "internalName": "swordWood",
- "displayName": "Wooden Sword"
- },
- {
- "internalName": "swordStone",
- "displayName": "Stone Sword"
- },
- {
- "internalName": "swordIron",
- "displayName": "Iron Sword"
- },
- {
- "internalName": "swordDiamond",
- "displayName": "Diamond Sword"
- },
- {
- "internalName": "swordGold",
- "displayName": "Golden Sword"
- },
- {
- "internalName": "fishingRod_uncast",
- "displayName": "Fishing Rod"
- },
- {
- "internalName": "clock",
- "displayName": "Clock"
- },
- {
- "internalName": "bowl",
- "displayName": "Bowl"
- },
- {
- "internalName": "mushroomStew",
- "displayName": "Mushroom Stew"
- },
- {
- "internalName": "yellowDust",
- "displayName": "Glowstone Dust"
- },
- {
- "internalName": "bucket",
- "displayName": "Bucket"
- },
- {
- "internalName": "bucketWater",
- "displayName": "Water Bucket"
- },
- {
- "internalName": "bucketLava",
- "displayName": "Lava Bucket"
- },
- {
- "internalName": "milk",
- "displayName": "Milk Bucket"
- },
- {
- "internalName": "dyePowder_black",
- "displayName": "Ink Sac"
- },
- {
- "internalName": "dyePowder_gray",
- "displayName": "Gray Dye"
- },
- {
- "internalName": "shovelWood",
- "displayName": "Wooden Shovel"
- },
- {
- "internalName": "shovelStone",
- "displayName": "Stone Shovel"
- },
- {
- "internalName": "shovelIron",
- "displayName": "Iron Shovel"
- },
- {
- "internalName": "shovelDiamond",
- "displayName": "Diamond Shovel"
- },
- {
- "internalName": "shovelGold",
- "displayName": "Golden Shovel"
- },
- {
- "internalName": "fishingRod_cast",
- "displayName": "Fishing Rod (Cast)"
- },
- {
- "internalName": "diode",
- "displayName": "Redstone Repeater"
- },
- {
- "internalName": "porkchopRaw",
- "displayName": "Raw Porkchop"
- },
- {
- "internalName": "porkchopCooked",
- "displayName": "Cooked Porkchop"
- },
- {
- "internalName": "fishRaw",
- "displayName": "Raw Cod"
- },
- {
- "internalName": "fishCooked",
- "displayName": "Cooked Cod"
- },
- {
- "internalName": "rottenFlesh",
- "displayName": "Rotten Flesh"
- },
- {
- "internalName": "cookie",
- "displayName": "Cookie"
- },
- {
- "internalName": "shears",
- "displayName": "Shears"
- },
- {
- "internalName": "dyePowder_red",
- "displayName": "Rose Red"
- },
- {
- "internalName": "dyePowder_pink",
- "displayName": "Pink Dye"
- },
- {
- "internalName": "pickaxeWood",
- "displayName": "Wooden Pickaxe"
- },
- {
- "internalName": "pickaxeStone",
- "displayName": "Stone Pickaxe"
- },
- {
- "internalName": "pickaxeIron",
- "displayName": "Iron Pickaxe"
- },
- {
- "internalName": "pickaxeDiamond",
- "displayName": "Diamond Pickaxe"
- },
- {
- "internalName": "pickaxeGold",
- "displayName": "Golden Pickaxe"
- },
- {
- "internalName": "bow_pull_0",
- "displayName": "Bow (Pulling Stage 1)"
- },
- {
- "internalName": "carrotOnAStick",
- "displayName": "Carrot on a Stick"
- },
- {
- "internalName": "leather",
- "displayName": "Leather"
- },
- {
- "internalName": "saddle",
- "displayName": "Saddle"
- },
- {
- "internalName": "beefRaw",
- "displayName": "Raw Beef"
- },
- {
- "internalName": "beefCooked",
- "displayName": "Steak"
- },
- {
- "internalName": "enderPearl",
- "displayName": "Ender Pearl"
- },
- {
- "internalName": "blazeRod",
- "displayName": "Blaze Rod"
- },
- {
- "internalName": "melon",
- "displayName": "Melon Slice"
- },
- {
- "internalName": "dyePowder_green",
- "displayName": "Cactus Green"
- },
- {
- "internalName": "dyePowder_lime",
- "displayName": "Lime Dye"
- },
- {
- "internalName": "hatchetWood",
- "displayName": "Wooden Axe"
- },
- {
- "internalName": "hatchetStone",
- "displayName": "Stone Axe"
- },
- {
- "internalName": "hatchetIron",
- "displayName": "Iron Axe"
- },
- {
- "internalName": "hatchetDiamond",
- "displayName": "Diamond Axe"
- },
- {
- "internalName": "hatchetGold",
- "displayName": "Golden Axe"
- },
- {
- "internalName": "bow_pull_1",
- "displayName": "Bow (Pulling Stage 2)"
- },
- {
- "internalName": "potatoBaked",
- "displayName": "Baked Potato"
- },
- {
- "internalName": "potato",
- "displayName": "Potato"
- },
- {
- "internalName": "carrots",
- "displayName": "Carrot"
- },
- {
- "internalName": "chickenRaw",
- "displayName": "Raw Chicken"
- },
- {
- "internalName": "chickenCooked",
- "displayName": "Cooked Chicken"
- },
- {
- "internalName": "ghastTear",
- "displayName": "Ghast Tear"
- },
- {
- "internalName": "goldNugget",
- "displayName": "Gold Nugget"
- },
- {
- "internalName": "netherStalkSeeds",
- "displayName": "Nether Wart"
- },
- {
- "internalName": "dyePowder_brown",
- "displayName": "Cocoa Beans"
- },
- {
- "internalName": "dyePowder_yellow",
- "displayName": "Dandelion Yellow"
- },
- {
- "internalName": "hoeWood",
- "displayName": "Wooden Hoe"
- },
- {
- "internalName": "hoeStone",
- "displayName": "Stone Hoe"
- },
- {
- "internalName": "hoeIron",
- "displayName": "Iron Hoe"
- },
- {
- "internalName": "hoeDiamond",
- "displayName": "Diamond Hoe"
- },
- {
- "internalName": "hoeGold",
- "displayName": "Golden Hoe"
- },
- {
- "internalName": "bow_pull_2",
- "displayName": "Bow (Pulling Stage 3)"
- },
- {
- "internalName": "potatoPoisonous",
- "displayName": "Poisonous Potato"
- },
- {
- "internalName": "minecart",
- "displayName": "Minecart"
- },
- {
- "internalName": "boat",
- "displayName": "Oak Boat"
- },
- {
- "internalName": "speckledMelon",
- "displayName": "Glistering Melon"
- },
- {
- "internalName": "fermentedSpiderEye",
- "displayName": "Fermented Spider Eye"
- },
- {
- "internalName": "spiderEye",
- "displayName": "Spider Eye"
- },
- {
- "internalName": "glassBottle",
- "displayName": "Glass Bottle"
- },
- {
- "internalName": "potion_contents",
- "displayName": "Potion (Overlay)",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Potion_BaseColour",
- "variants": [
- "Potion_BaseColour",
- "Effect_MovementSpeed",
- "Effect_MovementSlowDown",
- "Effect_DigSpeed",
- "Effect_DigSlowdown",
- "Effect_DamageBoost",
- "Effect_Heal",
- "Effect_Harm",
- "Effect_Jump",
- "Effect_Confusion",
- "Effect_Regeneration",
- "Effect_DamageResistance",
- "Effect_FireResistance",
- "Effect_WaterBreathing",
- "Effect_Invisibility",
- "Effect_Blindness",
- "Effect_NightVision",
- "Effect_Hunger",
- "Effect_Weakness",
- "Effect_Poison",
- "Effect_Wither",
- "Effect_HealthBoost",
- "Effect_Absorption",
- "Effect_Saturation",
- "Effect_Levitation",
- "Effect_Luck",
- "Effect_BadLuck",
- "Effect_TurtleMaster",
- "Effect_SlowFall"
- ]
- }
- },
- {
- "internalName": "dyePowder_blue",
- "displayName": "Lapis Lazuli"
- },
- {
- "internalName": "dyePowder_light_blue",
- "displayName": "Light Blue Dye"
- },
- {
- "internalName": "helmetCloth_overlay",
- "displayName": "Leather Cap (Overlay)"
- },
- {
- "internalName": "spectral_arrow",
- "displayName": "Spectral Arrow"
- },
- {
- "internalName": "iron_horse_armor",
- "displayName": "Iron Horse Armor"
- },
- {
- "internalName": "diamond_horse_armor",
- "displayName": "Diamond Horse Armor"
- },
- {
- "internalName": "gold_horse_armor",
- "displayName": "Gold Horse Armor"
- },
- {
- "internalName": "comparator",
- "displayName": "Redstone Comparator"
- },
- {
- "internalName": "carrotGolden",
- "displayName": "Golden Carrot"
- },
- {
- "internalName": "minecart_chest",
- "displayName": "Minecart with Chest"
- },
- {
- "internalName": "pumpkinPie",
- "displayName": "Pumpkin Pie"
- },
- {
- "internalName": "monsterPlacer",
- "displayName": "Spawn Egg"
- },
- {
- "internalName": "potion_splash",
- "displayName": "Splash Potion"
- },
- {
- "internalName": "eyeOfEnder",
- "displayName": "Eye of Ender"
- },
- {
- "internalName": "cauldron",
- "displayName": "Cauldron"
- },
- {
- "internalName": "blazePowder",
- "displayName": "Blaze Powder"
- },
- {
- "internalName": "dyePowder_purple",
- "displayName": "Purple Dye"
- },
- {
- "internalName": "dyePowder_magenta",
- "displayName": "Magenta Dye"
- },
- {
- "internalName": "chestplateCloth_overlay",
- "displayName": "Leather Tunic (Overlay)"
- },
- {
- "internalName": "tipped_arrow_base",
- "displayName": "Tipped Arrow"
- },
- {
- "internalName": "dragon_breath",
- "displayName": "Dragon's Breath"
- },
- {
- "internalName": "name_tag",
- "displayName": "Name Tag"
- },
- {
- "internalName": "lead",
- "displayName": "Lead"
- },
- {
- "internalName": "netherbrick",
- "displayName": "Nether Brick"
- },
- {
- "internalName": "fish_clownfish_raw",
- "displayName": "Tropical Fish"
- },
- {
- "internalName": "minecart_furnace",
- "displayName": "Minecart with Furnace"
- },
- {
- "internalName": "charcoal",
- "displayName": "Charcoal"
- },
- {
- "internalName": "monsterPlacer_overlay",
- "displayName": "Spawn Egg (Overlay)"
- },
- {
- "internalName": "bed_overlay",
- "displayName": "Bed (Overlay)",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Bed_White",
- "variants": [
- "Bed_Black",
- "Bed_Blue",
- "Bed_Brown",
- "Bed_Cyan",
- "Bed_Grey",
- "Bed_Green",
- "Bed_Light_Blue",
- "Bed_Lime",
- "Bed_Magenta",
- "Bed_Orange",
- "Bed_Pink",
- "Bed_Purple",
- "Bed_Red",
- "Bed_Silver",
- "Bed_White",
- "Bed_Yellow"
- ]
- }
- },
- {
- "internalName": "expBottle",
- "displayName": "Bottle o'Enchanting"
- },
- {
- "internalName": "brewingStand",
- "displayName": "Brewing Stand"
- },
- {
- "internalName": "magmaCream",
- "displayName": "Magma Cream"
- },
- {
- "internalName": "dyePowder_cyan",
- "displayName": "Cyan Dye"
- },
- {
- "internalName": "dyePowder_orange",
- "displayName": "Orange Dye"
- },
- {
- "internalName": "leggingsCloth_overlay",
- "displayName": "Leather Pants (Overlay)"
- },
- {
- "internalName": "tipped_arrow_head",
- "displayName": "Tipped Arrow (Overlay)"
- },
- {
- "internalName": "potion_bottle_lingering",
- "displayName": "Lingering Potion"
- },
- {
- "internalName": "barrier",
- "displayName": "debug_fourj_item"
- },
- {
- "internalName": "mutton_raw",
- "displayName": "Raw Mutton"
- },
- {
- "internalName": "rabbit_raw",
- "displayName": "Raw Rabbit"
- },
- {
- "internalName": "fish_pufferfish_raw",
- "displayName": "Pufferfish"
- },
- {
- "internalName": "minecart_hopper",
- "displayName": "Minecart with Hopper"
- },
- {
- "internalName": "hopper",
- "displayName": "Hopper"
- },
- {
- "internalName": "nether_star",
- "displayName": "Nether Star"
- },
- {
- "internalName": "emerald",
- "displayName": "Emerald"
- },
- {
- "internalName": "writingBook",
- "displayName": "Book and Quill"
- },
- {
- "internalName": "writtenBook",
- "displayName": "Written Book"
- },
- {
- "internalName": "flowerPot",
- "displayName": "Flower Pot"
- },
- {
- "internalName": "dyePowder_silver",
- "displayName": "Light Gray Dye"
- },
- {
- "internalName": "dyePowder_white",
- "displayName": "Bone Meal"
- },
- {
- "internalName": "bootsCloth_overlay",
- "displayName": "Leather Boots (Overlay)"
- },
- {
- "internalName": "beetroot",
- "displayName": "Beetroot"
- },
- {
- "internalName": "beetroot_seeds",
- "displayName": "Beetroot Seeds"
- },
- {
- "internalName": "beetroot_soup",
- "displayName": "Beetroot Soup"
- },
- {
- "internalName": "mutton_cooked",
- "displayName": "Cooked Mutton"
- },
- {
- "internalName": "rabbit_cooked",
- "displayName": "Cooked Rabbit"
- },
- {
- "internalName": "fish_salmon_raw",
- "displayName": "Raw Salmon"
- },
- {
- "internalName": "minecart_tnt",
- "displayName": "Minecart with TNT"
- },
- {
- "internalName": "wooden_armorstand",
- "displayName": "Armor Stand"
- },
- {
- "internalName": "fireworks",
- "displayName": "Firework Rocket"
- },
- {
- "internalName": "fireworks_charge",
- "displayName": "Firework Star"
- },
- {
- "internalName": "fireworks_charge_overlay",
- "displayName": "Firework Star (Overlay)"
- },
- {
- "internalName": "netherquartz",
- "displayName": "Nether Quartz"
- },
- {
- "internalName": "map_empty",
- "displayName": "Empty Map"
- },
- {
- "internalName": "frame",
- "displayName": "Item Frame"
- },
- {
- "internalName": "enchantedBook",
- "displayName": "Enchanted Book"
- },
- {
- "internalName": "door_acacia",
- "displayName": "Acacia Door"
- },
- {
- "internalName": "door_birch",
- "displayName": "Birch Door"
- },
- {
- "internalName": "door_dark_oak",
- "displayName": "Dark Oak Door"
- },
- {
- "internalName": "door_jungle",
- "displayName": "Jungle Door"
- },
- {
- "internalName": "door_spruce",
- "displayName": "Spruce Door"
- },
- {
- "internalName": "rabbit_stew",
- "displayName": "Rabbit Stew"
- },
- {
- "internalName": "fish_salmon_cooked",
- "displayName": "Cooked Salmon"
- },
- {
- "internalName": "minecart_command_block",
- "displayName": "Minecart with Command Block"
- },
- {
- "internalName": "acacia_boat",
- "displayName": "Acacia Boat"
- },
- {
- "internalName": "birch_boat",
- "displayName": "Birch Boat"
- },
- {
- "internalName": "dark_oak_boat",
- "displayName": "Dark Oak Boat"
- },
- {
- "internalName": "jungle_boat",
- "displayName": "Jungle Boat"
- },
- {
- "internalName": "spruce_boat",
- "displayName": "Spruce Boat"
- },
- {
- "internalName": "prismarine_shard",
- "displayName": "Prismarine Shard"
- },
- {
- "internalName": "prismarine_crystals",
- "displayName": "Prismarine Crystals"
- },
- {
- "internalName": "leather_horse_armor_base",
- "displayName": "Leather Horse Armor",
- "hasColourEntry": true,
- "colourEntry": {
- "isWaterColour": false,
- "defaultName": "Armour_Default_Leather_Colour",
- "variants": [ "Armour_Default_Leather_Colour" ]
- }
- },
- {
- "internalName": "structure_void",
- "displayName": "Structure Void"
- },
- {
- "internalName": "map_filled_markings",
- "displayName": "Filled Map (Overlay)"
- },
- {
- "internalName": "totem",
- "displayName": "Totem of Undying"
- },
- {
- "internalName": "shulker_shell",
- "displayName": "Shulker Shell"
- },
- {
- "internalName": "iron_nugget",
- "displayName": "Iron Nugget"
- },
- {
- "internalName": "rabbit_foot",
- "displayName": "Rabbit's Foot"
- },
- {
- "internalName": "rabbit_hide",
- "displayName": "Rabbit Hide"
- },
- {
- "internalName": "compass",
- "displayName": "Compass"
- },
- {
- "internalName": "",
- "displayName": ""
- },
- {
- "internalName": "",
- "displayName": ""
- },
- {
- "internalName": "",
- "displayName": ""
- },
- {
- "internalName": "clock",
- "displayName": "Clock"
- },
- {
- "internalName": "",
- "displayName": ""
- },
- {
- "internalName": "",
- "displayName": ""
- },
- {
- "internalName": "",
- "displayName": ""
- },
- {
- "internalName": "dragonFireball",
- "displayName": "Dragon Fireball"
- },
- {
- "internalName": "record_13",
- "displayName": "Music Disc (C418 - 13)"
- },
- {
- "internalName": "record_cat",
- "displayName": "Music Disc (C418 - cat)"
- },
- {
- "internalName": "record_blocks",
- "displayName": "Music Disc (C418 - blocks)"
- },
- {
- "internalName": "record_chirp",
- "displayName": "Music Disc (C418 - chirp)"
- },
- {
- "internalName": "record_far",
- "displayName": "Music Disc (C418 - far)"
- },
- {
- "internalName": "record_mall",
- "displayName": "Music Disc (C418 - mall)"
- },
- {
- "internalName": "record_mellohi",
- "displayName": "Music Disc (C418 - mellohi)"
- },
- {
- "internalName": "record_stal",
- "displayName": "Music Disc (C418 - stal)"
- },
- {
- "internalName": "record_strad",
- "displayName": "Music Disc (C418 - strad)"
- },
- {
- "internalName": "record_ward",
- "displayName": "Music Disc (C418 - ward)"
- },
- {
- "internalName": "record_11",
- "displayName": "Music Disc (C418 - 11)"
- },
- {
- "internalName": "record_where are we now",
- "displayName": "Music Disc (C418 - wait)"
- },
- {
- "internalName": "bucketFish",
- "displayName": "Bucket of Cod"
- },
- {
- "internalName": "bucketSalmon",
- "displayName": "Bucket of Salmon"
- },
- {
- "internalName": "bucketPuffer",
- "displayName": "Bucket of Pufferfish"
- },
- {
- "internalName": "bucketTropical",
- "displayName": "Bucket of Tropical Fish"
- },
- {
- "internalName": "leather_horse_armor_detail",
- "displayName": "Leather Horse Armor (Overlay)"
- },
- {
- "internalName": "dyePowder_black1",
- "displayName": "Black Dye [PS4 ONLY]"
- },
- {
- "internalName": "dyePowder_blue1",
- "displayName": "Blue Dye [PS4 ONLY]"
- },
- {
- "internalName": "dyePowder_brown1",
- "displayName": "Brown Dye [PS4 ONLY]"
- },
- {
- "internalName": "dyePowder_white1",
- "displayName": "White Dye [PS4 ONLY]"
- },
- {
- "internalName": "bamboo",
- "displayName": "Bamboo"
- },
- {
- "internalName": "lantern_carried",
- "displayName": "Lantern"
- },
- {
- "internalName": "kelp",
- "displayName": "Kelp"
- },
- {
- "internalName": "dried_kelp",
- "displayName": "Dried Kelp"
- },
- {
- "internalName": "sea_pickle",
- "displayName": "Sea Pickle"
- },
- {
- "internalName": "nautilus",
- "displayName": "Nautilus Shell"
- },
- {
- "internalName": "nautilus_core",
- "displayName": "Heart of the Sea"
- },
- {
- "internalName": "turtle_helmet",
- "displayName": "Turtle Shell"
- },
- {
- "internalName": "turtle_shell_piece",
- "displayName": "Scute"
- },
- {
- "internalName": "trident",
- "displayName": "Trident"
- },
- {
- "internalName": "phantom_membrane",
- "displayName": "Phantom Membrane"
- },
- {
- "internalName": "acacia_sign",
- "displayName": "Acacia Sign [PS4 ONLY]"
- },
- {
- "internalName": "birch_sign",
- "displayName": "Birch Sign [PS4 ONLY]"
- },
- {
- "internalName": "dark_oak_sign",
- "displayName": "Dark Oak Sign [PS4 ONLY]"
- },
- {
- "internalName": "jungle_sign",
- "displayName": "Jungle Sign [PS4 ONLY]"
- },
- {
- "internalName": "spruce_sign",
- "displayName": "Spruce Sign [PS4 ONLY]"
- },
- {
- "internalName": "crossbow",
- "displayName": "Crossbow [PS4 ONLY]"
- },
- {
- "internalName": "crossbow_pull_0",
- "displayName": "Crossbow (Pulling Stage 1) [PS4 ONLY]"
- },
- {
- "internalName": "crossbow_pull_1",
- "displayName": "Crossbow (Pulling Stage 2) [PS4 ONLY]"
- },
- {
- "internalName": "crossbow_pull_2",
- "displayName": "Crossbow (Pulling Stage 3) [PS4 ONLY]"
- },
- {
- "internalName": "crossbow_arrow",
- "displayName": "Crossbow (Loaded) [PS4 ONLY]"
- },
- {
- "internalName": "crossbow_firework",
- "displayName": "Crossbow (Loaded) (Firework) [PS4 ONLY]"
- },
- {
- "internalName": "sweet_berries",
- "displayName": "Sweet Berries [PS4 ONLY]"
- },
- {
- "internalName": "banner_pattern",
- "displayName": "Banner Pattern [PS4 ONLY]"
- },
- {
- "internalName": "bell",
- "displayName": "Bell [PS4 ONLY]"
- },
- {
- "internalName": "campfire_carried",
- "displayName": "Campfire [PS4 ONLY]"
- },
- {
- "internalName": "",
- "displayName": ""
- }
]
}
diff --git a/PCK-Studio/Resources/atlases/entities.png b/PCK-Studio/Resources/atlases/entities.png
new file mode 100644
index 00000000..46881de8
Binary files /dev/null and b/PCK-Studio/Resources/atlases/entities.png differ
diff --git a/PCK-Studio/Resources/entityData.json b/PCK-Studio/Resources/atlases/entityData.json
similarity index 99%
rename from PCK-Studio/Resources/entityData.json
rename to PCK-Studio/Resources/atlases/entityData.json
index 27621c86..42c39cb0 100644
--- a/PCK-Studio/Resources/entityData.json
+++ b/PCK-Studio/Resources/atlases/entityData.json
@@ -225,7 +225,7 @@
{ "": "" },
{ "": "" },
{ "villager": "Villager (PS4 EXCLUSIVE)" },
- { "zombie_villager": "Villager (PS4 EXCLUSIVE)" },
+ { "zombie_villager": "Zombie Villager (PS4 EXCLUSIVE)" },
{ "": "" },
{ "phantom_invisible": "Phantom (Second Layer)" },
{ "enderman_invisible": "Enderman (Second Layer)" },
diff --git a/PCK-Studio/Resources/atlases/experienceOrbData.json b/PCK-Studio/Resources/atlases/experienceOrbData.json
new file mode 100644
index 00000000..f83a7ab3
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/experienceOrbData.json
@@ -0,0 +1,124 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "experience_orb_0",
+ "displayName": "Experience Orb (Size 1)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_1",
+ "displayName": "Experience Orb (Size 2)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_2",
+ "displayName": "Experience Orb (Size 3)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_3",
+ "displayName": "Experience Orb (Size 4)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_4",
+ "displayName": "Experience Orb (Size 5)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_5",
+ "displayName": "Experience Orb (Size 6)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_6",
+ "displayName": "Experience Orb (Size 7)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_7",
+ "displayName": "Experience Orb (Size 8)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_8",
+ "displayName": "Experience Orb (Size 9)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_9",
+ "displayName": "Experience Orb (Size 10)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "experience_orb_10",
+ "displayName": "Experience Orb (Size 11)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "experience_orb",
+ "variants": ["experience_orb"]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/PCK-Studio/Resources/atlases/experience_orbs.png b/PCK-Studio/Resources/atlases/experience_orbs.png
new file mode 100644
index 00000000..1a2d58a3
Binary files /dev/null and b/PCK-Studio/Resources/atlases/experience_orbs.png differ
diff --git a/PCK-Studio/Resources/atlases/explosion.png b/PCK-Studio/Resources/atlases/explosion.png
new file mode 100644
index 00000000..242d9115
Binary files /dev/null and b/PCK-Studio/Resources/atlases/explosion.png differ
diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json
new file mode 100644
index 00000000..f9845f7e
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/explosionData.json
@@ -0,0 +1,197 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "explosion_0",
+ "displayName": "Explosion (Stage 1)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_1",
+ "displayName": "Explosion (Stage 2)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_2",
+ "displayName": "Explosion (Stage 3)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_3",
+ "displayName": "Explosion (Stage 4)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_4",
+ "displayName": "Explosion (Stage 5)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_5",
+ "displayName": "Explosion (Stage 6)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_6",
+ "displayName": "Explosion (Stage 7)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_7",
+ "displayName": "Explosion (Stage 8)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_8",
+ "displayName": "Explosion (Stage 9)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_9",
+ "displayName": "Explosion (Stage 10)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_10",
+ "displayName": "Explosion (Stage 11)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_11",
+ "displayName": "Explosion (Stage 12)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_12",
+ "displayName": "Explosion (Stage 13)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_13",
+ "displayName": "Explosion (Stage 14)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_14",
+ "displayName": "Explosion (Stage 15)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ },
+ {
+ "internalName": "explosion_15",
+ "displayName": "Explosion (Stage 16)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Explode",
+ "variants": [
+ "Particle_Explode",
+ "Particle_HugeExplosion"
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/PCK-Studio/Resources/atlases/itemData.json b/PCK-Studio/Resources/atlases/itemData.json
new file mode 100644
index 00000000..0c49ee02
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/itemData.json
@@ -0,0 +1,1366 @@
+{
+ "COMMENT_1": "Tile data research by MattNL",
+ "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)",
+ "entries": [
+ {
+ "internalName": "helmetCloth",
+ "displayName": "Leather Cap",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "Armour_Default_Leather_Colour",
+ "variants": [ "Armour_Default_Leather_Colour" ]
+ }
+ },
+ {
+ "internalName": "helmetChain",
+ "displayName": "Chain Helmet"
+ },
+ {
+ "internalName": "helmetIron",
+ "displayName": "Iron Helmet"
+ },
+ {
+ "internalName": "helmetDiamond",
+ "displayName": "Diamond Helmet"
+ },
+ {
+ "internalName": "helmetGold",
+ "displayName": "Golden Helmet"
+ },
+ {
+ "internalName": "flintAndSteel",
+ "displayName": "Flint and Steel"
+ },
+ {
+ "internalName": "flint",
+ "displayName": "Flint"
+ },
+ {
+ "internalName": "coal",
+ "displayName": "Coal"
+ },
+ {
+ "internalName": "string",
+ "displayName": "String"
+ },
+ {
+ "internalName": "seeds",
+ "displayName": "Seeds"
+ },
+ {
+ "internalName": "apple",
+ "displayName": "Apple"
+ },
+ {
+ "internalName": "appleGold",
+ "displayName": "Golden Apple"
+ },
+ {
+ "internalName": "egg",
+ "displayName": "Egg"
+ },
+ {
+ "internalName": "sugar",
+ "displayName": "Sugar"
+ },
+ {
+ "internalName": "snowball",
+ "displayName": "Snowball"
+ },
+ {
+ "internalName": "elytra",
+ "displayName": "Elytra"
+ },
+ {
+ "internalName": "chestplateCloth",
+ "displayName": "Leather Tunic",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "Armour_Default_Leather_Colour",
+ "variants": [ "Armour_Default_Leather_Colour" ]
+ }
+ },
+ {
+ "internalName": "chestplateChain",
+ "displayName": "Chain Chestplate"
+ },
+ {
+ "internalName": "chestplateIron",
+ "displayName": "Iron Chestplate"
+ },
+ {
+ "internalName": "chestplateDiamond",
+ "displayName": "Diamond Chestplate"
+ },
+ {
+ "internalName": "chestplateGold",
+ "displayName": "Golden Chestplate"
+ },
+ {
+ "internalName": "bow",
+ "displayName": "Bow"
+ },
+ {
+ "internalName": "brick",
+ "displayName": "Brick"
+ },
+ {
+ "internalName": "ingotIron",
+ "displayName": "Iron Ingot"
+ },
+ {
+ "internalName": "feather",
+ "displayName": "Feather"
+ },
+ {
+ "internalName": "wheat",
+ "displayName": "Wheat"
+ },
+ {
+ "internalName": "painting",
+ "displayName": "Painting"
+ },
+ {
+ "internalName": "reeds",
+ "displayName": "Sugar Canes"
+ },
+ {
+ "internalName": "bone",
+ "displayName": "Bone"
+ },
+ {
+ "internalName": "cake",
+ "displayName": "Cake"
+ },
+ {
+ "internalName": "slimeball",
+ "displayName": "Slimeball"
+ },
+ {
+ "internalName": "broken_elytra",
+ "displayName": "Elytra (Broken)"
+ },
+ {
+ "internalName": "leggingsCloth",
+ "displayName": "Leather Pants",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "Armour_Default_Leather_Colour",
+ "variants": [ "Armour_Default_Leather_Colour" ]
+ }
+ },
+ {
+ "internalName": "leggingsChain",
+ "displayName": "Chain Leggings"
+ },
+ {
+ "internalName": "leggingsIron",
+ "displayName": "Iron Leggings"
+ },
+ {
+ "internalName": "leggingsDiamond",
+ "displayName": "Diamond Leggings"
+ },
+ {
+ "internalName": "leggingsGold",
+ "displayName": "Golden Leggings"
+ },
+ {
+ "internalName": "arrow",
+ "displayName": "Arrow"
+ },
+ {
+ "internalName": "end_crystal",
+ "displayName": "End Crystal"
+ },
+ {
+ "internalName": "ingotGold",
+ "displayName": "Gold Ingot"
+ },
+ {
+ "internalName": "sulphur",
+ "displayName": "Gunpowder"
+ },
+ {
+ "internalName": "bread",
+ "displayName": "Bread"
+ },
+ {
+ "internalName": "sign",
+ "displayName": "Oak Sign"
+ },
+ {
+ "internalName": "doorWood",
+ "displayName": "Oak Door"
+ },
+ {
+ "internalName": "doorIron",
+ "displayName": "Iron Door"
+ },
+ {
+ "internalName": "bed",
+ "displayName": "Bed"
+ },
+ {
+ "internalName": "fireball",
+ "displayName": "Fire Charge"
+ },
+ {
+ "internalName": "chorus_fruit",
+ "displayName": "Chorus Fruit"
+ },
+ {
+ "internalName": "bootsCloth",
+ "displayName": "Leather Boots",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "Armour_Default_Leather_Colour",
+ "variants": [ "Armour_Default_Leather_Colour" ]
+ }
+ },
+ {
+ "internalName": "bootsChain",
+ "displayName": "Chain Boots"
+ },
+ {
+ "internalName": "bootsIron",
+ "displayName": "Iron Boots"
+ },
+ {
+ "internalName": "bootsDiamond",
+ "displayName": "Diamond Boots"
+ },
+ {
+ "internalName": "bootsGold",
+ "displayName": "Golden Boots"
+ },
+ {
+ "internalName": "stick",
+ "displayName": "Stick"
+ },
+ {
+ "internalName": "compass",
+ "displayName": "Compass"
+ },
+ {
+ "internalName": "diamond",
+ "displayName": "Diamond"
+ },
+ {
+ "internalName": "redstone",
+ "displayName": "Redstone"
+ },
+ {
+ "internalName": "clay",
+ "displayName": "Clay"
+ },
+ {
+ "internalName": "paper",
+ "displayName": "Paper"
+ },
+ {
+ "internalName": "book",
+ "displayName": "Book"
+ },
+ {
+ "internalName": "map",
+ "displayName": "Map"
+ },
+ {
+ "internalName": "seeds_pumpkin",
+ "displayName": "Pumpkin Seeds"
+ },
+ {
+ "internalName": "seeds_melon",
+ "displayName": "Melon Seeds"
+ },
+ {
+ "internalName": "chorus_fruit_popped",
+ "displayName": "Popped Chorus Fruit"
+ },
+ {
+ "internalName": "swordWood",
+ "displayName": "Wooden Sword"
+ },
+ {
+ "internalName": "swordStone",
+ "displayName": "Stone Sword"
+ },
+ {
+ "internalName": "swordIron",
+ "displayName": "Iron Sword"
+ },
+ {
+ "internalName": "swordDiamond",
+ "displayName": "Diamond Sword"
+ },
+ {
+ "internalName": "swordGold",
+ "displayName": "Golden Sword"
+ },
+ {
+ "internalName": "fishingRod_uncast",
+ "displayName": "Fishing Rod"
+ },
+ {
+ "internalName": "clock",
+ "displayName": "Clock"
+ },
+ {
+ "internalName": "bowl",
+ "displayName": "Bowl"
+ },
+ {
+ "internalName": "mushroomStew",
+ "displayName": "Mushroom Stew"
+ },
+ {
+ "internalName": "yellowDust",
+ "displayName": "Glowstone Dust"
+ },
+ {
+ "internalName": "bucket",
+ "displayName": "Bucket"
+ },
+ {
+ "internalName": "bucketWater",
+ "displayName": "Water Bucket"
+ },
+ {
+ "internalName": "bucketLava",
+ "displayName": "Lava Bucket"
+ },
+ {
+ "internalName": "milk",
+ "displayName": "Milk Bucket"
+ },
+ {
+ "internalName": "dyePowder_black",
+ "displayName": "Ink Sac"
+ },
+ {
+ "internalName": "dyePowder_gray",
+ "displayName": "Gray Dye"
+ },
+ {
+ "internalName": "shovelWood",
+ "displayName": "Wooden Shovel"
+ },
+ {
+ "internalName": "shovelStone",
+ "displayName": "Stone Shovel"
+ },
+ {
+ "internalName": "shovelIron",
+ "displayName": "Iron Shovel"
+ },
+ {
+ "internalName": "shovelDiamond",
+ "displayName": "Diamond Shovel"
+ },
+ {
+ "internalName": "shovelGold",
+ "displayName": "Golden Shovel"
+ },
+ {
+ "internalName": "fishingRod_cast",
+ "displayName": "Fishing Rod (Cast)"
+ },
+ {
+ "internalName": "diode",
+ "displayName": "Redstone Repeater"
+ },
+ {
+ "internalName": "porkchopRaw",
+ "displayName": "Raw Porkchop"
+ },
+ {
+ "internalName": "porkchopCooked",
+ "displayName": "Cooked Porkchop"
+ },
+ {
+ "internalName": "fishRaw",
+ "displayName": "Raw Cod"
+ },
+ {
+ "internalName": "fishCooked",
+ "displayName": "Cooked Cod"
+ },
+ {
+ "internalName": "rottenFlesh",
+ "displayName": "Rotten Flesh"
+ },
+ {
+ "internalName": "cookie",
+ "displayName": "Cookie"
+ },
+ {
+ "internalName": "shears",
+ "displayName": "Shears"
+ },
+ {
+ "internalName": "dyePowder_red",
+ "displayName": "Rose Red"
+ },
+ {
+ "internalName": "dyePowder_pink",
+ "displayName": "Pink Dye"
+ },
+ {
+ "internalName": "pickaxeWood",
+ "displayName": "Wooden Pickaxe"
+ },
+ {
+ "internalName": "pickaxeStone",
+ "displayName": "Stone Pickaxe"
+ },
+ {
+ "internalName": "pickaxeIron",
+ "displayName": "Iron Pickaxe"
+ },
+ {
+ "internalName": "pickaxeDiamond",
+ "displayName": "Diamond Pickaxe"
+ },
+ {
+ "internalName": "pickaxeGold",
+ "displayName": "Golden Pickaxe"
+ },
+ {
+ "internalName": "bow_pull_0",
+ "displayName": "Bow (Pulling Stage 1)"
+ },
+ {
+ "internalName": "carrotOnAStick",
+ "displayName": "Carrot on a Stick"
+ },
+ {
+ "internalName": "leather",
+ "displayName": "Leather"
+ },
+ {
+ "internalName": "saddle",
+ "displayName": "Saddle"
+ },
+ {
+ "internalName": "beefRaw",
+ "displayName": "Raw Beef"
+ },
+ {
+ "internalName": "beefCooked",
+ "displayName": "Steak"
+ },
+ {
+ "internalName": "enderPearl",
+ "displayName": "Ender Pearl"
+ },
+ {
+ "internalName": "blazeRod",
+ "displayName": "Blaze Rod"
+ },
+ {
+ "internalName": "melon",
+ "displayName": "Melon Slice"
+ },
+ {
+ "internalName": "dyePowder_green",
+ "displayName": "Cactus Green"
+ },
+ {
+ "internalName": "dyePowder_lime",
+ "displayName": "Lime Dye"
+ },
+ {
+ "internalName": "hatchetWood",
+ "displayName": "Wooden Axe"
+ },
+ {
+ "internalName": "hatchetStone",
+ "displayName": "Stone Axe"
+ },
+ {
+ "internalName": "hatchetIron",
+ "displayName": "Iron Axe"
+ },
+ {
+ "internalName": "hatchetDiamond",
+ "displayName": "Diamond Axe"
+ },
+ {
+ "internalName": "hatchetGold",
+ "displayName": "Golden Axe"
+ },
+ {
+ "internalName": "bow_pull_1",
+ "displayName": "Bow (Pulling Stage 2)"
+ },
+ {
+ "internalName": "potatoBaked",
+ "displayName": "Baked Potato"
+ },
+ {
+ "internalName": "potato",
+ "displayName": "Potato"
+ },
+ {
+ "internalName": "carrots",
+ "displayName": "Carrot"
+ },
+ {
+ "internalName": "chickenRaw",
+ "displayName": "Raw Chicken"
+ },
+ {
+ "internalName": "chickenCooked",
+ "displayName": "Cooked Chicken"
+ },
+ {
+ "internalName": "ghastTear",
+ "displayName": "Ghast Tear"
+ },
+ {
+ "internalName": "goldNugget",
+ "displayName": "Gold Nugget"
+ },
+ {
+ "internalName": "netherStalkSeeds",
+ "displayName": "Nether Wart"
+ },
+ {
+ "internalName": "dyePowder_brown",
+ "displayName": "Cocoa Beans"
+ },
+ {
+ "internalName": "dyePowder_yellow",
+ "displayName": "Dandelion Yellow"
+ },
+ {
+ "internalName": "hoeWood",
+ "displayName": "Wooden Hoe"
+ },
+ {
+ "internalName": "hoeStone",
+ "displayName": "Stone Hoe"
+ },
+ {
+ "internalName": "hoeIron",
+ "displayName": "Iron Hoe"
+ },
+ {
+ "internalName": "hoeDiamond",
+ "displayName": "Diamond Hoe"
+ },
+ {
+ "internalName": "hoeGold",
+ "displayName": "Golden Hoe"
+ },
+ {
+ "internalName": "bow_pull_2",
+ "displayName": "Bow (Pulling Stage 3)"
+ },
+ {
+ "internalName": "potatoPoisonous",
+ "displayName": "Poisonous Potato"
+ },
+ {
+ "internalName": "minecart",
+ "displayName": "Minecart"
+ },
+ {
+ "internalName": "boat",
+ "displayName": "Oak Boat"
+ },
+ {
+ "internalName": "speckledMelon",
+ "displayName": "Glistering Melon"
+ },
+ {
+ "internalName": "fermentedSpiderEye",
+ "displayName": "Fermented Spider Eye"
+ },
+ {
+ "internalName": "spiderEye",
+ "displayName": "Spider Eye"
+ },
+ {
+ "internalName": "glassBottle",
+ "displayName": "Glass Bottle"
+ },
+ {
+ "internalName": "potion_contents",
+ "displayName": "Potion (Overlay)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "dyePowder_blue",
+ "displayName": "Lapis Lazuli"
+ },
+ {
+ "internalName": "dyePowder_light_blue",
+ "displayName": "Light Blue Dye"
+ },
+ {
+ "internalName": "helmetCloth_overlay",
+ "displayName": "Leather Cap (Overlay)"
+ },
+ {
+ "internalName": "spectral_arrow",
+ "displayName": "Spectral Arrow"
+ },
+ {
+ "internalName": "iron_horse_armor",
+ "displayName": "Iron Horse Armor"
+ },
+ {
+ "internalName": "diamond_horse_armor",
+ "displayName": "Diamond Horse Armor"
+ },
+ {
+ "internalName": "gold_horse_armor",
+ "displayName": "Gold Horse Armor"
+ },
+ {
+ "internalName": "comparator",
+ "displayName": "Redstone Comparator"
+ },
+ {
+ "internalName": "carrotGolden",
+ "displayName": "Golden Carrot"
+ },
+ {
+ "internalName": "minecart_chest",
+ "displayName": "Minecart with Chest"
+ },
+ {
+ "internalName": "pumpkinPie",
+ "displayName": "Pumpkin Pie"
+ },
+ {
+ "internalName": "monsterPlacer",
+ "displayName": "Spawn Egg",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Mob_Creeper_Colour1",
+ "variants": [
+ "Mob_Creeper_Colour1",
+ "Mob_Skeleton_Colour1",
+ "Mob_Spider_Colour1",
+ "Mob_Zombie_Colour1",
+ "Mob_Slime_Colour1",
+ "Mob_Ghast_Colour1",
+ "Mob_PigZombie_Colour1",
+ "Mob_Enderman_Colour1",
+ "Mob_CaveSpider_Colour1",
+ "Mob_Silverfish_Colour1",
+ "Mob_Blaze_Colour1",
+ "Mob_LavaSlime_Colour1",
+ "Mob_Pig_Colour1",
+ "Mob_Sheep_Colour1",
+ "Mob_Cow_Colour1",
+ "Mob_Chicken_Colour1",
+ "Mob_Squid_Colour1",
+ "Mob_Wolf_Colour1",
+ "Mob_MushroomCow_Colour1",
+ "Mob_Ocelot_Colour1",
+ "Mob_Villager_Colour1",
+ "Mob_Bat_Colour1",
+ "Mob_Witch_Colour1",
+ "Mob_Horse_Colour1",
+ "Mob_Endermite_Color1",
+ "Mob_Guardian_Color1",
+ "Mob_Rabbit_Colour1",
+ "Mob_PolarBear_Colour1",
+ "Mob_Shulker_Colour1",
+ "Mob_Elder_Guardian_Colour1",
+ "Mob_Evocation_Illager_Colour1",
+ "Mob_Llama_Colour1",
+ "Mob_Donkey_Colour1",
+ "Mob_Skeleton_Horse_Colour1",
+ "Mob_Zombie_Horse_Colour1",
+ "Mob_Mule_Colour1",
+ "Mob_Stray_Colour1",
+ "Mob_Husk_Colour1",
+ "Mob_Vex_Colour1",
+ "Mob_Vindication_Illager_Colour1",
+ "Mob_Zombie_Villager_Colour1",
+ "Mob_Parrot_Colour1",
+ "Mob_Wither_Skeleton_Colour1",
+ "Mob_Turtle_Colour1",
+ "Mob_Tropical_Colour1",
+ "Mob_Cod_Colour1",
+ "Mob_Pufferfish_Colour1",
+ "Mob_Salmon_Colour1",
+ "Mob_Drowned_Colour1",
+ "Mob_Dolphin_Colour1",
+ "Mob_Phantom_Colour1"
+ ]
+ }
+ },
+ {
+ "internalName": "potion_splash",
+ "displayName": "Splash Potion"
+ },
+ {
+ "internalName": "eyeOfEnder",
+ "displayName": "Eye of Ender"
+ },
+ {
+ "internalName": "cauldron",
+ "displayName": "Cauldron"
+ },
+ {
+ "internalName": "blazePowder",
+ "displayName": "Blaze Powder"
+ },
+ {
+ "internalName": "dyePowder_purple",
+ "displayName": "Purple Dye"
+ },
+ {
+ "internalName": "dyePowder_magenta",
+ "displayName": "Magenta Dye"
+ },
+ {
+ "internalName": "chestplateCloth_overlay",
+ "displayName": "Leather Tunic (Overlay)"
+ },
+ {
+ "internalName": "tipped_arrow_base",
+ "displayName": "Tipped Arrow"
+ },
+ {
+ "internalName": "dragon_breath",
+ "displayName": "Dragon's Breath"
+ },
+ {
+ "internalName": "name_tag",
+ "displayName": "Name Tag"
+ },
+ {
+ "internalName": "lead",
+ "displayName": "Lead"
+ },
+ {
+ "internalName": "netherbrick",
+ "displayName": "Nether Brick"
+ },
+ {
+ "internalName": "fish_clownfish_raw",
+ "displayName": "Tropical Fish"
+ },
+ {
+ "internalName": "minecart_furnace",
+ "displayName": "Minecart with Furnace"
+ },
+ {
+ "internalName": "charcoal",
+ "displayName": "Charcoal"
+ },
+ {
+ "internalName": "monsterPlacer_overlay",
+ "displayName": "Spawn Egg (Overlay)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Mob_Creeper_Colour2",
+ "variants": [
+ "Mob_Creeper_Colour2",
+ "Mob_Skeleton_Colour2",
+ "Mob_Spider_Colour2",
+ "Mob_Zombie_Colour2",
+ "Mob_Slime_Colour2",
+ "Mob_Ghast_Colour2",
+ "Mob_PigZombie_Colour2",
+ "Mob_Enderman_Colour2",
+ "Mob_CaveSpider_Colour2",
+ "Mob_Silverfish_Colour2",
+ "Mob_Blaze_Colour2",
+ "Mob_LavaSlime_Colour2",
+ "Mob_Pig_Colour2",
+ "Mob_Sheep_Colour2",
+ "Mob_Cow_Colour2",
+ "Mob_Chicken_Colour2",
+ "Mob_Squid_Colour2",
+ "Mob_Wolf_Colour2",
+ "Mob_MushroomCow_Colour2",
+ "Mob_Ocelot_Colour2",
+ "Mob_Villager_Colour2",
+ "Mob_Bat_Colour2",
+ "Mob_Witch_Colour2",
+ "Mob_Horse_Colour2",
+ "Mob_Endermite_Color2",
+ "Mob_Guardian_Color2",
+ "Mob_Rabbit_Colour2",
+ "Mob_PolarBear_Colour2",
+ "Mob_Shulker_Colour2",
+ "Mob_Elder_Guardian_Colour2",
+ "Mob_Evocation_Illager_Colour2",
+ "Mob_Llama_Colour2",
+ "Mob_Donkey_Colour2",
+ "Mob_Skeleton_Horse_Colour2",
+ "Mob_Zombie_Horse_Colour2",
+ "Mob_Mule_Colour2",
+ "Mob_Stray_Colour2",
+ "Mob_Husk_Colour2",
+ "Mob_Vex_Colour2",
+ "Mob_Vindication_Illager_Colour2",
+ "Mob_Zombie_Villager_Colour2",
+ "Mob_Parrot_Colour2",
+ "Mob_Wither_Skeleton_Colour2",
+ "Mob_Turtle_Colour2",
+ "Mob_Tropical_Colour2",
+ "Mob_Cod_Colour2",
+ "Mob_Pufferfish_Colour2",
+ "Mob_Salmon_Colour2",
+ "Mob_Drowned_Colour2",
+ "Mob_Dolphin_Colour2",
+ "Mob_Phantom_Colour2"
+ ]
+ }
+ },
+ {
+ "internalName": "bed_overlay",
+ "displayName": "Bed (Overlay)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Bed_White",
+ "variants": [
+ "Bed_Black",
+ "Bed_Blue",
+ "Bed_Brown",
+ "Bed_Cyan",
+ "Bed_Grey",
+ "Bed_Green",
+ "Bed_Light_Blue",
+ "Bed_Lime",
+ "Bed_Magenta",
+ "Bed_Orange",
+ "Bed_Pink",
+ "Bed_Purple",
+ "Bed_Red",
+ "Bed_Silver",
+ "Bed_White",
+ "Bed_Yellow"
+ ]
+ }
+ },
+ {
+ "internalName": "expBottle",
+ "displayName": "Bottle o'Enchanting"
+ },
+ {
+ "internalName": "brewingStand",
+ "displayName": "Brewing Stand"
+ },
+ {
+ "internalName": "magmaCream",
+ "displayName": "Magma Cream"
+ },
+ {
+ "internalName": "dyePowder_cyan",
+ "displayName": "Cyan Dye"
+ },
+ {
+ "internalName": "dyePowder_orange",
+ "displayName": "Orange Dye"
+ },
+ {
+ "internalName": "leggingsCloth_overlay",
+ "displayName": "Leather Pants (Overlay)"
+ },
+ {
+ "internalName": "tipped_arrow_head",
+ "displayName": "Tipped Arrow (Overlay)"
+ },
+ {
+ "internalName": "potion_bottle_lingering",
+ "displayName": "Lingering Potion"
+ },
+ {
+ "internalName": "barrier",
+ "displayName": "debug_fourj_item"
+ },
+ {
+ "internalName": "mutton_raw",
+ "displayName": "Raw Mutton"
+ },
+ {
+ "internalName": "rabbit_raw",
+ "displayName": "Raw Rabbit"
+ },
+ {
+ "internalName": "fish_pufferfish_raw",
+ "displayName": "Pufferfish"
+ },
+ {
+ "internalName": "minecart_hopper",
+ "displayName": "Minecart with Hopper"
+ },
+ {
+ "internalName": "hopper",
+ "displayName": "Hopper"
+ },
+ {
+ "internalName": "nether_star",
+ "displayName": "Nether Star"
+ },
+ {
+ "internalName": "emerald",
+ "displayName": "Emerald"
+ },
+ {
+ "internalName": "writingBook",
+ "displayName": "Book and Quill"
+ },
+ {
+ "internalName": "writtenBook",
+ "displayName": "Written Book"
+ },
+ {
+ "internalName": "flowerPot",
+ "displayName": "Flower Pot"
+ },
+ {
+ "internalName": "dyePowder_silver",
+ "displayName": "Light Gray Dye"
+ },
+ {
+ "internalName": "dyePowder_white",
+ "displayName": "Bone Meal"
+ },
+ {
+ "internalName": "bootsCloth_overlay",
+ "displayName": "Leather Boots (Overlay)"
+ },
+ {
+ "internalName": "beetroot",
+ "displayName": "Beetroot"
+ },
+ {
+ "internalName": "beetroot_seeds",
+ "displayName": "Beetroot Seeds"
+ },
+ {
+ "internalName": "beetroot_soup",
+ "displayName": "Beetroot Soup"
+ },
+ {
+ "internalName": "mutton_cooked",
+ "displayName": "Cooked Mutton"
+ },
+ {
+ "internalName": "rabbit_cooked",
+ "displayName": "Cooked Rabbit"
+ },
+ {
+ "internalName": "fish_salmon_raw",
+ "displayName": "Raw Salmon"
+ },
+ {
+ "internalName": "minecart_tnt",
+ "displayName": "Minecart with TNT"
+ },
+ {
+ "internalName": "wooden_armorstand",
+ "displayName": "Armor Stand"
+ },
+ {
+ "internalName": "fireworks",
+ "displayName": "Firework Rocket"
+ },
+ {
+ "internalName": "fireworks_charge",
+ "displayName": "Firework Star"
+ },
+ {
+ "internalName": "fireworks_charge_overlay",
+ "displayName": "Firework Star (Overlay)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "",
+ "variants": [""]
+ }
+ },
+ {
+ "internalName": "netherquartz",
+ "displayName": "Nether Quartz"
+ },
+ {
+ "internalName": "map_empty",
+ "displayName": "Empty Map"
+ },
+ {
+ "internalName": "frame",
+ "displayName": "Item Frame"
+ },
+ {
+ "internalName": "enchantedBook",
+ "displayName": "Enchanted Book"
+ },
+ {
+ "internalName": "door_acacia",
+ "displayName": "Acacia Door"
+ },
+ {
+ "internalName": "door_birch",
+ "displayName": "Birch Door"
+ },
+ {
+ "internalName": "door_dark_oak",
+ "displayName": "Dark Oak Door"
+ },
+ {
+ "internalName": "door_jungle",
+ "displayName": "Jungle Door"
+ },
+ {
+ "internalName": "door_spruce",
+ "displayName": "Spruce Door"
+ },
+ {
+ "internalName": "rabbit_stew",
+ "displayName": "Rabbit Stew"
+ },
+ {
+ "internalName": "fish_salmon_cooked",
+ "displayName": "Cooked Salmon"
+ },
+ {
+ "internalName": "minecart_command_block",
+ "displayName": "Minecart with Command Block"
+ },
+ {
+ "internalName": "acacia_boat",
+ "displayName": "Acacia Boat"
+ },
+ {
+ "internalName": "birch_boat",
+ "displayName": "Birch Boat"
+ },
+ {
+ "internalName": "dark_oak_boat",
+ "displayName": "Dark Oak Boat"
+ },
+ {
+ "internalName": "jungle_boat",
+ "displayName": "Jungle Boat"
+ },
+ {
+ "internalName": "spruce_boat",
+ "displayName": "Spruce Boat"
+ },
+ {
+ "internalName": "prismarine_shard",
+ "displayName": "Prismarine Shard"
+ },
+ {
+ "internalName": "prismarine_crystals",
+ "displayName": "Prismarine Crystals"
+ },
+ {
+ "internalName": "leather_horse_armor_base",
+ "displayName": "Leather Horse Armor",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "Armour_Default_Leather_Colour",
+ "variants": [ "Armour_Default_Leather_Colour" ]
+ }
+ },
+ {
+ "internalName": "structure_void",
+ "displayName": "Structure Void"
+ },
+ {
+ "internalName": "map_filled_markings",
+ "displayName": "Filled Map (Overlay)"
+ },
+ {
+ "internalName": "totem",
+ "displayName": "Totem of Undying"
+ },
+ {
+ "internalName": "shulker_shell",
+ "displayName": "Shulker Shell"
+ },
+ {
+ "internalName": "iron_nugget",
+ "displayName": "Iron Nugget"
+ },
+ {
+ "internalName": "rabbit_foot",
+ "displayName": "Rabbit's Foot"
+ },
+ {
+ "internalName": "rabbit_hide",
+ "displayName": "Rabbit Hide"
+ },
+ {
+ "internalName": "compass",
+ "displayName": ""
+ },
+ {
+ "internalName": "compass",
+ "displayName": ""
+ },
+ {
+ "internalName": "compass",
+ "displayName": ""
+ },
+ {
+ "internalName": "compass",
+ "displayName": ""
+ },
+ {
+ "internalName": "clock",
+ "displayName": ""
+ },
+ {
+ "internalName": "clock",
+ "displayName": ""
+ },
+ {
+ "internalName": "clock",
+ "displayName": ""
+ },
+ {
+ "internalName": "clock",
+ "displayName": ""
+ },
+ {
+ "internalName": "dragonFireball",
+ "displayName": "Dragon Fireball"
+ },
+ {
+ "internalName": "record_13",
+ "displayName": "Music Disc (C418 - 13)"
+ },
+ {
+ "internalName": "record_cat",
+ "displayName": "Music Disc (C418 - cat)"
+ },
+ {
+ "internalName": "record_blocks",
+ "displayName": "Music Disc (C418 - blocks)"
+ },
+ {
+ "internalName": "record_chirp",
+ "displayName": "Music Disc (C418 - chirp)"
+ },
+ {
+ "internalName": "record_far",
+ "displayName": "Music Disc (C418 - far)"
+ },
+ {
+ "internalName": "record_mall",
+ "displayName": "Music Disc (C418 - mall)"
+ },
+ {
+ "internalName": "record_mellohi",
+ "displayName": "Music Disc (C418 - mellohi)"
+ },
+ {
+ "internalName": "record_stal",
+ "displayName": "Music Disc (C418 - stal)"
+ },
+ {
+ "internalName": "record_strad",
+ "displayName": "Music Disc (C418 - strad)"
+ },
+ {
+ "internalName": "record_ward",
+ "displayName": "Music Disc (C418 - ward)"
+ },
+ {
+ "internalName": "record_11",
+ "displayName": "Music Disc (C418 - 11)"
+ },
+ {
+ "internalName": "record_where are we now",
+ "displayName": "Music Disc (C418 - wait)"
+ },
+ {
+ "internalName": "bucketFish",
+ "displayName": "Bucket of Cod"
+ },
+ {
+ "internalName": "bucketSalmon",
+ "displayName": "Bucket of Salmon"
+ },
+ {
+ "internalName": "bucketPuffer",
+ "displayName": "Bucket of Pufferfish"
+ },
+ {
+ "internalName": "bucketTropical",
+ "displayName": "Bucket of Tropical Fish"
+ },
+ {
+ "internalName": "leather_horse_armor_detail",
+ "displayName": "Leather Horse Armor (Overlay)"
+ },
+ {
+ "internalName": "dyePowder_black1",
+ "displayName": "Black Dye [PS4 ONLY]"
+ },
+ {
+ "internalName": "dyePowder_blue1",
+ "displayName": "Blue Dye [PS4 ONLY]"
+ },
+ {
+ "internalName": "dyePowder_brown1",
+ "displayName": "Brown Dye [PS4 ONLY]"
+ },
+ {
+ "internalName": "dyePowder_white1",
+ "displayName": "White Dye [PS4 ONLY]"
+ },
+ {
+ "internalName": "bamboo",
+ "displayName": "Bamboo [PS4 ONLY]"
+ },
+ {
+ "internalName": "lantern_carried",
+ "displayName": "Lantern [PS4 ONLY]"
+ },
+ {
+ "internalName": "kelp",
+ "displayName": "Kelp"
+ },
+ {
+ "internalName": "dried_kelp",
+ "displayName": "Dried Kelp"
+ },
+ {
+ "internalName": "sea_pickle",
+ "displayName": "Sea Pickle"
+ },
+ {
+ "internalName": "nautilus",
+ "displayName": "Nautilus Shell"
+ },
+ {
+ "internalName": "nautilus_core",
+ "displayName": "Heart of the Sea"
+ },
+ {
+ "internalName": "turtle_helmet",
+ "displayName": "Turtle Shell"
+ },
+ {
+ "internalName": "turtle_shell_piece",
+ "displayName": "Scute"
+ },
+ {
+ "internalName": "trident",
+ "displayName": "Trident"
+ },
+ {
+ "internalName": "phantom_membrane",
+ "displayName": "Phantom Membrane"
+ },
+ {
+ "internalName": "acacia_sign",
+ "displayName": "Acacia Sign [PS4 ONLY]"
+ },
+ {
+ "internalName": "birch_sign",
+ "displayName": "Birch Sign [PS4 ONLY]"
+ },
+ {
+ "internalName": "dark_oak_sign",
+ "displayName": "Dark Oak Sign [PS4 ONLY]"
+ },
+ {
+ "internalName": "jungle_sign",
+ "displayName": "Jungle Sign [PS4 ONLY]"
+ },
+ {
+ "internalName": "spruce_sign",
+ "displayName": "Spruce Sign [PS4 ONLY]"
+ },
+ {
+ "internalName": "crossbow",
+ "displayName": "Crossbow [PS4 ONLY]"
+ },
+ {
+ "internalName": "crossbow_pull_0",
+ "displayName": "Crossbow (Pulling Stage 1) [PS4 ONLY]"
+ },
+ {
+ "internalName": "crossbow_pull_1",
+ "displayName": "Crossbow (Pulling Stage 2) [PS4 ONLY]"
+ },
+ {
+ "internalName": "crossbow_pull_2",
+ "displayName": "Crossbow (Pulling Stage 3) [PS4 ONLY]"
+ },
+ {
+ "internalName": "crossbow_arrow",
+ "displayName": "Crossbow (Loaded) [PS4 ONLY]"
+ },
+ {
+ "internalName": "crossbow_firework",
+ "displayName": "Crossbow (Loaded) (Firework) [PS4 ONLY]"
+ },
+ {
+ "internalName": "sweet_berries",
+ "displayName": "Sweet Berries [PS4 ONLY]"
+ },
+ {
+ "internalName": "banner_pattern",
+ "displayName": "Banner Pattern [PS4 ONLY]"
+ },
+ {
+ "internalName": "bell",
+ "displayName": "Bell [PS4 ONLY]"
+ },
+ {
+ "internalName": "campfire_carried",
+ "displayName": "Campfire [PS4 ONLY]"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/items.png b/PCK-Studio/Resources/atlases/items.png
similarity index 100%
rename from PCK-Studio/Resources/items.png
rename to PCK-Studio/Resources/atlases/items.png
diff --git a/PCK-Studio/Resources/atlases/mapIconData.json b/PCK-Studio/Resources/atlases/mapIconData.json
new file mode 100644
index 00000000..8e1273f2
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/mapIconData.json
@@ -0,0 +1,135 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "player_1",
+ "displayName": "Player 1"
+ },
+ {
+ "internalName": "player_2",
+ "displayName": "Player 2"
+ },
+ {
+ "internalName": "player_3",
+ "displayName": "Player 3"
+ },
+ {
+ "internalName": "player_4",
+ "displayName": "Player 4"
+ },
+ {
+ "internalName": "target_x",
+ "displayName": "Unused"
+ },
+ {
+ "internalName": "target_point",
+ "displayName": "Target Point (Unused)"
+ },
+ {
+ "internalName": "player_off_map",
+ "displayName": "Player (Off Map) (Unused)"
+ },
+ {
+ "internalName": "frame",
+ "displayName": "Item Frame"
+ },
+ {
+ "internalName": "player_5",
+ "displayName": "Player 5"
+ },
+ {
+ "internalName": "player_6",
+ "displayName": "Player 6"
+ },
+ {
+ "internalName": "player_7",
+ "displayName": "Player 7"
+ },
+ {
+ "internalName": "player_8",
+ "displayName": "Player 8"
+ },
+ {
+ "internalName": "structure",
+ "displayName": "Structure (Explorer Map)"
+ },
+ {
+ "internalName": "player_off_limits",
+ "displayName": "Player (Off Limits) (Unused)"
+ },
+ {
+ "internalName": "mansion",
+ "displayName": "Woodland Mansion (Explorer Map)"
+ },
+ {
+ "internalName": "monument",
+ "displayName": "Ocean Monument (Explorer Map)"
+ }
+ ],
+ "additional_entries": [
+ {
+ "internalName": "player_1_off_map",
+ "displayName": "Player 1 (Off Map)"
+ },
+ {
+ "internalName": "player_2_off_map",
+ "displayName": "Player 2 (Off Map)"
+ },
+ {
+ "internalName": "player_3_off_map",
+ "displayName": "Player 3 (Off Map)"
+ },
+ {
+ "internalName": "player_4_off_map",
+ "displayName": "Player 4 (Off Map)"
+ },
+ {
+ "internalName": "treasure",
+ "displayName": "Buried Treasure"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "player_5_off_map",
+ "displayName": "Player 5 (Off Map)"
+ },
+ {
+ "internalName": "player_6_off_map",
+ "displayName": "Player 6 (Off Map)"
+ },
+ {
+ "internalName": "player_7_off_map",
+ "displayName": "Player 7 (Off Map)"
+ },
+ {
+ "internalName": "player_8_off_map",
+ "displayName": "Player 8 (Off Map)"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/atlases/map_icons.png b/PCK-Studio/Resources/atlases/map_icons.png
new file mode 100644
index 00000000..7b6ecd13
Binary files /dev/null and b/PCK-Studio/Resources/atlases/map_icons.png differ
diff --git a/PCK-Studio/Resources/atlases/moonPhaseData.json b/PCK-Studio/Resources/atlases/moonPhaseData.json
new file mode 100644
index 00000000..506e7f6f
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/moonPhaseData.json
@@ -0,0 +1,37 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "moon_phase_0",
+ "displayName": "Full Moon"
+ },
+ {
+ "internalName": "moon_phase_1",
+ "displayName": "Waning Gibbous"
+ },
+ {
+ "internalName": "moon_phase_2",
+ "displayName": "Last Quarter"
+ },
+ {
+ "internalName": "moon_phase_3",
+ "displayName": "Waning Crescent"
+ },
+ {
+ "internalName": "moon_phase_4",
+ "displayName": "New Moon"
+ },
+ {
+ "internalName": "moon_phase_5",
+ "displayName": "Waxing Crescent"
+ },
+ {
+ "internalName": "moon_phase_6",
+ "displayName": "First Quarter"
+ },
+ {
+ "internalName": "moon_phase_7",
+ "displayName": "Waxing Gibbous"
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/atlases/moon_phases.png b/PCK-Studio/Resources/atlases/moon_phases.png
new file mode 100644
index 00000000..ce239ea7
Binary files /dev/null and b/PCK-Studio/Resources/atlases/moon_phases.png differ
diff --git a/PCK-Studio/Resources/atlases/paintingData.json b/PCK-Studio/Resources/atlases/paintingData.json
new file mode 100644
index 00000000..5b5b0ef9
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/paintingData.json
@@ -0,0 +1,1062 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "Kebab",
+ "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "Aztec",
+ "displayName": "\"de_aztec\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "Alban",
+ "displayName": "\"Albanian\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "Aztec2",
+ "displayName": "\"de_aztec\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "Bomb",
+ "displayName": "\"Target Successfully Bombed\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "Plant",
+ "displayName": "\"Paradisträd\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "Wasteland",
+ "displayName": "\"Wasteland\" by Kristoffer Zetterstrand"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": "Back Texture",
+ "width": 4,
+ "height": 4
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "1x1E1",
+ "displayName": "Extra Painting 1"
+ },
+ {
+ "internalName": "1x1E2",
+ "displayName": "Extra Painting 2"
+ },
+ {
+ "internalName": "1x1E3",
+ "displayName": "Extra Painting 3"
+ },
+ {
+ "internalName": "1x1E4",
+ "displayName": "Extra Painting 4"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pool",
+ "displayName": "\"The Pool\" by Kristoffer Zetterstrand",
+ "width": 2
+ },
+ {
+ "internalName": "Pool",
+ "displayName": ""
+ },
+ {
+ "internalName": "Courbet",
+ "displayName": "\"Bonjour Monsieur Courbet\" by Kristoffer Zetterstrand",
+ "width": 2
+ },
+ {
+ "internalName": "Courbet",
+ "displayName": ""
+ },
+ {
+ "internalName": "Sea",
+ "displayName": "\"Seaside\" by Kristoffer Zetterstrand",
+ "width": 2
+ },
+ {
+ "internalName": "Sea",
+ "displayName": ""
+ },
+ {
+ "internalName": "Sunset",
+ "displayName": "\"sunset_dense\" by Kristoffer Zetterstrand",
+ "width": 2
+ },
+ {
+ "internalName": "Sunset",
+ "displayName": ""
+ },
+ {
+ "internalName": "Creebet",
+ "displayName": "\"Creebet\" by Kristoffer Zetterstrand",
+ "width": 2
+ },
+ {
+ "internalName": "Creebet",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": ""
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Back",
+ "displayName": "",
+ },
+ {
+ "internalName": "Wanderer",
+ "displayName": "\"Wanderer\" by Kristoffer Zetterstrand",
+ "height": 2
+ },
+ {
+ "internalName": "Graham",
+ "displayName": "\"Graham\" by Kristoffer Zetterstrand",
+ "height": 2
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "\"Mortal Coil\" by Kristoffer Zetterstrand",
+ "width": 4,
+ "height": 3
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Wanderer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Graham",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": "",
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": "\"Fighters\" by Kristoffer Zetterstrand",
+ "width": 4,
+ "height": 2
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": ""
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": ""
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": ""
+ },
+ {
+ "internalName": "Skeleton",
+ "displayName": ""
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "Fighters",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": "\"Kong\" by Kristoffer Zetterstrand",
+ "width": 4,
+ "height": 3
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "Match",
+ "displayName": "\"Match\" by Kristoffer Zetterstrand",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "Match",
+ "displayName": ""
+ },
+ {
+ "internalName": "Bust",
+ "displayName": "\"Bust\" by Kristoffer Zetterstrand",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "Bust",
+ "displayName": ""
+ },
+ {
+ "internalName": "Stage",
+ "displayName": "\"The stage is set\" by Kristoffer Zetterstrand",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "Stage",
+ "displayName": ""
+ },
+ {
+ "internalName": "Void",
+ "displayName": "\"The Void\" by Kristoffer Zetterstrand",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "Void",
+ "displayName": ""
+ },
+ {
+ "internalName": "SkullAndRoses",
+ "displayName": "\"Skull and Roses\" by Kristoffer Zetterstrand",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "SkullAndRoses",
+ "displayName": ""
+ },
+ {
+ "internalName": "Wither",
+ "displayName": "\"Wither\" by Jens Bergensten",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "Wither",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": ""
+ },
+ {
+ "internalName": "Match",
+ "displayName": ""
+ },
+ {
+ "internalName": "Match",
+ "displayName": ""
+ },
+ {
+ "internalName": "Bust",
+ "displayName": ""
+ },
+ {
+ "internalName": "Bust",
+ "displayName": ""
+ },
+ {
+ "internalName": "Stage",
+ "displayName": ""
+ },
+ {
+ "internalName": "Stage",
+ "displayName": ""
+ },
+ {
+ "internalName": "Void",
+ "displayName": ""
+ },
+ {
+ "internalName": "Void",
+ "displayName": ""
+ },
+ {
+ "internalName": "SkullAndRoses",
+ "displayName": ""
+ },
+ {
+ "internalName": "SkullAndRoses",
+ "displayName": ""
+ },
+ {
+ "internalName": "Wither",
+ "displayName": ""
+ },
+ {
+ "internalName": "Wither",
+ "displayName": ""
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": "",
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": "",
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": "",
+ },
+ {
+ "internalName": "DonkeyKong",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": "\"Pointer\" by Kristoffer Zetterstrand",
+ "width": 4,
+ "height": 4
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": "\"Pigscene\" by Kristoffer Zetterstrand",
+ "width": 4,
+ "height": 4
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": "\"Skull On Fire\" by Kristoffer Zetterstrand",
+ "width": 4,
+ "height": 4
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": "",
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pointer",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": "",
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "Pigscene",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": "",
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "BurningSkull",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ },
+ {
+ "internalName": "",
+ "displayName": "",
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/atlases/paintings.png b/PCK-Studio/Resources/atlases/paintings.png
new file mode 100644
index 00000000..b8bc84fe
Binary files /dev/null and b/PCK-Studio/Resources/atlases/paintings.png differ
diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json
new file mode 100644
index 00000000..e89bcf85
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/particleData.json
@@ -0,0 +1,2112 @@
+{
+ "COMMENT_1": "JSON by MattNL",
+ "entries": [
+ {
+ "internalName": "generic_0",
+ "displayName": "Generic (Stage 1)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_1",
+ "displayName": "Generic (Stage 2)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_2",
+ "displayName": "Generic (Stage 3)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_3",
+ "displayName": "Generic (Stage 4)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_4",
+ "displayName": "Generic (Stage 5)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_5",
+ "displayName": "Generic (Stage 6)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_6",
+ "displayName": "Generic (Stage 7)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "generic_7",
+ "displayName": "Generic (Stage 8)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_Smoke",
+ "Particle_NetherPortal",
+ "Particle_EnderPortal",
+ "Particle_Ender",
+ "Particle_DragonBreathMin",
+ "Particle_DragonBreathMax"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "unused_splash_0",
+ "displayName": "Splash (Stage 1) (Unused)"
+ },
+ {
+ "internalName": "unused_splash_1",
+ "displayName": "Splash (Stage 2) (Unused)"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "splash_0",
+ "displayName": "Splash (Stage 1)"
+ },
+ {
+ "internalName": "splash_1",
+ "displayName": "Splash (Stage 2)"
+ },
+ {
+ "internalName": "splash_2",
+ "displayName": "Splash (Stage 3)"
+ },
+ {
+ "internalName": "splash_3",
+ "displayName": "Splash (Stage 4)"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "classic_bubble",
+ "displayName": "Bubble (Unused)"
+ },
+ {
+ "internalName": "bobber",
+ "displayName": "Fishing Bobber"
+ },
+ {
+ "internalName": "bubble",
+ "displayName": "Bubble",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "isWaterColour": true,
+ "defaultName": "Water_Plains",
+ "variants": [
+ "Water_Ocean",
+ "Water_Plains",
+ "Water_Desert",
+ "Water_ExtremeHills",
+ "Water_Forest",
+ "Water_Taiga",
+ "Water_Swampland",
+ "Water_River",
+ "Water_Hell",
+ "Water_Sky",
+ "Water_FrozenOcean",
+ "Water_FrozenRiver",
+ "Water_IcePlains",
+ "Water_IceMountains",
+ "Water_MushroomIsland",
+ "Water_MushroomIslandShore",
+ "Water_Beach",
+ "Water_DesertHills",
+ "Water_ForestHills",
+ "Water_TaigaHills",
+ "Water_ExtremeHillsEdge",
+ "Water_Jungle",
+ "Water_JungleHills",
+ "Water_JungleEdge",
+ "Water_DeepOcean",
+ "Water_StoneBeach",
+ "Water_ColdBeach",
+ "Water_BirchForest",
+ "Water_BirchForestHills",
+ "Water_RoofedForest",
+ "Water_ColdTaiga",
+ "Water_ColdTaigaHills",
+ "Water_MegaTaiga",
+ "Water_MegaTaigaHills",
+ "Water_ExtremeHillsPlus",
+ "Water_Savanna",
+ "Water_SavannaPlateau",
+ "Water_Mesa",
+ "Water_MesaPlateauF",
+ "Water_MesaPlateau"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": "Firework Flash",
+ "width": 4,
+ "height": 4,
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "",
+ "variants": [""]
+ }
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "flame",
+ "displayName": "Flame"
+ },
+ {
+ "internalName": "lava",
+ "displayName": "Lava"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "note",
+ "displayName": "Noteblock Note",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_Note_00",
+ "variants": [
+ "Particle_Note_00",
+ "Particle_Note_01",
+ "Particle_Note_02",
+ "Particle_Note_03",
+ "Particle_Note_04",
+ "Particle_Note_05",
+ "Particle_Note_06",
+ "Particle_Note_07",
+ "Particle_Note_08",
+ "Particle_Note_09",
+ "Particle_Note_10",
+ "Particle_Note_11",
+ "Particle_Note_12",
+ "Particle_Note_13",
+ "Particle_Note_14",
+ "Particle_Note_15",
+ "Particle_Note_16",
+ "Particle_Note_17",
+ "Particle_Note_18",
+ "Particle_Note_19",
+ "Particle_Note_20",
+ "Particle_Note_21",
+ "Particle_Note_22",
+ "Particle_Note_23",
+ "Particle_Note_24",
+ ]
+ }
+ },
+ {
+ "internalName": "critical_hit",
+ "displayName": "Critical Hit",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "critical_hit",
+ "variants": [ "critical_hit" ]
+ }
+ },
+ {
+ "internalName": "enchanted_hit",
+ "displayName": "Enchanted Hit",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "critical_hit",
+ "variants": [ "critical_hit" ]
+ }
+ },
+ {
+ "internalName": "damage",
+ "displayName": "Damage Indicator"
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "heart",
+ "displayName": "Heart"
+ },
+ {
+ "internalName": "angry",
+ "displayName": "Angry"
+ },
+ {
+ "internalName": "glint",
+ "displayName": "Glint"
+ },
+ {
+ "internalName": "angry_villager",
+ "displayName": "Angry Villager (Unused)"
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "flash",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "water_0",
+ "displayName": "Water (Stage 1) (Unused)"
+ },
+ {
+ "internalName": "water_1",
+ "displayName": "Water (Stage 2) (Unused)"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_0",
+ "displayName": "Bubble Pop (Stage 1) (Unused)",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "bubble_pop_0",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_1",
+ "displayName": "Bubble Pop (Stage 2) (Unused)",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "bubble_pop_1",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_2",
+ "displayName": "Bubble Pop (Stage 3) (Unused)",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "bubble_pop_2",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_3",
+ "displayName": "Bubble Pop (Stage 4) (Unused)",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "bubble_pop_3",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_4",
+ "displayName": "Bubble Pop (Stage 5) (Unused)",
+ "width": 2,
+ "height": 2
+ },
+ {
+ "internalName": "bubble_pop_4",
+ "displayName": ""
+ },
+ {
+ "internalName": "drip_hang",
+ "displayName": "Drip (Hang)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_DripWater",
+ "variants": [
+ "Particle_DripWater",
+ "Particle_DripLavaStart",
+ "Particle_DripLavaEnd"
+ ]
+ }
+ },
+ {
+ "internalName": "drip_fall",
+ "displayName": "Drip (Fall)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_DripWater",
+ "variants": [
+ "Particle_DripWater",
+ "Particle_DripLavaStart",
+ "Particle_DripLavaEnd"
+ ]
+ }
+ },
+ {
+ "internalName": "drip_land",
+ "displayName": "Drip (Land)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_DripWater",
+ "variants": [
+ "Particle_DripWater",
+ "Particle_DripLavaStart",
+ "Particle_DripLavaEnd"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_0",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_0",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_1",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_1",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_2",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_2",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_3",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_3",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_4",
+ "displayName": ""
+ },
+ {
+ "internalName": "bubble_pop_4",
+ "displayName": ""
+ },
+ {
+ "internalName": "effect_0",
+ "displayName": "Effect (Stage 1)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_1",
+ "displayName": "Effect (Stage 2)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_2",
+ "displayName": "Effect (Stage 3)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_3",
+ "displayName": "Effect (Stage 4)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_4",
+ "displayName": "Effect (Stage 5)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_5",
+ "displayName": "Effect (Stage 6)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_6",
+ "displayName": "Effect (Stage 7)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "effect_7",
+ "displayName": "Effect (Stage 8)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "spell_0",
+ "displayName": "Splash Effect (Stage 1)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_1",
+ "displayName": "Splash Effect (Stage 2)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_2",
+ "displayName": "Splash Effect (Stage 3)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_3",
+ "displayName": "Splash Effect (Stage 4)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_4",
+ "displayName": "Splash Effect (Stage 5)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_5",
+ "displayName": "Splash Effect (Stage 6)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_6",
+ "displayName": "Splash Effect (Stage 7)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "spell_7",
+ "displayName": "Splash Effect (Stage 8)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Potion_BaseColour",
+ "hasCustomColour": true,
+ "variants": [
+ "Potion_BaseColour",
+ "Effect_MovementSpeed",
+ "Effect_MovementSlowDown",
+ "Effect_DigSpeed",
+ "Effect_DigSlowdown",
+ "Effect_DamageBoost",
+ "Effect_Heal",
+ "Effect_Harm",
+ "Effect_Jump",
+ "Effect_Confusion",
+ "Effect_Regeneration",
+ "Effect_DamageResistance",
+ "Effect_FireResistance",
+ "Effect_WaterBreathing",
+ "Effect_Invisibility",
+ "Effect_Blindness",
+ "Effect_NightVision",
+ "Effect_Hunger",
+ "Effect_Weakness",
+ "Effect_Poison",
+ "Effect_Wither",
+ "Effect_HealthBoost",
+ "Effect_Absorption",
+ "Effect_Saturation",
+ "Effect_Levitation",
+ "Effect_Luck",
+ "Effect_BadLuck",
+ "Effect_TurtleMaster",
+ "Effect_SlowFall"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "spark_0",
+ "displayName": "Firework Spark (Stage 1)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_1",
+ "displayName": "Firework Spark (Stage 2)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_2",
+ "displayName": "Firework Spark (Stage 3)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_3",
+ "displayName": "Firework Spark (Stage 4)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_4",
+ "displayName": "Firework Spark (Stage 5)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_5",
+ "displayName": "Firework Spark (Stage 6)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_6",
+ "displayName": "Firework Spark (Stage 7)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "spark_7",
+ "displayName": "Firework Spark (Stage 8)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "hasCustomColour": true,
+ "defaultName": "None",
+ "variants": [
+ "None",
+ "Particle_ScoreRing_Small",
+ "Particle_ScoreRing_Medium",
+ "Particle_ScoreRing_Large"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "glitter_0",
+ "displayName": "Shulker/End Rod Glitter (Stage 1)"
+ },
+ {
+ "internalName": "glitter_1",
+ "displayName": "Shulker/End Rod Glitter (Stage 2)"
+ },
+ {
+ "internalName": "glitter_2",
+ "displayName": "Shulker/End Rod Glitter (Stage 3)"
+ },
+ {
+ "internalName": "glitter_3",
+ "displayName": "Shulker/End Rod Glitter (Stage 4)"
+ },
+ {
+ "internalName": "glitter_4",
+ "displayName": "Shulker/End Rod Glitter (Stage 5)"
+ },
+ {
+ "internalName": "glitter_5",
+ "displayName": "Shulker/End Rod Glitter (Stage 6)"
+ },
+ {
+ "internalName": "glitter_6",
+ "displayName": "Shulker/End Rod Glitter (Stage 7)"
+ },
+ {
+ "internalName": "glitter_7",
+ "displayName": "Shulker/End Rod Glitter (Stage 8)"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "camera_shoot_explosion_0",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 1)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_1",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 2)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_2",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 3)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_3",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 4)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_4",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 5)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_5",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 6)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_6",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 7)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_7",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 8)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_8",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 9)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_9",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 10)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_10",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 11)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_11",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 12)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_12",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 13)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_13",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 14)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_14",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 15)"
+ },
+ {
+ "internalName": "camera_shoot_explosion_15",
+ "displayName": "Bedrock Edition Explosion (Unused) (Stage 16)"
+ },
+ {
+ "internalName": "conduit_0",
+ "displayName": "Conduit (Stage 1)"
+ },
+ {
+ "internalName": "conduit_1",
+ "displayName": "Conduit (Stage 2)"
+ },
+ {
+ "internalName": "conduit_2",
+ "displayName": "Conduit (Stage 3)"
+ },
+ {
+ "internalName": "conduit_3",
+ "displayName": "Conduit (Stage 4)"
+ },
+ {
+ "internalName": "conduit_4",
+ "displayName": "Conduit (Stage 5)"
+ },
+ {
+ "internalName": "conduit_5",
+ "displayName": "Conduit (Stage 6)"
+ },
+ {
+ "internalName": "conduit_6",
+ "displayName": "Conduit (Stage 7)"
+ },
+ {
+ "internalName": "conduit_7",
+ "displayName": "Conduit (Stage 8)"
+ },
+ {
+ "internalName": "conduit_8",
+ "displayName": "Conduit (Stage 9)"
+ },
+ {
+ "internalName": "conduit_9",
+ "displayName": "Conduit (Stage 10)"
+ },
+ {
+ "internalName": "conduit_10",
+ "displayName": "Conduit (Stage 11)"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "sga_a",
+ "displayName": "Standard Galactic Language (A)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_b",
+ "displayName": "Standard Galactic Language (B)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_c",
+ "displayName": "Standard Galactic Language (C)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_d",
+ "displayName": "Standard Galactic Language (D)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_e",
+ "displayName": "Standard Galactic Language (E)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_f",
+ "displayName": "Standard Galactic Language (F)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_g",
+ "displayName": "Standard Galactic Language (G)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_h",
+ "displayName": "Standard Galactic Language (H)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_i",
+ "displayName": "Standard Galactic Language (I)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_j",
+ "displayName": "Standard Galactic Language (J)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_k",
+ "displayName": "Standard Galactic Language (K)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_l",
+ "displayName": "Standard Galactic Language (L)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_m",
+ "displayName": "Standard Galactic Language (M)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_n",
+ "displayName": "Standard Galactic Language (N)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_o",
+ "displayName": "Standard Galactic Language (O)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_p",
+ "displayName": "Standard Galactic Language (P)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_q",
+ "displayName": "Standard Galactic Language (Q)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_r",
+ "displayName": "Standard Galactic Language (R)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_s",
+ "displayName": "Standard Galactic Language (S)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_t",
+ "displayName": "Standard Galactic Language (T)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_u",
+ "displayName": "Standard Galactic Language (U)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_v",
+ "displayName": "Standard Galactic Language (V)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_w",
+ "displayName": "Standard Galactic Language (W)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_x",
+ "displayName": "Standard Galactic Language (X)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_y",
+ "displayName": "Standard Galactic Language (Y)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "sga_z",
+ "displayName": "Standard Galactic Language (Z)",
+ "hasColourEntry": true,
+ "colourEntry": {
+ "defaultName": "Particle_EnchantmentTable",
+ "variants": [
+ "Particle_EnchantmentTable"
+ ]
+ }
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ ]
+}
\ No newline at end of file
diff --git a/PCK-Studio/Resources/atlases/particles.png b/PCK-Studio/Resources/atlases/particles.png
new file mode 100644
index 00000000..b4f1e1f6
Binary files /dev/null and b/PCK-Studio/Resources/atlases/particles.png differ
diff --git a/PCK-Studio/Resources/terrain.png b/PCK-Studio/Resources/atlases/terrain.png
similarity index 100%
rename from PCK-Studio/Resources/terrain.png
rename to PCK-Studio/Resources/atlases/terrain.png
diff --git a/PCK-Studio/Resources/entities.png b/PCK-Studio/Resources/entities.png
deleted file mode 100644
index 31371595..00000000
Binary files a/PCK-Studio/Resources/entities.png and /dev/null differ
diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib
index 3209ecca..40795ea8 160000
--- a/Vendor/OMI-Lib
+++ b/Vendor/OMI-Lib
@@ -1 +1 @@
-Subproject commit 3209ecca8568933fac8c20c20a9952ee3dc1b526
+Subproject commit 40795ea8a58eb1bd4933f1cf50315d5aea4909ef