Skip to content

Commit 5f215af

Browse files
committed
Add command handling and configuration reload functionality
1 parent 48e852c commit 5f215af

File tree

7 files changed

+149
-1
lines changed

7 files changed

+149
-1
lines changed

bungeecord/src/main/java/it/renvins/serverpulse/bungeecord/ServerPulseBungeeCordLoader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import it.renvins.serverpulse.api.service.IDatabaseService;
77
import it.renvins.serverpulse.api.service.IMetricsService;
88
import it.renvins.serverpulse.api.service.Service;
9+
import it.renvins.serverpulse.bungeecord.commands.ServerPulseCommand;
910
import it.renvins.serverpulse.bungeecord.config.BungeeCordConfiguration;
1011
import it.renvins.serverpulse.bungeecord.config.BungeeCordDatabaseConfiguration;
1112
import it.renvins.serverpulse.bungeecord.config.BungeeCordMetricsConfiguration;
@@ -65,6 +66,9 @@ public void load() {
6566
LOGGER.info("Loading configuration...");
6667
config.load();
6768

69+
// Register commands
70+
plugin.getProxy().getPluginManager().registerCommand(plugin, new ServerPulseCommand(config));
71+
6872
ServerPulseProvider.register(new ServerPulseBungeeCordAPI(databaseService, metricsService, diskRetriever, pingRetriever));
6973

7074
databaseService.load();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package it.renvins.serverpulse.bungeecord.commands;
2+
3+
import it.renvins.serverpulse.common.utils.ChatUtils;
4+
import it.renvins.serverpulse.bungeecord.config.BungeeCordConfiguration;
5+
import net.md_5.bungee.api.CommandSender;
6+
import net.md_5.bungee.api.chat.TextComponent;
7+
8+
public class ReloadCommand extends GeneralCommand {
9+
10+
private final BungeeCordConfiguration config;
11+
12+
public ReloadCommand(String permission, boolean isPlayerOnly, BungeeCordConfiguration config) {
13+
super(permission, isPlayerOnly);
14+
this.config = config;
15+
}
16+
17+
@Override
18+
public void run(CommandSender sender, String[] args) {
19+
if (args.length > 0) {
20+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.reloadConfigUsage"))));
21+
return;
22+
}
23+
if (!config.reload()) {
24+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.reloadConfigError"))));
25+
} else {
26+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.reloadConfig"))));
27+
}
28+
}
29+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package it.renvins.serverpulse.bungeecord.commands;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import it.renvins.serverpulse.common.utils.ChatUtils;
7+
import it.renvins.serverpulse.bungeecord.config.BungeeCordConfiguration;
8+
import net.md_5.bungee.api.CommandSender;
9+
import net.md_5.bungee.api.chat.TextComponent;
10+
import net.md_5.bungee.api.connection.ProxiedPlayer;
11+
import net.md_5.bungee.api.plugin.Command;
12+
13+
public class ServerPulseCommand extends Command {
14+
15+
private final BungeeCordConfiguration config;
16+
private final Map<String, GeneralCommand> commands = new HashMap<>();
17+
18+
public ServerPulseCommand(BungeeCordConfiguration config) {
19+
super("serverpulse", "serverpulse.use", "sp");
20+
this.config = config;
21+
registerCommands();
22+
}
23+
24+
@Override
25+
public void execute(CommandSender sender, String[] args) {
26+
if (args.length == 0) {
27+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.noArgs"))));
28+
return;
29+
}
30+
String cmdName = args[0].toLowerCase();
31+
if (!commands.containsKey(cmdName)) {
32+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.noCommand"))));
33+
return;
34+
}
35+
GeneralCommand cmd = commands.get(cmdName);
36+
if (!sender.hasPermission(cmd.getPermission())) {
37+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.noPerms"))));
38+
return;
39+
}
40+
if (cmd.isPlayerOnly() && !(sender instanceof ProxiedPlayer)) {
41+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.playerOnly"))));
42+
return;
43+
}
44+
if (args.length > 1) {
45+
String[] newArgs = new String[args.length - 1];
46+
System.arraycopy(args, 1, newArgs, 0, args.length - 1);
47+
cmd.run(sender, newArgs);
48+
} else {
49+
cmd.run(sender, new String[0]);
50+
}
51+
}
52+
53+
private void registerCommands() {
54+
commands.put("reload", new ReloadCommand("serverpulse.reload", false, config));
55+
commands.put("status", new StatusCommand("serverpulse.status", false, config));
56+
}
57+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package it.renvins.serverpulse.bungeecord.commands;
2+
3+
import it.renvins.serverpulse.api.ServerPulseProvider;
4+
import it.renvins.serverpulse.common.utils.ChatUtils;
5+
import it.renvins.serverpulse.bungeecord.config.BungeeCordConfiguration;
6+
import net.md_5.bungee.api.CommandSender;
7+
import net.md_5.bungee.api.chat.TextComponent;
8+
9+
public class StatusCommand extends GeneralCommand {
10+
11+
private final BungeeCordConfiguration config;
12+
13+
public StatusCommand(String permission, boolean isPlayerOnly, BungeeCordConfiguration config) {
14+
super(permission, isPlayerOnly);
15+
this.config = config;
16+
}
17+
18+
@Override
19+
public void run(CommandSender sender, String[] args) {
20+
if (args.length > 0) {
21+
sender.sendMessage(new TextComponent(ChatUtils.format(config.getConfig().getString("messages.statusConfigUsage"))));
22+
return;
23+
}
24+
sender.sendMessage(new TextComponent(ChatUtils.format(ServerPulseProvider.get().getDatabaseService().isConnected() ?
25+
config.getConfig().getString("messages.statusConnected") :
26+
config.getConfig().getString("messages.statusNotConnected"))));
27+
}
28+
}

bungeecord/src/main/java/it/renvins/serverpulse/bungeecord/config/BungeeCordConfiguration.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,14 @@ public void save() {
5757
plugin.getLogger().log(Level.SEVERE, "Failed to save config!", e);
5858
}
5959
}
60+
61+
public boolean reload() {
62+
try {
63+
config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file);
64+
return true;
65+
} catch (IOException e) {
66+
plugin.getLogger().log(Level.SEVERE, "Failed to reload config: " + name, e);
67+
return false;
68+
}
69+
}
6070
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
metrics:
2+
interval: 5
3+
influxdb:
4+
url: http://localhost:8086 # The URL of the InfluxDB API
5+
org: my-org # The organization where metrics are stored
6+
bucket: metrics_db # The bucket where metrics are stored
7+
token: my-token # The token to access the InfluxDB API (WRITE AND READ ACCESS)
8+
table: minecraft_stats # The table where metrics are stored
9+
tags:
10+
server: "proxy1"
11+
messages:
12+
noPerms: "&7[&bServer&7Pulse] &7You don't have &bpermission &7to use this &bcommand&7."
13+
reloadConfig: "&7[&bServer&7Pulse] &7Configuration &breloaded&7."
14+
reloadConfigError: "&7[&bServer&7Pulse] &7Error &breloading &7configuration..."
15+
noArgs: "&7[&bServer&7Pulse] &7You need to specify a &bcommand&7: &breload&7, &bstatus&7."
16+
playerOnly: "&7[&bServer&7Pulse] &7This command can only be used by &bplayers&7."
17+
noCommand: "&7[&bServer&7Pulse] &7This command is not &bavailable&7."
18+
reloadConfigUsage: "&7[&bServer&7Pulse] &7Usage: &b/serverpulse reload&7."
19+
statusConfigUsage: "&7[&bServer&7Pulse] &7Usage: &b/serverpulse status&7."
20+
statusConnected: "&7[&bServer&7Pulse] &7Connected to &bInfluxDB&7."
21+
statusNotConnected: "&7[&bServer&7Pulse] &7Not connected to &bInfluxDB&7."

velocity/src/main/java/it/renvins/serverpulse/velocity/ServerPulseVelocityAPI.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import it.renvins.serverpulse.api.ServerPulseAPI;
44
import it.renvins.serverpulse.api.metrics.IDiskRetriever;
55
import it.renvins.serverpulse.api.metrics.IPingRetriever;
6-
import it.renvins.serverpulse.api.metrics.ITPSRetriever;
76
import it.renvins.serverpulse.api.service.IDatabaseService;
87
import it.renvins.serverpulse.api.service.IMetricsService;
98
import lombok.RequiredArgsConstructor;

0 commit comments

Comments
 (0)