Skip to content

Commit 4aea894

Browse files
committed
feature: Preliminary work on workspace updating for older versions of RMCP.
1 parent 214505b commit 4aea894

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.mcphackers.mcp.tasks.TaskStaged;
2323
import org.mcphackers.mcp.tasks.mode.TaskMode;
2424
import org.mcphackers.mcp.tasks.mode.TaskParameter;
25+
import org.mcphackers.mcp.tools.project.LegacyProjectAdapter;
2526
import org.mcphackers.mcp.tools.source.Source;
2627
import org.mcphackers.mcp.tools.versions.DownloadData;
2728
import org.mcphackers.mcp.tools.versions.json.Version;
@@ -43,6 +44,8 @@ protected MCP() {
4344
pluginManager.discoverPlugins(this);
4445
triggerEvent(MCPEvent.ENV_STARTUP);
4546
System.gc();
47+
48+
LegacyProjectAdapter.updateWorkspaceIfNeeded(this);
4649
}
4750

4851
public boolean isGUI() {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.mcphackers.mcp.tools.project;
2+
3+
import org.mcphackers.mcp.MCP;
4+
import org.mcphackers.mcp.MCPPaths;
5+
import org.mcphackers.mcp.tasks.Task;
6+
7+
import java.io.IOException;
8+
import java.nio.file.Files;
9+
import java.nio.file.Path;
10+
11+
public class LegacyProjectAdapter {
12+
public static void updateWorkspaceIfNeeded(MCP mcp) {
13+
if (isV100Project(mcp)) {
14+
mcp.log("v1.0 instance detected! Updating workspace automatically...");
15+
convert100To110(mcp);
16+
}
17+
18+
// TODO: Add implementations for earlier versions of RMCP.
19+
}
20+
21+
/**
22+
* @param mcp MCP instance
23+
* @return If the current MCP instance is a v1.0 instance
24+
*/
25+
public static boolean isV100Project(MCP mcp) {
26+
for (Task.Side side : Task.Side.values()) {
27+
Path oldSourceFolder = MCPPaths.get(mcp, MCPPaths.PROJECT + "source", side);
28+
if (Files.exists(oldSourceFolder)) {
29+
return true;
30+
}
31+
}
32+
return false;
33+
}
34+
35+
/**
36+
* Converts a v1.0 project to v1.1.
37+
* <p>
38+
* RMCP v1.1 differences:
39+
* (side)/source was renamed to (side)/src_original
40+
*
41+
* @param mcp MCP instance
42+
*/
43+
public static void convert100To110(MCP mcp) {
44+
// Rename source to src_original folder in each side
45+
for (Task.Side side : Task.Side.values()) {
46+
Path oldSourceFolder = MCPPaths.get(mcp, MCPPaths.PROJECT + "source", side);
47+
Path newSourceFolder = MCPPaths.get(mcp, MCPPaths.SOURCE_UNPATCHED, side);
48+
if (Files.exists(oldSourceFolder)) {
49+
try {
50+
Files.move(oldSourceFolder, newSourceFolder);
51+
} catch (IOException e) {
52+
mcp.error("Failed to move " + oldSourceFolder + " to " + newSourceFolder + ".\nPlease close RMCP and move the folder yourself.");
53+
}
54+
}
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)