mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-19 12:29:59 +08:00
Add events to support scene group substitution (#2413)
* Add events to support scene group substitution * make event members private with getter/setter * delete stray unused var
This commit is contained in:
committed by
GitHub
Unverified
parent
269f7b4fbf
commit
cf6fb275be
@@ -5,6 +5,7 @@ import com.github.davidmoten.rtreemulti.geometry.*;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.game.world.Position;
|
||||
import emu.grasscutter.scripts.*;
|
||||
import emu.grasscutter.server.event.game.SceneBlockLoadedEvent;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.script.*;
|
||||
@@ -64,6 +65,10 @@ public class SceneBlock {
|
||||
.collect(Collectors.toMap(x -> x.id, y -> y, (a, b) -> a));
|
||||
|
||||
this.groups.values().forEach(g -> g.block_id = this.id);
|
||||
|
||||
var event = new SceneBlockLoadedEvent(this);
|
||||
event.call();
|
||||
|
||||
this.sceneGroupIndex =
|
||||
SceneIndexManager.buildIndex(3, this.groups.values(), g -> g.pos.toPoint());
|
||||
} catch (ScriptException exception) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package emu.grasscutter.scripts.data;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.game.world.Position;
|
||||
import emu.grasscutter.scripts.ScriptLoader;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.script.*;
|
||||
@@ -39,6 +40,7 @@ public final class SceneGroup {
|
||||
private transient boolean loaded;
|
||||
private transient CompiledScript script;
|
||||
private transient Bindings bindings;
|
||||
public String overrideScriptPath;
|
||||
|
||||
public static SceneGroup of(int groupId) {
|
||||
var group = new SceneGroup();
|
||||
@@ -86,8 +88,12 @@ public final class SceneGroup {
|
||||
// Create the bindings.
|
||||
this.bindings = ScriptLoader.getEngine().createBindings();
|
||||
|
||||
var cs =
|
||||
ScriptLoader.getScript("Scene/%s/scene%s_group%s.lua".formatted(sceneId, sceneId, this.id));
|
||||
CompiledScript cs;
|
||||
if (overrideScriptPath != null && !overrideScriptPath.equals("")) {
|
||||
cs = ScriptLoader.getScript(overrideScriptPath, true);
|
||||
} else {
|
||||
cs = ScriptLoader.getScript("Scene/%s/scene%s_group%s.lua".formatted(sceneId, sceneId, this.id));
|
||||
}
|
||||
|
||||
if (cs == null) {
|
||||
return this;
|
||||
|
||||
Reference in New Issue
Block a user