Skip to content

Commit aea0dd1

Browse files
committed
Implement Fabric platform integration
1 parent 7f405f8 commit aea0dd1

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

common/src/main/java/it/renvins/serverpulse/common/platform/Platform.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@ public interface Platform {
1313

1414
/**
1515
* Disable the plugin
16+
* @throws UnsupportedOperationException if the platform does not support this method
1617
*/
17-
void disable();
18+
default void disable() {
19+
throw new UnsupportedOperationException("This method is not supported on this platform.");
20+
}
1821

1922
/**
2023
* @return true if the current thread is the main thread of the server

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,33 @@
22

33
import java.util.logging.Logger;
44

5+
import lombok.Getter;
56
import net.fabricmc.api.ModInitializer;
7+
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
8+
import net.minecraft.server.MinecraftServer;
69

710
public class ServerPulseFabric implements ModInitializer {
811

912
public static final String MOD_ID = "serverpulse";
1013
public static final Logger LOGGER = Logger.getLogger(MOD_ID);
1114

15+
@Getter private MinecraftServer server;
16+
1217
@Override
1318
public void onInitialize() {
19+
ServerLifecycleEvents.SERVER_STARTING.register(this::onServerStarting);
20+
ServerLifecycleEvents.SERVER_STOPPING.register(this::onServerStopped);
21+
22+
LOGGER.info("ServerPulse for Fabric initialized - waiting for server starting...");
23+
}
24+
25+
private void onServerStarting(MinecraftServer server) {
26+
LOGGER.info("ServerPulse is starting...");
27+
this.server = server;
28+
}
29+
30+
private void onServerStopped(MinecraftServer server) {
31+
LOGGER.info("ServerPulse is stopping...");
32+
this.server = null;
1433
}
1534
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package it.renvins.serverpulse.fabric.platform;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import it.renvins.serverpulse.api.data.WorldData;
7+
import it.renvins.serverpulse.common.platform.Platform;
8+
import it.renvins.serverpulse.fabric.ServerPulseFabric;
9+
import lombok.RequiredArgsConstructor;
10+
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
11+
import net.fabricmc.loader.api.FabricLoader;
12+
import net.minecraft.server.world.ServerWorld;
13+
14+
@RequiredArgsConstructor
15+
public class FabricPlatform implements Platform {
16+
17+
private final ServerPulseFabric mod;
18+
19+
@Override
20+
public boolean isEnabled() {
21+
return mod.getServer() != null && FabricLoader.getInstance().isModLoaded("serverpulse");
22+
}
23+
24+
@Override
25+
public boolean isPrimaryThread() {
26+
return mod.getServer().isOnThread();
27+
}
28+
29+
@Override
30+
public int getOnlinePlayerCount() {
31+
return PlayerLookup.all(mod.getServer()).size();
32+
}
33+
34+
@Override
35+
public Map<String, WorldData> getWorldsData() {
36+
Map<String, WorldData> worldsData = new HashMap<>();
37+
for (ServerWorld world : mod.getServer().getWorlds()) {
38+
WorldData worldData = new WorldData(
39+
world.getEntitiesByType(null, entity -> true).size(),
40+
world.getChunkManager().getLoadedChunkCount());
41+
42+
worldsData.put(world.getRegistryKey().getValue().toString(), worldData);
43+
}
44+
return worldsData;
45+
}
46+
}

0 commit comments

Comments
 (0)