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

Commit 6bb7c10

Browse files
authored
Sync upstream changes
1 parent 6c667ab commit 6bb7c10

File tree

4 files changed

+48
-79
lines changed

4 files changed

+48
-79
lines changed

pom.xml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,6 @@
120120
<version>1.3.1</version>
121121
</dependency>
122122

123-
<dependency>
124-
<groupId>org.graalvm.js</groupId>
125-
<artifactId>js-scriptengine</artifactId>
126-
<version>24.1.2</version>
127-
<scope>provided</scope>
128-
</dependency>
129123
<dependency>
130124
<groupId>org.graalvm.js</groupId>
131125
<artifactId>js</artifactId>
@@ -182,7 +176,7 @@
182176
<dependency>
183177
<groupId>de.tr7zw</groupId>
184178
<artifactId>item-nbt-api-plugin</artifactId>
185-
<version>2.13.2</version>
179+
<version>2.14.1</version>
186180
<scope>provided</scope>
187181
</dependency>
188182
</dependencies>

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,18 @@
88
import com.oracle.truffle.js.runtime.objects.JSAttributes;
99
import com.oracle.truffle.js.runtime.objects.JSObject;
1010
import com.oracle.truffle.js.runtime.objects.JSObjectUtil;
11-
import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine;
1211
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
1312
import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile;
1413
import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
1514
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
1615
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
1716
import java.io.File;
17+
import java.io.IOException;
1818
import java.util.HashSet;
1919
import java.util.Objects;
2020
import java.util.Set;
21-
import javax.script.ScriptException;
2221
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
23-
import org.graalvm.polyglot.Context;
24-
import org.graalvm.polyglot.Engine;
25-
import org.graalvm.polyglot.PolyglotAccess;
22+
import org.graalvm.polyglot.*;
2623
import org.graalvm.polyglot.io.IOAccess;
2724
import org.jetbrains.annotations.NotNull;
2825
import org.jetbrains.annotations.Nullable;
@@ -37,8 +34,7 @@ public class JavaScriptEval extends ScriptEval {
3734
RykenSlimefunCustomizer.INSTANCE.getDataFolder().getParentFile();
3835
private final Set<String> failed_functions = new HashSet<>();
3936

40-
private final ProjectAddon addon;
41-
private GraalJSScriptEngine jsEngine;
37+
private Context jsEngine;
4238

4339
public JavaScriptEval(@NotNull File js, ProjectAddon addon) {
4440
super(js, addon);
@@ -54,7 +50,7 @@ public JavaScriptEval(@NotNull File js, ProjectAddon addon) {
5450
}
5551

5652
private void advancedSetup() {
57-
JSRealm realm = JavaScriptLanguage.getJSRealm(jsEngine.getPolyglotContext());
53+
JSRealm realm = JavaScriptLanguage.getJSRealm(jsEngine);
5854
TruffleLanguage.Env env = realm.getEnv();
5955
addThing("SlimefunItems", env.asHostSymbol(SlimefunItems.class));
6056
addThing("SlimefunItem", env.asHostSymbol(SlimefunItem.class));
@@ -75,19 +71,22 @@ private void advancedSetup() {
7571
JSObjectUtil.putToStringTag(java, JSRealm.JAVA_CLASS_NAME);
7672

7773
JSObjectUtil.putDataProperty(realm.getGlobalObject(), "Java", java, JSAttributes.getDefaultNotEnumerable());
74+
75+
jsEngine.enter();
7876
}
7977

8078
@Override
8179
public void close() {
8280
try {
81+
jsEngine.leave();
8382
jsEngine.close();
8483
} catch (IllegalStateException ignored) {
8584
}
8685
}
8786

8887
@Override
8988
public void addThing(String name, Object value) {
90-
jsEngine.put(name, value);
89+
jsEngine.getBindings("js").putMember(name, value);
9190
}
9291

9392
@Override
@@ -99,8 +98,8 @@ protected final void contextInit() {
9998
super.contextInit();
10099
if (jsEngine != null) {
101100
try {
102-
jsEngine.eval(getFileContext());
103-
} catch (ScriptException e) {
101+
jsEngine.eval(Source.newBuilder("js", getFileContext(), "JavaScript").build());
102+
} catch (IOException e) {
104103
e.printStackTrace();
105104
}
106105
}
@@ -118,20 +117,21 @@ public Object evalFunction(String funName, Object... args) {
118117
return null;
119118
}
120119

120+
Value member = jsEngine.getBindings("js").getMember(funName);
121+
if (member == null) {
122+
failed_functions.add(funName);
123+
return null;
124+
}
125+
121126
try {
122-
Object result = jsEngine.invokeFunction(funName, args);
127+
Object result = member.execute(args);
123128
ExceptionHandler.debugLog("Run function " + funName + " in file " + getFile().getName() + " of addon " + getAddon().getAddonName());
124129
return result;
125130
} catch (IllegalStateException e) {
126131
String message = e.getMessage();
127132
if (!message.contains("Multi threaded access")) {
128133
ExceptionHandler.handleError("An error occcured while executing script file "+ getFile().getName() + "of addon" + addon.getAddonName(), e);
129134
}
130-
} catch (ScriptException e) {
131-
ExceptionHandler.handleError("An error occurred while executing script file " + getFile().getName() + "of addonn" + addon.getAddonName(), e);
132-
} catch (NoSuchMethodException ignored) {
133-
// won't log it, because listeners always send a lot of functions
134-
failed_functions.add(funName);
135135
} catch (Throwable e) {
136136
ExceptionHandler.handleError("An error occcured while executing script file "+ getFile().getName() + "of addon" + addon.getAddonName(), e);
137137
}
@@ -140,11 +140,7 @@ public Object evalFunction(String funName, Object... args) {
140140
}
141141

142142
private void reSetup() {
143-
jsEngine = GraalJSScriptEngine.create(
144-
Engine.newBuilder("js")
145-
.allowExperimentalOptions(true)
146-
.build(),
147-
Context.newBuilder("js")
143+
jsEngine = Context.newBuilder("js")
148144
.hostClassLoader(RykenSlimefunCustomizer.class.getClassLoader())
149145
.hostClassLoader(ClassLoader.getSystemClassLoader())
150146
.allowAllAccess(true)
@@ -157,7 +153,11 @@ private void reSetup() {
157153
.allowIO(IOAccess.ALL)
158154
.allowHostClassLookup(s -> true)
159155
.allowHostClassLoading(true)
160-
.hostClassLoader(ClassLoader.getSystemClassLoader()));
156+
.engine(Engine.newBuilder("js")
157+
.allowExperimentalOptions(true)
158+
.build())
159+
.currentWorkingDirectory(getAddon().getScriptsFolder().toPath().toAbsolutePath())
160+
.build();
161161

162162
advancedSetup();
163163
}

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/utils/BlockMenuUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ public static boolean fits(@Nonnull BlockMenu blockMenu, @Nonnull LinkedOutput o
252252
}
253253
}
254254

255-
// try push free output
255+
// try to push free output
256256
for (ItemStack PitemToPush : output.getFreeOutput()) {
257257
if (PitemToPush == null || PitemToPush.getType() == Material.AIR) {
258258
continue;

src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/utils/CommonUtils.java

Lines changed: 23 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.nio.file.StandardOpenOption;
1717
import java.util.Arrays;
1818
import java.util.List;
19+
import java.util.Map;
1920
import java.util.Optional;
2021
import java.util.function.Predicate;
2122
import java.util.regex.Matcher;
@@ -40,6 +41,13 @@
4041
import org.lins.mmmjjkx.rykenslimefuncustomizer.objects.customs.item.RSCItemStack;
4142

4243
public class CommonUtils {
44+
private static final Map<String, String> materialMappings = Map.of(
45+
"GRASS", "SHORT_GRASS",
46+
"SHORT_GRASS", "GRASS",
47+
"SCUTE", "TURTLE_SCUTE",
48+
"TURTLE_SCUTE", "SCUTE"
49+
);
50+
4351
public static final VarHandle DELEGATE;
4452

4553
static {
@@ -215,58 +223,25 @@ public static ItemStack readItem(ConfigurationSection section, boolean countable
215223
itemStack.setAmount(1);
216224
}
217225
}
226+
//mc
218227
default -> {
219-
Optional<Material> materialo = Optional.ofNullable(Material.matchMaterial(material));
228+
Optional<Material> materialOptional = Optional.ofNullable(Material.matchMaterial(material));
220229
Material mat = Material.STONE;
221-
for (int i = 0; i < 1; i++) {
222-
if (materialo.isPresent()) {
223-
mat = materialo.get();
224-
break;
225-
}
226-
227-
ExceptionHandler.handleWarning("无法加载材料: " + material + ", 正在尝试自动修复...");
228-
229-
if ("GRASS".equals(material)) {
230-
materialo = Optional.ofNullable(Material.matchMaterial("SHORT_GRASS"));
231-
}
232-
233-
if (materialo.isPresent()) {
234-
mat = materialo.get();
235-
ExceptionHandler.handleWarning("材料" + material + "已自动修复为" + mat.toString());
236-
break;
237-
}
238-
239-
if ("SHORT_GRASS".equals(material)) {
240-
materialo = Optional.ofNullable(Material.matchMaterial("GRASS"));
241-
}
242-
243-
if (materialo.isPresent()) {
244-
mat = materialo.get();
245-
ExceptionHandler.handleWarning("材料" + material + "已自动修复为" + mat.toString());
246-
break;
247-
}
248-
249-
if ("SCUTE".equals(material)) {
250-
materialo = Optional.ofNullable(Material.matchMaterial("TURTLE_SCUTE"));
251-
}
252-
253-
if (materialo.isPresent()) {
254-
mat = materialo.get();
255-
ExceptionHandler.handleWarning("材料" + material + "已自动修复为" + mat.toString());
256-
break;
257-
}
258230

259-
if ("TURTLE_SCUTE".equals(material)) {
260-
materialo = Optional.ofNullable(Material.matchMaterial("SCUTE"));
261-
}
262-
263-
if (materialo.isPresent()) {
264-
mat = materialo.get();
265-
ExceptionHandler.handleWarning("材料" + material + "已自动修复为" + mat.toString());
266-
break;
231+
if (materialOptional.isPresent()) {
232+
mat = materialOptional.get();
233+
} else if (SlimefunItem.getById(material) == null && addon.getPreloadItems().get(material) == null) {
234+
if (materialMappings.containsKey(material)) {
235+
materialOptional = Optional.ofNullable(Material.matchMaterial(materialMappings.get(material)));
236+
if (materialOptional.isPresent()) {
237+
mat = materialOptional.get();
238+
ExceptionHandler.handleWarning("材料" + material + "已自动修复为" + mat);
239+
} else {
240+
ExceptionHandler.handleError("无法在附属" + addon.getAddonId() + "中读取材料" + material + ",已转为石头");
241+
}
242+
} else {
243+
ExceptionHandler.handleError("无法在附属" + addon.getAddonId() + "中读取材料" + material + ",已转为石头");
267244
}
268-
269-
ExceptionHandler.handleError("无法在附属" + addon.getAddonId() + "中读取材料" + material + ",已转为石头");
270245
}
271246

272247
itemStack = CustomItemStack.create(mat, name, lore);

0 commit comments

Comments
 (0)