Skip to content

Commit 6675c25

Browse files
committed
2 parents 574a5e9 + 8c3c89f commit 6675c25

File tree

7 files changed

+59
-4
lines changed

7 files changed

+59
-4
lines changed

api-jvm-impl/src/main/java/ch/vorburger/minecraft/storeys/japi/impl/EventsImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ class EventsImpl implements Events, Unregisterable {
7575
return;
7676
}
7777
registrar.get().register(plugin, spec, name);
78-
//TODO Sponge.server().commandManager().updateCommandTreeForPlayer();
78+
Sponge.server().onlinePlayers().forEach(p -> Sponge.server().commandManager().updateCommandTreeForPlayer(p));
79+
80+
//TODO unregister commands so that we can update them
7981
unregistrables.add(() -> {
8082

8183
});

storeys/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ repositories {
77
dependencies {
88
api project(':api-jvm-impl')
99
implementation 'ch.vorburger:fswatch:1.3.0'
10+
implementation 'org.graalvm.js:js-scriptengine:22.3.0'
11+
runtimeOnly 'org.graalvm.js:js:22.3.0'
1012

1113
implementation project(':example')
1214
testImplementation project(':test-utils')

storeys/src/main/java/ch/vorburger/minecraft/storeys/ScriptsLoader.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@
3131
import java.nio.file.Files;
3232
import java.nio.file.NoSuchFileException;
3333
import java.nio.file.Path;
34+
import java.util.function.Predicate;
3435
import javax.inject.Inject;
3536
import javax.inject.Singleton;
37+
import javax.script.Bindings;
38+
import javax.script.ScriptContext;
3639
import javax.script.ScriptEngine;
3740
import javax.script.ScriptEngineManager;
3841
import javax.script.ScriptException;
@@ -91,7 +94,10 @@ private Script load(Path file) throws IOException, ScriptException {
9194
final String result = template.replace("//SCRIPT", scriptFile);
9295

9396
ScriptEngineManager manager = new ScriptEngineManager();
94-
ScriptEngine engine = manager.getEngineByName("JavaScript");
97+
ScriptEngine engine = manager.getEngineByName("graal.js");
98+
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
99+
bindings.put("polyglot.js.allowHostAccess", true);
100+
bindings.put("polyglot.js.allowHostClassLookup", (Predicate<String>) s -> true);
95101

96102
return (Script) engine.eval(result);
97103
}

storeys/src/main/java/ch/vorburger/minecraft/storeys/model/DynamicAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class DynamicAction implements Action<Void> {
5252
CompletableFuture<Void> future = new CompletableFuture<>();
5353

5454
ScriptEngineManager manager = new ScriptEngineManager();
55-
ScriptEngine engine = manager.getEngineByName("JavaScript");
55+
ScriptEngine engine = manager.getEngineByName("graal.js");
5656
engine.put("player", context.getCommandCause());
5757

5858
try {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* ch.vorburger.minecraft.storeys
3+
*
4+
* Copyright (C) 2016 - 2018 Michael Vorburger.ch <mike@vorburger.ch>
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU Affero General Public License as published
8+
* by the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU Affero General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Affero General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
package ch.vorburger.minecraft.storeys.tests;
20+
21+
import java.util.List;
22+
import javax.script.ScriptEngine;
23+
import javax.script.ScriptEngineFactory;
24+
import javax.script.ScriptEngineManager;
25+
import javax.script.ScriptException;
26+
import org.junit.Test;
27+
28+
public class GraalTest {
29+
30+
@Test public void testJsEngine() throws ScriptException {
31+
List<ScriptEngineFactory> engines = (new ScriptEngineManager()).getEngineFactories();
32+
for (ScriptEngineFactory f : engines) {
33+
System.out.println(f.getLanguageName() + " " + f.getEngineName() + " " + f.getNames().toString());
34+
}
35+
36+
final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("graal.js");
37+
System.out.println(scriptEngine.eval("1+1"));
38+
}
39+
}

web/build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ shadowJar {
4242
// Relocate shaded Netty dependency, because Minecraft Server uses (a very OLD version of!) Netty itself
4343
// causing java.lang.NoSuchMethodError: io.netty.util.NetUtil.isIpV4StackPreferred()Z at io.netty.resolver.dns.DnsNameResolver.<clinit>(DnsNameResolver.java:103)
4444
relocate 'io.netty', 'ch.vorburger.relocated.io.netty'
45+
mergeServiceFiles()
4546

4647
dependencies {
4748
// https://imperceptiblethoughts.com/shadow/configuration/filtering/
@@ -80,6 +81,12 @@ shadowJar {
8081
include(dependency("io.netty:netty-codec-http"))
8182
include(dependency("io.netty:netty-codec-http2"))
8283
include(dependency("com.fasterxml.jackson.core:jackson-core"))
84+
include(dependency("org.graalvm.js:js-scriptengine"))
85+
include(dependency("org.graalvm.js:js"))
86+
include(dependency("org.graalvm.truffle:truffle-api"))
87+
include(dependency("org.graalvm.sdk:graal-sdk"))
88+
include(dependency("org.graalvm.regex:regex"))
89+
include(dependency("com.ibm.icu:icu4j"))
8390
exclude 'module-info.class'
8491
}
8592
}

web/src/main/java/ch/vorburger/minecraft/storeys/web/StoreysWebPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
}
6060

6161
@Override public void start(PluginInstance plugin, Path configDir) {
62-
LOG.info("See https://github.com/OASIS-learn-study/minecraft-storeys-maker for how to use /story and /narrate commands");
6362
super.start(plugin, configDir);
6463

6564
Injector injector = pluginInjector.createChildInjector(binder -> {

0 commit comments

Comments
 (0)