mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-30 20:56:55 +00:00
Add more events
This commit is contained in:
parent
3f8e1ea9d2
commit
9fd5aef687
@ -70,13 +70,13 @@ public final class Grasscutter {
|
|||||||
// Database
|
// Database
|
||||||
DatabaseManager.initialize();
|
DatabaseManager.initialize();
|
||||||
|
|
||||||
|
// Create plugin manager instance.
|
||||||
|
pluginManager = new PluginManager();
|
||||||
|
|
||||||
// Create server instances.
|
// Create server instances.
|
||||||
dispatchServer = new DispatchServer();
|
dispatchServer = new DispatchServer();
|
||||||
gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port));
|
gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port));
|
||||||
|
|
||||||
// Create plugin manager instance.
|
|
||||||
pluginManager = new PluginManager();
|
|
||||||
|
|
||||||
// Start servers.
|
// Start servers.
|
||||||
if(getConfig().RunMode.equalsIgnoreCase("HYBRID")) {
|
if(getConfig().RunMode.equalsIgnoreCase("HYBRID")) {
|
||||||
dispatchServer.start();
|
dispatchServer.start();
|
||||||
|
@ -286,8 +286,6 @@ public class GachaManager {
|
|||||||
this.watchService = FileSystems.getDefault().newWatchService();
|
this.watchService = FileSystems.getDefault().newWatchService();
|
||||||
Path path = new File(Grasscutter.getConfig().DATA_FOLDER).toPath();
|
Path path = new File(Grasscutter.getConfig().DATA_FOLDER).toPath();
|
||||||
path.register(watchService, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
|
path.register(watchService, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
|
||||||
|
|
||||||
server.OnGameServerTick.register(this);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Grasscutter.getLogger().error("Unable to load the Gacha Manager Watch Service. If ServerOptions.watchGacha is true it will not auto-reload");
|
Grasscutter.getLogger().error("Unable to load the Gacha Manager Watch Service. If ServerOptions.watchGacha is true it will not auto-reload");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
41
src/main/java/emu/grasscutter/plugin/api/ServerHook.java
Normal file
41
src/main/java/emu/grasscutter/plugin/api/ServerHook.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package emu.grasscutter.plugin.api;
|
||||||
|
|
||||||
|
import emu.grasscutter.game.GenshinPlayer;
|
||||||
|
import emu.grasscutter.server.game.GameServer;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hooks into the {@link GameServer} class, adding convenient ways to do certain things.
|
||||||
|
*/
|
||||||
|
public final class ServerHook {
|
||||||
|
private static ServerHook instance;
|
||||||
|
private final GameServer server;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the server hook instance.
|
||||||
|
* @return A {@link ServerHook} singleton.
|
||||||
|
*/
|
||||||
|
public static ServerHook getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hooks into a server.
|
||||||
|
* @param server The server to hook into.
|
||||||
|
*/
|
||||||
|
public ServerHook(GameServer server) {
|
||||||
|
this.server = server;
|
||||||
|
|
||||||
|
instance = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all online players.
|
||||||
|
* @return Players connected to the server.
|
||||||
|
*/
|
||||||
|
public List<GenshinPlayer> getOnlinePlayers() {
|
||||||
|
return new LinkedList<>(this.server.getPlayers().values());
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,10 @@ public abstract class ServerEvent extends Event {
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Type getServerType() {
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
DISPATCH,
|
DISPATCH,
|
||||||
GAME
|
GAME
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
package emu.grasscutter.server.event.game;
|
||||||
|
|
||||||
|
import emu.grasscutter.server.event.ServerEvent;
|
||||||
|
|
||||||
|
public final class ServerTickEvent extends ServerEvent {
|
||||||
|
public ServerTickEvent() {
|
||||||
|
super(Type.GAME);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package emu.grasscutter.server.event.internal;
|
||||||
|
|
||||||
|
import emu.grasscutter.server.event.ServerEvent;
|
||||||
|
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
|
||||||
|
public final class ServerStartEvent extends ServerEvent {
|
||||||
|
private final OffsetDateTime startTime;
|
||||||
|
|
||||||
|
public ServerStartEvent(Type type, OffsetDateTime startTime) {
|
||||||
|
super(type);
|
||||||
|
|
||||||
|
this.startTime = startTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OffsetDateTime getStartTime() {
|
||||||
|
return this.startTime;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package emu.grasscutter.server.event.internal;
|
||||||
|
|
||||||
|
import emu.grasscutter.server.event.ServerEvent;
|
||||||
|
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
|
||||||
|
public final class ServerStopEvent extends ServerEvent {
|
||||||
|
private final OffsetDateTime stopTime;
|
||||||
|
|
||||||
|
public ServerStopEvent(Type type, OffsetDateTime stopTime) {
|
||||||
|
super(type);
|
||||||
|
|
||||||
|
this.stopTime = stopTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OffsetDateTime getStopTime() {
|
||||||
|
return this.stopTime;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package emu.grasscutter.server.game;
|
package emu.grasscutter.server.game;
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
@ -19,7 +20,10 @@ import emu.grasscutter.game.shop.ShopManager;
|
|||||||
import emu.grasscutter.net.packet.PacketHandler;
|
import emu.grasscutter.net.packet.PacketHandler;
|
||||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||||
import emu.grasscutter.netty.MihoyoKcpServer;
|
import emu.grasscutter.netty.MihoyoKcpServer;
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import emu.grasscutter.server.event.ServerEvent;
|
||||||
|
import emu.grasscutter.server.event.game.ServerTickEvent;
|
||||||
|
import emu.grasscutter.server.event.internal.ServerStartEvent;
|
||||||
|
import emu.grasscutter.server.event.internal.ServerStopEvent;
|
||||||
|
|
||||||
public final class GameServer extends MihoyoKcpServer {
|
public final class GameServer extends MihoyoKcpServer {
|
||||||
private final InetSocketAddress address;
|
private final InetSocketAddress address;
|
||||||
@ -35,17 +39,9 @@ public final class GameServer extends MihoyoKcpServer {
|
|||||||
private final DungeonManager dungeonManager;
|
private final DungeonManager dungeonManager;
|
||||||
private final CommandMap commandMap;
|
private final CommandMap commandMap;
|
||||||
|
|
||||||
public EventBus OnGameServerStartFinish;
|
|
||||||
public EventBus OnGameServerTick;
|
|
||||||
public EventBus OnGameServerStop;
|
|
||||||
|
|
||||||
public GameServer(InetSocketAddress address) {
|
public GameServer(InetSocketAddress address) {
|
||||||
super(address);
|
super(address);
|
||||||
|
|
||||||
OnGameServerStartFinish = EventBus.builder().throwSubscriberException(true).logNoSubscriberMessages(false).build();
|
|
||||||
OnGameServerTick = EventBus.builder().throwSubscriberException(true).logNoSubscriberMessages(false).build();
|
|
||||||
OnGameServerStop = EventBus.builder().throwSubscriberException(true).logNoSubscriberMessages(false).build();
|
|
||||||
|
|
||||||
this.setServerInitializer(new GameServerInitializer(this));
|
this.setServerInitializer(new GameServerInitializer(this));
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
|
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
|
||||||
@ -160,23 +156,22 @@ public final class GameServer extends MihoyoKcpServer {
|
|||||||
return DatabaseHelper.getAccountByName(username);
|
return DatabaseHelper.getAccountByName(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onTick() throws Exception {
|
public void onTick() {
|
||||||
for (GenshinPlayer player : this.getPlayers().values()) {
|
for (GenshinPlayer player : this.getPlayers().values()) {
|
||||||
player.onTick();
|
player.onTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
OnGameServerTick.post(new GameServerTickEvent());
|
ServerTickEvent event = new ServerTickEvent(); event.call();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartFinish() {
|
public void onStartFinish() {
|
||||||
Grasscutter.getLogger().info("Game Server started on port " + address.getPort());
|
Grasscutter.getLogger().info("Game Server started on port " + address.getPort());
|
||||||
|
ServerStartEvent event = new ServerStartEvent(ServerEvent.Type.GAME, OffsetDateTime.now()); event.call();
|
||||||
OnGameServerStartFinish.post(new GameServerStartFinishEvent());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onServerShutdown() {
|
public void onServerShutdown() {
|
||||||
OnGameServerStop.post(new GameServerStopEvent());
|
ServerStopEvent event = new ServerStopEvent(ServerEvent.Type.GAME, OffsetDateTime.now()); event.call();
|
||||||
|
|
||||||
// Kick and save all players
|
// Kick and save all players
|
||||||
List<GenshinPlayer> list = new ArrayList<>(this.getPlayers().size());
|
List<GenshinPlayer> list = new ArrayList<>(this.getPlayers().size());
|
||||||
|
Loading…
Reference in New Issue
Block a user