Skip to content

Commit 4449ae9

Browse files
committed
Apply patch task. Fix running build
1 parent 78199b9 commit 4449ae9

16 files changed

Lines changed: 110 additions & 69 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
asm_version=9.4
2-
fernflower_version=27416e1ed8b6955a64c78bfc21351db5b2412edc
2+
fernflower_version=3488141
33
rdi_version=c4d6594
44
jansi_version=2.4.0
55
json_version=20220924

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public final boolean performTask(TaskMode mode, Side side, boolean completionMsg
9090
}
9191
else if (side == Side.ANY) {
9292
if (task.side == Side.SERVER || task.side == Side.CLIENT) {
93-
if(mode.requirement.get(this, task.side)) {
93+
if(mode.requirement == null || mode.requirement.get(this, task.side)) {
9494
performedTasks.add(task);
9595
}
9696
}
@@ -158,6 +158,10 @@ else if (side == Side.ANY) {
158158
return result != Task.ERROR;
159159
}
160160

161+
public Side getSide() {
162+
return getOptions().side;
163+
}
164+
161165
/**
162166
* Sets progress bars based on list of running tasks and task mode
163167
* @param tasks

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class MCPPaths {
3636

3737
public static final String MAPPINGS = CONF + "mappings.tiny";
3838
public static final String EXC = CONF + "exceptions.exc";
39+
public static final String ACCESS = CONF + "%s.access";
3940
public static final String PATCHES = CONF + "%s.patch";
4041
public static final String VERSION = CONF + "version.json";
4142

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ else if(param.type == Boolean.class) {
180180
}
181181
else if(param.type == String[].class) {
182182
try {
183+
if(value.isEmpty()) {
184+
setParameter(param, new String[0]);
185+
return true;
186+
}
183187
String[] values = value.split(",");
184188
for(int i2 = 0 ; i2 < values.length; i2++) {
185189
values[i2] = Util.convertFromEscapedString(values[i2]).trim();

src/main/java/org/mcphackers/mcp/gui/MCPFrame.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ public void popupMenuCanceled(PopupMenuEvent e) {
210210
*/
211211
public void updateButtonState() {
212212
buttons.forEach(button -> button.setEnabled(button.getEnabled()));
213-
menuBar.start.forEach((key, value) -> value.setEnabled(TaskMode.START.isAvailable(mcp, key)));
214213
if(verList != null && !loadingVersions) verList.setEnabled(true);
215214
if(!loadingVersions) verLabel.setEnabled(true);
216215
//if(!loadingVersions) verCleanup.setEnabled(true);

src/main/java/org/mcphackers/mcp/gui/MenuBar.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,8 @@ private void initOptions() {
250250
}
251251

252252
protected void setComponentsEnabled(boolean b) {
253+
start.forEach((key, value) -> value.setEnabled(TaskMode.START.isAvailable(mcp, key)));
254+
taskItems.forEach((key, value) -> value.setEnabled(key.isAvailable(mcp, mcp.getSide())));
253255
for(JMenuItem item : togglableComponents) {
254256
item.setEnabled(b);
255257
}

src/main/java/org/mcphackers/mcp/gui/TaskButton.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,24 @@
77
import javax.swing.JButton;
88

99
import org.mcphackers.mcp.MCP;
10+
import org.mcphackers.mcp.main.MainGUI;
1011
import org.mcphackers.mcp.tasks.mode.TaskMode;
1112

1213
public class TaskButton extends JButton {
1314

1415
private static final long serialVersionUID = -2625827711322112358L;
1516

1617
private final TaskMode linkedTask;
17-
private final MCP mcp;
18+
private final MainGUI mcp;
1819

19-
public TaskButton(MCP owner, TaskMode task) {
20+
public TaskButton(MainGUI owner, TaskMode task) {
2021
super(task.getFullName());
2122
linkedTask = task;
2223
mcp = owner;
2324
addActionListener(performTask(mcp, linkedTask));
2425
}
2526

26-
public TaskButton(MCP owner, TaskMode task, ActionListener defaultActionListener) {
27+
public TaskButton(MainGUI owner, TaskMode task, ActionListener defaultActionListener) {
2728
super(task.getFullName());
2829
linkedTask = task;
2930
mcp = owner;
@@ -35,7 +36,7 @@ public static ActionListener performTask(MCP mcp, TaskMode mode) {
3536
}
3637

3738
public boolean getEnabled() {
38-
return linkedTask.isAvailable(mcp, mcp.getOptions().side);
39+
return linkedTask.isAvailable(mcp, mcp.getSide());
3940
}
4041

4142
public void updateName() {

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class MainGUI extends MCP {
7373
{TaskParameter.SOURCE_VERSION, TaskParameter.TARGET_VERSION, TaskParameter.JAVA_HOME},
7474
{TaskParameter.OBFUSCATION},
7575
{TaskParameter.FULL_BUILD},
76-
{TaskParameter.RUN_BUILD, TaskParameter.RUN_ARGS}
76+
{TaskParameter.RUN_BUILD, TaskParameter.RUN_ARGS, TaskParameter.GAME_ARGS}
7777
};
7878

7979
public static void main(String[] args) throws Exception {
@@ -117,10 +117,6 @@ public MainGUI(Path dir) {
117117
frame = new MCPFrame(this);
118118
}
119119

120-
public Side getSide() {
121-
return getOptions().side;
122-
}
123-
124120
@Override
125121
public void setProgressBars(List<Task> tasks, TaskMode mode) {
126122
frame.setProgressBars(tasks, mode);
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.mcphackers.mcp.tasks;
2+
3+
import static org.mcphackers.mcp.MCPPaths.PATCH;
4+
import static org.mcphackers.mcp.MCPPaths.SOURCE;
5+
6+
import java.io.ByteArrayOutputStream;
7+
import java.io.IOException;
8+
import java.io.PrintStream;
9+
import java.nio.file.Path;
10+
11+
import org.mcphackers.mcp.MCP;
12+
import org.mcphackers.mcp.MCPPaths;
13+
14+
import codechicken.diffpatch.PatchOperation;
15+
import codechicken.diffpatch.util.PatchMode;
16+
17+
public class TaskApplyPatch extends Task {
18+
19+
public TaskApplyPatch(Side side, MCP instance) {
20+
super(side, instance);
21+
}
22+
23+
@Override
24+
public void doTask() throws Exception {
25+
final Path patchesPath = MCPPaths.get(mcp, PATCH, side);
26+
final Path srcPath = MCPPaths.get(mcp, SOURCE, side);
27+
patch(this, srcPath, srcPath, patchesPath);
28+
}
29+
30+
public static void patch(Task task, Path base, Path out, Path patches) throws IOException {
31+
ByteArrayOutputStream logger = new ByteArrayOutputStream();
32+
PatchOperation patchOperation = PatchOperation.builder()
33+
.basePath(base)
34+
.patchesPath(patches)
35+
.outputPath(out)
36+
.mode(PatchMode.OFFSET)
37+
.filter(p -> p.endsWith(".java"))
38+
.build();
39+
boolean success = patchOperation.doPatch();
40+
patchOperation.getSummary().print(new PrintStream(logger), false);
41+
if (!success) {
42+
task.addMessage(logger.toString(), Task.INFO);
43+
task.addMessage("Patching failed!", Task.ERROR);
44+
}
45+
}
46+
}

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

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ protected Stage[] setStages() {
100100
stage(getLocalizedStage("patch"), 88,
101101
() -> {
102102
if(mcp.getOptions().getBooleanParameter(TaskParameter.PATCHES) && Files.exists(patchesPath)) {
103-
patch(this, ffOut, ffOut, patchesPath);
103+
TaskApplyPatch.patch(this, ffOut, ffOut, patchesPath);
104104
}
105105
}),
106106
stage(getLocalizedStage("copysrc"), 90,
@@ -176,7 +176,6 @@ public ClassStorage applyInjector() throws IOException {
176176
}
177177
}
178178
injector.addTransform(storage -> Transform.decomposeVars(storage));
179-
injector.addTransform(storage -> Transform.fixTryCatchRange(storage));
180179
injector.addTransform(storage -> Transform.replaceCommonConstants(storage));
181180
if(hasLWJGL) injector.addVisitor(new GLConstants(null));
182181
injector.restoreSourceFile();
@@ -187,6 +186,21 @@ public ClassStorage applyInjector() throws IOException {
187186
if (Files.exists(exc)) {
188187
injector.fixExceptions(exc);
189188
}
189+
if(side == Side.MERGED) {
190+
Path acc = MCPPaths.get(mcp, MCPPaths.ACCESS, Side.CLIENT);
191+
if (Files.exists(acc)) {
192+
injector.fixAccess(acc);
193+
}
194+
acc = MCPPaths.get(mcp, MCPPaths.ACCESS, Side.SERVER);
195+
if (Files.exists(acc)) {
196+
injector.fixAccess(acc);
197+
}
198+
} else {
199+
final Path acc = MCPPaths.get(mcp, MCPPaths.ACCESS, side);
200+
if (Files.exists(acc)) {
201+
injector.fixAccess(acc);
202+
}
203+
}
190204
injector.transform();
191205
injector.write(rdiOut);
192206
return injector.getStorage();
@@ -206,23 +220,6 @@ public static Mappings getMappings(Path mappingsPath, ClassStorage storage, Side
206220
return mappings;
207221
}
208222

209-
public static void patch(Task task, Path base, Path out, Path patches) throws IOException {
210-
ByteArrayOutputStream logger = new ByteArrayOutputStream();
211-
PatchOperation patchOperation = PatchOperation.builder()
212-
.basePath(base)
213-
.patchesPath(patches)
214-
.outputPath(out)
215-
.mode(PatchMode.OFFSET)
216-
.filter(p -> p.endsWith(".java"))
217-
.build();
218-
boolean success = patchOperation.doPatch();
219-
patchOperation.getSummary().print(new PrintStream(logger), false);
220-
if (!success) {
221-
task.addMessage(logger.toString(), Task.INFO);
222-
task.addMessage("Patching failed!", Task.ERROR);
223-
}
224-
}
225-
226223
public static String getLaunchArgs(MCP mcp) {
227224
List<String> args = TaskRun.getLaunchArgs(mcp);
228225
for(int i = 0; i < args.size(); i++) {

0 commit comments

Comments
 (0)