完成了部分tui的功能验证

This commit is contained in:
zhangyuheng 2024-02-07 22:30:45 +08:00
parent 8d62c34a66
commit 5810244de9
17 changed files with 201 additions and 98 deletions

View File

@ -69,6 +69,9 @@ public class Commands implements TabExecutor {
case "menu": case "menu":
TUIs.menu(sender, args); TUIs.menu(sender, args);
break; break;
case "list":
TUIs.list(sender, args);
break;
case "help": case "help":
TUIs.printHelp(sender, args); TUIs.printHelp(sender, args);
break; break;
@ -163,7 +166,7 @@ public class Commands implements TabExecutor {
return Arrays.asList("menu", "help", "info", "manage", "flag_info", "group_list", "privilege_list", "group", return Arrays.asList("menu", "help", "info", "manage", "flag_info", "group_list", "privilege_list", "group",
"create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set", "create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set",
"set_privilege", "clear_privilege", "create_group", "delete_group", "set_group", "add_player", "set_privilege", "clear_privilege", "create_group", "delete_group", "set_group", "add_player",
"remove_player" "remove_player", "list"
); );
} }
if (args.length == 2) { if (args.length == 2) {
@ -177,8 +180,6 @@ public class Commands implements TabExecutor {
case "delete": case "delete":
case "create_sub": case "create_sub":
case "auto_create_sub": case "auto_create_sub":
case "expand":
case "contract":
case "info": case "info":
case "manage": case "manage":
case "flag_info": case "flag_info":
@ -196,6 +197,9 @@ public class Commands implements TabExecutor {
case "delete_group": case "delete_group":
case "set_group": case "set_group":
return playerGroups(sender); return playerGroups(sender);
case "expand":
case "contract":
return Collections.singletonList("大小(整数)");
} }
} }
if (args.length == 3) { if (args.length == 3) {
@ -209,6 +213,9 @@ public class Commands implements TabExecutor {
case "add_player": case "add_player":
case "remove_player": case "remove_player":
return playerGroups(sender); return playerGroups(sender);
case "expand":
case "contract":
return playerDominions(sender);
} }
} }
if (args.length == 4) { if (args.length == 4) {

View File

@ -1,5 +1,6 @@
package cn.lunadeer.dominion; package cn.lunadeer.dominion;
import cn.lunadeer.dominion.events.PlayerEvents;
import cn.lunadeer.dominion.utils.ConfigManager; import cn.lunadeer.dominion.utils.ConfigManager;
import cn.lunadeer.dominion.utils.Database; import cn.lunadeer.dominion.utils.Database;
import cn.lunadeer.dominion.utils.XLogger; import cn.lunadeer.dominion.utils.XLogger;
@ -8,6 +9,7 @@ import org.bukkit.Location;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.postgresql.core.Tuple; import org.postgresql.core.Tuple;
import javax.xml.crypto.Data;
import java.sql.Connection; import java.sql.Connection;
import java.util.*; import java.util.*;
@ -19,7 +21,9 @@ public final class Dominion extends JavaPlugin {
instance = this; instance = this;
config = new ConfigManager(this); config = new ConfigManager(this);
dbConnection = Database.createConnection(); dbConnection = Database.createConnection();
Database.migrate();
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands()); Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
XLogger.info("领地插件已启动"); XLogger.info("领地插件已启动");

View File

@ -25,9 +25,9 @@ import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
public class TUIs { public class TUIs {
private static int getPage(String[] args) { private static int getPage(String[] args) {
int page = 1; int page = 1;
if (args.length == 3) { if (args.length == 2) {
try { try {
page = Integer.parseInt(args[2]); page = Integer.parseInt(args[1]);
} catch (Exception e) { } catch (Exception e) {
return 1; return 1;
} }
@ -36,8 +36,8 @@ public class TUIs {
} }
private static DominionDTO getDominion(Player player, String[] args) { private static DominionDTO getDominion(Player player, String[] args) {
if (args.length == 3) { if (args.length == 2) {
return DominionDTO.select(args[2]); return DominionDTO.select(args[1]);
} else { } else {
return getPlayerCurrentDominion(player); return getPlayerCurrentDominion(player);
} }
@ -174,7 +174,7 @@ public class TUIs {
.append("查看指令帮助"); .append("查看指令帮助");
View view = View.create(); View view = View.create();
view.title("Dominion 领地系统") view.title("Dominion 领地系统")
.subtitle("主菜单") .navigator(Line.create().append("主菜单"))
.addLine(list) .addLine(list)
.addLine(group) .addLine(group)
.addLine(help) .addLine(help)
@ -191,6 +191,8 @@ public class TUIs {
Notification.warn(sender, "你没有任何领地"); Notification.warn(sender, "你没有任何领地");
return; return;
} }
view.title("我的领地列表");
view.navigator(Line.create().append(Button.create("主菜单", "/dominion menu")).append("我的领地"));
for (String dominion : dominions) { for (String dominion : dominions) {
TextComponent manage = Button.createGreen("管理", "/dominion manage " + dominion); TextComponent manage = Button.createGreen("管理", "/dominion manage " + dominion);
TextComponent delete = Button.createRed("删除", "/dominion delete " + dominion); TextComponent delete = Button.createRed("删除", "/dominion delete " + dominion);
@ -220,7 +222,11 @@ public class TUIs {
} }
ListView view = ListView.create(6, "/dominion flag_info " + dominion.getName()); ListView view = ListView.create(6, "/dominion flag_info " + dominion.getName());
view.title("领地 " + dominion.getName() + " 默认权限") view.title("领地 " + dominion.getName() + " 默认权限")
.subtitle(Button.create("前往管理界面", "/dominion manage " + dominion.getName())); .navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append("权限列表"));
if (dominion.getAnchor()) { if (dominion.getAnchor()) {
view.add(Line.create().append("重生锚").append(Button.createRed("禁用", "/dominion set anchor false " + dominion.getName()))); view.add(Line.create().append("重生锚").append(Button.createRed("禁用", "/dominion set anchor false " + dominion.getName())));
} else { } else {
@ -432,7 +438,10 @@ public class TUIs {
.append("管理玩家特权"); .append("管理玩家特权");
View view = View.create(); View view = View.create();
view.title("领地 " + dominion.getName() + " 管理界面") view.title("领地 " + dominion.getName() + " 管理界面")
.subtitle(Button.createRed("领地列表", "/dominion list")) .navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(dominion.getName()))
.addLine(size_info) .addLine(size_info)
.addLine(flag_info) .addLine(flag_info)
.addLine(group_info) .addLine(group_info)

View File

@ -31,6 +31,7 @@ public class DominionFlag {
} else { } else {
Notification.error(sender, "用法: /dominion set <权限名称> <true/false> [领地名称]"); Notification.error(sender, "用法: /dominion set <权限名称> <true/false> [领地名称]");
} }
Notification.info(sender, "设置领地权限 " + args[1] + "" + args[2]);
} }
} }

View File

@ -130,14 +130,12 @@ public class DominionOperate {
} }
int size = 10; int size = 10;
String name = ""; String name = "";
if (args.length == 2) {
try { try {
size = Integer.parseInt(args[1]); size = Integer.parseInt(args[1]);
} catch (Exception e) { } catch (Exception e) {
Notification.error(sender, "大小格式错误"); Notification.error(sender, "大小格式错误");
return; return;
} }
}
if (args.length == 3) { if (args.length == 3) {
name = args[2]; name = args[2];
} }
@ -171,14 +169,12 @@ public class DominionOperate {
} }
int size = 10; int size = 10;
String name = ""; String name = "";
if (args.length == 2) {
try { try {
size = Integer.parseInt(args[1]); size = Integer.parseInt(args[1]);
} catch (Exception e) { } catch (Exception e) {
Notification.error(sender, "大小格式错误"); Notification.error(sender, "大小格式错误");
return; return;
} }
}
if (args.length == 3) { if (args.length == 3) {
name = args[2]; name = args[2];
} }

View File

@ -5,6 +5,7 @@ import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification; import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@ -39,17 +40,23 @@ public class Apis {
* @param player 玩家 * @param player 玩家
* @return 当前所在的领地 * @return 当前所在的领地
*/ */
public static DominionDTO getPlayerCurrentDominion(Player player) { public static DominionDTO getPlayerCurrentDominion(Player player, boolean show_warning) {
Location location = player.getLocation(); Location location = player.getLocation();
List<DominionDTO> dominions = DominionDTO.selectByLocation(location.getWorld().getName(), List<DominionDTO> dominions = DominionDTO.selectByLocation(location.getWorld().getName(),
(int) location.getX(), (int) location.getY(), (int) location.getZ()); (int) location.getX(), (int) location.getY(), (int) location.getZ());
if (dominions.size() != 1) { if (dominions.size() != 1) {
if (show_warning) {
Notification.error(player, "你不在一个领地内或在子领地内,无法确定你要操作的领地,请手动指定要操作的领地名称"); Notification.error(player, "你不在一个领地内或在子领地内,无法确定你要操作的领地,请手动指定要操作的领地名称");
}
return null; return null;
} }
return dominions.get(0); return dominions.get(0);
} }
public static DominionDTO getPlayerCurrentDominion(Player player) {
return getPlayerCurrentDominion(player, true);
}
public static boolean updateTemplateFlag(PrivilegeTemplateDTO privilege, String flag, boolean value) { public static boolean updateTemplateFlag(PrivilegeTemplateDTO privilege, String flag, boolean value) {
switch (flag) { switch (flag) {
@ -151,4 +158,24 @@ public class Apis {
} }
return true; return true;
} }
public static BlockFace getFace(Player player) {
float yaw = player.getYaw();
float pitch = player.getPitch();
if (pitch > -45 && pitch < 45) {
if (yaw > -45 && yaw < 45) {
return BlockFace.SOUTH;
} else if (yaw > 135 || yaw < -135) {
return BlockFace.NORTH;
} else if (yaw > 45 && yaw < 135) {
return BlockFace.WEST;
} else {
return BlockFace.EAST;
}
} else if (pitch > 45) {
return BlockFace.UP;
} else {
return BlockFace.DOWN;
}
}
} }

View File

@ -3,6 +3,7 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.utils.Notification; import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Pagination;
import cn.lunadeer.dominion.utils.Time; import cn.lunadeer.dominion.utils.Time;
import cn.lunadeer.dominion.utils.XLogger; import cn.lunadeer.dominion.utils.XLogger;
import org.bukkit.Location; import org.bukkit.Location;
@ -11,8 +12,7 @@ import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion; import static cn.lunadeer.dominion.controllers.Apis.*;
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
public class DominionController { public class DominionController {
@ -30,7 +30,7 @@ public class DominionController {
* @return 创建的领地 * @return 创建的领地
*/ */
public static DominionDTO create(Player owner, String name, Location loc1, Location loc2) { public static DominionDTO create(Player owner, String name, Location loc1, Location loc2) {
DominionDTO parent = getPlayerCurrentDominion(owner); DominionDTO parent = getPlayerCurrentDominion(owner,false);
if (parent == null) { if (parent == null) {
return create(owner, name, loc1, loc2, ""); return create(owner, name, loc1, loc2, "");
} else { } else {
@ -149,7 +149,7 @@ public class DominionController {
*/ */
public static DominionDTO expand(Player operator, Integer size, String dominion_name) { public static DominionDTO expand(Player operator, Integer size, String dominion_name) {
Location location = operator.getLocation(); Location location = operator.getLocation();
BlockFace face = operator.getFacing(); BlockFace face = getFace(operator);
DominionDTO dominion = DominionDTO.select(dominion_name); DominionDTO dominion = DominionDTO.select(dominion_name);
if (dominion == null) { if (dominion == null) {
Notification.error(operator, "领地 " + dominion_name + " 不存在"); Notification.error(operator, "领地 " + dominion_name + " 不存在");
@ -241,7 +241,7 @@ public class DominionController {
*/ */
public static DominionDTO contract(Player operator, Integer size, String dominion_name) { public static DominionDTO contract(Player operator, Integer size, String dominion_name) {
Location location = operator.getLocation(); Location location = operator.getLocation();
BlockFace face = operator.getFacing(); BlockFace face = getFace(operator);
DominionDTO dominion = DominionDTO.select(dominion_name); DominionDTO dominion = DominionDTO.select(dominion_name);
if (dominion == null) { if (dominion == null) {
Notification.error(operator, "领地 " + dominion_name + " 不存在"); Notification.error(operator, "领地 " + dominion_name + " 不存在");

View File

@ -77,17 +77,17 @@ public class DominionDTO {
} }
public static List<DominionDTO> selectAll() { public static List<DominionDTO> selectAll() {
String sql = "SELECT * FROM dominion WHERE id > 0"; String sql = "SELECT * FROM dominion WHERE id > 0;";
return query(sql); return query(sql);
} }
public static List<DominionDTO> selectAll(String world) { public static List<DominionDTO> selectAll(String world) {
String sql = "SELECT * FROM dominion WHERE world = '" + world + "' AND id > 0"; String sql = "SELECT * FROM dominion WHERE world = '" + world + "' AND id > 0;";
return query(sql); return query(sql);
} }
public static List<DominionDTO> search(String name) { public static List<DominionDTO> search(String name) {
String sql = "SELECT * FROM dominion WHERE name LIKE '%" + name + "%' AND id > 0"; String sql = "SELECT * FROM dominion WHERE name LIKE '%" + name + "%' AND id > 0;";
return query(sql); return query(sql);
} }
@ -104,14 +104,14 @@ public class DominionDTO {
-2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648,
2147483647, 2147483647, 2147483647, -1); 2147483647, 2147483647, 2147483647, -1);
} }
String sql = "SELECT * FROM dominion WHERE id = " + id; String sql = "SELECT * FROM dominion WHERE id = " + id + " AND id > 0";
List<DominionDTO> dominions = query(sql); List<DominionDTO> dominions = query(sql);
if (dominions.size() == 0) return null; if (dominions.size() == 0) return null;
return dominions.get(0); return dominions.get(0);
} }
public static List<DominionDTO> selectByParentId(String world, Integer parentId) { public static List<DominionDTO> selectByParentId(String world, Integer parentId) {
String sql = "SELECT * FROM dominion WHERE world = '" + world + "' AND parent_dom_id = " + parentId + " AND id > 0"; String sql = "SELECT * FROM dominion WHERE world = '" + world + "' AND parent_dom_id = " + parentId + " AND id > 0;";
return query(sql); return query(sql);
} }
@ -119,12 +119,12 @@ public class DominionDTO {
String sql = "SELECT * FROM dominion WHERE world = '" + world + "' AND " + String sql = "SELECT * FROM dominion WHERE world = '" + world + "' AND " +
"x1 <= " + x + " AND x2 >= " + x + " AND " + "x1 <= " + x + " AND x2 >= " + x + " AND " +
"y1 <= " + y + " AND y2 >= " + y + " AND " + "y1 <= " + y + " AND y2 >= " + y + " AND " +
"z1 <= " + z + " AND z2 >= " + z + " AND " + "id > 0"; "z1 <= " + z + " AND z2 >= " + z + " AND " + "id > 0;";
return query(sql); return query(sql);
} }
public static DominionDTO select(String name) { public static DominionDTO select(String name) {
String sql = "SELECT * FROM dominion WHERE name = '" + name + "' AND id > 0"; String sql = "SELECT * FROM dominion WHERE name = '" + name + "' AND id > 0;";
List<DominionDTO> dominions = query(sql); List<DominionDTO> dominions = query(sql);
if (dominions.size() == 0) return null; if (dominions.size() == 0) return null;
return dominions.get(0); return dominions.get(0);
@ -143,14 +143,14 @@ public class DominionDTO {
dominion.getX2() + ", " + dominion.getX2() + ", " +
dominion.getY2() + ", " + dominion.getY2() + ", " +
dominion.getZ2() + dominion.getZ2() +
") RETURNING *"; ") RETURNING *;";
List<DominionDTO> dominions = query(sql); List<DominionDTO> dominions = query(sql);
if (dominions.size() == 0) return null; if (dominions.size() == 0) return null;
return dominions.get(0); return dominions.get(0);
} }
public static void delete(DominionDTO dominion) { public static void delete(DominionDTO dominion) {
String sql = "DELETE FROM dominion WHERE id = " + dominion.getId(); String sql = "DELETE FROM dominion WHERE id = " + dominion.getId() + ";";
query(sql); query(sql);
} }
@ -205,7 +205,7 @@ public class DominionDTO {
"wither_spawn = " + dominion.getWitherSpawn() + ", " + "wither_spawn = " + dominion.getWitherSpawn() + ", " +
"harvest = " + dominion.getHarvest() + "harvest = " + dominion.getHarvest() +
" WHERE id = " + dominion.getId() + " WHERE id = " + dominion.getId() +
" RETURNING *"; " RETURNING *;";
List<DominionDTO> dominions = query(sql); List<DominionDTO> dominions = query(sql);
if (dominions.size() == 0) return null; if (dominions.size() == 0) return null;
return dominions.get(0); return dominions.get(0);

View File

@ -21,7 +21,7 @@ public class PlayerDTO {
} }
public static List<PlayerDTO> all() { public static List<PlayerDTO> all() {
String sql = "SELECT * FROM player_name"; String sql = "SELECT * FROM player_name;";
return query(sql); return query(sql);
} }
@ -49,14 +49,14 @@ public class PlayerDTO {
} }
public static PlayerDTO select(UUID uuid) { public static PlayerDTO select(UUID uuid) {
String sql = "SELECT * FROM player_name WHERE uuid = '" + uuid.toString() + "'"; String sql = "SELECT * FROM player_name WHERE uuid = '" + uuid.toString() + "';";
List<PlayerDTO> players = query(sql); List<PlayerDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);
} }
public static PlayerDTO select(String name) { public static PlayerDTO select(String name) {
String sql = "SELECT * FROM player_name WHERE last_known_name = '" + name + "'"; String sql = "SELECT * FROM player_name WHERE last_known_name = '" + name + "';";
List<PlayerDTO> players = query(sql); List<PlayerDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);
@ -64,7 +64,7 @@ public class PlayerDTO {
public static List<PlayerDTO> search(String name) { public static List<PlayerDTO> search(String name) {
// 模糊搜索 // 模糊搜索
String sql = "SELECT * FROM player_name WHERE last_known_name LIKE '%" + name + "%'"; String sql = "SELECT * FROM player_name WHERE last_known_name LIKE '%" + name + "%';";
return query(sql); return query(sql);
} }
@ -72,7 +72,7 @@ public class PlayerDTO {
String sql = "INSERT INTO player_name (uuid, last_known_name, last_join_at) " + String sql = "INSERT INTO player_name (uuid, last_known_name, last_join_at) " +
"VALUES" + "VALUES" +
" ('" + player.getUuid().toString() + "', '" + player.getLastKnownName() + "', CURRENT_TIMESTAMP) " + " ('" + player.getUuid().toString() + "', '" + player.getLastKnownName() + "', CURRENT_TIMESTAMP) " +
"RETURNING *"; "RETURNING *;";
List<PlayerDTO> players = query(sql); List<PlayerDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);
@ -83,7 +83,7 @@ public class PlayerDTO {
"last_known_name = '" + player.getLastKnownName() + "', " + "last_known_name = '" + player.getLastKnownName() + "', " +
"last_join_at = CURRENT_TIMESTAMP " + "last_join_at = CURRENT_TIMESTAMP " +
"WHERE uuid = '" + player.getUuid().toString() + "' " + "WHERE uuid = '" + player.getUuid().toString() + "' " +
"RETURNING *"; "RETURNING *;";
List<PlayerDTO> players = query(sql); List<PlayerDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);

View File

@ -16,7 +16,7 @@ public class PlayerPrivilegeDTO {
player.getAdmin() + ", " + player.getAdmin() + ", " +
player.getDomID() + ", " + player.getDomID() + ", " +
player.getPrivilegeTemplateID() + ")" + player.getPrivilegeTemplateID() + ")" +
"RETURNING *"; "RETURNING *;";
List<PlayerPrivilegeDTO> players = query(sql); List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);
@ -24,12 +24,12 @@ public class PlayerPrivilegeDTO {
public static List<PlayerPrivilegeDTO> select(UUID playerUUID, Integer dom_id) { public static List<PlayerPrivilegeDTO> select(UUID playerUUID, Integer dom_id) {
String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "' " + String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "' " +
"AND dom_id = " + dom_id; "AND dom_id = " + dom_id + ";";
return query(sql); return query(sql);
} }
public static PlayerPrivilegeDTO select(Integer dom_id) { public static PlayerPrivilegeDTO select(Integer dom_id) {
String sql = "SELECT * FROM player_privilege WHERE dom_id = " + dom_id; String sql = "SELECT * FROM player_privilege WHERE dom_id = " + dom_id + ";";
List<PlayerPrivilegeDTO> players = query(sql); List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);
@ -38,17 +38,17 @@ public class PlayerPrivilegeDTO {
public static void delete(UUID player, Integer domID, Integer privilegeTemplateID) { public static void delete(UUID player, Integer domID, Integer privilegeTemplateID) {
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " + String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " +
"AND dom_id = " + domID + " " + "AND dom_id = " + domID + " " +
"AND privilege_template_id = " + privilegeTemplateID; "AND privilege_template_id = " + privilegeTemplateID + ";";
query(sql); query(sql);
} }
public static void delete(UUID player) { public static void delete(UUID player) {
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "'"; String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "';";
query(sql); query(sql);
} }
public static List<PlayerPrivilegeDTO> selectAll() { public static List<PlayerPrivilegeDTO> selectAll() {
String sql = "SELECT * FROM player_privilege"; String sql = "SELECT * FROM player_privilege;";
return query(sql); return query(sql);
} }
@ -120,7 +120,7 @@ public class PlayerPrivilegeDTO {
"admin = " + player.getAdmin() + ", " + "admin = " + player.getAdmin() + ", " +
"dom_id = " + player.getDomID() + ", " + "dom_id = " + player.getDomID() + ", " +
"privilege_template_id = " + player.getPrivilegeTemplateID() + " " + "privilege_template_id = " + player.getPrivilegeTemplateID() + " " +
"WHERE id = " + player.getId(); "WHERE id = " + player.getId() + ";";
List<PlayerPrivilegeDTO> players = query(sql); List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null; if (players.size() == 0) return null;
return players.get(0); return players.get(0);

View File

@ -12,63 +12,63 @@ import java.util.UUID;
public class PrivilegeTemplateDTO { public class PrivilegeTemplateDTO {
public static PrivilegeTemplateDTO insert(PrivilegeTemplateDTO privilege) { public static PrivilegeTemplateDTO insert(PrivilegeTemplateDTO privilege) {
String sql = "INSERT INTO privilege_template (name, creator, group) " + String sql = "INSERT INTO privilege_template (name, creator, team) " +
"VALUES ('" + "VALUES ('" +
privilege.getName() + "', '" + privilege.getName() + "', '" +
privilege.getCreator().toString() + "', " + privilege.getCreator().toString() + "', " +
privilege.getGroup() + ") " + privilege.getGroup() + ") " +
"RETURNING *"; "RETURNING *;";
List<PrivilegeTemplateDTO> templates = query(sql); List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null; if (templates.size() == 0) return null;
return templates.get(0); return templates.get(0);
} }
public static List<PrivilegeTemplateDTO> selectAll() { public static List<PrivilegeTemplateDTO> selectAll() {
String sql = "SELECT * FROM privilege_template"; String sql = "SELECT * FROM privilege_template;";
return query(sql); return query(sql);
} }
public static List<PrivilegeTemplateDTO> searchGroup(String name){ public static List<PrivilegeTemplateDTO> searchGroup(String name){
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%' AND group = true"; String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%' AND team = true;";
return query(sql); return query(sql);
} }
public static List<PrivilegeTemplateDTO> selectGroup(UUID creator){ public static List<PrivilegeTemplateDTO> selectGroup(UUID creator){
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND group = true"; String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND team = true;";
return query(sql); return query(sql);
} }
public static PrivilegeTemplateDTO select(Integer id) { public static PrivilegeTemplateDTO select(Integer id) {
String sql = "SELECT * FROM privilege_template WHERE id = " + id; String sql = "SELECT * FROM privilege_template WHERE id = " + id + ";";
List<PrivilegeTemplateDTO> templates = query(sql); List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null; if (templates.size() == 0) return null;
return templates.get(0); return templates.get(0);
} }
public static PrivilegeTemplateDTO select(UUID creator, String name) { public static PrivilegeTemplateDTO select(UUID creator, String name) {
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "'"; String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "';";
List<PrivilegeTemplateDTO> templates = query(sql); List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null; if (templates.size() == 0) return null;
return templates.get(0); return templates.get(0);
} }
public static List<PrivilegeTemplateDTO> search(String name) { public static List<PrivilegeTemplateDTO> search(String name) {
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%'"; String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%';";
return query(sql); return query(sql);
} }
public static List<PrivilegeTemplateDTO> search(UUID creator) { public static List<PrivilegeTemplateDTO> search(UUID creator) {
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "'"; String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "';";
return query(sql); return query(sql);
} }
public static void delete(PrivilegeTemplateDTO privilege) { public static void delete(PrivilegeTemplateDTO privilege) {
String sql = "DELETE FROM privilege_template WHERE id = " + privilege.getId(); String sql = "DELETE FROM privilege_template WHERE id = " + privilege.getId() + ";";
query(sql); query(sql);
} }
public static void delete(UUID creator, String name) { public static void delete(UUID creator, String name) {
String sql = "DELETE FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "'"; String sql = "DELETE FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "';";
query(sql); query(sql);
} }
@ -76,7 +76,7 @@ public class PrivilegeTemplateDTO {
String sql = "UPDATE privilege_template SET " + String sql = "UPDATE privilege_template SET " +
"name = '" + privilege.getName() + "', " + "name = '" + privilege.getName() + "', " +
"creator = '" + privilege.getCreator().toString() + "', " + "creator = '" + privilege.getCreator().toString() + "', " +
"group = " + privilege.getGroup() + ", " + "team = " + privilege.getGroup() + ", " +
"anchor = " + privilege.getAnchor() + ", " + "anchor = " + privilege.getAnchor() + ", " +
"animal_killing = " + privilege.getAnimalKilling() + ", " + "animal_killing = " + privilege.getAnimalKilling() + ", " +
"anvil = " + privilege.getAnvil() + ", " + "anvil = " + privilege.getAnvil() + ", " +
@ -109,7 +109,7 @@ public class PrivilegeTemplateDTO {
"vehicle_destroy = " + privilege.getVehicleDestroy() + ", " + "vehicle_destroy = " + privilege.getVehicleDestroy() + ", " +
"harvest = " + privilege.getHarvest() + " " + "harvest = " + privilege.getHarvest() + " " +
"WHERE id = " + privilege.getId() + " " + "WHERE id = " + privilege.getId() + " " +
"RETURNING *"; "RETURNING *;";
List<PrivilegeTemplateDTO> templates = query(sql); List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null; if (templates.size() == 0) return null;
return templates.get(0); return templates.get(0);
@ -118,7 +118,7 @@ public class PrivilegeTemplateDTO {
private final Integer id; private final Integer id;
private String name; private String name;
private final UUID creator; private final UUID creator;
private final Boolean group; private final Boolean team;
private Boolean anchor; private Boolean anchor;
private Boolean animalKilling; private Boolean animalKilling;
private Boolean anvil; private Boolean anvil;
@ -164,7 +164,7 @@ public class PrivilegeTemplateDTO {
} }
public Boolean getGroup() { public Boolean getGroup() {
return group; return team;
} }
public Boolean getAnchor() { public Boolean getAnchor() {
@ -451,8 +451,8 @@ public class PrivilegeTemplateDTO {
return update(this); return update(this);
} }
public PrivilegeTemplateDTO(String name, UUID creator, Boolean group) { public PrivilegeTemplateDTO(String name, UUID creator, Boolean team) {
this(null, name, creator, group, this(null, name, creator, team,
false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false,
@ -462,7 +462,7 @@ public class PrivilegeTemplateDTO {
false, false, false); false, false, false);
} }
private PrivilegeTemplateDTO(Integer id, String name, UUID creator, Boolean group, private PrivilegeTemplateDTO(Integer id, String name, UUID creator, Boolean team,
Boolean anchor, Boolean animalKilling, Boolean anvil, Boolean anchor, Boolean animalKilling, Boolean anvil,
Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake, Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake,
Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye, Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye,
@ -473,7 +473,7 @@ public class PrivilegeTemplateDTO {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.creator = creator; this.creator = creator;
this.group = group; this.team = team;
this.anchor = anchor; this.anchor = anchor;
this.animalKilling = animalKilling; this.animalKilling = animalKilling;
this.anvil = anvil; this.anvil = anvil;
@ -516,7 +516,7 @@ public class PrivilegeTemplateDTO {
rs.getInt("id"), rs.getInt("id"),
rs.getString("name"), rs.getString("name"),
UUID.fromString(rs.getString("creator")), UUID.fromString(rs.getString("creator")),
rs.getBoolean("group"), rs.getBoolean("team"),
rs.getBoolean("anchor"), rs.getBoolean("anchor"),
rs.getBoolean("animal_killing"), rs.getBoolean("animal_killing"),
rs.getBoolean("anvil"), rs.getBoolean("anvil"),

View File

@ -0,0 +1,16 @@
package cn.lunadeer.dominion.events;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class PlayerEvents implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player bukkitPlayer = event.getPlayer();
PlayerDTO player = PlayerDTO.get(bukkitPlayer);
player.onJoin(); // update name
}
}

View File

@ -42,10 +42,10 @@ public class Database {
// player name // player name
sql += "CREATE TABLE IF NOT EXISTS player_name (" + sql += "CREATE TABLE IF NOT EXISTS player_name (" +
" id SERIAL PRIMARY KEY," + " id SERIAL PRIMARY KEY," +
" uuid VARCHAR(36) NOT NULL," + " uuid VARCHAR(36) NOT NULL UNIQUE," +
" last_known_name TEXT NOT NULL," + " last_known_name TEXT NOT NULL," +
" last_join_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP" + " last_join_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP" +
")"; ");";
// dominion table // dominion table
sql += "CREATE TABLE IF NOT EXISTS dominion (" + sql += "CREATE TABLE IF NOT EXISTS dominion (" +
@ -103,14 +103,14 @@ public class Database {
" FOREIGN KEY (owner) REFERENCES player_name(uuid)," + " FOREIGN KEY (owner) REFERENCES player_name(uuid)," +
" FOREIGN KEY (parent_dom_id) REFERENCES dominion(id)" + " FOREIGN KEY (parent_dom_id) REFERENCES dominion(id)" +
")"; ");";
// privilege template // privilege template
sql += "CREATE TABLE IF NOT EXISTS privilege_template (" + sql += "CREATE TABLE IF NOT EXISTS privilege_template (" +
" id SERIAL PRIMARY KEY," + " id SERIAL PRIMARY KEY," +
" name TEXT NOT NULL," + " name TEXT NOT NULL," +
" creator VARCHAR(36) NOT NULL," + " creator VARCHAR(36) NOT NULL," +
" group BOOLEAN NOT NULL DEFAULT TRUE," + " team BOOLEAN NOT NULL DEFAULT TRUE," +
" anchor BOOLEAN NOT NULL DEFAULT FALSE," + " anchor BOOLEAN NOT NULL DEFAULT FALSE," +
" animal_killing BOOLEAN NOT NULL DEFAULT FALSE," + " animal_killing BOOLEAN NOT NULL DEFAULT FALSE," +
@ -145,7 +145,7 @@ public class Database {
" harvest BOOLEAN NOT NULL DEFAULT FALSE," + " harvest BOOLEAN NOT NULL DEFAULT FALSE," +
" UNIQUE (name, creator)," + " UNIQUE (name, creator)," +
" FOREIGN KEY (creator) REFERENCES player_name(uuid)" + " FOREIGN KEY (creator) REFERENCES player_name(uuid)" +
")"; ");";
// player dominion privilege // player dominion privilege
sql += "CREATE TABLE IF NOT EXISTS player_dom_privilege (" + sql += "CREATE TABLE IF NOT EXISTS player_dom_privilege (" +
@ -157,7 +157,22 @@ public class Database {
" FOREIGN KEY (player_uuid) REFERENCES player_name(uuid)," + " FOREIGN KEY (player_uuid) REFERENCES player_name(uuid)," +
" FOREIGN KEY (dom_id) REFERENCES dominion(id)," + " FOREIGN KEY (dom_id) REFERENCES dominion(id)," +
" FOREIGN KEY (privilege_template_id) REFERENCES privilege_template(id)" + " FOREIGN KEY (privilege_template_id) REFERENCES privilege_template(id)" +
")"; ");";
sql += "INSERT INTO player_name (" +
"id, uuid, last_known_name" +
") VALUES (" +
"-1, '00000000-0000-0000-0000-000000000000', 'server'" +
") ON CONFLICT DO NOTHING;";
sql += "INSERT INTO dominion (" +
"id, owner, name, world, x1, y1, z1, x2, y2, z2, parent_dom_id, join_message, leave_message" +
") VALUES (" +
"-1, '00000000-0000-0000-0000-000000000000', '根领地', 'all', " +
"-2147483648, -2147483648, -2147483648, " +
"2147483647, 2147483647, 2147483647, -1, " +
"'欢迎', '再见'" +
") ON CONFLICT DO NOTHING;";
query(sql); query(sql);
} }

View File

@ -8,14 +8,14 @@ import java.util.List;
public class Line { public class Line {
private String d = " - ";
private final List<Component> elements = new ArrayList<>(); private final List<Component> elements = new ArrayList<>();
private final TextComponent divider = Component.text(" - ", ViewStyles.sub_color);
public Line() { public Line() {
} }
public TextComponent build() { public TextComponent build() {
TextComponent divider = Component.text(d, ViewStyles.sub_color);
TextComponent.Builder builder = Component.text(); TextComponent.Builder builder = Component.text();
for (int i = 0; i < elements.size(); i++) { for (int i = 0; i < elements.size(); i++) {
builder.append(elements.get(i)); builder.append(elements.get(i));
@ -30,11 +30,20 @@ public class Line {
return new Line(); return new Line();
} }
List<Component> getElements() {
return elements;
}
public Line append(TextComponent component) { public Line append(TextComponent component) {
elements.add(component); elements.add(component);
return this; return this;
} }
public Line setDivider(String d) {
this.d = d;
return this;
}
public Line append(Component component) { public Line append(Component component) {
elements.add(component); elements.add(component);
return this; return this;

View File

@ -1,6 +1,7 @@
package cn.lunadeer.dominion.utils.STUI; package cn.lunadeer.dominion.utils.STUI;
import cn.lunadeer.dominion.utils.Notification; import cn.lunadeer.dominion.utils.Notification;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -76,7 +77,16 @@ public class ListView {
} }
view.addLine(lines.get(i)); view.addLine(lines.get(i));
} }
view.actionBar(Pagination.create(page, lines.size(), this.command)); view.actionBar(Pagination.create(page, lines.size(), page_size, this.command));
view.showOn(player); view.showOn(player);
} }
public ListView navigator(Line line) {
Line nav = Line.create().setDivider("->").append(Component.text("导航", ViewStyles.main_color));
for (Component component : line.getElements()) {
nav.append(component);
}
view.subtitle(nav);
return this;
}
} }

View File

@ -11,9 +11,8 @@ import static cn.lunadeer.dominion.utils.STUI.ViewStyles.sub_color;
public class Pagination { public class Pagination {
public static TextComponent create(int page, int item_size, String command) { public static TextComponent create(int page, int item_size, int page_size, String command) {
// x/y [上一页] [下一页] // x/y [上一页] [下一页]
int page_size = 4;
int page_count = (int) Math.ceil((double) item_size / page_size); int page_count = (int) Math.ceil((double) item_size / page_size);
if (page_count == 0) { if (page_count == 0) {
page_count = 1; page_count = 1;

View File

@ -16,11 +16,11 @@ public class View {
protected TextComponent line_decorate = Component.text("", main_color); protected TextComponent line_decorate = Component.text("", main_color);
protected TextComponent action_decorate = Component.text("", main_color); protected TextComponent action_decorate = Component.text("", main_color);
protected TextComponent title = Component.text(" "); protected TextComponent title = Component.text(" ");
protected TextComponent subtitle = Component.text(""); protected TextComponent subtitle = null;
protected List<TextComponent> content_lines = new ArrayList<>(); protected List<TextComponent> content_lines = new ArrayList<>();
protected TextComponent actionbar = Component.text(" "); protected TextComponent actionbar = null;
protected TextComponent edge = Component.text("━━━━━━━━━━━━━━━━━━━━━━━━━━━━", main_color); protected TextComponent edge = Component.text("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", main_color);
protected TextComponent divide_line = Component.text("━━━━━━━━━━━━━━━━━━━━━━━━━━━━", main_color); protected TextComponent divide_line = Component.text("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", main_color);
public void showOn(Player player) { public void showOn(Player player) {
player.sendMessage(edge); player.sendMessage(edge);
@ -36,7 +36,7 @@ public class View {
builder.append(title_decorate); builder.append(title_decorate);
} }
player.sendMessage(builder.build()); player.sendMessage(builder.build());
if (subtitle.content().length() > 0) { if (subtitle != null) {
player.sendMessage(divide_line); player.sendMessage(divide_line);
player.sendMessage(Component.text().append(sub_title_decorate).append(subtitle).build()); player.sendMessage(Component.text().append(sub_title_decorate).append(subtitle).build());
} }
@ -44,8 +44,10 @@ public class View {
for (TextComponent content_line : content_lines) { for (TextComponent content_line : content_lines) {
player.sendMessage(Component.text().append(line_decorate).append(content_line).build()); player.sendMessage(Component.text().append(line_decorate).append(content_line).build());
} }
if (actionbar != null) {
player.sendMessage(divide_line); player.sendMessage(divide_line);
player.sendMessage(Component.text().append(action_decorate).append(actionbar).build()); player.sendMessage(Component.text().append(action_decorate).append(actionbar).build());
}
player.sendMessage(edge); player.sendMessage(edge);
player.sendMessage(Component.text(" ")); player.sendMessage(Component.text(" "));
} }
@ -74,6 +76,14 @@ public class View {
return this; return this;
} }
public View navigator(Line line) {
Line nav = Line.create().setDivider("->").append(Component.text("导航", ViewStyles.main_color));
for (Component component : line.getElements()) {
nav.append(component);
}
return this.subtitle(nav);
}
public View subtitle(TextComponent subtitle) { public View subtitle(TextComponent subtitle) {
this.subtitle = subtitle; this.subtitle = subtitle;
return this; return this;