-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhandler.xs0
75 lines (69 loc) · 2.67 KB
/
handler.xs0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import "io/io.xs0";
import "sys/sys.xs0";
import "data/data.xs0";
import "xms/official_server/cmd_executor.xs0";
import "xms/official_server/apis.xs0";
import "xms/lib/basic_handler.xs0";
var plugin_list = [
"plugins/hello.pl"
];
var loaded_plugins = [];
var registered_commands = {};
var registered_events = {
"player.connected" : [],
"player.disconnected" : [],
"server.started": []
};
const PluginLoader = function() {
for_each(i : plugin_list) {
loaded_plugins.push_back(data.load(i));
for_each(j : loaded_plugins[loaded_plugins.size()-1].registered_commands) {
var name = j; // unrefernce j
registered_commands.insert(name, ref(loaded_plugins[loaded_plugins.size()-1]));
};
for_each(j : loaded_plugins[loaded_plugins.size()-1].registered_events) {
var name = j; // unrefernce j
registered_events[name].push_back(ref(loaded_plugins[loaded_plugins.size()-1]));
};
};
io.print("[PluginLoader/INFO] Loaded ", plugin_list.size(), " plugin(s) to server!\n");
};
const EventHandler = class(BasicEventHandler) {
public var CmdExecutor;
public var event_server_started = function(server) {
this.CmdExecutor = class(OfficialMinecraftServerCommandExecutor)(server.ServerExecution);
PluginLoader();
for_each (i : registered_events["server.started"]) {
i.event_server_started(server);
};
};
public var event_player_connected = function(server, playerName) {
for_each (i : registered_events["player.connected"]) {
i.event_player_connected(server, playerName);
};
io.print(playerName + " joined!\n");
};
public var event_send_message = function(server, playerName, message) {
// handle command event.
if (message.startswith(".")) {
message = message.substr(1, message.length());
var arglist = sys.cmdline2arglist(message);
if (registered_commands.exist(arglist[0])) {
registered_commands[arglist[0]].command_handler(server, playerName, arglist[0], arglist);
} else {
var text = [
["No such command: " + arglist[0], "red"]
];
this.CmdExecutor.CommandExecute("tellraw", [playerName, MakeTellrawText(text)]);
};
} else {
io.print(playerName, ": ", message, "\n");
};
};
public var event_player_disconnected = function(server, playerName) {
for_each (i : registered_events["player.disconnected"]) {
i.event_player_disconnected(server, playerName);
};
io.print(playerName + " left!\n");
};
};