diff --git a/src/main/java/emu/grasscutter/data/ResourceLoader.java b/src/main/java/emu/grasscutter/data/ResourceLoader.java index 6d03ff8b2..243df4a32 100644 --- a/src/main/java/emu/grasscutter/data/ResourceLoader.java +++ b/src/main/java/emu/grasscutter/data/ResourceLoader.java @@ -268,14 +268,16 @@ public final class ResourceLoader { private static void loadRoutes() { try { - Files.newDirectoryStream(getResourcePath("BinOutput/LevelDesign/Routes/"),"*.json") + Files.newDirectoryStream(getResourcePath("BinOutput/LevelDesign/Routes/"), "*.json") .forEach( path -> { try { val data = JsonUtils.loadToClass(path, SceneRoutes.class); val routesArray = data.getRoutes(); if (routesArray == null) return; - val routesMap = GameData.getSceneRouteData().getOrDefault(data.getSceneId(), new Int2ObjectOpenHashMap<>()); + val routesMap = + GameData.getSceneRouteData() + .getOrDefault(data.getSceneId(), new Int2ObjectOpenHashMap<>()); for (Route route : routesArray) { routesMap.put(route.getLocalId(), route); } @@ -284,7 +286,7 @@ public final class ResourceLoader { } }); Grasscutter.getLogger() - .debug("Loaded " + GameData.getSceneNpcBornData().size() + " SceneRouteDatas."); + .debug("Loaded " + GameData.getSceneNpcBornData().size() + " SceneRouteDatas."); } catch (IOException e) { Grasscutter.getLogger().error("Failed to load SceneRouteData folder."); } diff --git a/src/main/java/emu/grasscutter/game/entity/EntityGadget.java b/src/main/java/emu/grasscutter/game/entity/EntityGadget.java index d1cf59824..2cab739fc 100644 --- a/src/main/java/emu/grasscutter/game/entity/EntityGadget.java +++ b/src/main/java/emu/grasscutter/game/entity/EntityGadget.java @@ -248,32 +248,57 @@ public class EntityGadget extends EntityBaseGadget { return true; } - if(routeConfig instanceof ConfigRoute configRoute) { + if (routeConfig instanceof ConfigRoute configRoute) { var route = this.getScene().getSceneRouteById(configRoute.getRouteId()); - if(route != null) { + if (route != null) { var points = route.getPoints(); val currIndex = configRoute.getStartIndex(); Position prevpos; - if(currIndex == 0) { + if (currIndex == 0) { prevpos = getPosition(); - this.getScene().getScriptManager().callEvent(new ScriptArgs(this.getGroupId(), EventType.EVENT_PLATFORM_REACH_POINT, this.getConfigId(), configRoute.getRouteId()).setParam3(0).setEventSource(this.getConfigId())); - }else { + this.getScene() + .getScriptManager() + .callEvent( + new ScriptArgs( + this.getGroupId(), + EventType.EVENT_PLATFORM_REACH_POINT, + this.getConfigId(), + configRoute.getRouteId()) + .setParam3(0) + .setEventSource(this.getConfigId())); + } else { prevpos = points[currIndex].getPos(); } double time = 0; - for(var i = currIndex; i < points.length;++i) { + for (var i = currIndex; i < points.length; ++i) { time += points[i].getPos().computeDistance(prevpos) / points[i].getTargetVelocity(); prevpos = points[i].getPos(); val I = i; - configRoute.getScheduledIndexes().add(this.getScene().getScheduler().scheduleDelayedTask(() -> { - if(points[I].isHasReachEvent() && I > currIndex) { - this.getScene().getScriptManager().callEvent(new ScriptArgs(this.getGroupId(), EventType.EVENT_PLATFORM_REACH_POINT, this.getConfigId(), configRoute.getRouteId()).setParam3(I).setEventSource(this.getConfigId())); - } - configRoute.setStartIndex(I); - this.position.set(points[I].getPos()); - },(int)time)); + configRoute + .getScheduledIndexes() + .add( + this.getScene() + .getScheduler() + .scheduleDelayedTask( + () -> { + if (points[I].isHasReachEvent() && I > currIndex) { + this.getScene() + .getScriptManager() + .callEvent( + new ScriptArgs( + this.getGroupId(), + EventType.EVENT_PLATFORM_REACH_POINT, + this.getConfigId(), + configRoute.getRouteId()) + .setParam3(I) + .setEventSource(this.getConfigId())); + } + configRoute.setStartIndex(I); + this.position.set(points[I].getPos()); + }, + (int) time)); } } } @@ -294,8 +319,8 @@ public class EntityGadget extends EntityBaseGadget { return true; } - if(routeConfig instanceof ConfigRoute configRoute) { - for(var task : configRoute.getScheduledIndexes()) { + if (routeConfig instanceof ConfigRoute configRoute) { + for (var task : configRoute.getScheduledIndexes()) { this.getScene().getScheduler().cancelTask(task); } configRoute.getScheduledIndexes().clear(); diff --git a/src/main/java/emu/grasscutter/game/entity/gadget/platform/ConfigRoute.java b/src/main/java/emu/grasscutter/game/entity/gadget/platform/ConfigRoute.java index 14f6730bb..9abf58f17 100644 --- a/src/main/java/emu/grasscutter/game/entity/gadget/platform/ConfigRoute.java +++ b/src/main/java/emu/grasscutter/game/entity/gadget/platform/ConfigRoute.java @@ -4,10 +4,10 @@ import emu.grasscutter.game.world.Position; import emu.grasscutter.net.proto.MovingPlatformTypeOuterClass; import emu.grasscutter.net.proto.PlatformInfoOuterClass; import emu.grasscutter.scripts.data.SceneGadget; -import lombok.Getter; -import lombok.Setter; import java.util.ArrayList; import java.util.List; +import lombok.Getter; +import lombok.Setter; public class ConfigRoute extends BaseRoute { diff --git a/src/main/java/emu/grasscutter/game/world/Scene.java b/src/main/java/emu/grasscutter/game/world/Scene.java index c3adb0f05..878dbaea6 100644 --- a/src/main/java/emu/grasscutter/game/world/Scene.java +++ b/src/main/java/emu/grasscutter/game/world/Scene.java @@ -536,7 +536,7 @@ public final class Scene { return; } - if(!isPaused) { + if (!isPaused) { this.getScheduler().runTasks(); }