Skip to content

Commit ca30c11

Browse files
committed
Add server pulse command with reload and status functionality
1 parent 6fdae01 commit ca30c11

File tree

5 files changed

+73
-7
lines changed

5 files changed

+73
-7
lines changed

fabric/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ dependencies {
3838
implementation(project(":api"))
3939
implementation(project(":common"))
4040
implementation("com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4")
41+
modImplementation("me.lucko:fabric-permissions-api:0.3.1")
42+
include("me.lucko:fabric-permissions-api:0.3.1") // automatically include the dependency in the jar
4143
}
4244

4345
tasks.processResources {

fabric/src/main/java/it/renvins/serverpulse/fabric/ServerPulseFabric.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import it.renvins.serverpulse.common.metrics.DiskRetriever;
1717
import it.renvins.serverpulse.common.platform.Platform;
1818
import it.renvins.serverpulse.common.scheduler.TaskScheduler;
19+
import it.renvins.serverpulse.fabric.command.ServerPulseCommand;
1920
import it.renvins.serverpulse.fabric.config.FabricConfiguration;
2021
import it.renvins.serverpulse.fabric.config.FabricDatabaseConfiguration;
2122
import it.renvins.serverpulse.fabric.config.FabricMetricsConfiguration;
@@ -26,6 +27,7 @@
2627
import it.renvins.serverpulse.fabric.task.FabricScheduler;
2728
import lombok.Getter;
2829
import net.fabricmc.api.ModInitializer;
30+
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
2931
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
3032
import net.fabricmc.loader.api.FabricLoader;
3133
import net.minecraft.server.MinecraftServer;
@@ -71,6 +73,8 @@ public ServerPulseFabric() {
7173
public void onInitialize() {
7274
ServerLifecycleEvents.SERVER_STARTING.register(this::onServerStarting);
7375
ServerLifecycleEvents.SERVER_STOPPING.register(this::onServerStopped);
76+
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
77+
dispatcher.register(new ServerPulseCommand(config).createCommand()));
7478

7579
LOGGER.info("ServerPulse for Fabric initialized - waiting for server starting...");
7680
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package it.renvins.serverpulse.fabric.command;
2+
3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
5+
import com.mojang.brigadier.context.CommandContext;
6+
import it.renvins.serverpulse.api.ServerPulseProvider;
7+
import it.renvins.serverpulse.common.utils.ChatUtils;
8+
import it.renvins.serverpulse.fabric.config.FabricConfiguration;
9+
import lombok.RequiredArgsConstructor;
10+
import me.lucko.fabric.api.permissions.v0.Permissions;
11+
import net.minecraft.server.command.CommandManager;
12+
import net.minecraft.server.command.ServerCommandSource;
13+
import net.minecraft.text.Text;
14+
15+
@RequiredArgsConstructor
16+
public class ServerPulseCommand {
17+
18+
private final FabricConfiguration config;
19+
20+
public LiteralArgumentBuilder<ServerCommandSource> createCommand() {
21+
// Create the main command
22+
LiteralArgumentBuilder<ServerCommandSource> command =
23+
CommandManager.literal("serverpulse")
24+
.executes(context -> {
25+
ServerCommandSource source = context.getSource();
26+
source.sendMessage(Text.of(ChatUtils.format(config.getConfig().getString("messages.usage"))));
27+
28+
return Command.SINGLE_SUCCESS;
29+
});
30+
31+
command.then(CommandManager.literal("reload")
32+
.requires(source -> Permissions.check(source, "serverpulse.reload", 2))
33+
.executes(this::executeReload));
34+
command.then(CommandManager.literal("status")
35+
.requires(source -> Permissions.check(source, "serverpulse.status", 2))
36+
.executes(this::executeStatus));
37+
38+
return command;
39+
}
40+
41+
private int executeReload(CommandContext<ServerCommandSource> context) {
42+
ServerCommandSource source = context.getSource();
43+
44+
Text message;
45+
if (config.load()) {
46+
message = Text.of(ChatUtils.format(config.getConfig().getString("messages.reloadConfig")));
47+
} else {
48+
message = Text.of(ChatUtils.format(config.getConfig().getString("messages.reloadConfigError")));
49+
}
50+
51+
source.sendMessage(message);
52+
return Command.SINGLE_SUCCESS;
53+
}
54+
55+
private int executeStatus(CommandContext<ServerCommandSource> context) {
56+
ServerCommandSource source = context.getSource();
57+
58+
Text message = Text.of(
59+
ChatUtils.format(ServerPulseProvider.get().getDatabaseService().isConnected() ?
60+
config.getConfig().getString("messages.statusConnected") :
61+
config.getConfig().getString("messages.statusNotConnected")));
62+
63+
source.sendMessage(message);
64+
return Command.SINGLE_SUCCESS;
65+
}
66+
}

fabric/src/main/java/it/renvins/serverpulse/fabric/task/FabricScheduler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.Queue;
44
import java.util.concurrent.CompletableFuture;
55
import java.util.concurrent.ConcurrentLinkedDeque;
6-
import java.util.concurrent.ForkJoinPool;
76

87
import it.renvins.serverpulse.common.scheduler.Task;
98
import it.renvins.serverpulse.common.scheduler.TaskScheduler;

fabric/src/main/resources/config.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,8 @@ metrics:
99
tags:
1010
server: "fabric1"
1111
messages:
12-
noPerms: "&7[&bServer&7Pulse] &7You don't have &bpermission &7to use this &bcommand&7."
12+
usage: "&7[&bServer&7Pulse] &7Please use &b/serverpulsevelocity [status|reload]&7."
1313
reloadConfig: "&7[&bServer&7Pulse] &7Configuration &breloaded&7."
1414
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."
2015
statusConnected: "&7[&bServer&7Pulse] &7Connected to &bInfluxDB&7."
2116
statusNotConnected: "&7[&bServer&7Pulse] &7Not connected to &bInfluxDB&7."

0 commit comments

Comments
 (0)