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

Commit 5e66920

Browse files
committed
merge
2 parents 13fc3ca + 7732324 commit 5e66920

File tree

10 files changed

+169
-85
lines changed

10 files changed

+169
-85
lines changed

pom.xml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@
9191
<id>AlessioDP</id>
9292
<url>https://repo.alessiodp.com/releases/</url>
9393
</repository>
94-
94+
<repository>
95+
<id>jitpack</id>
96+
<url>https://jitpack.io</url>
97+
</repository>
9598
<repository>
9699
<id>minebench-repo</id>
97100
<url>https://repo.minebench.de/</url>
@@ -120,17 +123,19 @@
120123
<artifactId>libby-bukkit</artifactId>
121124
<version>1.3.1</version>
122125
</dependency>
126+
123127
<dependency>
124128
<groupId>org.graalvm.js</groupId>
125129
<artifactId>js-scriptengine</artifactId>
126-
<version>24.0.2</version>
130+
<version>24.1.2</version>
127131
<scope>provided</scope>
128132
</dependency>
129133
<dependency>
130134
<groupId>org.graalvm.js</groupId>
131135
<artifactId>js</artifactId>
132-
<version>23.0.5</version>
136+
<version>24.1.2</version>
133137
<scope>provided</scope>
138+
<type>pom</type>
134139
</dependency>
135140

136141
<dependency>

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: 20 additions & 12 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,8 +141,11 @@ 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
.hostClassLoader(ClassLoader.getSystemClassLoader())
143150
.allowAllAccess(true)
144151
.allowHostAccess(UNIVERSAL_HOST_ACCESS)
@@ -147,9 +154,10 @@ private void reSetup() {
147154
.allowPolyglotAccess(PolyglotAccess.ALL)
148155
.allowCreateProcess(true)
149156
.allowValueSharing(true)
150-
.allowHostClassLoading(true)
151157
.allowIO(IOAccess.ALL)
152-
.allowHostClassLookup(s -> true));
158+
.allowHostClassLookup(s -> true)
159+
.allowHostClassLoading(true)
160+
.hostClassLoader(ClassLoader.getSystemClassLoader()));
153161

154162
advancedSetup();
155163
}

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/ProjectAddonLoader.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ public ProjectAddonLoader(File dir, Map<String, File> ids) {
143143
String.valueOf(scriptListener.charAt(0)),
144144
String.valueOf(Character.toUpperCase(scriptListener.charAt(0))));
145145

146-
Class<? extends ScriptableEventListener> sel = new ByteBuddy().subclass(ScriptableEventListener.class)
146+
Class<? extends ScriptableEventListener> sel = new ByteBuddy()
147+
.subclass(ScriptableEventListener.class)
147148
.name("org.rykenslimefuncustomizer.addoncontents.listeners." + listenerName)
148149
.make()
149150
.load(getClass().getClassLoader())
@@ -258,7 +259,8 @@ public ProjectAddonLoader(File dir, Map<String, File> ids) {
258259
MultiBlockMachineReader multiBlockMachineReader = new MultiBlockMachineReader(multiBlockMachines, addon);
259260
SuperReader superReader = new SuperReader(supers, addon);
260261
TemplateMachineReader templateMachineReader = new TemplateMachineReader(templateMachines, addon);
261-
LinkedRecipeMachineReader linkedRecipeMachineReader = new LinkedRecipeMachineReader(linkedRecipeMachines, addon);
262+
LinkedRecipeMachineReader linkedRecipeMachineReader =
263+
new LinkedRecipeMachineReader(linkedRecipeMachines, addon);
262264
WorkbenchReader workbenchReader = new WorkbenchReader(workbenches, addon);
263265

264266
ExceptionHandler.debugLog("Start preloading items from addon " + addon.getAddonId() + "...");

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomEnergyGenerator.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,18 @@ public class CustomEnergyGenerator extends CustomMachine implements EnergyNetPro
2121
private final ScriptEval eval;
2222
private final int defaultOutput;
2323

24-
public CustomEnergyGenerator(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, @Nullable CustomMenu menu, List<Integer> input, List<Integer> output, MachineRecord record, EnergyNetComponentType type, @Nullable ScriptEval eval, int defaultOutput) {
24+
public CustomEnergyGenerator(
25+
ItemGroup itemGroup,
26+
SlimefunItemStack item,
27+
RecipeType recipeType,
28+
ItemStack[] recipe,
29+
@Nullable CustomMenu menu,
30+
List<Integer> input,
31+
List<Integer> output,
32+
MachineRecord record,
33+
EnergyNetComponentType type,
34+
@Nullable ScriptEval eval,
35+
int defaultOutput) {
2536
super(itemGroup, item, recipeType, recipe, menu, input, output, record, type, eval);
2637

2738
this.eval = eval;

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomMaterialGenerator.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
import io.github.thebusybiscuit.slimefun4.implementation.handlers.SimpleBlockBreakHandler;
1111
import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
1212
import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils;
13-
14-
import java.util.*;
15-
1613
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
1714
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
1815
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
@@ -25,6 +22,8 @@
2522
import org.lins.mmmjjkx.rykenslimefuncustomizer.RykenSlimefunCustomizer;
2623
import org.lins.mmmjjkx.rykenslimefuncustomizer.objects.customs.CustomMenu;
2724

25+
import java.util.*;
26+
2827
@SuppressWarnings("deprecation")
2928
public class CustomMaterialGenerator extends SlimefunItem
3029
implements InventoryBlock, EnergyNetComponent, RecipeDisplayItem {
@@ -199,8 +198,7 @@ private void pushItems(BlockMenu blockMenu) {
199198
if (blockMenu.hasViewer()) {
200199
if (statusSlot > -1) {
201200
blockMenu.replaceExistingItem(
202-
statusSlot,
203-
new CustomItemStack(Material.ORANGE_STAINED_GLASS_PANE, "&cNot enough space"));
201+
statusSlot, new CustomItemStack(Material.ORANGE_STAINED_GLASS_PANE, "&c空间不足"));
204202
}
205203
}
206204
}

0 commit comments

Comments
 (0)