mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-20 10:55:08 +01:00
Shut down the game server when Grasscutter is about to shut down
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
package emu.grasscutter.server.game;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
import static emu.grasscutter.utils.lang.Language.translate;
|
||||
|
||||
import emu.grasscutter.*;
|
||||
import emu.grasscutter.Grasscutter.ServerRunMode;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
@@ -33,13 +30,17 @@ import emu.grasscutter.server.event.types.ServerEvent;
|
||||
import emu.grasscutter.server.scheduler.ServerTaskScheduler;
|
||||
import emu.grasscutter.task.TaskMap;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import kcp.highway.*;
|
||||
import lombok.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.net.*;
|
||||
import java.time.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import kcp.highway.*;
|
||||
import lombok.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
import static emu.grasscutter.utils.lang.Language.translate;
|
||||
|
||||
@Getter
|
||||
public final class GameServer extends KcpServer implements Iterable<Player> {
|
||||
@@ -164,9 +165,6 @@ public final class GameServer extends KcpServer implements Iterable<Player> {
|
||||
|
||||
// Chata manager
|
||||
this.chatManager = new ChatSystem(this);
|
||||
|
||||
// Hook into shutdown event.
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown));
|
||||
}
|
||||
|
||||
private static InetSocketAddress getAdapterInetSocketAddress() {
|
||||
@@ -330,11 +328,12 @@ public final class GameServer extends KcpServer implements Iterable<Player> {
|
||||
var event = new ServerStopEvent(ServerEvent.Type.GAME, OffsetDateTime.now());
|
||||
event.call();
|
||||
|
||||
// Save players & the world.
|
||||
this.getPlayers().forEach((uid, player) -> player.getSession().close());
|
||||
|
||||
this.getWorlds().forEach(World::save);
|
||||
|
||||
Utils.sleep(1000L); // Wait 1 second for operations to finish.
|
||||
this.stop(); // Stop the server.
|
||||
|
||||
try {
|
||||
var threadPool = GameSessionManager.getLogicThread();
|
||||
|
||||
Reference in New Issue
Block a user