chore: add LCRE banner, SWF/ARC tools, ignore build artifacts

Replace README banner with LCRE-banner.png. Add SWF inspection
and ARC archive tools. Ignore compiled .class, .swf intermediates,
and staging directory in tools/.
This commit is contained in:
itsRevela
2026-03-29 21:14:34 -05:00
parent 967adf1e54
commit a4f55dde16
9 changed files with 216 additions and 1 deletions

BIN
.github/LCRE-banner.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

5
.gitignore vendored
View File

@@ -415,3 +415,8 @@ build/
tmp*/
_server_asset_probe/
server-data/
# Tools build artifacts and intermediates
tools/*.class
tools/*.swf
tools/staging/

View File

@@ -1,4 +1,4 @@
![Legacy Edition Banner](.github/banner.png)
![Legacy Edition Banner](.github/LCRE-banner.png)
# MinecraftConsoles (Legacy Console Revelations Edition)
If you have any questions regarding this fork, this is my Fluxer server (similar to a Discord server):

12
tools/CheckSetImage.java Normal file
View File

@@ -0,0 +1,12 @@
import com.jpexs.decompiler.flash.tags.*;
import java.lang.reflect.*;
public class CheckSetImage {
public static void main(String[] args) {
for (Method m : DefineBitsLossless2Tag.class.getMethods()) {
if (m.getName().contains("mage") || m.getName().contains("itmap") || m.getName().contains("set")) {
System.out.println(m.getReturnType().getSimpleName() + " " + m.getName() + "(" + java.util.Arrays.toString(m.getParameterTypes()) + ")");
}
}
}
}

46
tools/DumpSwfDetail.java Normal file
View File

@@ -0,0 +1,46 @@
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.tags.*;
import com.jpexs.decompiler.flash.tags.base.*;
import com.jpexs.decompiler.flash.types.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
public class DumpSwfDetail {
public static void main(String[] args) throws Exception {
String path = args[0];
SWF swf = new SWF(new FileInputStream(path), false);
System.out.println("SWF: " + path);
System.out.println("Frame size: " + swf.displayRect);
System.out.println("Frame rate: " + swf.frameRate);
System.out.println();
for (Tag tag : swf.getTags()) {
System.out.println(tag.getClass().getSimpleName() + " - " + tag);
if (tag instanceof ImportAssets2Tag) {
ImportAssets2Tag imp = (ImportAssets2Tag) tag;
System.out.println(" URL: " + imp.url);
// Dump all fields via reflection
for (Field f : imp.getClass().getFields()) {
try {
System.out.println(" field " + f.getName() + " = " + f.get(imp));
} catch (Exception e) {}
}
}
if (tag instanceof DefineBitsLossless2Tag) {
DefineBitsLossless2Tag bmp = (DefineBitsLossless2Tag) tag;
System.out.println(" Bitmap: id=" + bmp.characterID + " " + bmp.bitmapWidth + "x" + bmp.bitmapHeight);
}
if (tag instanceof SymbolClassTag) {
SymbolClassTag sym = (SymbolClassTag) tag;
for (int i = 0; i < sym.tags.size(); i++) {
System.out.println(" Symbol: id=" + sym.tags.get(i) + " name=" + sym.names.get(i));
}
}
}
}
}

63
tools/FindLogoBitmap.java Normal file
View File

@@ -0,0 +1,63 @@
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.tags.*;
import com.jpexs.decompiler.flash.tags.base.*;
import java.io.*;
import java.util.*;
public class FindLogoBitmap {
public static void main(String[] args) throws Exception {
SWF swf = new SWF(new FileInputStream(args[0]), false);
// Find MenuTitle symbol
Map<Integer, String> symbolMap = new HashMap<>();
for (Tag tag : swf.getTags()) {
if (tag instanceof SymbolClassTag) {
SymbolClassTag sym = (SymbolClassTag) tag;
for (int i = 0; i < sym.tags.size(); i++) {
symbolMap.put(sym.tags.get(i), sym.names.get(i));
if (sym.names.get(i).contains("Title") || sym.names.get(i).contains("Logo")) {
System.out.println("Symbol: id=" + sym.tags.get(i) + " name=" + sym.names.get(i));
}
}
}
if (tag instanceof ExportAssetsTag) {
ExportAssetsTag exp = (ExportAssetsTag) tag;
for (int i = 0; i < exp.tags.size(); i++) {
if (exp.names.get(i).contains("Title") || exp.names.get(i).contains("Logo")) {
System.out.println("Export: id=" + exp.tags.get(i) + " name=" + exp.names.get(i));
}
}
}
}
// Find all bitmaps
System.out.println("\n=== Bitmaps ===");
for (Tag tag : swf.getTags()) {
if (tag instanceof DefineBitsLossless2Tag) {
DefineBitsLossless2Tag bmp = (DefineBitsLossless2Tag) tag;
String sym = symbolMap.getOrDefault(bmp.characterID, "");
System.out.println("Lossless2: id=" + bmp.characterID + " " + bmp.bitmapWidth + "x" + bmp.bitmapHeight + " sym=" + sym);
}
if (tag instanceof DefineBitsJPEG2Tag) {
DefineBitsJPEG2Tag jpg = (DefineBitsJPEG2Tag) tag;
String sym = symbolMap.getOrDefault(jpg.characterID, "");
System.out.println("JPEG2: id=" + jpg.characterID + " sym=" + sym);
}
if (tag instanceof DefineBitsJPEG3Tag) {
DefineBitsJPEG3Tag jpg = (DefineBitsJPEG3Tag) tag;
String sym = symbolMap.getOrDefault(jpg.characterID, "");
System.out.println("JPEG3: id=" + jpg.characterID + " sym=" + sym);
}
if (tag instanceof DefineBitsTag) {
DefineBitsTag bmp = (DefineBitsTag) tag;
String sym = symbolMap.getOrDefault(bmp.characterID, "");
System.out.println("Bits: id=" + bmp.characterID + " sym=" + sym);
}
if (tag instanceof DefineBitsLosslessTag) {
DefineBitsLosslessTag bmp = (DefineBitsLosslessTag) tag;
String sym = symbolMap.getOrDefault(bmp.characterID, "");
System.out.println("Lossless: id=" + bmp.characterID + " " + bmp.bitmapWidth + "x" + bmp.bitmapHeight + " sym=" + sym);
}
}
}
}

33
tools/FindMenuTitle.java Normal file
View File

@@ -0,0 +1,33 @@
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.tags.*;
import com.jpexs.decompiler.flash.tags.base.*;
import java.io.*;
public class FindMenuTitle {
public static void main(String[] args) throws Exception {
String path = args[0];
System.out.println("Scanning: " + path);
SWF swf = new SWF(new FileInputStream(path), false);
for (Tag tag : swf.getTags()) {
if (tag instanceof SymbolClassTag) {
SymbolClassTag sym = (SymbolClassTag) tag;
for (int i = 0; i < sym.tags.size(); i++) {
String name = sym.names.get(i);
if (name.contains("Menu") || name.contains("Logo") || name.contains("Title")) {
System.out.println(" Symbol: id=" + sym.tags.get(i) + " name=" + name);
}
}
}
if (tag instanceof ExportAssetsTag) {
ExportAssetsTag exp = (ExportAssetsTag) tag;
for (int i = 0; i < exp.tags.size(); i++) {
String name = exp.names.get(i);
if (name.contains("Menu") || name.contains("Logo") || name.contains("Title")) {
System.out.println(" Export: id=" + exp.tags.get(i) + " name=" + name);
}
}
}
}
}
}

View File

@@ -0,0 +1,37 @@
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.tags.*;
import com.jpexs.decompiler.flash.tags.base.*;
import java.io.*;
public class FindMenuTitleAll {
public static void main(String[] args) throws Exception {
String[] files = {"skinHD.swf", "skinHDGraphics.swf", "skinHDWin.swf", "skinHDInGame.swf", "skinHDLabels.swf", "skinHDHud.swf", "skinHDGraphicsInGame.swf", "skinHDGraphicsLabels.swf", "skinHDGraphicsHud.swf", "skin.swf", "skinGraphics.swf", "skinWin.swf"};
String base = "C:/Users/revela/Documents/Minecraft/itsRevela/Minecraft.Client/Common/Media/";
for (String file : files) {
try {
SWF swf = new SWF(new FileInputStream(base + file), false);
for (Tag tag : swf.getTags()) {
if (tag instanceof SymbolClassTag) {
SymbolClassTag sym = (SymbolClassTag) tag;
for (int i = 0; i < sym.tags.size(); i++) {
if (sym.names.get(i).contains("Title") || sym.names.get(i).contains("MenuTitle")) {
System.out.println(file + " -> Symbol: id=" + sym.tags.get(i) + " name=" + sym.names.get(i));
}
}
}
if (tag instanceof ExportAssetsTag) {
ExportAssetsTag exp = (ExportAssetsTag) tag;
for (int i = 0; i < exp.tags.size(); i++) {
if (exp.names.get(i).contains("Title") || exp.names.get(i).contains("MenuTitle")) {
System.out.println(file + " -> Export: id=" + exp.tags.get(i) + " name=" + exp.names.get(i));
}
}
}
}
} catch (Exception e) {
System.err.println("Error reading " + file + ": " + e.getMessage());
}
}
}
}

19
tools/ListArc.java Normal file
View File

@@ -0,0 +1,19 @@
import java.io.*;
import java.nio.file.*;
public class ListArc {
public static void main(String[] args) throws Exception {
DataInputStream dis = new DataInputStream(new FileInputStream(args[0]));
int numFiles = dis.readInt();
System.out.println("Files: " + numFiles);
for (int i = 0; i < numFiles; i++) {
String name = dis.readUTF();
int offset = dis.readInt();
int size = dis.readInt();
if (name.contains("ogo") || name.contains("skin") || name.contains("Menu") || name.contains("platform")) {
System.out.println(" >>> " + name + " offset=" + offset + " size=" + size);
}
}
dis.close();
}
}