Skip to content
This repository was archived by the owner on Jun 17, 2024. It is now read-only.

Commit 3ed7f0d

Browse files
committed
feat: ✨ load serverinfo from database
1 parent 090082d commit 3ed7f0d

File tree

3 files changed

+93
-8
lines changed

3 files changed

+93
-8
lines changed

src/main/java/org/bsrserver/EventListener.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.net.URL;
66
import java.net.HttpURLConnection;
77
import java.util.ArrayList;
8+
import java.util.HashMap;
89
import javax.xml.parsers.DocumentBuilderFactory;
910

1011
import com.velocitypowered.api.event.Subscribe;
@@ -20,10 +21,19 @@
2021
import org.w3c.dom.NodeList;
2122

2223
public class EventListener {
23-
ProxyServer proxyServer;
24+
private final ProxyServer proxyServer;
25+
private final HashMap<String, ServerInfo> serverInfoHashMap;
2426

25-
private int getOpenDays() {
26-
return (int) ChronoUnit.DAYS.between(LocalDate.of(2021, 1, 10), LocalDate.now());
27+
private String getOpenDays(RegisteredServer server) {
28+
String serverName = server.getServerInfo().getName();
29+
ServerInfo serverInfo = serverInfoHashMap.get(serverName);
30+
String namedName = serverName;
31+
int daysBetween = 0;
32+
if (serverInfo != null) {
33+
namedName = serverInfo.namedName() != null ? serverInfo.namedName() : namedName;
34+
daysBetween = (int) ChronoUnit.DAYS.between(serverInfo.foundationTime().toLocalDate(), LocalDate.now());
35+
}
36+
return "这是 " + namedName + " 开服的第 " + daysBetween + " 天\n\n";
2737
}
2838

2939
private String getSentence() {
@@ -81,8 +91,9 @@ private Component getServerList(RegisteredServer server) {
8191
return Component.join(JoinConfiguration.separator(Component.text(" ")), components);
8292
}
8393

84-
public EventListener(ProxyServer proxyServer) {
85-
this.proxyServer = proxyServer;
94+
public EventListener(Main main) {
95+
this.proxyServer = main.getProxyServer();
96+
this.serverInfoHashMap = main.getServerInfoHashMap();
8697
}
8798

8899
@Subscribe
@@ -91,7 +102,7 @@ public void onServerConnectedEvent(ServerConnectedEvent event) {
91102
Component message = Component.text("-".repeat(40) + "\n")
92103
.append(Component.text("§e§l" + event.getPlayer().getUsername()))
93104
.append(Component.text("§r, 欢迎回到 §bBSR 服务器§r!\n"))
94-
.append(Component.text("这是 BSR 服务器开服的第 " + getOpenDays() + " 天\n\n"))
105+
.append(Component.text(getOpenDays(event.getServer())))
95106
.append(Component.text("[§a一言§r] " + getSentence() + "\n\n"))
96107
.append(getServerList(event.getServer()))
97108
.append(Component.text("\n"))

src/main/java/org/bsrserver/Main.java

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package org.bsrserver;
22

3+
import java.sql.*;
4+
import java.nio.file.Path;
5+
import java.util.HashMap;
6+
7+
import org.slf4j.Logger;
38
import com.google.inject.Inject;
49
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
510
import com.velocitypowered.api.plugin.Plugin;
611
import com.velocitypowered.api.event.Subscribe;
712
import com.velocitypowered.api.proxy.ProxyServer;
13+
import com.velocitypowered.api.plugin.annotation.DataDirectory;
814

915
@Plugin(
1016
id = "bsrgreeter",
@@ -16,14 +22,64 @@
1622
)
1723
public class Main {
1824
private final ProxyServer proxyServer;
25+
private final Logger logger;
26+
private final Path dataDirectory;
27+
private final HashMap<String, ServerInfo> serverInfoHashMap = new HashMap<>();
1928

2029
@Inject
21-
public Main(ProxyServer proxyServer) {
30+
public Main(ProxyServer proxyServer, Logger logger, @DataDirectory Path dataDirectory) {
2231
this.proxyServer = proxyServer;
32+
this.logger = logger;
33+
this.dataDirectory = dataDirectory;
2334
}
2435

2536
@Subscribe
2637
public void onInitialize(ProxyInitializeEvent event) {
27-
proxyServer.getEventManager().register(this, new EventListener(proxyServer));
38+
// load config
39+
Config.getInstance().loadConfig(dataDirectory);
40+
41+
// read database
42+
try {
43+
// connect
44+
Class.forName("org.postgresql.Driver");
45+
Connection connection = DriverManager.getConnection(
46+
Config.getInstance().getDatabaseUrl(),
47+
Config.getInstance().getDatabaseUser(),
48+
Config.getInstance().getDatabasePassword()
49+
);
50+
logger.info("Successfully connected to database");
51+
52+
// select
53+
String tableName = Config.getInstance().getDatabaseTable();
54+
Statement statement = connection.createStatement();
55+
ResultSet resultSet = statement.executeQuery("SELECT * FROM " + tableName);
56+
while (resultSet.next()) {
57+
String serverName = resultSet.getString("server_name");
58+
ServerInfo serverInfo = new ServerInfo(
59+
serverName,
60+
resultSet.getString("named_name"),
61+
resultSet.getDate("foundation_time")
62+
);
63+
serverInfoHashMap.put(serverName, serverInfo);
64+
}
65+
resultSet.close();
66+
statement.close();
67+
connection.close();
68+
logger.info("Loaded servers: " + serverInfoHashMap.keySet());
69+
} catch (Exception e) {
70+
e.printStackTrace();
71+
logger.error("Fail connect to database");
72+
}
73+
74+
// register command
75+
proxyServer.getEventManager().register(this, new EventListener(this));
76+
}
77+
78+
public ProxyServer getProxyServer() {
79+
return proxyServer;
80+
}
81+
82+
public HashMap<String, ServerInfo> getServerInfoHashMap() {
83+
return serverInfoHashMap;
2884
}
2985
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.bsrserver;
2+
3+
import java.sql.Date;
4+
5+
public record ServerInfo(
6+
String serverName,
7+
String namedName,
8+
Date foundationTime
9+
) {
10+
@Override
11+
public String toString() {
12+
return "ServerInfo{" +
13+
"serverName='" + serverName + '\'' +
14+
", namedName='" + namedName + '\'' +
15+
", foundationTime=" + foundationTime +
16+
'}';
17+
}
18+
}

0 commit comments

Comments
 (0)