From 98e1189deb781c87bf81bf1005fac8b760d8a403 Mon Sep 17 00:00:00 2001 From: Bwly999 <438225686@qq.com> Date: Fri, 6 May 2022 18:16:07 +0800 Subject: [PATCH 1/2] fix the problem that the reference of serverHook in Plugin object is null --- .../java/emu/grasscutter/Grasscutter.java | 5 ++- .../grasscutter/server/game/GameServer.java | 33 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/emu/grasscutter/Grasscutter.java b/src/main/java/emu/grasscutter/Grasscutter.java index a1c8a5c7c65..81e729b2c8d 100644 --- a/src/main/java/emu/grasscutter/Grasscutter.java +++ b/src/main/java/emu/grasscutter/Grasscutter.java @@ -92,14 +92,13 @@ public static void main(String[] args) throws Exception { // Database DatabaseManager.initialize(); - // Create plugin manager instance. - pluginManager = new PluginManager(); - // Create server instances. dispatchServer = new DispatchServer(); gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port)); // Create a server hook instance with both servers. new ServerHook(gameServer, dispatchServer); + // Create plugin manager instance. + pluginManager = new PluginManager(); // Start servers. if (getConfig().RunMode == ServerRunMode.HYBRID) { diff --git a/src/main/java/emu/grasscutter/server/game/GameServer.java b/src/main/java/emu/grasscutter/server/game/GameServer.java index db4a8c32b50..0135145c00d 100644 --- a/src/main/java/emu/grasscutter/server/game/GameServer.java +++ b/src/main/java/emu/grasscutter/server/game/GameServer.java @@ -28,6 +28,9 @@ import java.time.OffsetDateTime; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; public final class GameServer extends KcpServer { private final InetSocketAddress address; @@ -67,19 +70,6 @@ public GameServer(InetSocketAddress address) { this.taskMap = new TaskMap(true); this.dropManager = new DropManager(this); this.combineManger = new CombineManger(this); - - // Schedule game loop. - Timer gameLoop = new Timer(); - gameLoop.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - try { - onTick(); - } catch (Exception e) { - Grasscutter.getLogger().error(Grasscutter.getLanguage().An_error_occurred_during_game_update, e); - } - } - }, new Date(), 1000L); // Hook into shutdown event. Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown)); @@ -212,6 +202,23 @@ public void deregisterWorld(World world) { } + @Override + public synchronized void start() { + // Schedule game loop. + ScheduledExecutorService gameLoop = Executors.newScheduledThreadPool(2); + gameLoop.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + try { + onTick(); + } catch (Exception e) { + Grasscutter.getLogger().error(Grasscutter.getLanguage().An_error_occurred_during_game_update, e); + } + } + }, 0L, 1000L, TimeUnit.MILLISECONDS); + super.start(); + } + @Override public void onStartFinish() { Grasscutter.getLogger().info(Grasscutter.getLanguage().Grasscutter_is_free); From c5bf5ecd69cec7465884570782fa2b4061793484 Mon Sep 17 00:00:00 2001 From: Bwly999 <438225686@qq.com> Date: Sat, 7 May 2022 08:00:31 +0800 Subject: [PATCH 2/2] roll back to timer --- src/main/java/emu/grasscutter/server/game/GameServer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/emu/grasscutter/server/game/GameServer.java b/src/main/java/emu/grasscutter/server/game/GameServer.java index 0135145c00d..e6709abf5ce 100644 --- a/src/main/java/emu/grasscutter/server/game/GameServer.java +++ b/src/main/java/emu/grasscutter/server/game/GameServer.java @@ -205,7 +205,7 @@ public void deregisterWorld(World world) { @Override public synchronized void start() { // Schedule game loop. - ScheduledExecutorService gameLoop = Executors.newScheduledThreadPool(2); + Timer gameLoop = new Timer(); gameLoop.scheduleAtFixedRate(new TimerTask() { @Override public void run() { @@ -215,7 +215,8 @@ public void run() { Grasscutter.getLogger().error(Grasscutter.getLanguage().An_error_occurred_during_game_update, e); } } - }, 0L, 1000L, TimeUnit.MILLISECONDS); + }, new Date(), 1000L); + super.start(); }