From 808323f098e7f320bc620e25a6407ab66344b520 Mon Sep 17 00:00:00 2001 From: YuKun Liu Date: Sat, 28 Mar 2026 22:45:55 -0700 Subject: [PATCH] feat: code --- .../common/request/ManagementRequest.java | 23 +++++++++++ .../java/online/mineroo/paper/Config.java | 38 ++++++++++++------- .../online/mineroo/paper/MinerooCore.java | 8 ++++ .../paper/tasks/ReportPlayersTask.java | 34 +++++++++++++++++ paper/src/main/resources/config.yml | 12 ++---- 5 files changed, 93 insertions(+), 22 deletions(-) create mode 100644 paper/src/main/java/online/mineroo/paper/tasks/ReportPlayersTask.java diff --git a/common/src/main/java/online/mineroo/common/request/ManagementRequest.java b/common/src/main/java/online/mineroo/common/request/ManagementRequest.java index 9db59ff..744ac16 100644 --- a/common/src/main/java/online/mineroo/common/request/ManagementRequest.java +++ b/common/src/main/java/online/mineroo/common/request/ManagementRequest.java @@ -1,8 +1,10 @@ package online.mineroo.common.request; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import online.mineroo.common.NetworkServiceInterface; @@ -168,6 +170,27 @@ public class ManagementRequest { }); } + public CompletableFuture reportPlayers(List> players) { + String path = "/server/management/report-online-players"; + + JsonObject json = new JsonObject(); + JsonArray array = new JsonArray(); + for (Map player : players) { + JsonObject obj = new JsonObject(); + obj.addProperty("name", player.get("name")); + obj.addProperty("uuid", player.get("uuid")); + array.add(obj); + } + json.add("players", array); + + return networkService.postData(path, json) + .thenApply(response -> { return true; }) + .exceptionally(e -> { + logger.warn("Mineroo Report: Failed to report player list", e); + return false; + }); + } + /** * Gets the MOTD token received from the API. * diff --git a/paper/src/main/java/online/mineroo/paper/Config.java b/paper/src/main/java/online/mineroo/paper/Config.java index 2839111..dfc951c 100644 --- a/paper/src/main/java/online/mineroo/paper/Config.java +++ b/paper/src/main/java/online/mineroo/paper/Config.java @@ -8,6 +8,7 @@ public class Config { private final ProxySection proxy; private final TestSection test; private final CurrenciesSection currencies; + private final PrivacySection privacy; public Config(FileConfiguration config) { this.test = new TestSection(config); @@ -15,6 +16,7 @@ public class Config { this.server = new ServerSection(config); this.player = new PlayersSection(config); this.currencies = new CurrenciesSection(config); + this.privacy = new PrivacySection(config); } public TestSection getTest() { @@ -37,11 +39,15 @@ public class Config { return currencies; } + public PrivacySection getPrivacy() { + return privacy; + } + public static class TestSection { private final String apiHostname; public TestSection(FileConfiguration config) { - this.apiHostname = config.getString("test.api_hostname", "https://oapi.mineroo.online"); + this.apiHostname = config.getString("test.api-hostname", "https://oapi.mineroo.online"); } public String getApiHostname() { @@ -53,7 +59,7 @@ public class Config { private final boolean useVelocity; public ProxySection(FileConfiguration config) { - this.useVelocity = config.getBoolean("proxy.use_velocity", false); + this.useVelocity = config.getBoolean("proxy.use-velocity", false); } public boolean isUseVelocity() { @@ -67,7 +73,7 @@ public class Config { private final ServerBindSection bind; public ServerSection(FileConfiguration config) { - this.serverName = config.getString("server.serverName", ""); + this.serverName = config.getString("server.name", ""); this.description = config.getString("server.description", "A minecraft server"); this.bind = new ServerBindSection( config.getString("server.bind.address", ""), @@ -119,10 +125,7 @@ public class Config { private final PlayerBindSection bind; public PlayersSection(FileConfiguration config) { - this.bind = new PlayerBindSection( - config.getBoolean("players.bind.required", false), - config.getBoolean("players.bind.share_player_info", true) - ); + this.bind = new PlayerBindSection(config.getBoolean("players.bind.required", false)); } public PlayerBindSection getPlayerBind() { @@ -132,25 +135,20 @@ public class Config { public static class PlayerBindSection { private final boolean required; - private final boolean sharePlayerInfo; - public PlayerBindSection(boolean required, boolean sharePlayerInfo) { + public PlayerBindSection(boolean required) { this.required = required; - this.sharePlayerInfo = sharePlayerInfo; } public boolean isRequired() { return required; } - - public boolean isSharePlayerInfo() { - return sharePlayerInfo; - } } public static class CurrenciesSection { private final boolean enable; private final String primary; + public CurrenciesSection(FileConfiguration config) { this.enable = config.getBoolean("currencies.enable", true); this.primary = config.getString("currencies.primary", "money"); @@ -164,4 +162,16 @@ public class Config { return primary; } } + + public static class PrivacySection { + private final boolean showOnlinePlayers; + + public PrivacySection(FileConfiguration config) { + this.showOnlinePlayers = config.getBoolean("privacy.show-online-players", false); + } + + public boolean isShowOnlinePlayers() { + return showOnlinePlayers; + } + } } diff --git a/paper/src/main/java/online/mineroo/paper/MinerooCore.java b/paper/src/main/java/online/mineroo/paper/MinerooCore.java index 61158a2..9a6c9d0 100644 --- a/paper/src/main/java/online/mineroo/paper/MinerooCore.java +++ b/paper/src/main/java/online/mineroo/paper/MinerooCore.java @@ -12,9 +12,11 @@ import online.mineroo.paper.expansions.MinerooExpansion; import online.mineroo.paper.listeners.BindListener; import online.mineroo.paper.listeners.PlayerBindListener; import online.mineroo.paper.listeners.PlayerCurrencyListener; +import online.mineroo.paper.tasks.ReportPlayersTask; import org.bukkit.Bukkit; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitScheduler; public class MinerooCore extends JavaPlugin implements Listener { private MessageManager messageManager; @@ -69,6 +71,12 @@ public class MinerooCore extends JavaPlugin implements Listener { } else { getLogger().warning("❌ Vault not found! Economy features will be disabled."); } + + if (config.getPrivacy().isShowOnlinePlayers()) { + BukkitScheduler scheduler = getServer().getScheduler(); + long period = 20L * 90; + scheduler.runTaskTimer(this, new ReportPlayersTask(this, scheduler), 20L * 30, period); + } } @Override diff --git a/paper/src/main/java/online/mineroo/paper/tasks/ReportPlayersTask.java b/paper/src/main/java/online/mineroo/paper/tasks/ReportPlayersTask.java new file mode 100644 index 0000000..5e0ac26 --- /dev/null +++ b/paper/src/main/java/online/mineroo/paper/tasks/ReportPlayersTask.java @@ -0,0 +1,34 @@ +package online.mineroo.paper.tasks; + +import java.util.Map; +import online.mineroo.paper.MinerooCore; +import org.bukkit.scheduler.BukkitScheduler; + +public class ReportPlayersTask implements Runnable { + private final MinerooCore plugin; + private final BukkitScheduler scheduler; + + public ReportPlayersTask(MinerooCore plugin, BukkitScheduler scheduler) { + this.plugin = plugin; + this.scheduler = scheduler; + } + + @Override + public void run() { + scheduler.runTask(plugin, () -> { + var players = + plugin.getServer() + .getOnlinePlayers() + .stream() + .map( + player + -> Map.of("name", player.getName(), "uuid", player.getUniqueId().toString()) + ) + .toList(); + + var client = plugin.getRequestClient(); + + scheduler.runTaskAsynchronously(plugin, () -> client.management().reportPlayers(players)); + }); + } +} diff --git a/paper/src/main/resources/config.yml b/paper/src/main/resources/config.yml index 97b83f6..d9b948f 100644 --- a/paper/src/main/resources/config.yml +++ b/paper/src/main/resources/config.yml @@ -1,9 +1,9 @@ proxy: - use_velocity: false + use-velocity: false server: # Only for `bind server` commands - serverName: "" + name: "" description: "A minecraft server" # Only for `bind server` commands @@ -25,9 +25,5 @@ players: # > server will kick all mineroo unknown player required: false - # Share player information on mineroo - # - # !WARNING - # > when you open this, player's info can be display on mineroo server status page. - # > unless the player already turn on the stealth or private mode. - share_player_info: true, +privacy: + show-online-players: true