实现了夸服传送服务器信息注册
This commit is contained in:
parent
8675d15e25
commit
3da1e60e6a
@ -1,38 +1,103 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
|
import cn.lunadeer.minecraftpluginutils.JsonFile;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.TableColumn;
|
import cn.lunadeer.minecraftpluginutils.databse.TableColumn;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import com.google.common.io.ByteStreams;
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class ServerInfoDTO {
|
public class ServerInfoDTO {
|
||||||
|
|
||||||
private final Field id = new Field("id", FieldType.INT);
|
private final Field id = new Field("id", FieldType.INT);
|
||||||
private final Field name = new Field("name", FieldType.STRING);
|
private final Field name = new Field("name", FieldType.STRING);
|
||||||
private final Field uuid = new Field("uuid", FieldType.STRING);
|
|
||||||
|
|
||||||
private void initTable() {
|
public Integer getId() {
|
||||||
|
return (Integer) id.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return (String) name.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void initTable() {
|
||||||
TableColumn server_info_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
TableColumn server_info_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||||
TableColumn server_info_name = new TableColumn("name", FieldType.STRING, false, false, true, true, "server");
|
TableColumn server_info_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "server");
|
||||||
TableColumn server_info_uuid = new TableColumn("uuid", FieldType.STRING, false, false, true, true, "00000000-0000-0000-0000-000000000000");
|
|
||||||
CreateTable privilege_template = new CreateTable().ifNotExists();
|
CreateTable privilege_template = new CreateTable().ifNotExists();
|
||||||
privilege_template.table("server_info")
|
privilege_template.table("server_info")
|
||||||
.field(server_info_id)
|
.field(server_info_id)
|
||||||
.field(server_info_name)
|
.field(server_info_name);
|
||||||
.field(server_info_uuid);
|
|
||||||
privilege_template.execute();
|
privilege_template.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void initServerInfo() {
|
public static ServerInfoDTO initServerInfo(JavaPlugin plugin, File se) {
|
||||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
initTable();
|
||||||
out.writeUTF("GetServer");
|
|
||||||
|
ServerInfoDTO serverInfoDTO = new ServerInfoDTO();
|
||||||
|
serverInfoDTO.name.value = plugin.getServer().getName();
|
||||||
|
InsertRow insertRow = new InsertRow();
|
||||||
|
insertRow.returningAll()
|
||||||
|
.field(serverInfoDTO.name)
|
||||||
|
.table("server_info");
|
||||||
|
try (ResultSet res = insertRow.execute()) {
|
||||||
|
if (res.next()) {
|
||||||
|
serverInfoDTO.id.value = res.getInt("id");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
DatabaseManager.handleDatabaseError("创建服务器信息失败", e, "");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("name", serverInfoDTO.name.value);
|
||||||
|
json.put("id", serverInfoDTO.id.value);
|
||||||
|
try {
|
||||||
|
JsonFile.saveToFile(json, se);
|
||||||
|
} catch (Exception e) {
|
||||||
|
XLogger.err("保存服务器信息失败: %s", e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return serverInfoDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ServerInfoDTO updateServerInfo(JavaPlugin plugin, File se) {
|
||||||
|
try {
|
||||||
|
JSONObject json = JsonFile.loadFromFile(se);
|
||||||
|
ServerInfoDTO serverInfoDTO = new ServerInfoDTO();
|
||||||
|
serverInfoDTO.id.value = json.getInteger("id");
|
||||||
|
serverInfoDTO.name.value = json.getString("name");
|
||||||
|
String sql = "UPDATE server_info SET name = ? WHERE id = ?";
|
||||||
|
DatabaseManager.instance.query(sql, serverInfoDTO.name.value, serverInfoDTO.id.value);
|
||||||
|
return serverInfoDTO;
|
||||||
|
} catch (Exception e) {
|
||||||
|
XLogger.err("加载服务器信息失败: %s", e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<Integer, String> getAllServerInfo() {
|
||||||
|
Map<Integer, String> allServerInfo = new java.util.HashMap<>();
|
||||||
|
String sql = "SELECT * FROM server_info";
|
||||||
|
try (ResultSet res = DatabaseManager.instance.query(sql)) {
|
||||||
|
while (res.next()) {
|
||||||
|
ServerInfoDTO serverInfoDTO = new ServerInfoDTO();
|
||||||
|
serverInfoDTO.id.value = res.getInt("id");
|
||||||
|
serverInfoDTO.name.value = res.getString("name");
|
||||||
|
allServerInfo.put(serverInfoDTO.getId(), serverInfoDTO.getName());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
DatabaseManager.handleDatabaseError("获取服务器信息失败", e, "");
|
||||||
|
}
|
||||||
|
return allServerInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
package cn.lunadeer.dominion.managers;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.ServerInfoDTO;
|
import cn.lunadeer.dominion.dtos.ServerInfoDTO;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import com.google.common.io.ByteStreams;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class GlobalTeleport implements PluginMessageListener {
|
public class GlobalTeleport implements PluginMessageListener {
|
||||||
@ -17,21 +14,30 @@ public class GlobalTeleport implements PluginMessageListener {
|
|||||||
public static GlobalTeleport instance;
|
public static GlobalTeleport instance;
|
||||||
|
|
||||||
private final JavaPlugin plugin;
|
private final JavaPlugin plugin;
|
||||||
private final File infoFile;
|
private final ServerInfoDTO thisServerInfo;
|
||||||
private ServerInfoDTO thisServerInfo;
|
private final Map<Integer, String> allServerInfo;
|
||||||
private Map<Integer, ServerInfoDTO> allServerInfo = new HashMap<>();
|
|
||||||
|
|
||||||
public GlobalTeleport(JavaPlugin plugin) {
|
public GlobalTeleport(JavaPlugin plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
File infoFile = new File(plugin.getDataFolder(), "server_info.json");
|
||||||
this.plugin.getServer().getMessenger().registerOutgoingPluginChannel(this.plugin, "BungeeCord");
|
this.plugin.getServer().getMessenger().registerOutgoingPluginChannel(this.plugin, "BungeeCord");
|
||||||
this.plugin.getServer().getMessenger().registerIncomingPluginChannel(this.plugin, "BungeeCord", this);
|
this.plugin.getServer().getMessenger().registerIncomingPluginChannel(this.plugin, "BungeeCord", this);
|
||||||
this.infoFile = new File(plugin.getDataFolder(), "server_info.json");
|
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
if (!infoFile.exists()) {
|
if (!infoFile.exists()) {
|
||||||
ServerInfoDTO.initServerInfo();
|
thisServerInfo = ServerInfoDTO.initServerInfo(plugin, infoFile);
|
||||||
|
} else {
|
||||||
|
thisServerInfo = ServerInfoDTO.updateServerInfo(plugin, infoFile);
|
||||||
}
|
}
|
||||||
// todo load & update info
|
allServerInfo = ServerInfoDTO.getAllServerInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getThisServerName() {
|
||||||
|
return thisServerInfo.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerName(int id) {
|
||||||
|
return allServerInfo.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,14 +50,6 @@ public class GlobalTeleport implements PluginMessageListener {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) {
|
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) {
|
||||||
if (!channel.equals("BungeeCord")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ByteArrayDataInput in = ByteStreams.newDataInput(message);
|
|
||||||
String subchannel = in.readUTF();
|
|
||||||
if (subchannel.equals("SomeSubChannel")) {
|
|
||||||
// 使用下文中的"返回(Response)"一节的代码进行读取
|
|
||||||
// 数据处理
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user