ServerHook.java 3.47 KB
Newer Older
KingRainbow44's avatar
KingRainbow44 committed
1
2
package emu.grasscutter.plugin.api;

3
4
import emu.grasscutter.Grasscutter;
import emu.grasscutter.auth.AuthenticationSystem;
5
6
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
7
import emu.grasscutter.command.CommandMap;
4Benj_'s avatar
4Benj_ committed
8
import emu.grasscutter.command.PermissionHandler;
KingRainbow44's avatar
KingRainbow44 committed
9
import emu.grasscutter.game.player.Player;
KingRainbow44's avatar
KingRainbow44 committed
10
import emu.grasscutter.server.game.GameServer;
11
12
import emu.grasscutter.server.http.HttpServer;
import emu.grasscutter.server.http.Router;
KingRainbow44's avatar
KingRainbow44 committed
13

AnimeGitB's avatar
AnimeGitB committed
14
import java.util.ArrayList;
KingRainbow44's avatar
KingRainbow44 committed
15
import java.util.List;
AnimeGitB's avatar
AnimeGitB committed
16
import java.util.stream.Stream;
KingRainbow44's avatar
KingRainbow44 committed
17
18
19
20
21
22

/**
 * Hooks into the {@link GameServer} class, adding convenient ways to do certain things.
 */
public final class ServerHook {
    private static ServerHook instance;
23
    private final GameServer gameServer;
24
    private final HttpServer httpServer;
KingRainbow44's avatar
KingRainbow44 committed
25
26
27
28
29
30
31
32
33
34
35

    /**
     * Gets the server hook instance.
     * @return A {@link ServerHook} singleton.
     */
    public static ServerHook getInstance() {
        return instance;
    }

    /**
     * Hooks into a server.
36
     * @param gameServer The game server to hook into.
37
     * @param httpServer The HTTP server to hook into.
KingRainbow44's avatar
KingRainbow44 committed
38
     */
39
    public ServerHook(GameServer gameServer, HttpServer httpServer) {
40
        this.gameServer = gameServer;
41
        this.httpServer = httpServer;
KingRainbow44's avatar
KingRainbow44 committed
42

KingRainbow44's avatar
KingRainbow44 committed
43
44
45
        instance = this;
    }

46
47
48
49
50
51
52
53
    /**
     * @return The game server.
     */
    public GameServer getGameServer() {
        return this.gameServer;
    }

    /**
54
     * @return The HTTP server.
55
     */
56
57
    public HttpServer getHttpServer() {
        return this.httpServer;
58
    }
KingRainbow44's avatar
KingRainbow44 committed
59

KingRainbow44's avatar
KingRainbow44 committed
60
61
62
63
    /**
     * Gets all online players.
     * @return Players connected to the server.
     */
AnimeGitB's avatar
AnimeGitB committed
64
    @Deprecated(forRemoval = true)
KingRainbow44's avatar
KingRainbow44 committed
65
    public List<Player> getOnlinePlayers() {
AnimeGitB's avatar
AnimeGitB committed
66
67
68
69
70
71
72
73
74
        return new ArrayList<>(this.gameServer.getPlayers().values());
    }

    /**
     * Gets all online players.
     * @return Players connected to the server.
     */
    public Stream<Player> getOnlinePlayersStream() {
        return this.gameServer.getPlayers().values().stream();
KingRainbow44's avatar
KingRainbow44 committed
75
    }
76
77
78
79
80
81
82

    /**
     * Registers a command to the {@link emu.grasscutter.command.CommandMap}.
     * @param handler The command handler.
     */
    public void registerCommand(CommandHandler handler) {
        Class<? extends CommandHandler> clazz = handler.getClass();
github-actions's avatar
github-actions committed
83
        if (!clazz.isAnnotationPresent(Command.class))
84
85
            throw new IllegalArgumentException("Command handler must be annotated with @Command.");
        Command commandData = clazz.getAnnotation(Command.class);
86
        CommandMap.getInstance().registerCommand(commandData.label(), handler);
87
    }
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

    /**
     * Adds a router using an instance of a class.
     * @param router A router instance.
     */
    public void addRouter(Router router) {
        this.addRouter(router.getClass());
    }

    /**
     * Adds a router using a class.
     * @param router The class of the router.
     */
    public void addRouter(Class<? extends Router> router) {
        this.httpServer.addRouter(router);
    }

    /**
     * Sets the server's authentication system.
     * @param authSystem An instance of the authentication system.
     */
    public void setAuthSystem(AuthenticationSystem authSystem) {
        Grasscutter.setAuthenticationSystem(authSystem);
    }
4Benj_'s avatar
4Benj_ committed
112
113
114
115
116
117
118
119

    /**
     * Sets the server's permission handler.
     * @param permHandler An instance of the permission handler.
     */
    public void setPermissionHandler(PermissionHandler permHandler) {
        Grasscutter.setPermissionHandler(permHandler);
    }
github-actions's avatar
github-actions committed
120
}