Implement new command system

This commit is contained in:
KingRainbow44
2022-04-18 18:24:08 -04:00
parent e7a3e8252d
commit 9cd65046b1
8 changed files with 453 additions and 20 deletions

View File

@@ -11,6 +11,7 @@ import java.util.concurrent.ConcurrentHashMap;
import emu.grasscutter.GenshinConstants;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.commands.CommandMap;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.GenshinPlayer;
import emu.grasscutter.game.dungeons.DungeonManager;
@@ -23,11 +24,10 @@ import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
import emu.grasscutter.netty.MihoyoKcpServer;
public class GameServer extends MihoyoKcpServer {
public final class GameServer extends MihoyoKcpServer {
private final InetSocketAddress address;
private final GameServerPacketHandler packetHandler;
private final Timer gameLoop;
private final Map<Integer, GenshinPlayer> players;
private final ChatManager chatManager;
@@ -36,9 +36,11 @@ public class GameServer extends MihoyoKcpServer {
private final ShopManager shopManager;
private final MultiplayerManager multiplayerManager;
private final DungeonManager dungeonManager;
private final CommandMap commandMap;
public GameServer(InetSocketAddress address) {
super(address);
this.setServerInitializer(new GameServerInitializer(this));
this.address = address;
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
@@ -50,22 +52,22 @@ public class GameServer extends MihoyoKcpServer {
this.shopManager = new ShopManager(this);
this.multiplayerManager = new MultiplayerManager(this);
this.dungeonManager = new DungeonManager(this);
this.commandMap = new CommandMap(true);
// Ticker
this.gameLoop = new Timer();
this.gameLoop.scheduleAtFixedRate(new TimerTask() {
// Schedule game loop.
Timer gameLoop = new Timer();
gameLoop.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
onTick();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Grasscutter.getLogger().error("An error occurred during game update.", e);
}
}
}, new Date(), 1000L);
// Shutdown hook
// Hook into shutdown event.
Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown));
}
@@ -101,6 +103,10 @@ public class GameServer extends MihoyoKcpServer {
return dungeonManager;
}
public CommandMap getCommandMap() {
return this.commandMap;
}
public void registerPlayer(GenshinPlayer player) {
getPlayers().put(player.getId(), player);
}