feat: code

This commit is contained in:
2026-01-28 18:14:15 -08:00
parent d4ec8ab5ee
commit 0d7537becf
14 changed files with 336 additions and 215 deletions

View File

@@ -8,6 +8,7 @@ plugins {
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.extendedclip.com/releases/")
}
dependencies {
@@ -15,6 +16,7 @@ dependencies {
implementation(project(":common"))
compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
compileOnly("me.clip:placeholderapi:2.11.7")
}
java {

View File

@@ -1,22 +1,27 @@
package online.mineroo.paper;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
import online.mineroo.common.BindRequest;
import java.util.HashMap;
import java.util.UUID;
import online.mineroo.common.HttpNetworkService;
import online.mineroo.common.MessageManager;
import online.mineroo.common.NetworkServiceInterface;
import online.mineroo.common.request.RequestClient;
import online.mineroo.paper.commands.MainCommand;
import online.mineroo.paper.listeners.BindListener;
import online.mineroo.paper.listeners.PlayerBindListener;
import online.mineroo.paper.structure.PlayerInfo;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public class MinerooCore extends JavaPlugin implements Listener {
private MessageManager messageManager;
private NetworkServiceInterface networkService;
private BindRequest bindRequest;
private RequestClient requestClient;
private Config config;
private HashMap<UUID, PlayerInfo> playerCache = new HashMap<>();
private BindListener bindListener;
@Override
@@ -57,7 +62,7 @@ public class MinerooCore extends JavaPlugin implements Listener {
getLogger().info("Using direct HTTP network [ " + hostname + " ]");
}
bindRequest = new BindRequest(this.getSLF4JLogger(), this.getNetworkService());
requestClient = new RequestClient(this.getSLF4JLogger(), this.getNetworkService());
if (this.messageManager == null) {
this.messageManager = new MessageManager();
@@ -82,7 +87,7 @@ public class MinerooCore extends JavaPlugin implements Listener {
return this.bindListener;
}
public BindRequest getBindRequest() {
return bindRequest;
public RequestClient getRequestClient() {
return requestClient;
}
}

View File

@@ -12,9 +12,9 @@ import io.papermc.paper.registry.RegistryAccess;
import io.papermc.paper.registry.RegistryKey;
import java.util.UUID;
import net.kyori.adventure.key.Key;
import online.mineroo.common.BindRequest;
import online.mineroo.common.BindRequest.PlayerBindStatusEnum;
import online.mineroo.common.MessageManager;
import online.mineroo.common.request.RequestClient;
import online.mineroo.common.request.UserRequest.PlayerBindStatusEnum;
import online.mineroo.paper.MinerooCore;
import online.mineroo.paper.ProxyNetworkService;
import org.bukkit.entity.Player;
@@ -59,26 +59,29 @@ public class BindCommand {
}
try {
this.plugin.getBindRequest().checkPlayerBindStatus(uuid, null).thenAccept(response -> {
PlayerBindStatusEnum status = response.getStatus();
this.plugin.getRequestClient()
.user()
.checkPlayerBindStatus(uuid, null)
.thenAccept(response -> {
PlayerBindStatusEnum status = response.getStatus();
plugin.getSLF4JLogger().debug(status.toString());
plugin.getSLF4JLogger().debug(status.toString());
if (status == PlayerBindStatusEnum.BOUND) {
player.sendMessage(messageManager.get("info.bind.player.already-bound"));
} else if (status == PlayerBindStatusEnum.NOT_BOUND) {
Dialog dialog = RegistryAccess.registryAccess()
.getRegistry(RegistryKey.DIALOG)
.get(Key.key("mineroo:bind_user"));
if (dialog == null) {
logger.error("load user bind dialog failed.");
player.sendMessage(messageManager.get("info.bind.player.dialog-undefined"));
}
if (status == PlayerBindStatusEnum.BOUND) {
player.sendMessage(messageManager.get("info.bind.player.already-bound"));
} else if (status == PlayerBindStatusEnum.NOT_BOUND) {
Dialog dialog = RegistryAccess.registryAccess()
.getRegistry(RegistryKey.DIALOG)
.get(Key.key("mineroo:bind_user"));
if (dialog == null) {
logger.error("load user bind dialog failed.");
player.sendMessage(messageManager.get("info.bind.player.dialog-undefined"));
}
// TODO: Need a timeout check
player.showDialog(dialog);
}
});
// TODO: Need a timeout check
player.showDialog(dialog);
}
});
} finally {
}
@@ -112,7 +115,7 @@ public class BindCommand {
// Run the binding process asynchronously to avoid blocking the main thread
org.bukkit.Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
Logger logger = plugin.getSLF4JLogger();
BindRequest bindRequest = plugin.getBindRequest();
RequestClient requestClient = plugin.getRequestClient();
try {
String address = plugin.getConfigObject().getServer().getServerBind().getAddress();
String port =
@@ -123,7 +126,7 @@ public class BindCommand {
}
// 1. Check binding status
if (bindRequest.checkBindStatus(address, port).join()) {
if (requestClient.management().checkBindStatus(address, port).join()) {
plugin.getMessageManager().get("command.bind.server.already-bound");
context.getSource().getSender().sendMessage(
plugin.getMessageManager().get("command.bind.server.already-bound")
@@ -131,9 +134,9 @@ public class BindCommand {
return;
}
// 2. Initiate MOTD verification
boolean motdOk = bindRequest.initialMotdVerifyRequest(address, port).join();
boolean motdOk = requestClient.management().initialMotdVerifyRequest(address, port).join();
if (motdOk) {
String motdToken = bindRequest.getMotdToken();
String motdToken = requestClient.management().getMotdToken();
// Send MOTD token to Velocity
applyMotdToken(motdToken);
context.getSource().getSender().sendMessage(
@@ -149,7 +152,7 @@ public class BindCommand {
boolean success = false;
int maxRetries = 3;
for (int i = 1; i <= maxRetries; i++) {
if (bindRequest
if (requestClient.management()
.finalizeServerBinding(
plugin.getConfigObject().getServer().getServerName(),
plugin.getConfigObject().getServer().getDescription()

View File

@@ -0,0 +1,51 @@
package online.mineroo.paper.expansions;
import java.util.UUID;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import online.mineroo.paper.MinerooCore;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
public class MinerooUserExpansion extends PlaceholderExpansion {
private final MinerooCore plugin;
public MinerooUserExpansion(MinerooCore plugin) {
this.plugin = plugin;
}
@Override
@NotNull
public String getAuthor() {
return String.join(", ", plugin.getPluginMeta().getAuthors());
}
@Override
@NotNull
public String getIdentifier() {
return "example";
}
@Override
@NotNull
public String getVersion() {
return plugin.getPluginMeta().getVersion();
}
@Override
public boolean persist() {
return true;
}
@Override
public String onPlaceholderRequest(Player player, @NotNull String params) {
if (player == null)
return "";
UUID uuid = player.getUniqueId();
if (params.equals("name")) {
}
return null;
}
}

View File

@@ -16,11 +16,11 @@ import java.util.concurrent.TimeUnit;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import online.mineroo.common.BindRequest;
import online.mineroo.common.BindRequest.PlayerBindEnum;
import online.mineroo.common.BindRequest.PlayerBindResponse;
import online.mineroo.common.BindRequest.PlayerBindStatusEnum;
import online.mineroo.common.MessageManager;
import online.mineroo.common.request.UserRequest;
import online.mineroo.common.request.UserRequest.PlayerBindEnum;
import online.mineroo.common.request.UserRequest.PlayerBindResponse;
import online.mineroo.common.request.UserRequest.PlayerBindStatusEnum;
import online.mineroo.paper.Config;
import online.mineroo.paper.MinerooCore;
import org.bukkit.Bukkit;
@@ -72,7 +72,8 @@ public class PlayerBindListener implements Listener {
return;
}
this.plugin.getBindRequest()
this.plugin.getRequestClient()
.user()
.checkPlayerBindStatus(uuid, null)
.thenAccept(response -> {
Bukkit.getScheduler().runTask(plugin, () -> {
@@ -175,20 +176,21 @@ public class PlayerBindListener implements Listener {
final UUID targetUuid = playerUuid;
plugin.getBindRequest()
plugin.getRequestClient()
.user()
.PlayerBindRequest(userEmail, targetUuid, playerName)
.thenAccept(response -> setConnectionJoinResult(targetUuid, response))
.exceptionally(ex -> {
setConnectionJoinResult(
targetUuid,
BindRequest.createPlayerBindErrorResponse("Network Error: " + ex.getMessage())
UserRequest.createPlayerBindErrorResponse("Network Error: " + ex.getMessage())
);
return null;
});
} else if (key.equals(Key.key("mineroo:bind_user/cancel"))) {
setConnectionJoinResult(
playerUuid,
BindRequest.createPlayerBindErrorResponse(
UserRequest.createPlayerBindErrorResponse(
messageManager.getString("info.bind.player.canceled")
)
);

View File

@@ -0,0 +1,13 @@
package online.mineroo.paper.structure;
public class PlayerInfo {
private String minerooUsername;
public PlayerInfo(String minerooUsername) {
this.minerooUsername = minerooUsername;
}
public String getMinerooUsername() {
return this.minerooUsername;
}
}

View File

@@ -6,6 +6,7 @@ author: YuKun Liu
website: https://mineroo.online
description: Mineroo Base Plugin
api-version: "1.21.10"
softdepend: ["PlaceholderAPI"]
permissions:
mineroo.admin.reload:
description: "Reload plugin config files."