Skip to content
This repository was archived by the owner on Aug 8, 2025. It is now read-only.

Commit eed6451

Browse files
authored
Patch (#18)
1 parent c9ae601 commit eed6451

35 files changed

Lines changed: 647 additions & 277 deletions

pom.xml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,17 @@
8080

8181
<repositories>
8282
<repository>
83-
<id>jitpack</id>
84-
<url>https://jitpack.io</url>
83+
<id>central</id>
84+
<url>https://repo1.maven.org/maven2/</url>
8585
</repository>
8686
<repository>
8787
<id>AlessioDP</id>
8888
<url>https://repo.alessiodp.com/releases/</url>
8989
</repository>
90-
90+
<repository>
91+
<id>jitpack</id>
92+
<url>https://jitpack.io</url>
93+
</repository>
9194
<repository>
9295
<id>minebench-repo</id>
9396
<url>https://repo.minebench.de/</url>
@@ -96,10 +99,6 @@
9699
<id>codemc-repo</id>
97100
<url>https://repo.codemc.org/repository/maven-public/</url>
98101
</repository>
99-
<repository>
100-
<id>central</id>
101-
<url>https://repo1.maven.org/maven2/</url>
102-
</repository>
103102
<repository>
104103
<id>placeholderapi</id>
105104
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
@@ -120,17 +119,19 @@
120119
<artifactId>libby-bukkit</artifactId>
121120
<version>1.3.1</version>
122121
</dependency>
122+
123123
<dependency>
124124
<groupId>org.graalvm.js</groupId>
125125
<artifactId>js-scriptengine</artifactId>
126-
<version>24.0.2</version>
126+
<version>24.1.2</version>
127127
<scope>provided</scope>
128128
</dependency>
129129
<dependency>
130130
<groupId>org.graalvm.js</groupId>
131131
<artifactId>js</artifactId>
132-
<version>23.0.5</version>
132+
<version>24.1.2</version>
133133
<scope>provided</scope>
134+
<type>pom</type>
134135
</dependency>
135136

136137
<dependency>

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/ProjectAddonManager.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public void setup(Plugin inst) {
6161
List<String> skip = new ArrayList<>();
6262

6363
for (File folder : folders) {
64+
if (folder.isFile()) {
65+
ExceptionHandler.handleError(folder.getName() + " 不是文件夹!无法加载此附属!");
66+
continue;
67+
}
68+
6469
File info = new File(folder, Constants.INFO_FILE);
6570
if (!info.exists()) {
6671
ExceptionHandler.handleError("A folder called " + folder.getName()
@@ -107,10 +112,18 @@ public void setup(Plugin inst) {
107112
continue;
108113
}
109114

110-
ProjectAddonLoader loader = new ProjectAddonLoader(folder, projectIds);
111-
ProjectAddon addon = loader.load();
112-
if (addon != null) {
113-
projectAddons.put(addon.getAddonId(), addon);
115+
try {
116+
ProjectAddonLoader loader = new ProjectAddonLoader(folder, projectIds);
117+
ProjectAddon addon = loader.load();
118+
if (addon != null) {
119+
projectAddons.put(addon.getAddonId(), addon);
120+
}
121+
} catch (Exception e) {
122+
if (folder.isFile()) {
123+
ExceptionHandler.handleError(folder.getName() + " 不是文件夹!无法加载此附属!");
124+
continue;
125+
}
126+
e.printStackTrace();
114127
}
115128
}
116129
}

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/RykenSlimefunCustomizer.java

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.jetbrains.annotations.NotNull;
1313
import org.lins.mmmjjkx.rykenslimefuncustomizer.commands.MainCommand;
1414
import org.lins.mmmjjkx.rykenslimefuncustomizer.listeners.BlockListener;
15-
import org.lins.mmmjjkx.rykenslimefuncustomizer.listeners.ScriptableEventListener;
1615
import org.lins.mmmjjkx.rykenslimefuncustomizer.listeners.SingleItemRecipeGuideListener;
1716
import org.lins.mmmjjkx.rykenslimefuncustomizer.utils.CommonUtils;
1817
import org.lins.mmmjjkx.rykenslimefuncustomizer.utils.ExceptionHandler;
@@ -88,13 +87,14 @@ public String getBugTrackerURL() {
8887
}
8988

9089
private void setupLibraries() {
91-
String graalVersion = "24.0.2";
90+
String graalVersion = "24.1.2";
9291
BukkitLibraryManager libraryManager = new BukkitLibraryManager(this);
9392

9493
for (String repo : getConfig().getStringList("repositories")) {
9594
libraryManager.addRepository(repo);
9695
}
9796

97+
libraryManager.addMavenCentral();
9898

9999
Library byteBuddy = Library.builder()
100100
.groupId("net{}bytebuddy")
@@ -103,8 +103,13 @@ private void setupLibraries() {
103103
.build();
104104
Library graalJS = Library.builder()
105105
.groupId("org{}graalvm{}js")
106-
.artifactId("js")
107-
.version("23.0.5")
106+
.artifactId("js-language")
107+
.version(graalVersion)
108+
.build();
109+
Library shadowedIcu4j = Library.builder()
110+
.groupId("org{}graalvm{}shadowed")
111+
.artifactId("icu4j")
112+
.version(graalVersion)
108113
.build();
109114
Library graalJSEngine = Library.builder()
110115
.groupId("org{}graalvm{}js")
@@ -116,6 +121,21 @@ private void setupLibraries() {
116121
.artifactId("truffle-api")
117122
.version(graalVersion)
118123
.build();
124+
Library truffleCompiler = Library.builder()
125+
.groupId("org{}graalvm{}truffle")
126+
.artifactId("truffle-compiler")
127+
.version(graalVersion)
128+
.build();
129+
Library truffleEnterprise = Library.builder()
130+
.groupId("org{}graalvm{}truffle")
131+
.artifactId("truffle-enterprise")
132+
.version(graalVersion)
133+
.build();
134+
Library truffleRuntime = Library.builder()
135+
.groupId("org{}graalvm{}truffle")
136+
.artifactId("truffle-runtime")
137+
.version(graalVersion)
138+
.build();
119139
Library polyglot = Library.builder()
120140
.groupId("org.graalvm.polyglot")
121141
.artifactId("polyglot")
@@ -136,10 +156,20 @@ private void setupLibraries() {
136156
.artifactId("word")
137157
.version(graalVersion)
138158
.build();
139-
Library icu4j = Library.builder()
140-
.groupId("com{}ibm{}icu")
141-
.artifactId("icu4j")
142-
.version("75.1")
159+
Library graalSdkNativeBridge = Library.builder()
160+
.groupId("org{}graalvm{}sdk")
161+
.artifactId("nativebridge")
162+
.version(graalVersion)
163+
.build();
164+
Library graalJniUtils = Library.builder()
165+
.groupId("org{}graalvm{}sdk")
166+
.artifactId("jniutils")
167+
.version(graalVersion)
168+
.build();
169+
Library graalRegex = Library.builder()
170+
.groupId("org{}graalvm{}regex")
171+
.artifactId("regex")
172+
.version(graalVersion)
143173
.build();
144174
Library httpCore = Library.builder()
145175
.groupId("org{}apache{}httpcomponents{}core5")
@@ -165,6 +195,15 @@ private void setupLibraries() {
165195
libraryManager.loadLibrary(graalSdkCollections);
166196
libraryManager.loadLibrary(graalSdkNativeImage);
167197
libraryManager.loadLibrary(graalSdkWord);
198+
199+
libraryManager.loadLibrary(shadowedIcu4j);
200+
libraryManager.loadLibrary(graalSdkNativeBridge);
201+
libraryManager.loadLibrary(graalJniUtils);
202+
libraryManager.loadLibrary(graalRegex);
203+
libraryManager.loadLibrary(truffleCompiler);
204+
libraryManager.loadLibrary(truffleEnterprise);
205+
libraryManager.loadLibrary(truffleRuntime);
206+
168207
libraryManager.loadLibrary(icu4j);
169208
libraryManager.loadLibrary(httpCore);
170209
libraryManager.loadLibrary(httpCore_h2);

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/bulit_in/JavaScriptEval.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import com.google.errorprone.annotations.CanIgnoreReturnValue;
44
import com.oracle.truffle.api.TruffleFile;
55
import com.oracle.truffle.api.TruffleLanguage;
6-
import com.oracle.truffle.api.strings.TruffleString;
76
import com.oracle.truffle.js.lang.JavaScriptLanguage;
87
import com.oracle.truffle.js.runtime.JSRealm;
9-
import com.oracle.truffle.js.runtime.java.JavaPackage;
108
import com.oracle.truffle.js.runtime.objects.JSAttributes;
119
import com.oracle.truffle.js.runtime.objects.JSObject;
1210
import com.oracle.truffle.js.runtime.objects.JSObjectUtil;
@@ -17,10 +15,13 @@
1715
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
1816
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
1917
import java.io.File;
18+
import java.util.HashSet;
2019
import java.util.Objects;
20+
import java.util.Set;
2121
import javax.script.ScriptException;
2222
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
2323
import org.graalvm.polyglot.Context;
24+
import org.graalvm.polyglot.Engine;
2425
import org.graalvm.polyglot.PolyglotAccess;
2526
import org.graalvm.polyglot.io.IOAccess;
2627
import org.jetbrains.annotations.NotNull;
@@ -32,8 +33,9 @@
3233
import org.lins.mmmjjkx.rykenslimefuncustomizer.utils.ExceptionHandler;
3334

3435
public class JavaScriptEval extends ScriptEval {
35-
private static final File PLUGINS_FOLDER = RykenSlimefunCustomizer.INSTANCE.getDataFolder().getParentFile();
36-
private static final String[] packages = {"io", "net"};
36+
private static final File PLUGINS_FOLDER =
37+
RykenSlimefunCustomizer.INSTANCE.getDataFolder().getParentFile();
38+
private final Set<String> failed_functions = new HashSet<>();
3739

3840
private final ProjectAddon addon;
3941
private GraalJSScriptEngine jsEngine;
@@ -69,11 +71,6 @@ private void advancedSetup() {
6971
}
7072
}
7173

72-
for (String packageName : packages) {
73-
TruffleString str = TruffleString.fromConstant(packageName, TruffleString.Encoding.UTF_8);
74-
JSObjectUtil.putDataProperty(realm.getGlobalObject(), str, JavaPackage.createInit(realm, str), JSAttributes.getDefaultNotEnumerable());
75-
}
76-
7774
JSObject java = JSObjectUtil.createOrdinaryPrototypeObject(realm);
7875
JSObjectUtil.putToStringTag(java, JSRealm.JAVA_CLASS_NAME);
7976

@@ -116,6 +113,11 @@ public Object evalFunction(String funName, Object... args) {
116113
contextInit();
117114
}
118115

116+
// a simple fix for the optimization
117+
if (failed_functions.contains(funName)) {
118+
return null;
119+
}
120+
119121
try {
120122
Object result = jsEngine.invokeFunction(funName, args);
121123
ExceptionHandler.debugLog("Run function " + funName + " in file " + getFile().getName() + " of addon " + getAddon().getAddonName());
@@ -128,6 +130,8 @@ public Object evalFunction(String funName, Object... args) {
128130
} catch (ScriptException e) {
129131
ExceptionHandler.handleError("An error occurred while executing script file " + getFile().getName() + "of addonn" + addon.getAddonName(), e);
130132
} catch (NoSuchMethodException ignored) {
133+
// won't log it, because listeners always send a lot of functions
134+
failed_functions.add(funName);
131135
} catch (Throwable e) {
132136
ExceptionHandler.handleError("An error occcured while executing script file "+ getFile().getName() + "of addon" + addon.getAddonName(), e);
133137
}
@@ -137,18 +141,21 @@ public Object evalFunction(String funName, Object... args) {
137141

138142
private void reSetup() {
139143
jsEngine = GraalJSScriptEngine.create(
140-
null,
144+
Engine.newBuilder("js")
145+
.allowExperimentalOptions(true)
146+
.build(),
141147
Context.newBuilder("js")
148+
.hostClassLoader(RykenSlimefunCustomizer.class.getClassLoader())
142149
.allowAllAccess(true)
143150
.allowHostAccess(UNIVERSAL_HOST_ACCESS)
144151
.allowNativeAccess(false)
145152
.allowExperimentalOptions(true)
146153
.allowPolyglotAccess(PolyglotAccess.ALL)
147154
.allowCreateProcess(true)
148155
.allowValueSharing(true)
149-
.allowHostClassLoading(true)
150156
.allowIO(IOAccess.ALL)
151157
.allowHostClassLookup(s -> true)
158+
.allowHostClassLoading(true));
152159
.hostClassLoader(ClassLoader.getSystemClassLoader()));
153160

154161
advancedSetup();

0 commit comments

Comments
 (0)