引入remove功能
This commit is contained in:
@@ -14,16 +14,19 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BookMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jooq.impl.DSL;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static ling.database.tables.LocationnotepadTB.LOCATIONNOTEPAD;
|
||||
|
||||
/// zb命令处理器
|
||||
public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
|
||||
protected final static List<String> TAB_1 = Arrays.asList("add", "remove", "help", "reload");
|
||||
protected final static List<String> TAB_1 = Arrays.asList("add", "remove", "help", "reload", "list");
|
||||
|
||||
public ZbCommand() {
|
||||
|
||||
@@ -53,14 +56,62 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (data.addLocation(name, isFixed))
|
||||
player.sendMessage("坐标记录完毕!");
|
||||
if (data.addLocation(name, isFixed)) player.sendMessage("坐标记录完毕!");
|
||||
} catch (SQLException e) {
|
||||
CoordinateRecorder.getCurrent().getLogger().severe("记录坐标出错:" + e.getMessage());
|
||||
player.sendMessage(ChatColor.RED + "服务器内部错误:记录数据失败");
|
||||
}
|
||||
}
|
||||
|
||||
protected void list(Player player, String[] strings) throws SQLException {
|
||||
if (strings.length > 2) {
|
||||
player.sendMessage(ChatColor.RED + "命令过长");
|
||||
return;
|
||||
}
|
||||
PlayerData data = PlayerMap.getCurrent().getPlayerData(player);
|
||||
if (data == null) {
|
||||
player.sendMessage(ChatColor.RED + "玩家未登录");
|
||||
return;
|
||||
}
|
||||
int page = 1;
|
||||
if (strings.length == 2) {
|
||||
try {
|
||||
page = Integer.parseInt(strings[1]);
|
||||
if (page < 1) {
|
||||
player.sendMessage(ChatColor.RED + "Page小于1!");
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
player.sendMessage(ChatColor.RED + strings[1] + "无法解析为数字!");
|
||||
}
|
||||
}
|
||||
|
||||
final int PAGE_SIZE = 8;
|
||||
//开始查询数据
|
||||
var ctx = CoordinateRecorder.getDatabase().getDSL();
|
||||
|
||||
Integer count = ctx.select(DSL.count()).from(LOCATIONNOTEPAD)
|
||||
.where(LOCATIONNOTEPAD.UID.eq(player.getUniqueId().toString())
|
||||
.and(LOCATIONNOTEPAD.ISDELETE.eq(false)))
|
||||
.fetchOne(DSL.count());
|
||||
assert count != null;
|
||||
int pageCount = (count / PAGE_SIZE) + (count % PAGE_SIZE == 0 ? 0 : 1);
|
||||
|
||||
if (pageCount < page) {
|
||||
player.sendMessage(ChatColor.RED + "没有第" + page + "页数据");
|
||||
return;
|
||||
}
|
||||
|
||||
List<LocationnotepadPO> result = ctx.select().from(LOCATIONNOTEPAD)
|
||||
.where(LOCATIONNOTEPAD.UID.eq(player.getUniqueId().toString()).and(LOCATIONNOTEPAD.ISDELETE.eq(false)))
|
||||
.orderBy(LOCATIONNOTEPAD.ID.asc())
|
||||
.limit(PAGE_SIZE).offset(PAGE_SIZE * (page - 1)).fetch().into(LocationnotepadPO.class);
|
||||
player.sendMessage("共查询到" + result.size() + "条结果:");
|
||||
for (LocationnotepadPO po : result) {
|
||||
player.sendMessage(po.getName() + " X " + po.getX() + " Y " + po.getY() + " Z " + po.getZ());
|
||||
}
|
||||
player.sendMessage("当前第" + page + "页,共" + pageCount + "页");
|
||||
}
|
||||
|
||||
protected void remove(Player player, String[] strings) {
|
||||
if (strings.length > 2) {
|
||||
player.sendMessage(ChatColor.RED + "命令过长");
|
||||
@@ -76,8 +127,7 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (data.removeLocation(strings[1]))
|
||||
player.sendMessage("操作完成");
|
||||
if (data.removeLocation(strings[1])) player.sendMessage("操作完成");
|
||||
} catch (SQLException e) {
|
||||
CoordinateRecorder.getCurrent().getLogger().severe("移除坐标出错:" + e.getMessage());
|
||||
player.sendMessage(ChatColor.RED + "服务器内部错误:移除数据失败");
|
||||
@@ -92,18 +142,10 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
bookMeta.setGeneration(BookMeta.Generation.COPY_OF_COPY);
|
||||
bookMeta.setTitle("帮助信息");
|
||||
bookMeta.setAuthor("StarPoles");
|
||||
bookMeta.addPage("欢迎使用坐标管理器!你好," + player.getName() + "\n\n" +
|
||||
"本书将向你介绍如何使用指令记录曾探索过的地点,以避免迷路\n" +
|
||||
"如果需要再次查看帮助信息,请使用 /zb help\n",
|
||||
"/zb add <地点名称> <固定到侧边栏> \n" +
|
||||
"记录当前地点到数据库中,例如\n" +
|
||||
"/zb add Home\n" +
|
||||
"将会记录当前的位置,取名为 Home,并固定到屏幕右侧\n",
|
||||
"如果不想固定到屏幕右侧,可以像这样使用\n" +
|
||||
"/zb add Home false\n" +
|
||||
"然后,你可以使用/zb list来查看已经保存的位置\n" +
|
||||
"使用/zb fixed <Name> 来将地点固定到屏幕右侧\n" +
|
||||
"使用/zb unfixed <Name> 来取消固定。\n");
|
||||
bookMeta.addPage(
|
||||
"欢迎使用坐标管理器!你好," + player.getName() + "\n\n" + "本书将向你介绍如何使用指令记录曾探索过的地点,以避免迷路\n" + "如果需要再次查看帮助信息,请使用 /zb help\n",
|
||||
"/zb add <地点名称> <固定到侧边栏> \n" + "记录当前地点到数据库中,例如\n" + "/zb add Home\n" + "将会记录当前的位置,取名为 Home,并固定到屏幕右侧\n",
|
||||
"如果不想固定到屏幕右侧,可以像这样使用\n" + "/zb add Home false\n" + "然后,你可以使用/zb list来查看已经保存的位置\n" + "使用/zb fixed <Name> 来将地点固定到屏幕右侧\n" + "使用/zb unfixed <Name> 来取消固定。\n");
|
||||
book.setItemMeta(bookMeta);
|
||||
|
||||
player.openBook(book);
|
||||
@@ -142,6 +184,9 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
case "reload":
|
||||
reload(player, strings);
|
||||
break;
|
||||
case "list":
|
||||
list(player, strings);
|
||||
break;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
player.sendMessage(ChatColor.RED + "服务器内部错误,请联系管理员");
|
||||
@@ -151,8 +196,8 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command,
|
||||
@NotNull String s, @NotNull String[] strings) {
|
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
|
||||
@NotNull String[] strings) {
|
||||
assert s.equals("zb");
|
||||
if (!(commandSender instanceof Player player)) {
|
||||
System.out.println("该命令只能由玩家执行");
|
||||
@@ -163,8 +208,7 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
|
||||
protected List<String> onRemoveTab(Player player, String latest, String[] strings) {
|
||||
var data = PlayerMap.getCurrent().getPlayerData(player);
|
||||
if (data == null)
|
||||
return List.of();
|
||||
if (data == null) return List.of();
|
||||
List<String> list = new ArrayList<>();
|
||||
List<LocationnotepadPO> poList = data.getLocationList();
|
||||
for (LocationnotepadPO locationnotepadPO : poList) {
|
||||
@@ -182,11 +226,12 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
if (strings.length != 0) {
|
||||
latest = strings[strings.length - 1];
|
||||
}
|
||||
if (strings.length == 1)
|
||||
return filter(latest, new ArrayList<>(TAB_1));
|
||||
if (strings.length == 1) return filter(latest, new ArrayList<>(TAB_1));
|
||||
if (strings.length == 2) {
|
||||
if (strings[0].equals("remove")) {
|
||||
return onRemoveTab(player, latest, strings);
|
||||
} else if (strings[0].equals("list")) {
|
||||
return List.of("<页码>");
|
||||
}
|
||||
}
|
||||
return List.of();
|
||||
|
||||
Reference in New Issue
Block a user