Expanded pack icon feature

This commit is contained in:
MattNL
2023-06-10 07:29:39 -04:00
parent 484a49ba7a
commit 4c587a27a2
3 changed files with 121 additions and 63 deletions

View File

@@ -117,6 +117,9 @@
this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuMetaTree = new System.Windows.Forms.ContextMenuStrip(this.components);
this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.addMultipleEntriesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.deleteEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editAllEntriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -143,9 +146,6 @@
this.treeViewMain = new System.Windows.Forms.TreeView();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox();
this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode();
this.contextMenuPCKEntries.SuspendLayout();
this.menuStrip.SuspendLayout();
@@ -559,8 +559,8 @@
//
// addCustomPackImageToolStripMenuItem
//
resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem");
this.addCustomPackImageToolStripMenuItem.Name = "addCustomPackImageToolStripMenuItem";
resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem");
this.addCustomPackImageToolStripMenuItem.Click += new System.EventHandler(this.addCustomPackIconToolStripMenuItem_Click);
//
// openPckManagerToolStripMenuItem
@@ -780,6 +780,24 @@
resources.ApplyResources(this.addEntryToolStripMenuItem, "addEntryToolStripMenuItem");
this.addEntryToolStripMenuItem.Name = "addEntryToolStripMenuItem";
//
// addEntryToolStripMenuItem1
//
this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1";
resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1");
this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1);
//
// addBOXEntryToolStripMenuItem1
//
this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1";
resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1");
this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click);
//
// addANIMEntryToolStripMenuItem1
//
this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1";
resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1");
this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click);
//
// addMultipleEntriesToolStripMenuItem1
//
resources.ApplyResources(this.addMultipleEntriesToolStripMenuItem1, "addMultipleEntriesToolStripMenuItem1");
@@ -1074,24 +1092,6 @@
this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark;
this.LittleEndianCheckBox.UseSelectable = true;
//
// addEntryToolStripMenuItem1
//
this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1";
resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1");
this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1);
//
// addBOXEntryToolStripMenuItem1
//
this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1";
resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1");
this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click);
//
// addANIMEntryToolStripMenuItem1
//
this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1";
resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1");
this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click);
//
// pictureBoxImagePreview
//
resources.ApplyResources(this.pictureBoxImagePreview, "pictureBoxImagePreview");

View File

@@ -8,9 +8,11 @@ using System.Drawing.Drawing2D;
using System.Diagnostics;
using System.Drawing.Imaging;
using OMI.Formats.Archive;
using OMI.Formats.Pck;
using OMI.Formats.GameRule;
using OMI.Formats.Languages;
using OMI.Workers.Archive;
using OMI.Workers.Pck;
using OMI.Workers.GameRule;
using OMI.Workers.Language;
@@ -2065,29 +2067,88 @@ namespace PckStudio
private void addCustomPackIconToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!currentPCK.TryGetFile("0", PckFile.FileData.FileType.InfoFile, out PckFile.FileData file) ||
string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID"))
)
string packID = "0";
using NumericPrompt numericPrompt = new NumericPrompt(0);
numericPrompt.ValueUpDown.Minimum = 0; // TODO: put min pack ID value (keeping this 0 just to be safe)
numericPrompt.ValueUpDown.Maximum = 999999999; // TODO: put max pack ID value
numericPrompt.ContextLabel.Text = "Please insert the desired Pack ID";
numericPrompt.TextLabel.Text = "Pack ID";
if (currentPCK is not null)
{
MessageBox.Show("No PackID is present in this pack. To avoid this error, please open a PCK with a PackID before trying again.", "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error);
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 (!currentPCK.TryGetFile("0", PckFile.FileData.FileType.InfoFile, out PckFile.FileData 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.NewValue.ToString();
else
{
MessageBox.Show(this, "Operation cancelled");
return;
}
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Minecraft Archive|*.arc";
if (dialog.ShowDialog(this) == DialogResult.OK)
OpenFileDialog arcDialog = new OpenFileDialog();
OpenFileDialog iconDialog = new OpenFileDialog();
arcDialog.Filter = "Minecraft Archive|*.arc";
iconDialog.Filter = "Pack Icon|*.png";
if (arcDialog.ShowDialog(this) == DialogResult.OK)
{
string filepath = dialog.FileName;
dialog.Filter = "Pack Icon|*.png";
if (dialog.ShowDialog(this) == DialogResult.OK)
using (var fs = File.OpenRead(arcDialog.FileName))
{
using (var fs = File.OpenRead(filepath))
var reader = new ARCFileReader();
ConsoleArchive archive = reader.FromStream(fs);
if (iconDialog.ShowDialog(this) == DialogResult.OK)
{
ARCUtil.Inject(fs, (
string.Format("Graphics\\PackGraphics\\{0}.png", file.Properties.GetPropertyValue("PACKID")),
File.ReadAllBytes(dialog.FileName))
);
MessageBox.Show("Successfully added Pack Icon to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
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:
MessageBox.Show(this, "Operation cancelled");
return;
}
}
archive.Add(key, File.ReadAllBytes(iconDialog.FileName));
var writer = new ARCFileWriter(archive);
writer.WriteToFile(arcDialog.FileName);
MessageBox.Show($"Successfully added {key} to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}

View File

@@ -673,9 +673,6 @@
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>Edit</value>
</data>
<data name="addCustomPackImageToolStripMenuItem.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="addCustomPackImageToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
@@ -24172,19 +24169,19 @@
<value>298, 17</value>
</metadata>
<data name="addEntryToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>160, 22</value>
</data>
<data name="addEntryToolStripMenuItem1.Text" xml:space="preserve">
<value>Add Entry</value>
</data>
<data name="addBOXEntryToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>160, 22</value>
</data>
<data name="addBOXEntryToolStripMenuItem1.Text" xml:space="preserve">
<value>Add BOX Entry</value>
</data>
<data name="addANIMEntryToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>160, 22</value>
</data>
<data name="addANIMEntryToolStripMenuItem1.Text" xml:space="preserve">
<value>Add ANIM Entry</value>
@@ -24239,7 +24236,7 @@
<value>Edit All Entries</value>
</data>
<data name="contextMenuMetaTree.Size" type="System.Drawing.Size, System.Drawing">
<value>182, 114</value>
<value>182, 92</value>
</data>
<data name="&gt;&gt;contextMenuMetaTree.Name" xml:space="preserve">
<value>contextMenuMetaTree</value>
@@ -29617,6 +29614,24 @@
<data name="&gt;&gt;addEntryToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addEntryToolStripMenuItem1.Name" xml:space="preserve">
<value>addEntryToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;addEntryToolStripMenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addBOXEntryToolStripMenuItem1.Name" xml:space="preserve">
<value>addBOXEntryToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;addBOXEntryToolStripMenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addANIMEntryToolStripMenuItem1.Name" xml:space="preserve">
<value>addANIMEntryToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;addANIMEntryToolStripMenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addMultipleEntriesToolStripMenuItem1.Name" xml:space="preserve">
<value>addMultipleEntriesToolStripMenuItem1</value>
</data>
@@ -29641,24 +29656,6 @@
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addEntryToolStripMenuItem1.Name" xml:space="preserve">
<value>addEntryToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;addEntryToolStripMenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addBOXEntryToolStripMenuItem1.Name" xml:space="preserve">
<value>addBOXEntryToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;addBOXEntryToolStripMenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addANIMEntryToolStripMenuItem1.Name" xml:space="preserve">
<value>addANIMEntryToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;addANIMEntryToolStripMenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainForm</value>
</data>