Skip to content

Commit 48beebe

Browse files
committed
Add: remap task after build
1 parent c076217 commit 48beebe

23 files changed

+149
-7
lines changed
File renamed without changes.

LocatorLoader/build.gradle renamed to 2Loader/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ dependencies {
4040
implementation("org.ow2.asm:asm:9.3")
4141
implementation("org.ow2.asm:asm-tree:9.3")
4242
implementation("org.ow2.asm:asm-commons:9.3")
43-
implementation "cpw.mods:modlauncher:8.1.3"
43+
implementation "cpw.mods:modlauncher:10.0.8"
4444
implementation "cpw.mods:securejarhandler:2.1.6"
4545
implementation 'org.jetbrains:annotations:23.1.0'
4646
implementation "org.apache.logging.log4j:log4j-api:2.19.0"
4747
}
4848

4949
jar {
50-
from('../Locator/build/libs/') {
50+
from('../1Locator/build/libs/') {
5151
include '*.jar'
5252
}
5353
from('../build/libs/') {

LocatorLoader/src/main/java/me/xfl03/morecrashinfo/modlauncher/TransformerService.java renamed to 2Loader/src/main/java/me/xfl03/morecrashinfo/modlauncher/TransformerService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ public void initialize(IEnvironment environment) {
8888
return Collections.singletonList(new CrashReportExtenderTransformer());
8989
}
9090

91-
public void beginScanning(IEnvironment environment) {
91+
//ModLauncher 8
92+
//it will be renamed to beginScanning in Gradle Build
93+
public void beginScanningLegacy(IEnvironment environment) {
9294
}
9395

9496
private Path modPath;

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,13 @@ This mod implemented a powerful ASM-based remapping and custom jar detection fea
7373

7474
Please use Java 17+ in development or building environment.
7575

76+
### Loading
77+
**Build(Gradle `Task`) -> Loader(ModLauncher `ITransformerService`) -> Locator(ForgeSPI `IModLocator`) -> Base(Forge `Mod`)**
78+
79+
In every `->`(3 times), our mod use ASM to operate bytecode in class file.
80+
7681
### Build
7782
```shell
78-
./gradlew build
83+
./gradlew clean build remap
7984
```
80-
Mod file is located at `LocatorLoader/build/libs`.
85+
Mod file is located at `build/libs/MoreCrashInfo-x.x.x.jar`.

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ plugins {
22
id 'eclipse'
33
id 'maven-publish'
44
id 'net.minecraftforge.gradle' version '5.1.+'
5+
id 'morecrashinfo'
56
}
67

78
version = "2.3.0"

buildSrc/build.gradle

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
plugins {
2+
id 'java'
3+
}
4+
5+
repositories {
6+
mavenCentral()
7+
}
8+
9+
configurations.configureEach {
10+
transitive = false
11+
}
12+
13+
dependencies {
14+
gradleApi()
15+
implementation("org.ow2.asm:asm:9.3")
16+
implementation("org.ow2.asm:asm-tree:9.3")
17+
implementation("org.ow2.asm:asm-commons:9.3")
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.xfl03.morecrashinfo.gradle;
2+
3+
import org.gradle.api.Plugin;
4+
import org.gradle.api.Project;
5+
6+
public class GradlePlugin implements Plugin<Project> {
7+
@Override
8+
public void apply(Project project) {
9+
//Is not root project
10+
if (!project.getRootProject().equals(project)) {
11+
return;
12+
}
13+
14+
//Only apply to root project
15+
project.getTasks().create("remap", RemapTask.class, task -> task.rootProject = project.getRootProject());
16+
}
17+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package me.xfl03.morecrashinfo.gradle;
2+
3+
import org.objectweb.asm.ClassReader;
4+
import org.objectweb.asm.ClassWriter;
5+
import org.objectweb.asm.commons.ClassRemapper;
6+
import org.objectweb.asm.commons.Remapper;
7+
import org.objectweb.asm.commons.SimpleRemapper;
8+
import org.objectweb.asm.tree.ClassNode;
9+
10+
import java.io.InputStream;
11+
import java.nio.file.Files;
12+
import java.nio.file.Path;
13+
import java.util.Enumeration;
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
import java.util.zip.ZipEntry;
17+
import java.util.zip.ZipFile;
18+
import java.util.zip.ZipOutputStream;
19+
20+
public class JarRemapper {
21+
private final Remapper remapper;
22+
23+
public JarRemapper() {
24+
Map<String, String> mapping = new HashMap<>();
25+
mapping.put("me/xfl03/morecrashinfo/modlauncher/TransformerService.beginScanningLegacy(Lcpw/mods/modlauncher/api/IEnvironment;)V", "beginScanning");
26+
remapper = new SimpleRemapper(mapping);
27+
}
28+
29+
public byte[] process(InputStream is) throws Exception {
30+
ClassReader cr = new ClassReader(is);
31+
ClassNode cn = new ClassNode();
32+
ClassRemapper cv = new ClassRemapper(cn, remapper);
33+
cr.accept(cv, 0);
34+
ClassWriter cw = new ClassWriter(0);
35+
cn.accept(cw);
36+
System.out.printf("Remapped %s\n", cn.name);
37+
return cw.toByteArray();
38+
}
39+
40+
public void processJar(Path inFile, Path outFile) {
41+
try (ZipFile zf = new ZipFile(inFile.toFile())) {
42+
ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(outFile));
43+
for (Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements(); ) {
44+
ZipEntry ze = e.nextElement();
45+
String name = ze.getName();
46+
zos.putNextEntry(new ZipEntry(name));
47+
InputStream is = zf.getInputStream(ze);
48+
if (name.endsWith(".class")) {
49+
//Remap class file
50+
zos.write(process(is));
51+
} else {
52+
//Copy other file
53+
byte[] cache = new byte[1024];
54+
int len;
55+
while ((len = is.read(cache)) > 0) {
56+
zos.write(cache, 0, len);
57+
}
58+
}
59+
zos.closeEntry();
60+
}
61+
zos.close();
62+
System.out.printf("Remapped %s to %s\n", inFile, outFile);
63+
} catch (Exception e) {
64+
System.err.printf("Error remapping jar %s to %s\n", inFile, outFile);
65+
e.printStackTrace();
66+
}
67+
}
68+
69+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package me.xfl03.morecrashinfo.gradle;
2+
3+
import org.gradle.api.DefaultTask;
4+
import org.gradle.api.Project;
5+
import org.gradle.api.tasks.TaskAction;
6+
7+
import java.io.File;
8+
import java.util.Arrays;
9+
10+
public class RemapTask extends DefaultTask {
11+
public Project rootProject;
12+
public JarRemapper remapper = new JarRemapper();
13+
14+
@TaskAction
15+
public void run() {
16+
File loaderLibs = rootProject.file("2Loader/build/libs");
17+
File[] files = loaderLibs.listFiles();
18+
if (files == null) {
19+
System.err.println("Cannot find build libs.");
20+
return;
21+
}
22+
Arrays.stream(files).forEach(this::remap);
23+
}
24+
25+
private void remap(File inFile) {
26+
File rootLibs = rootProject.file("build/libs");
27+
remapper.processJar(inFile.toPath(), rootLibs.toPath().resolve(inFile.getName()));
28+
}
29+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
implementation-class=me.xfl03.morecrashinfo.gradle.GradlePlugin

settings.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ pluginManagement {
55
}
66
}
77
//include "CrashMaker"
8-
include "Locator"
9-
include "LocatorLoader"
8+
include "1Locator"
9+
include "2Loader"

0 commit comments

Comments
 (0)