Skip to content

Commit 9e1e9ed

Browse files
committed
Removed ZipFile library. Removed Start class from reobf
1 parent 33a6b27 commit 9e1e9ed

13 files changed

Lines changed: 141 additions & 114 deletions

File tree

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ dependencies {
2525
implementation 'com.github.MCPHackers:RetroFernflower:65eb7e6ba3'
2626
implementation 'org.fusesource.jansi:jansi:2.4.0'
2727
implementation 'net.fabricmc:tiny-remapper:0.6.0'
28-
implementation 'net.lingala.zip4j:zip4j:2.9.1'
2928
// TODO: Don't gut MCInjector bundled ASM
3029
implementation name: 'mcinjector'
3130
implementation name: 'SelfCommandPrompt-2.2.1'

src/main/java/org/mcphackers/mcp/MCP.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class MCP {
1313
public static EnumMode mode = null;
1414
public static EnumMode helpCommand = null;
1515
public static MCPLogger logger;
16+
public static MCPConfig config;
1617
public static Scanner input;
1718
private static final Ansi logo =
1819
new Ansi()
@@ -28,6 +29,7 @@ public static void main(String[] args) {
2829
SelfCommandPrompt.runWithCMD(SelfCommandPrompt.suggestAppId(), "RetroMCP " + VERSION, args);
2930
AnsiConsole.systemInstall();
3031
logger = new MCPLogger();
32+
config = new MCPConfig();
3133
input = new Scanner(System.in);
3234
logger.log("Operating system: " + System.getProperty("os.name"));
3335
logger.log("RetroMCP " + VERSION);
@@ -58,6 +60,9 @@ public static void main(String[] args) {
5860
}
5961
setParams(parsedArgs, mode);
6062
if (taskMode) {
63+
if(mode == EnumMode.startclient || mode == EnumMode.startserver) {
64+
config.runArgs = args;
65+
}
6166
start();
6267
} else if (mode == EnumMode.help) {
6368
if(helpCommand == null) {
@@ -88,7 +93,7 @@ public static void main(String[] args) {
8893
logger.println("Unknown command. Type 'help' for list of available commands");
8994
}
9095
args = new String[]{};
91-
MCPConfig.resetConfig();
96+
config.resetConfig();
9297
if (!startedWithNoParams || mode == EnumMode.exit)
9398
exit = true;
9499
mode = null;
@@ -106,7 +111,7 @@ private static void setParams(Map<String, Object> parsedArgs, EnumMode mode) {
106111
switch (name) {
107112
case "client":
108113
case "server":
109-
MCPConfig.setParameter(name, true);
114+
config.setParameter(name, true);
110115
break;
111116
}
112117
if(mode == EnumMode.help) {
@@ -116,20 +121,20 @@ private static void setParams(Map<String, Object> parsedArgs, EnumMode mode) {
116121
catch (IllegalArgumentException ignored) {}
117122
}
118123
if(mode == EnumMode.setup) {
119-
MCPConfig.setParameter("setupversion", name);
124+
config.setParameter("setupversion", name);
120125
}
121126
}
122127
else if(value instanceof Integer) {
123-
MCPConfig.setParameter(name, (Integer)value);
128+
config.setParameter(name, (Integer)value);
124129
}
125130
else if(value instanceof Boolean) {
126-
MCPConfig.setParameter(name, (Boolean)value);
131+
config.setParameter(name, (Boolean)value);
127132
}
128133
else if(value instanceof String) {
129-
MCPConfig.setParameter(name, (String)value);
134+
config.setParameter(name, (String)value);
130135
}
131136
else if(value instanceof String[]) {
132-
MCPConfig.setParameter(name, (String[])value);
137+
config.setParameter(name, (String[])value);
133138
}
134139
}
135140
}
@@ -159,7 +164,7 @@ private static void start() {
159164
for(String error : errors) {
160165
logger.info(" " + error.replace("\n", "\n "));
161166
}
162-
if (MCPConfig.debug) e.printStackTrace();
167+
if (config.debug) e.printStackTrace();
163168
else {
164169
String msg = e.getMessage();
165170
if(msg != null) {
@@ -186,11 +191,11 @@ private static void processTask(TaskInfo task) throws Exception {
186191

187192
private static void processMultitasks(TaskInfo task) throws Exception {
188193
List<SideThread> threads = new ArrayList<>();
189-
if(MCPConfig.onlySide < 0 || MCPConfig.onlySide == SideThread.CLIENT) {
194+
if(config.onlySide < 0 || config.onlySide == SideThread.CLIENT) {
190195
threads.add(new SideThread(SideThread.CLIENT, task.newTask(SideThread.CLIENT)));
191196
}
192197

193-
if(MCPConfig.onlySide < 0 || MCPConfig.onlySide == SideThread.SERVER) {
198+
if(config.onlySide < 0 || config.onlySide == SideThread.SERVER) {
194199
threads.add(new SideThread(SideThread.SERVER, task.newTask(SideThread.SERVER)));
195200
}
196201
logger.newLine();

src/main/java/org/mcphackers/mcp/MCPConfig.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,22 @@ public class MCPConfig {
5757
public static final String BUILD_JAR_CLIENT = BUILD + "minecraft.jar";
5858
public static final String BUILD_JAR_SERVER = BUILD + "minecraft_server.jar";
5959

60-
public static boolean debug;
61-
public static boolean patch;
62-
public static boolean srcCleanup;
63-
public static String[] ignorePackages;
64-
public static int onlySide;
65-
public static String indentionString;
66-
public static boolean fullBuild;
67-
public static boolean runBuild;
68-
public static String setupVersion;
60+
public boolean debug;
61+
public boolean patch;
62+
public boolean srcCleanup;
63+
public String[] ignorePackages;
64+
public int onlySide;
65+
public String indentionString;
66+
public boolean fullBuild;
67+
public boolean runBuild;
68+
public String setupVersion;
69+
public String[] runArgs;
6970

70-
static {
71+
public MCPConfig() {
7172
resetConfig();
7273
}
7374

74-
public static void resetConfig() {
75+
public void resetConfig() {
7576
debug = false;
7677
patch = true;
7778
srcCleanup = false;
@@ -81,17 +82,18 @@ public static void resetConfig() {
8182
fullBuild = false;
8283
runBuild = false;
8384
setupVersion = null;
85+
runArgs = null;
8486
}
8587

86-
public static void setParameter(String name, int value) {
88+
public void setParameter(String name, int value) {
8789
switch (name) {
8890
case "side":
8991
onlySide = value;
9092
break;
9193
}
9294
}
9395

94-
public static void setParameter(String name, String value) {
96+
public void setParameter(String name, String value) {
9597
switch (name) {
9698
case "ind":
9799
case "indention":
@@ -106,15 +108,15 @@ public static void setParameter(String name, String value) {
106108
}
107109
}
108110

109-
public static void setParameter(String name, String[] value) {
111+
public void setParameter(String name, String[] value) {
110112
switch (name) {
111113
case "ignore":
112114
ignorePackages = value;
113115
break;
114116
}
115117
}
116118

117-
public static void setParameter(String name, boolean value) {
119+
public void setParameter(String name, boolean value) {
118120
switch (name) {
119121
case "debug":
120122
debug = value;

src/main/java/org/mcphackers/mcp/tasks/TaskBuild.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.nio.file.Paths;
66
import java.util.List;
77

8+
import org.mcphackers.mcp.MCP;
89
import org.mcphackers.mcp.MCPConfig;
910
import org.mcphackers.mcp.ProgressInfo;
1011
import org.mcphackers.mcp.tasks.info.TaskInfo;
@@ -39,7 +40,7 @@ public void doTask() throws Exception {
3940
break;
4041
case BUILD:
4142
FileUtil.createDirectories(Paths.get(MCPConfig.BUILD));
42-
if(MCPConfig.fullBuild) {
43+
if(MCP.config.fullBuild) {
4344
Files.deleteIfExists(buildJar);
4445
Files.copy(originalJar, buildJar);
4546
List<Path> reobfClasses = FileUtil.listDirectory(reobfDir, path -> !Files.isDirectory(path));

src/main/java/org/mcphackers/mcp/tasks/TaskCleanup.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void doTask() throws Exception {
3131
Paths.get(MCPConfig.BUILD),
3232
Paths.get("eclipse")
3333
};
34-
if (MCPConfig.srcCleanup) pathsToDelete = new Path[] {
34+
if (MCP.config.srcCleanup) pathsToDelete = new Path[] {
3535
Paths.get(MCPConfig.SRC),
3636
Paths.get(MCPConfig.BIN),
3737
Paths.get(MCPConfig.REOBF),

src/main/java/org/mcphackers/mcp/tasks/TaskDecompile.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.function.BiConsumer;
88
import java.util.regex.Pattern;
99

10+
import org.mcphackers.mcp.MCP;
1011
import org.mcphackers.mcp.MCPConfig;
1112
import org.mcphackers.mcp.ProgressInfo;
1213
import org.mcphackers.mcp.tasks.info.TaskInfo;
@@ -102,7 +103,7 @@ public void doTask() throws Exception {
102103
FileUtil.unzipByExtension(Paths.get(srcZip), ffOut, ".java");
103104
break;
104105
case PATCH:
105-
if(MCPConfig.patch && Files.exists(patchesPath)) {
106+
if(MCP.config.patch && Files.exists(patchesPath)) {
106107
PatchOperation patchOperation = PatchOperation.builder()
107108
.verbose(true)
108109
.basePath(ffOut)
@@ -122,7 +123,7 @@ public void doTask() throws Exception {
122123
new MathConstants().replace(ffOut);
123124
break;
124125
case COPYSRC:
125-
FileUtil.copyDirectory(ffOut, srcPath, MCPConfig.ignorePackages);
126+
FileUtil.copyDirectory(ffOut, srcPath, MCP.config.ignorePackages);
126127
break;
127128
case RECOMPILE:
128129
recompTask.doTask();

src/main/java/org/mcphackers/mcp/tasks/TaskRecompile.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,12 @@ public void doTask() throws Exception {
5353

5454
// Compile side
5555
if (Files.exists(srcPath)) {
56-
Iterable<File> src = Files.walk(srcPath).filter(path -> !Files.isDirectory(path) && path.getFileName().toString().endsWith(".java")).map(Path::toFile).collect(Collectors.toList());
57-
Iterable<String> options = Arrays.asList(
56+
List<File> src = Files.walk(srcPath).filter(path -> !Files.isDirectory(path) && path.getFileName().toString().endsWith(".java")).map(Path::toFile).collect(Collectors.toList());
57+
List<File> start = Files.walk(Paths.get(MCPConfig.CONF + "start")).filter(path -> !Files.isDirectory(path) && path.getFileName().toString().endsWith(".java")).map(Path::toFile).collect(Collectors.toList());
58+
if(side == CLIENT) {
59+
src.addAll(start);
60+
}
61+
List<String> options = Arrays.asList(
5862
"-d", MCPConfig.CLIENT_BIN,
5963
"-cp", String.join(";", new String[] {
6064
MCPConfig.CLIENT_FIXED,

src/main/java/org/mcphackers/mcp/tasks/TaskReobfuscate.java

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.nio.file.SimpleFileVisitor;
1313
import java.nio.file.attribute.BasicFileAttributes;
1414
import java.util.HashMap;
15-
import java.util.List;
1615
import java.util.Map;
1716
import java.util.Objects;
1817

@@ -30,8 +29,6 @@
3029
import net.fabricmc.tinyremapper.OutputConsumerPath;
3130
import net.fabricmc.tinyremapper.TinyRemapper;
3231
import net.fabricmc.tinyremapper.TinyUtils;
33-
import net.lingala.zip4j.ZipFile;
34-
import net.lingala.zip4j.model.FileHeader;
3532

3633
public class TaskReobfuscate extends Task {
3734
private final Map<String, String> recompHashes = new HashMap<>();
@@ -131,13 +128,14 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
131128
@Override
132129
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
133130
className = name;
134-
if (!reobfClasses.containsKey(name)) {
131+
if (!reobfClasses.containsKey(name) && name.contains("Start")) {
135132
String key = name.lastIndexOf("/") >= 0 ? name.substring(0, name.lastIndexOf("/") + 1) : null;
136133
String obfPackage = reobfPackages.get(key);
137-
if(obfPackage != null) {
138-
String clsName = name.lastIndexOf("/") >= 0 ? name.substring(name.lastIndexOf("/") + 1) : name;
139-
reobfClasses.put(name, obfPackage + clsName);
134+
if(obfPackage == null) {
135+
obfPackage = "";
140136
}
137+
String clsName = name.lastIndexOf("/") >= 0 ? name.substring(name.lastIndexOf("/") + 1) : name;
138+
reobfClasses.put(name, obfPackage + clsName);
141139
//extraReobfClasses.put(name, name.replace("net/minecraft/src/", ""));
142140
}
143141
super.visit(version, access, name, signature, superName, interfaces);
@@ -362,21 +360,11 @@ private void gatherMD5Hashes(boolean reobf, int side) throws IOException {
362360
}
363361

364362
private void unpack(final Path src, final Path destDir) throws IOException {
365-
if (Files.notExists(destDir)) {
366-
Files.createDirectories(destDir);
367-
}
368-
369-
if (Files.exists(src)) {
370-
ZipFile zipFile = new ZipFile(src.toFile());
371-
List<FileHeader> fileHeaders = zipFile.getFileHeaders();
372-
for (FileHeader fileHeader : fileHeaders) {
373-
String fileName = fileHeader.getFileName();
374-
String deobfName = Util.getKey(reobfClasses, fileName.replace(".class", ""));
375-
String hash = originalHashes.get(deobfName);
376-
if (!fileHeader.isDirectory() && ( hash != null && !hash.equals(recompHashes.get(deobfName)) || hash == null)) {
377-
zipFile.extractFile(fileHeader, destDir.toString());
378-
}
379-
}
380-
}
363+
FileUtil.unzip(src, destDir, entry -> {
364+
String fileName = entry.getName();
365+
String deobfName = Util.getKey(reobfClasses, fileName.replace(".class", ""));
366+
String hash = originalHashes.get(deobfName);
367+
return !entry.isDirectory() && ( hash != null && !hash.equals(recompHashes.get(deobfName)) || hash == null);
368+
});
381369
}
382370
}

src/main/java/org/mcphackers/mcp/tasks/TaskRun.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
import java.io.File;
44
import java.nio.file.Files;
55
import java.nio.file.Paths;
6+
import java.util.ArrayList;
7+
import java.util.Arrays;
68
import java.util.LinkedList;
79
import java.util.List;
810

11+
import org.mcphackers.mcp.MCP;
912
import org.mcphackers.mcp.MCPConfig;
1013
import org.mcphackers.mcp.tasks.info.TaskInfo;
1114
import org.mcphackers.mcp.tools.FileUtil;
@@ -23,7 +26,7 @@ public void doTask() throws Exception {
2326
String natives = FileUtil.absolutePathString(MCPConfig.NATIVES);
2427
List<String> cpList = new LinkedList<String>();
2528
if(side == SERVER) {
26-
if(MCPConfig.runBuild) {
29+
if(MCP.config.runBuild) {
2730
cpList.add(FileUtil.absolutePathString(MCPConfig.BUILD_JAR_SERVER));
2831
}
2932
else {
@@ -32,7 +35,7 @@ public void doTask() throws Exception {
3235
}
3336
}
3437
else if (side == CLIENT) {
35-
if(MCPConfig.runBuild) {
38+
if(MCP.config.runBuild) {
3639
cpList.add(FileUtil.absolutePathString(MCPConfig.BUILD_JAR_CLIENT));
3740
}
3841
else {
@@ -48,19 +51,28 @@ else if (side == CLIENT) {
4851
String cp = String.join(";", cpList);
4952

5053
String version = new String(Files.readAllBytes(Paths.get(MCPConfig.VERSION)));
51-
int exit = Util.runCommand(
52-
new String[] {
53-
java,
54-
"-Xms1024M",
55-
"-Xmx1024M",
56-
"-Djava.util.Arrays.useLegacyMergeSort=true",
57-
"-Dhttp.proxyHost=betacraft.uk",
58-
"-Dhttp.proxyPort=" + VersionsParser.getProxyPort(version),
59-
"-Dorg.lwjgl.librarypath=" + natives,
60-
"-Dnet.java.games.input.librarypath=" + natives,
61-
"-cp", cp,
62-
side == SERVER ? "net.minecraft.server.MinecraftServer" : "Start"
63-
}, Paths.get(MCPConfig.JARS), true);
54+
55+
List<String> args = new ArrayList<String>(
56+
Arrays.asList(new String[] {
57+
java,
58+
"-Xms1024M",
59+
"-Xmx1024M",
60+
"-Djava.util.Arrays.useLegacyMergeSort=true",
61+
"-Dhttp.proxyHost=betacraft.uk",
62+
"-Dhttp.proxyPort=" + VersionsParser.getProxyPort(version),
63+
"-Dorg.lwjgl.librarypath=" + natives,
64+
"-Dnet.java.games.input.librarypath=" + natives,
65+
"-cp", cp,
66+
side == SERVER ? "net.minecraft.server.MinecraftServer" : "Start"
67+
}));
68+
for(int i = 1; i < MCP.config.runArgs.length; i++) {
69+
String arg = MCP.config.runArgs[i];
70+
if(args.contains(arg)) {
71+
args.remove(arg);
72+
}
73+
args.add(1, arg);
74+
}
75+
int exit = Util.runCommand(args.toArray(new String[0]), Paths.get(MCPConfig.JARS), true);
6476
if(exit != 0) {
6577
throw new RuntimeException("Finished with exit value " + exit);
6678
}

src/main/java/org/mcphackers/mcp/tasks/TaskSetup.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void doTask() throws Exception {
4747
}
4848
}
4949

50-
MCPConfig.srcCleanup = false;
50+
MCP.config.srcCleanup = false;
5151
new TaskCleanup(info).doTask();
5252
MCP.logger.info(" Setting up your workspace...");
5353
FileUtil.createDirectories(Paths.get(MCPConfig.JARS));
@@ -56,7 +56,7 @@ public void doTask() throws Exception {
5656
MCP.logger.info(" Setting up Minecraft...");
5757
List<String> versions = VersionsParser.getVersionList();
5858
versions.sort(Comparator.naturalOrder());
59-
String chosenVersion = MCPConfig.setupVersion;
59+
String chosenVersion = MCP.config.setupVersion;
6060
if(!versions.contains(chosenVersion)) {
6161
MCP.logger.info(new Ansi().fgMagenta().a("================ ").fgDefault().a("Current versions").fgMagenta().a(" ================").fgDefault().toString());
6262
MCP.logger.info(getTable(versions));

0 commit comments

Comments
 (0)