Skip to content

Commit cbaf2b4

Browse files
committed
Fix minor issue...
1 parent 1cb4ee6 commit cbaf2b4

File tree

6 files changed

+102
-40
lines changed

6 files changed

+102
-40
lines changed

build.gradle

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ jar {
7575
}
7676
}
7777

78+
tasks.register('runMain', JavaExec) {
79+
setWorkingDir("C:\\Users\\andre\\Desktop\\minecraft_test")
80+
81+
82+
group = 'application'
83+
description = 'Runs the main class.'
84+
85+
classpath = sourceSets.main.runtimeClasspath
86+
mainClass.set('org.mangorage.bootstrap.Bootstrap') // replace this garbage with your actual main class
87+
}
88+
7889
publishing {
7990
publications.register("mangobotaddon", MavenPublication) {
8091
artifactId = 'mangobotbootstrap'

src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
exports org.mangorage.bootstrap.api.transformer;
77
exports org.mangorage.bootstrap.api.module;
88
exports org.mangorage.bootstrap.api.launch;
9+
exports org.mangorage.bootstrap.api.loader;
910

1011
uses org.mangorage.bootstrap.api.transformer.IClassTransformer;
1112
uses org.mangorage.bootstrap.api.module.IModuleConfigurator;

src/main/java/org/mangorage/bootstrap/Bootstrap.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ public static void main(String[] args) throws Throwable {
3030

3131
if (Bootstrap.class.getModule() != null) {
3232
parent = Bootstrap.class.getModule().getLayer();
33-
} else {
34-
parent = ModuleLayer.boot(); // We dont have a module for Bootstrap..., so assume we are using the boot layer...
3533
}
3634

35+
if (parent == null)
36+
parent = ModuleLayer.boot();
37+
3738
// Where additional launch targets can be defined...
3839
Path launchPath = Path.of(
3940
"launch"
@@ -81,5 +82,7 @@ public static void main(String[] args) throws Throwable {
8182
}
8283

8384
launchTargetMap.get(launchTarget).launch(parent, args);
85+
86+
var a = 1;
8487
}
8588
}

src/main/java/org/mangorage/bootstrap/internal/MangoLoader.java renamed to src/main/java/org/mangorage/bootstrap/api/loader/MangoLoader.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
package org.mangorage.bootstrap.internal;
1+
package org.mangorage.bootstrap.api.loader;
22

33
import org.mangorage.bootstrap.api.module.IModuleConfigurator;
44
import org.mangorage.bootstrap.api.transformer.IClassTransformer;
5+
import org.mangorage.bootstrap.internal.ClassTransformers;
6+
import org.mangorage.bootstrap.internal.LoadedModule;
57

68
import java.io.IOException;
9+
import java.io.InputStream;
710
import java.lang.module.ModuleDescriptor;
811
import java.lang.module.ModuleReader;
912
import java.lang.module.ModuleReference;
@@ -82,6 +85,11 @@ void loadModuleConfiguration() {
8285
});
8386
}
8487

88+
public boolean hasClass(final String name) {
89+
final String canonicalName = name.replace('/', '.');
90+
return this.findLoadedClass(canonicalName) != null;
91+
}
92+
8593
/**
8694
* Loads the class with the specified binary name.
8795
*/
@@ -219,6 +227,35 @@ protected Class<?> findClass(String moduleName, String name) {
219227
return c;
220228
}
221229

230+
public byte[] getClassBytes(String cn) {
231+
LoadedModule loadedModule = findLoadedModule(cn);
232+
if (loadedModule != null) {
233+
ModuleReader reader = loadedModule.getModuleReader();
234+
String rn = cn.replace('.', '/').concat(".class");
235+
ByteBuffer bb;
236+
try {
237+
bb = reader.read(rn).orElse(null);
238+
} catch (IOException e) {
239+
throw new RuntimeException(e);
240+
}
241+
if (bb == null) {
242+
// class not found
243+
return null;
244+
}
245+
return bb.array();
246+
}
247+
248+
String path = cn.replace('.', '/') + ".class";
249+
try (InputStream is = getParent().getResourceAsStream(path)) {
250+
if (is == null) {
251+
throw new IOException("Could not find class resource: " + path);
252+
}
253+
return is.readAllBytes(); // Java 9+
254+
} catch (IOException e) {
255+
throw new RuntimeException(e);
256+
}
257+
}
258+
222259
/**
223260
* Defines the given binary class name to the VM, loading the class
224261
* bytes from the given module.

src/main/java/org/mangorage/bootstrap/internal/LoadedModule.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,29 @@ public final class LoadedModule implements ModuleReader {
1818
private final ModuleReader moduleReader;
1919
private final CodeSource codeSource;
2020

21-
22-
LoadedModule(ModuleReference moduleReference) throws IOException {
21+
public LoadedModule(ModuleReference moduleReference) throws IOException {
2322
this.moduleReference = moduleReference;
2423
this.moduleReader = moduleReference.open();
2524
this.codeSource = new CodeSource(moduleReference.location().get().toURL(), (CodeSigner[]) null);
2625
}
2726

28-
ModuleReference getModuleReference() {
27+
public ModuleReference getModuleReference() {
2928
return moduleReference;
3029
}
3130

32-
ModuleReader getModuleReader() {
31+
public ModuleReader getModuleReader() {
3332
return moduleReader;
3433
}
3534

36-
CodeSource getCodeSource() {
35+
public CodeSource getCodeSource() {
3736
return codeSource;
3837
}
3938

40-
void addChild(LoadedModule module) {
39+
public void addChild(LoadedModule module) {
4140
this.children.add(module);
4241
}
4342

44-
String name() {
43+
public String name() {
4544
return getModuleReference().descriptor().name();
4645
}
4746

src/main/java/org/mangorage/bootstrap/internal/impl/MangoBotLaunchTarget.java

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
import org.mangorage.bootstrap.api.launch.ILaunchTarget;
44
import org.mangorage.bootstrap.internal.JarHandler;
5-
import org.mangorage.bootstrap.internal.MangoLoader;
5+
import org.mangorage.bootstrap.api.loader.MangoLoader;
66
import org.mangorage.bootstrap.internal.Util;
77

88
import java.lang.module.Configuration;
99
import java.lang.module.ModuleFinder;
1010
import java.nio.file.Files;
1111
import java.nio.file.Path;
12+
import java.util.HashSet;
1213
import java.util.List;
14+
import java.util.Set;
1315

1416
import static org.mangorage.bootstrap.internal.Util.callMain;
1517

@@ -22,58 +24,67 @@ public String getId() {
2224
@Override
2325
public void launch(ModuleLayer parent, String[] args) throws Throwable {
2426
final var librariesPath = Path.of("libraries");
25-
final var sortedLibraries = Path.of("sorted-libraries");
27+
final var sortedLibrariesPath = Path.of("sorted-libraries");
2628
final var pluginsPath = Path.of("plugins");
2729

28-
JarHandler.safeHandle(librariesPath, sortedLibraries);
30+
JarHandler.safeHandle(librariesPath, sortedLibrariesPath);
2931

3032
List<Path> deleteFiles = List.of(
31-
sortedLibraries.resolve("okio-3.6.0.jar")
33+
sortedLibrariesPath.resolve("okio-3.6.0.jar")
3234
);
3335

3436
for (Path deleteFile : deleteFiles) {
3537
Files.deleteIfExists(deleteFile);
3638
}
3739

38-
final var moduleLibrariesCfg = Configuration.resolve(
39-
ModuleFinder.of(sortedLibraries),
40+
Set<String> moduleNames = new HashSet<>();
41+
moduleNames.addAll(Util.getModuleNames(pluginsPath));
42+
moduleNames.addAll(Util.getModuleNames(sortedLibrariesPath));
43+
44+
45+
final var moduleCfg = Configuration.resolve(
46+
ModuleFinder.of(
47+
sortedLibrariesPath
48+
),
4049
List.of(
4150
parent.configuration()
4251
),
43-
ModuleFinder.of(),
44-
Util.getModuleNames(
45-
sortedLibraries
46-
)
52+
ModuleFinder.of(
53+
pluginsPath
54+
),
55+
moduleNames
4756
);
4857

49-
final var moduleLibrariesCL = new MangoLoader(moduleLibrariesCfg.modules(), Thread.currentThread().getContextClassLoader());
50-
51-
final var moduleLibrariesLayerController = ModuleLayer.defineModules(moduleLibrariesCfg, List.of(parent), s -> moduleLibrariesCL);
52-
final var moduleLibrariesLayer = moduleLibrariesLayerController.layer();
58+
final var moduleCL = new MangoLoader(moduleCfg.modules(), Thread.currentThread().getContextClassLoader());
5359

60+
final var moduleLayerController = ModuleLayer.defineModules(moduleCfg, List.of(parent), s -> moduleCL);
61+
final var moduleLayer = moduleLayerController.layer();
5462

63+
Thread.currentThread().setContextClassLoader(moduleCL);
5564

56-
final var modulePluginsCfg = Configuration.resolve(
57-
ModuleFinder.of(pluginsPath),
58-
List.of(
59-
moduleLibrariesLayer.configuration()
60-
),
61-
ModuleFinder.of(),
62-
Util.getModuleNames(
63-
pluginsPath
64-
)
65+
moduleLayerController.addExports(
66+
moduleLayer.findModule("org.spongepowered.mixin").get(),
67+
"org.spongepowered.asm.mixin.transformer",
68+
moduleLayer.findModule("org.mangorage.mangobotcore").get()
6569
);
6670

67-
final var modulePluginsCL = new MangoLoader(modulePluginsCfg.modules(), moduleLibrariesCL);
71+
moduleLayerController.addOpens(
72+
moduleLayer.findModule("org.spongepowered.mixin").get(),
73+
"org.spongepowered.asm.mixin",
74+
moduleLayer.findModule("org.mangorage.mangobotcore").get()
75+
);
6876

69-
final var modulePluginsLayerController = ModuleLayer.defineModules(modulePluginsCfg, List.of(moduleLibrariesLayer), s -> modulePluginsCL);
70-
final var modulePluginsLayer = modulePluginsLayerController.layer();
77+
moduleLayerController.addExports(
78+
moduleLayer.findModule("org.spongepowered.mixin").get(),
79+
"org.spongepowered.asm.transformers",
80+
moduleLayer.findModule("org.mangorage.mangobotcore").get()
81+
);
7182

72-
Thread.currentThread().setContextClassLoader(modulePluginsCL);
83+
// "--add-exports", "org.spongepowered.mixin/org.spongepowered.asm.mixin.transformer=org.mangorage.mangobotcore", "--add-opens", "org.spongepowered.mixin/org.spongepowered.asm.mixin.transformer=org.mangorage.mangobotcore"
7384

74-
moduleLibrariesCL.load();
75-
modulePluginsCL.load();
85+
moduleCL.load();
7686

77-
callMain("org.mangorage.entrypoint.MangoBotCore", args, modulePluginsLayer.findModule("org.mangorage.mangobotcore").get());
87+
callMain("org.mangorage.entrypoint.MangoBotCore", args, moduleLayer.findModule("org.mangorage.mangobotcore").get());
7888
}
89+
7990
}

0 commit comments

Comments
 (0)