Skip to content

Commit 46415e5

Browse files
committed
Aded C# JPAK Tool
1 parent 37f35a7 commit 46415e5

139 files changed

Lines changed: 2346 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ What is done
2323
* Get file as Base64
2424
* Get file as HTML Data URI (for hide from Network Requests)
2525
* GZIP Decompress Support, forked from https://github.com/jsxgraph/jsxgraph/
26+
* Simple C# Windows Tool for Exploring and Export Content from JPAK Files
2627

2728
TODO
2829
========
2930
* Load files from JPAK only when needed. A.K.A. - Fetch only the necessary parts from jpak file.
3031
* Add option to compress files on packing.
32+
* More stuff on JPAK Explorer for Windows
33+
* JPAK Explorer for Linux
3134

3235
How to use it
3336
========

\

Whitespace-only changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 2012
4+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JPAK Explorer Win", "JPAK Explorer Win\JPAK Explorer Win.csproj", "{D1B3F540-6626-4992-AB3E-5A6199284118}"
5+
EndProject
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JPAKTool", "JPAKTool\JPAKTool.csproj", "{6C14A943-8BAC-45C1-95E8-A0E33C91C094}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{D1B3F540-6626-4992-AB3E-5A6199284118}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{D1B3F540-6626-4992-AB3E-5A6199284118}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{D1B3F540-6626-4992-AB3E-5A6199284118}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{D1B3F540-6626-4992-AB3E-5A6199284118}.Release|Any CPU.Build.0 = Release|Any CPU
18+
{6C14A943-8BAC-45C1-95E8-A0E33C91C094}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19+
{6C14A943-8BAC-45C1-95E8-A0E33C91C094}.Debug|Any CPU.Build.0 = Debug|Any CPU
20+
{6C14A943-8BAC-45C1-95E8-A0E33C91C094}.Release|Any CPU.ActiveCfg = Release|Any CPU
21+
{6C14A943-8BAC-45C1-95E8-A0E33C91C094}.Release|Any CPU.Build.0 = Release|Any CPU
22+
EndGlobalSection
23+
GlobalSection(SolutionProperties) = preSolution
24+
HideSolutionNode = FALSE
25+
EndGlobalSection
26+
EndGlobal
80 KB
Binary file not shown.

tools/JPAK Explorer Win/JPAK Explorer Win/Explorer.Designer.cs

Lines changed: 95 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/**********************************************
2+
* _ ____ _ _ __ _ ___ *
3+
* | | _ \ / \ | |/ / __ _/ | / _ \ *
4+
* _ | | |_) / _ \ | ' / \ \ / / || | | | *
5+
*| |_| | __/ ___ \| . \ \ V /| || |_| | *
6+
* \___/|_| /_/ \_\_|\_\ \_/ |_(_)___/ *
7+
* *
8+
*Multiuse Javascript Package *
9+
*By: Lucas Teske *
10+
*https://github.com/racerxdl/jpak *
11+
**********************************************/
12+
using System;
13+
using System.Collections.Generic;
14+
using System.ComponentModel;
15+
using System.Data;
16+
using System.Drawing;
17+
using System.Linq;
18+
using System.Text;
19+
using System.Windows.Forms;
20+
using System.IO;
21+
using Newtonsoft.Json.Linq;
22+
23+
namespace JPAK
24+
{
25+
public partial class Explorer : Form
26+
{
27+
ImageList TypeImages;
28+
DirectoryEntry root;
29+
DirectoryEntry currentdir;
30+
FileStream fileVol;
31+
32+
public Explorer()
33+
{
34+
InitializeComponent();
35+
}
36+
private void UpdateView(ListView view, DirectoryEntry dir)
37+
{
38+
view.Items.Clear();
39+
String[] tmp = dir.path.Split('/');
40+
String backpath = tmp.Length > 1 ? String.Join("/", Extensions.SubArray(tmp, 0, tmp.Length - 1)) : "/";
41+
if (dir != root)
42+
{
43+
ListViewItem backdir = new ListViewItem("..");
44+
backdir.Name = backpath;
45+
backdir.ImageKey = "folder";
46+
view.Items.Add(backdir);
47+
}
48+
view.LargeImageList = TypeImages;
49+
view.SmallImageList = TypeImages;
50+
foreach (DirectoryEntry dire in dir.directories)
51+
{
52+
ListViewItem f = new ListViewItem(dire.name);
53+
f.Name = dire.path;
54+
f.ImageKey = "folder";
55+
view.Items.Add(f);
56+
}
57+
foreach (FileEntry file in dir.files)
58+
{
59+
ListViewItem f = new ListViewItem(file.name);
60+
f.Name = file.path;
61+
f.ImageKey = JPAKTool.GetFileExt(file.name);
62+
view.Items.Add(f);
63+
}
64+
65+
}
66+
private void loadfile_Click(object sender, EventArgs e)
67+
{
68+
TypeImages = JPAKTool.GetFileTypeImageList();
69+
if (fileVol != null)
70+
fileVol.Close();
71+
DialogResult result = openFile.ShowDialog();
72+
if (result == DialogResult.OK)
73+
{
74+
fileVol = File.Open(openFile.FileName, FileMode.Open);
75+
if (JPAKTool.CheckJPAK(fileVol))
76+
{
77+
root = JPAKTool.GetFileTable(fileVol);
78+
currentdir = root;
79+
UpdateView(dataView, root);
80+
description.Text = "Double click on a file to export";
81+
}
82+
else
83+
{
84+
MessageBox.Show("Error: Invalid JPAK file!");
85+
}
86+
}
87+
else
88+
{
89+
description.Text = "Load a JPAK file";
90+
}
91+
}
92+
93+
94+
private void dataView_DoubleClick(object sender, EventArgs e)
95+
{
96+
ListViewItem item = dataView.SelectedItems[0];
97+
if (item.ImageKey.Equals("folder"))
98+
{
99+
String[] folders = item.Name.ToString().Split('/');
100+
DirectoryEntry newdir = root.GetFolder(Extensions.SubArray(folders,1,folders.Length-1));
101+
UpdateView(dataView, newdir);
102+
currentdir = newdir;
103+
}
104+
else
105+
{
106+
String[] path = item.Name.Split('/');
107+
String filename = Extensions.SubArray(path, path.Length - 1, 1)[0];
108+
FileEntry file = currentdir.GetFile(filename);
109+
exportFileDialog.FileName = filename;
110+
exportFileDialog.Title = "Select where to save the file.";
111+
DialogResult result = exportFileDialog.ShowDialog();
112+
if (result == DialogResult.OK)
113+
{
114+
JPAKTool.ExportFile(fileVol, exportFileDialog.FileName, file.offset, file.size);
115+
MessageBox.Show(exportFileDialog.FileName);
116+
}
117+
}
118+
119+
}
120+
}
121+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<root>
3+
<!--
4+
Microsoft ResX Schema
5+
6+
Version 2.0
7+
8+
The primary goals of this format is to allow a simple XML format
9+
that is mostly human readable. The generation and parsing of the
10+
various data types are done through the TypeConverter classes
11+
associated with the data types.
12+
13+
Example:
14+
15+
... ado.net/XML headers & schema ...
16+
<resheader name="resmimetype">text/microsoft-resx</resheader>
17+
<resheader name="version">2.0</resheader>
18+
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19+
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20+
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21+
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22+
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23+
<value>[base64 mime encoded serialized .NET Framework object]</value>
24+
</data>
25+
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26+
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27+
<comment>This is a comment</comment>
28+
</data>
29+
30+
There are any number of "resheader" rows that contain simple
31+
name/value pairs.
32+
33+
Each data row contains a name, and value. The row also contains a
34+
type or mimetype. Type corresponds to a .NET class that support
35+
text/value conversion through the TypeConverter architecture.
36+
Classes that don't support this are serialized and stored with the
37+
mimetype set.
38+
39+
The mimetype is used for serialized objects, and tells the
40+
ResXResourceReader how to depersist the object. This is currently not
41+
extensible. For a given mimetype the value must be set accordingly:
42+
43+
Note - application/x-microsoft.net.object.binary.base64 is the format
44+
that the ResXResourceWriter will generate, however the reader can
45+
read any of the formats listed below.
46+
47+
mimetype: application/x-microsoft.net.object.binary.base64
48+
value : The object must be serialized with
49+
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50+
: and then encoded with base64 encoding.
51+
52+
mimetype: application/x-microsoft.net.object.soap.base64
53+
value : The object must be serialized with
54+
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55+
: and then encoded with base64 encoding.
56+
57+
mimetype: application/x-microsoft.net.object.bytearray.base64
58+
value : The object must be serialized into a byte array
59+
: using a System.ComponentModel.TypeConverter
60+
: and then encoded with base64 encoding.
61+
-->
62+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
64+
<xsd:element name="root" msdata:IsDataSet="true">
65+
<xsd:complexType>
66+
<xsd:choice maxOccurs="unbounded">
67+
<xsd:element name="metadata">
68+
<xsd:complexType>
69+
<xsd:sequence>
70+
<xsd:element name="value" type="xsd:string" minOccurs="0" />
71+
</xsd:sequence>
72+
<xsd:attribute name="name" use="required" type="xsd:string" />
73+
<xsd:attribute name="type" type="xsd:string" />
74+
<xsd:attribute name="mimetype" type="xsd:string" />
75+
<xsd:attribute ref="xml:space" />
76+
</xsd:complexType>
77+
</xsd:element>
78+
<xsd:element name="assembly">
79+
<xsd:complexType>
80+
<xsd:attribute name="alias" type="xsd:string" />
81+
<xsd:attribute name="name" type="xsd:string" />
82+
</xsd:complexType>
83+
</xsd:element>
84+
<xsd:element name="data">
85+
<xsd:complexType>
86+
<xsd:sequence>
87+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
88+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
89+
</xsd:sequence>
90+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
91+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
92+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
93+
<xsd:attribute ref="xml:space" />
94+
</xsd:complexType>
95+
</xsd:element>
96+
<xsd:element name="resheader">
97+
<xsd:complexType>
98+
<xsd:sequence>
99+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
100+
</xsd:sequence>
101+
<xsd:attribute name="name" type="xsd:string" use="required" />
102+
</xsd:complexType>
103+
</xsd:element>
104+
</xsd:choice>
105+
</xsd:complexType>
106+
</xsd:element>
107+
</xsd:schema>
108+
<resheader name="resmimetype">
109+
<value>text/microsoft-resx</value>
110+
</resheader>
111+
<resheader name="version">
112+
<value>2.0</value>
113+
</resheader>
114+
<resheader name="reader">
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116+
</resheader>
117+
<resheader name="writer">
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119+
</resheader>
120+
<metadata name="exportFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
121+
<value>17, 17</value>
122+
</metadata>
123+
<metadata name="openFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
124+
<value>158, 17</value>
125+
</metadata>
126+
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
127+
<value>92</value>
128+
</metadata>
129+
</root>

0 commit comments

Comments
 (0)