diff --git a/pom.xml b/pom.xml index e421224..27dd769 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ cc.carm.plugin moeteleport - 1.1.1 + 1.2.0 MoeTeleport 喵喵传送,简单的传送、设置家的插件。 diff --git a/src/main/java/cc/carm/plugin/moeteleport/Main.java b/src/main/java/cc/carm/plugin/moeteleport/Main.java index 2ffe4d7..cdcd8ea 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/Main.java +++ b/src/main/java/cc/carm/plugin/moeteleport/Main.java @@ -15,11 +15,13 @@ import cc.carm.plugin.moeteleport.manager.ConfigManager; import cc.carm.plugin.moeteleport.manager.RequestManager; import cc.carm.plugin.moeteleport.manager.TeleportManager; import cc.carm.plugin.moeteleport.manager.UserManager; +import cc.carm.plugin.moeteleport.model.UserData; import cc.carm.plugin.moeteleport.util.ColorParser; import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; import org.bukkit.command.PluginCommand; import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; @@ -27,108 +29,114 @@ import org.jetbrains.annotations.Nullable; public class Main extends JavaPlugin { - private static Main instance; - public static boolean debugMode = true; + public static boolean debugMode = true; + private static Main instance; + private UserManager userManager; + private TeleportManager teleportManager; + private RequestManager requestManager; - private UserManager userManager; - private TeleportManager teleportManager; - private RequestManager requestManager; + /** + * 注册监听器 + * + * @param listener 监听器 + */ + public static void regListener(Listener listener) { + Bukkit.getPluginManager().registerEvents(listener, getInstance()); + } - @Override - public void onEnable() { - instance = this; - log(getName() + " " + getDescription().getVersion() + " &7开始加载..."); - long startTime = System.currentTimeMillis(); + public static void log(String message) { + Bukkit.getConsoleSender().sendMessage(ColorParser.parse("[" + getInstance().getName() + "] " + message)); + } - log("加载配置文件..."); - ConfigManager.initConfig(); + public static void error(String message) { + log("&4[ERROR] &r" + message); + } - log("加载用户管理器..."); - this.userManager = new UserManager(this); + public static void debug(String message) { + if (debugMode) { + log("&b[DEBUG] &r" + message); + } + } - log("加载请求管理器..."); - this.requestManager = new RequestManager(this); + public static Main getInstance() { + return instance; + } - log("注册监听器..."); - regListener(new UserListener()); + public static void registerCommand(String commandName, + @NotNull CommandExecutor executor) { + registerCommand(commandName, executor, null); + } - log("注册指令..."); - registerCommand("back", new BackCommand()); + public static void registerCommand(String commandName, + @NotNull CommandExecutor executor, + @Nullable TabCompleter tabCompleter) { + PluginCommand command = Bukkit.getPluginCommand(commandName); + if (command == null) return; + command.setExecutor(executor); + if (tabCompleter != null) command.setTabCompleter(tabCompleter); + } - registerCommand("home", new GoHomeCommand(), new HomeNameCompleter()); - registerCommand("delHome", new DelHomeCommand(), new HomeNameCompleter()); - registerCommand("setHome", new SetHomeCommand()); - registerCommand("listHome", new ListHomeCommand()); + public static UserManager getUserManager() { + return Main.getInstance().userManager; + } - registerCommand("tpa", new TpaCommand(), new PlayerNameCompleter()); - registerCommand("tpaHere", new TpaCommand(), new PlayerNameCompleter()); - registerCommand("tpAccept", new TpHandleCommand(), new TpRequestCompleter()); - registerCommand("tpDeny", new TpHandleCommand(), new TpRequestCompleter()); + public static RequestManager getRequestManager() { + return Main.getInstance().requestManager; + } - log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。"); + @Override + public void onEnable() { + instance = this; + log(getName() + " " + getDescription().getVersion() + " &7开始加载..."); + long startTime = System.currentTimeMillis(); - } + log("加载配置文件..."); + ConfigManager.initConfig(); - @Override - public void onDisable() { - log(getName() + " " + getDescription().getVersion() + " 开始卸载..."); - long startTime = System.currentTimeMillis(); + log("加载用户管理器..."); + this.userManager = new UserManager(this); + if (Bukkit.getOnlinePlayers().size() > 0) { + log(" 加载现有用户数据..."); + for (Player player : Bukkit.getOnlinePlayers()) { + UserData data = Main.getUserManager().loadData(player.getUniqueId()); + Main.getUserManager().getUserDataMap().put(player.getUniqueId(), data); + } + } - getRequestManager().shutdown(); + log("加载请求管理器..."); + this.requestManager = new RequestManager(this); - log("卸载监听器..."); - Bukkit.getServicesManager().unregisterAll(this); + log("注册监听器..."); + regListener(new UserListener()); - log("卸载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。"); - } + log("注册指令..."); + registerCommand("back", new BackCommand()); - /** - * 注册监听器 - * - * @param listener 监听器 - */ - public static void regListener(Listener listener) { - Bukkit.getPluginManager().registerEvents(listener, getInstance()); - } + registerCommand("home", new GoHomeCommand(), new HomeNameCompleter()); + registerCommand("delHome", new DelHomeCommand(), new HomeNameCompleter()); + registerCommand("setHome", new SetHomeCommand()); + registerCommand("listHome", new ListHomeCommand()); - public static void log(String message) { - Bukkit.getConsoleSender().sendMessage(ColorParser.parse("[" + getInstance().getName() + "] " + message)); - } + registerCommand("tpa", new TpaCommand(), new PlayerNameCompleter()); + registerCommand("tpaHere", new TpaCommand(), new PlayerNameCompleter()); + registerCommand("tpAccept", new TpHandleCommand(), new TpRequestCompleter()); + registerCommand("tpDeny", new TpHandleCommand(), new TpRequestCompleter()); - public static void error(String message) { - log("&4[ERROR] &r" + message); - } + log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。"); - public static void debug(String message) { - if (debugMode) { - log("&b[DEBUG] &r" + message); - } - } + } - public static Main getInstance() { - return instance; - } + @Override + public void onDisable() { + log(getName() + " " + getDescription().getVersion() + " 开始卸载..."); + long startTime = System.currentTimeMillis(); - public static void registerCommand(String commandName, - @NotNull CommandExecutor executor) { - registerCommand(commandName, executor, null); - } + getRequestManager().shutdown(); - public static void registerCommand(String commandName, - @NotNull CommandExecutor executor, - @Nullable TabCompleter tabCompleter) { - PluginCommand command = Bukkit.getPluginCommand(commandName); - if (command == null) return; - command.setExecutor(executor); - if (tabCompleter != null) command.setTabCompleter(tabCompleter); - } + log("卸载监听器..."); + Bukkit.getServicesManager().unregisterAll(this); - public static UserManager getUserManager() { - return Main.getInstance().userManager; - } - - public static RequestManager getRequestManager() { - return Main.getInstance().requestManager; - } + log("卸载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。"); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/BackCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/BackCommand.java index 267db72..7b70b98 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/BackCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/BackCommand.java @@ -12,17 +12,17 @@ import org.jetbrains.annotations.NotNull; public class BackCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - UserData data = Main.getUserManager().getData(player); - if (data.getLastLocation() == null) { - PluginMessages.NO_LAST_LOCATION.send(player); - return true; - } - TeleportManager.teleport(player, data.getLastLocation(), false); - return true; - } + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) return false; + Player player = (Player) sender; + UserData data = Main.getUserManager().getData(player); + if (data.getLastLocation() == null) { + PluginMessages.NO_LAST_LOCATION.send(player); + return true; + } + TeleportManager.teleport(player, data.getLastLocation(), false); + return true; + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/completer/HomeNameCompleter.java b/src/main/java/cc/carm/plugin/moeteleport/command/completer/HomeNameCompleter.java index ea2fe7b..66ac78a 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/completer/HomeNameCompleter.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/completer/HomeNameCompleter.java @@ -14,17 +14,17 @@ import java.util.stream.Collectors; public class HomeNameCompleter implements TabCompleter { - @Nullable - @Override - public java.util.List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { - if (!(sender instanceof Player)) return ImmutableList.of(); - if (args.length == 1) { - return Main.getUserManager().getData((Player) sender).getHomeLocations().keySet().stream() - .filter(s -> StringUtil.startsWithIgnoreCase(s, args[0])) - .limit(10).collect(Collectors.toList()); - } else { - return ImmutableList.of(); - } - } + @Nullable + @Override + public java.util.List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + if (!(sender instanceof Player)) return ImmutableList.of(); + if (args.length == 1) { + return Main.getUserManager().getData((Player) sender).getHomeLocations().keySet().stream() + .filter(s -> StringUtil.startsWithIgnoreCase(s, args[0])) + .limit(10).collect(Collectors.toList()); + } else { + return ImmutableList.of(); + } + } } \ No newline at end of file diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/completer/PlayerNameCompleter.java b/src/main/java/cc/carm/plugin/moeteleport/command/completer/PlayerNameCompleter.java index d7c7514..619bca4 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/completer/PlayerNameCompleter.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/completer/PlayerNameCompleter.java @@ -16,32 +16,32 @@ import java.util.stream.Collectors; public class PlayerNameCompleter implements TabCompleter { - List indexes; + List indexes; - public PlayerNameCompleter() { - this(1); - } + public PlayerNameCompleter() { + this(1); + } - public PlayerNameCompleter(Integer index) { - this(new Integer[]{index}); - } + public PlayerNameCompleter(Integer index) { + this(new Integer[]{index}); + } - public PlayerNameCompleter(Integer[] indexes) { - this.indexes = Arrays.asList(indexes); - } + public PlayerNameCompleter(Integer[] indexes) { + this.indexes = Arrays.asList(indexes); + } - @Nullable - @Override - public java.util.List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { - if (args.length >= 1 && indexes.contains(args.length)) { - return Bukkit.getOnlinePlayers().stream() - .map(HumanEntity::getName) - .filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1])) - .limit(10).collect(Collectors.toList()); - } else { - return ImmutableList.of(); - } - } + @Nullable + @Override + public java.util.List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + if (args.length >= 1 && indexes.contains(args.length)) { + return Bukkit.getOnlinePlayers().stream() + .map(HumanEntity::getName) + .filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1])) + .limit(10).collect(Collectors.toList()); + } else { + return ImmutableList.of(); + } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/completer/TpRequestCompleter.java b/src/main/java/cc/carm/plugin/moeteleport/command/completer/TpRequestCompleter.java index 4853ae0..63769e0 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/completer/TpRequestCompleter.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/completer/TpRequestCompleter.java @@ -20,34 +20,34 @@ import java.util.stream.Collectors; public class TpRequestCompleter implements TabCompleter { - List indexes; + List indexes; - public TpRequestCompleter() { - this(1); - } + public TpRequestCompleter() { + this(1); + } - public TpRequestCompleter(Integer index) { - this(new Integer[]{index}); - } + public TpRequestCompleter(Integer index) { + this(new Integer[]{index}); + } - public TpRequestCompleter(Integer[] indexes) { - this.indexes = Arrays.asList(indexes); - } + public TpRequestCompleter(Integer[] indexes) { + this.indexes = Arrays.asList(indexes); + } - @Nullable - @Override - public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { - if (!(sender instanceof Player)) return ImmutableList.of(); - if (args.length >= 1 && indexes.contains(args.length)) { - UserData data = Main.getUserManager().getData((Player) sender); - return data.getReceivedRequests().keySet().stream() - .map(Bukkit::getPlayer).filter(Objects::nonNull).map(HumanEntity::getName) - .filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1])) - .limit(10).collect(Collectors.toList()); - } else { - return ImmutableList.of(); - } - } + @Nullable + @Override + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + if (!(sender instanceof Player)) return ImmutableList.of(); + if (args.length >= 1 && indexes.contains(args.length)) { + UserData data = Main.getUserManager().getData((Player) sender); + return data.getReceivedRequests().keySet().stream() + .map(Bukkit::getPlayer).filter(Objects::nonNull).map(HumanEntity::getName) + .filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1])) + .limit(10).collect(Collectors.toList()); + } else { + return ImmutableList.of(); + } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/home/DelHomeCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/home/DelHomeCommand.java index 1bad477..18fb6e7 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/home/DelHomeCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/home/DelHomeCommand.java @@ -14,26 +14,26 @@ import java.util.Map; public class DelHomeCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) return false; - if (args.length < 1) return false; + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) return false; + if (args.length < 1) return false; - Player player = (Player) sender; - UserData data = Main.getUserManager().getData(player); - String homeName = args[0]; - Map.Entry locationInfo = data.getHomeLocation(homeName); - if (locationInfo == null) { - PluginMessages.Home.NOT_FOUND.sendWithPlaceholders(player); - } else { - PluginMessages.Home.REMOVED.sendWithPlaceholders(player, - new String[]{"%(name)", "%(location)"}, - new Object[]{locationInfo.getKey(), locationInfo.getValue().toFlatString()}); - data.delHomeLocation(homeName); - } - return true; - } + Player player = (Player) sender; + UserData data = Main.getUserManager().getData(player); + String homeName = args[0]; + Map.Entry locationInfo = data.getHomeLocation(homeName); + if (locationInfo == null) { + PluginMessages.Home.NOT_FOUND.sendWithPlaceholders(player); + } else { + PluginMessages.Home.REMOVED.sendWithPlaceholders(player, + new String[]{"%(name)", "%(location)"}, + new Object[]{locationInfo.getKey(), locationInfo.getValue().toFlatString()}); + data.delHomeLocation(homeName); + } + return true; + } } \ No newline at end of file diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/home/GoHomeCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/home/GoHomeCommand.java index b83b906..d8c2ea9 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/home/GoHomeCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/home/GoHomeCommand.java @@ -15,21 +15,21 @@ import java.util.Map; public class GoHomeCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - UserData data = Main.getUserManager().getData(player); - String homeName = args.length >= 1 ? args[0] : null; - Map.Entry locationInfo = data.getHomeLocation(homeName); - if (locationInfo == null) { - PluginMessages.Home.NOT_FOUND.sendWithPlaceholders(player); - } else { - TeleportManager.teleport(player, locationInfo.getValue(), false); - } - return true; - } + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) return false; + Player player = (Player) sender; + UserData data = Main.getUserManager().getData(player); + String homeName = args.length >= 1 ? args[0] : null; + Map.Entry locationInfo = data.getHomeLocation(homeName); + if (locationInfo == null) { + PluginMessages.Home.NOT_FOUND.sendWithPlaceholders(player); + } else { + TeleportManager.teleport(player, locationInfo.getValue(), false); + } + return true; + } } \ No newline at end of file diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/home/ListHomeCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/home/ListHomeCommand.java index a22511b..09148d2 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/home/ListHomeCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/home/ListHomeCommand.java @@ -11,19 +11,19 @@ import org.jetbrains.annotations.NotNull; public class ListHomeCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - UserData data = Main.getUserManager().getData(player); - PluginMessages.Home.HEADER.sendWithPlaceholders(player); - data.getHomeLocations().forEach((name, loc) -> PluginMessages.Home.LIST_OBJECT - .sendWithPlaceholders(player, - new String[]{"%(id)", "%(location)"}, - new Object[]{name, loc.toFlatString()} - )); - return true; - } + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) return false; + Player player = (Player) sender; + UserData data = Main.getUserManager().getData(player); + PluginMessages.Home.HEADER.sendWithPlaceholders(player); + data.getHomeLocations().forEach((name, loc) -> PluginMessages.Home.LIST_OBJECT + .sendWithPlaceholders(player, + new String[]{"%(id)", "%(location)"}, + new Object[]{name, loc.toFlatString()} + )); + return true; + } } \ No newline at end of file diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/home/SetHomeCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/home/SetHomeCommand.java index d121f4b..0cadc59 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/home/SetHomeCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/home/SetHomeCommand.java @@ -11,28 +11,28 @@ import org.jetbrains.annotations.NotNull; public class SetHomeCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - UserData data = Main.getUserManager().getData(player); - String homeName = args.length >= 1 ? args[0] : "home"; + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) return false; + Player player = (Player) sender; + UserData data = Main.getUserManager().getData(player); + String homeName = args.length >= 1 ? args[0] : "home"; - int maxHome = Main.getUserManager().getMaxHome(player); - if (data.getHomeLocations().size() >= maxHome && data.getHomeLocation(homeName) == null) { - PluginMessages.Home.OVER_LIMIT.sendWithPlaceholders(sender, - new String[]{"%(max)"}, new Object[]{maxHome} - ); - return true; - } + int maxHome = Main.getUserManager().getMaxHome(player); + if (data.getHomeLocations().size() >= maxHome && data.getHomeLocation(homeName) == null) { + PluginMessages.Home.OVER_LIMIT.sendWithPlaceholders(sender, + new String[]{"%(max)"}, new Object[]{maxHome} + ); + return true; + } - data.setHomeLocation(homeName, player.getLocation()); - PluginMessages.Home.SET.sendWithPlaceholders(player, - new String[]{"%(name)"}, new Object[]{homeName} - ); - return true; - } + data.setHomeLocation(homeName, player.getLocation()); + PluginMessages.Home.SET.sendWithPlaceholders(player, + new String[]{"%(name)"}, new Object[]{homeName} + ); + return true; + } } \ No newline at end of file diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpHandleCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpHandleCommand.java index 2e37796..fd0a6a3 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpHandleCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpHandleCommand.java @@ -15,51 +15,51 @@ import java.util.Comparator; public class TpHandleCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - UserData data = Main.getUserManager().getData(player); - if (data.getReceivedRequests().isEmpty()) { - PluginMessages.Request.NOT_FOUND.sendWithPlaceholders(player); - return true; - } - String targetName = args.length > 0 ? args[0] : null; - boolean accept = command.getName().equalsIgnoreCase("tpAccept"); - data.setEnableAutoSelect(false); - if (targetName != null) { - Player target = Bukkit.getPlayer(targetName); - if (target == null || !data.getReceivedRequests().containsKey(target.getUniqueId())) { - PluginMessages.Request.NOT_FOUND_PLAYER.sendWithPlaceholders(player, - new String[]{"%(player)"}, - new Object[]{target == null ? targetName : target.getName()} - ); - } else { - handle(data.getReceivedRequests().get(target.getUniqueId()), accept); // 交给Manager处理 - } - } else { - if (data.getReceivedRequests().size() == 1 || data.isEnableAutoSelect()) { - data.getReceivedRequests().values().stream() - .min(Comparator.comparingLong(TeleportRequest::getActiveTime)) - .ifPresent(request -> handle(request, accept)); - } else { - PluginMessages.Request.MULTI.sendWithPlaceholders(player, - new String[]{"%(num)", "%(command)"}, - new Object[]{data.getReceivedRequests().size(), command.getName()} - ); - data.setEnableAutoSelect(true); - } - } - return true; - } + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) return false; + Player player = (Player) sender; + UserData data = Main.getUserManager().getData(player); + if (data.getReceivedRequests().isEmpty()) { + PluginMessages.Request.NOT_FOUND.sendWithPlaceholders(player); + return true; + } + String targetName = args.length > 0 ? args[0] : null; + boolean accept = command.getName().equalsIgnoreCase("tpAccept"); + data.setEnableAutoSelect(false); + if (targetName != null) { + Player target = Bukkit.getPlayer(targetName); + if (target == null || !data.getReceivedRequests().containsKey(target.getUniqueId())) { + PluginMessages.Request.NOT_FOUND_PLAYER.sendWithPlaceholders(player, + new String[]{"%(player)"}, + new Object[]{target == null ? targetName : target.getName()} + ); + } else { + handle(data.getReceivedRequests().get(target.getUniqueId()), accept); // 交给Manager处理 + } + } else { + if (data.getReceivedRequests().size() == 1 || data.isEnableAutoSelect()) { + data.getReceivedRequests().values().stream() + .min(Comparator.comparingLong(TeleportRequest::getActiveTime)) + .ifPresent(request -> handle(request, accept)); + } else { + PluginMessages.Request.MULTI.sendWithPlaceholders(player, + new String[]{"%(num)", "%(command)"}, + new Object[]{data.getReceivedRequests().size(), command.getName()} + ); + data.setEnableAutoSelect(true); + } + } + return true; + } - private void handle(TeleportRequest request, boolean accept) { - if (accept) { - Main.getRequestManager().acceptRequest(request); - } else { - Main.getRequestManager().denyRequest(request); - } - } + private void handle(TeleportRequest request, boolean accept) { + if (accept) { + Main.getRequestManager().acceptRequest(request); + } else { + Main.getRequestManager().denyRequest(request); + } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java index 2b0d646..c87f4a4 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java @@ -12,32 +12,32 @@ import org.jetbrains.annotations.NotNull; public class TpaCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, - @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player) || args.length < 1) return false; - Player player = (Player) sender; - Player target = Bukkit.getPlayer(args[0]); - if (target == null) { - PluginMessages.NOT_ONLINE.sendWithPlaceholders(player); - return true; - } + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player) || args.length < 1) return false; + Player player = (Player) sender; + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + PluginMessages.NOT_ONLINE.sendWithPlaceholders(player); + return true; + } - TeleportRequest request = Main.getUserManager().getData(target).getReceivedRequests().get(player.getUniqueId()); - if (request != null) { - PluginMessages.Request.DUPLICATE.sendWithPlaceholders(sender, - new String[]{"%(player)", "%(expire)"}, - new Object[]{target.getName(), request.getRemainSeconds()} - ); - return true; - } - if (command.getName().equalsIgnoreCase("tpa")) { - Main.getRequestManager().sendRequest(player, target, TeleportRequest.RequestType.TPA); - } else { - Main.getRequestManager().sendRequest(player, target, TeleportRequest.RequestType.TPA_HERE); - } + TeleportRequest request = Main.getUserManager().getData(target).getReceivedRequests().get(player.getUniqueId()); + if (request != null) { + PluginMessages.Request.DUPLICATE.sendWithPlaceholders(sender, + new String[]{"%(player)", "%(expire)"}, + new Object[]{target.getName(), request.getRemainSeconds()} + ); + return true; + } + if (command.getName().equalsIgnoreCase("tpa")) { + Main.getRequestManager().sendRequest(player, target, TeleportRequest.RequestType.TPA); + } else { + Main.getRequestManager().sendRequest(player, target, TeleportRequest.RequestType.TPA_HERE); + } - return true; - } + return true; + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java index 0c3f6fd..49083e6 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java @@ -6,24 +6,24 @@ import cc.carm.plugin.moeteleport.configuration.values.ConfigValueMap; public class PluginConfig { - public static final ConfigValueMap PERMISSIONS = new ConfigValueMap<>( - "permissions", Integer::parseInt, String.class - ); + public static final ConfigValueMap PERMISSIONS = new ConfigValueMap<>( + "permissions", Integer::parseInt, String.class + ); - public static final ConfigValueList DANGEROUS_TYPES = new ConfigValueList<>( - "dangerous-blocks", String.class, new String[]{"LAVA"} - ); + public static final ConfigValueList DANGEROUS_TYPES = new ConfigValueList<>( + "dangerous-blocks", String.class, new String[]{"LAVA"} + ); - public static final ConfigValue EXPIRE_TIME = new ConfigValue<>( - "expireTime", Integer.class, 30 - ); + public static final ConfigValue EXPIRE_TIME = new ConfigValue<>( + "expireTime", Integer.class, 30 + ); - public static final ConfigValue DEFAULT_HOME = new ConfigValue<>( - "defaultHome", Integer.class, 1 - ); + public static final ConfigValue DEFAULT_HOME = new ConfigValue<>( + "defaultHome", Integer.class, 1 + ); - public static final ConfigValue DEATH_GO_BACK = new ConfigValue<>( - "death-back", Boolean.class, true - ); + public static final ConfigValue DEATH_GO_BACK = new ConfigValue<>( + "death-back", Boolean.class, true + ); } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java index 6f0dc57..596db5e 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java @@ -5,53 +5,53 @@ import cc.carm.plugin.moeteleport.configuration.message.ConfigMessageList; public class PluginMessages { - public static final ConfigMessageList NO_LAST_LOCATION = new ConfigMessageList("no-last-location"); + public static final ConfigMessageList NO_LAST_LOCATION = new ConfigMessageList("no-last-location"); - public static final ConfigMessageList NOT_ONLINE = new ConfigMessageList("not-online"); + public static final ConfigMessageList NOT_ONLINE = new ConfigMessageList("not-online"); - public static final ConfigMessageList TPA = new ConfigMessageList("tpa"); - public static final ConfigMessageList TPA_HERE = new ConfigMessageList("tpahere"); + public static final ConfigMessageList TPA = new ConfigMessageList("tpa"); + public static final ConfigMessageList TPA_HERE = new ConfigMessageList("tpahere"); - public static final ConfigMessageList TP_ACCEPT = new ConfigMessageList("tpaccept"); - public static final ConfigMessageList TP_DENY = new ConfigMessageList("tpdeny"); + public static final ConfigMessageList TP_ACCEPT = new ConfigMessageList("tpaccept"); + public static final ConfigMessageList TP_DENY = new ConfigMessageList("tpdeny"); - public static final ConfigMessageList ACCEPTED = new ConfigMessageList("accepted"); - public static final ConfigMessageList DENIED = new ConfigMessageList("denied"); + public static final ConfigMessageList ACCEPTED = new ConfigMessageList("accepted"); + public static final ConfigMessageList DENIED = new ConfigMessageList("denied"); - public static final ConfigMessageList TELEPORTING = new ConfigMessageList("teleporting"); - public static final ConfigMessageList DANGEROUS = new ConfigMessageList("dangerous"); - public static final ConfigMessageList DANGEROUS_HERE = new ConfigMessageList("dangerous-here"); + public static final ConfigMessageList TELEPORTING = new ConfigMessageList("teleporting"); + public static final ConfigMessageList DANGEROUS = new ConfigMessageList("dangerous"); + public static final ConfigMessageList DANGEROUS_HERE = new ConfigMessageList("dangerous-here"); - public static final ConfigMessageList NOT_AVAILABLE = new ConfigMessageList("notAvailable"); + public static final ConfigMessageList NOT_AVAILABLE = new ConfigMessageList("notAvailable"); - public static final ConfigMessageList DEATH_BACK = new ConfigMessageList("death-back"); + public static final ConfigMessageList DEATH_BACK = new ConfigMessageList("death-back"); - public static class Request { - public static final ConfigMessageList DUPLICATE = new ConfigMessageList("request-duplicate"); - public static final ConfigMessageList OFFLINE = new ConfigMessageList("offline"); + public static class Request { + public static final ConfigMessageList DUPLICATE = new ConfigMessageList("request-duplicate"); + public static final ConfigMessageList OFFLINE = new ConfigMessageList("offline"); - public static final ConfigMessageList SENT = new ConfigMessageList("request-sent"); - public static final ConfigMessageList MULTI = new ConfigMessageList("multi-requests"); - public static final ConfigMessageList SENT_TIMEOUT = new ConfigMessageList("request-sent-timeout"); - public static final ConfigMessageList RECEIVED_TIMEOUT = new ConfigMessageList("request-received-timeout"); + public static final ConfigMessageList SENT = new ConfigMessageList("request-sent"); + public static final ConfigMessageList MULTI = new ConfigMessageList("multi-requests"); + public static final ConfigMessageList SENT_TIMEOUT = new ConfigMessageList("request-sent-timeout"); + public static final ConfigMessageList RECEIVED_TIMEOUT = new ConfigMessageList("request-received-timeout"); - public static final ConfigMessageList NOT_FOUND = new ConfigMessageList("no-request"); - public static final ConfigMessageList NOT_FOUND_PLAYER = new ConfigMessageList("no-request-player"); - } + public static final ConfigMessageList NOT_FOUND = new ConfigMessageList("no-request"); + public static final ConfigMessageList NOT_FOUND_PLAYER = new ConfigMessageList("no-request-player"); + } - public static class Home { - public static final ConfigMessageList HEADER = new ConfigMessageList("home-list-header"); - public static final ConfigMessage LIST_OBJECT = new ConfigMessage("home-list-object"); + public static class Home { + public static final ConfigMessageList HEADER = new ConfigMessageList("home-list-header"); + public static final ConfigMessage LIST_OBJECT = new ConfigMessage("home-list-object"); - public static final ConfigMessageList OVER_LIMIT = new ConfigMessageList("home-over-limit"); + public static final ConfigMessageList OVER_LIMIT = new ConfigMessageList("home-over-limit"); - public static final ConfigMessageList NOT_FOUND = new ConfigMessageList("home-not-found"); - public static final ConfigMessageList SET = new ConfigMessageList("home-set"); + public static final ConfigMessageList NOT_FOUND = new ConfigMessageList("home-not-found"); + public static final ConfigMessageList SET = new ConfigMessageList("home-set"); - public static final ConfigMessageList REMOVED = new ConfigMessageList("home-removed"); + public static final ConfigMessageList REMOVED = new ConfigMessageList("home-removed"); - } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java index 93b38da..cb0b683 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java @@ -10,55 +10,55 @@ import java.io.IOException; public class FileConfig { - private final JavaPlugin plugin; - private final String fileName; + private final JavaPlugin plugin; + private final String fileName; - private File file; - private FileConfiguration config; + private File file; + private FileConfiguration config; - public FileConfig(final JavaPlugin plugin) { - this(plugin, "config.yml"); - } + public FileConfig(final JavaPlugin plugin) { + this(plugin, "config.yml"); + } - public FileConfig(final JavaPlugin plugin, final String name) { - this.plugin = plugin; - this.fileName = name; - initFile(); - } + public FileConfig(final JavaPlugin plugin, final String name) { + this.plugin = plugin; + this.fileName = name; + initFile(); + } - private void initFile() { - this.file = new File(plugin.getDataFolder(), fileName); - if (!this.file.exists()) { - if (!this.file.getParentFile().exists()) { - boolean success = this.file.getParentFile().mkdirs(); - } - plugin.saveResource(fileName, true); - } - this.config = YamlConfiguration.loadConfiguration(this.file); - } + private void initFile() { + this.file = new File(plugin.getDataFolder(), fileName); + if (!this.file.exists()) { + if (!this.file.getParentFile().exists()) { + boolean success = this.file.getParentFile().mkdirs(); + } + plugin.saveResource(fileName, true); + } + this.config = YamlConfiguration.loadConfiguration(this.file); + } - public File getFile() { - return file; - } + public File getFile() { + return file; + } - public FileConfiguration getConfig() { - return config; - } + public FileConfiguration getConfig() { + return config; + } - public void save() { - try { - getConfig().save(getFile()); - } catch (IOException e) { - e.printStackTrace(); - } - } + public void save() { + try { + getConfig().save(getFile()); + } catch (IOException e) { + e.printStackTrace(); + } + } - public void reload() { - if (getFile().exists()) { - this.config = YamlConfiguration.loadConfiguration(getFile()); - } else { - initFile(); - } - } + public void reload() { + if (getFile().exists()) { + this.config = YamlConfiguration.loadConfiguration(getFile()); + } else { + initFile(); + } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/location/DataLocation.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/location/DataLocation.java index e29a92f..c659f26 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/location/DataLocation.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/location/DataLocation.java @@ -13,160 +13,158 @@ import java.util.Objects; public class DataLocation implements Cloneable { - public static final DecimalFormat format = new DecimalFormat("0.00"); - private String worldName; - private double x; - private double y; - private double z; - private float yaw; - private float pitch; + public static final DecimalFormat format = new DecimalFormat("0.00"); + private final String worldName; + private double x; + private double y; + private double z; + private float yaw; + private float pitch; - public DataLocation(Location location) { - this(location.getWorld() != null ? location.getWorld().getName() : "", location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); - } + public DataLocation(Location location) { + this(location.getWorld() != null ? location.getWorld().getName() : "", location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); + } - public DataLocation(final String worldName, final double x, final double y, final double z) { - this(worldName, x, y, z, 0, 0); - } + public DataLocation(final String worldName, final double x, final double y, final double z) { + this(worldName, x, y, z, 0, 0); + } - public DataLocation(final String worldName, final double x, final double y, final double z, final float yaw, final float pitch) { - this.worldName = worldName; - this.x = x; - this.y = y; - this.z = z; - this.pitch = pitch; - this.yaw = yaw; - } + public DataLocation(final String worldName, final double x, final double y, final double z, final float yaw, final float pitch) { + this.worldName = worldName; + this.x = x; + this.y = y; + this.z = z; + this.pitch = pitch; + this.yaw = yaw; + } - public String getWorldName() { - return worldName; - } + public static DataLocation deserializeText(String s) { + if (s == null || !s.contains(";")) return null; + String[] args = StringUtils.split(s, ";"); + if (args.length < 4) return null; + try { + String worldName = args[0]; + double x = NumberConversions.toDouble(args[1]); + double y = NumberConversions.toDouble(args[2]); + double z = NumberConversions.toDouble(args[3]); + float yaw = 0; + float pitch = 0; + if (args.length == 6) { + yaw = NumberConversions.toFloat(args[4]); + pitch = NumberConversions.toFloat(args[5]); + } + return new DataLocation(worldName, x, y, z, yaw, pitch); + } catch (Exception ex) { + return null; + } + } - public double getX() { - return x; - } + @Deprecated + public static DataLocation parseString(String s) { + return deserializeText(s); + } - public void setX(double x) { - this.x = x; - } + public String getWorldName() { + return worldName; + } - public double getY() { - return y; - } + public double getX() { + return x; + } - public void setY(double y) { - this.y = y; - } + public void setX(double x) { + this.x = x; + } - public double getZ() { - return z; - } + public double getY() { + return y; + } - public void setZ(double z) { - this.z = z; - } + public void setY(double y) { + this.y = y; + } - public float getYaw() { - return yaw; - } + public double getZ() { + return z; + } - public void setYaw(float yaw) { - this.yaw = yaw; - } + public void setZ(double z) { + this.z = z; + } - public float getPitch() { - return pitch; - } + public float getYaw() { + return yaw; + } - public void setPitch(float pitch) { - this.pitch = pitch; - } + public void setYaw(float yaw) { + this.yaw = yaw; + } + public float getPitch() { + return pitch; + } - public @NotNull Location getBukkitLocation(World world) { - return new Location(world, getX(), getY(), getZ(), getYaw(), getPitch()); - } + public void setPitch(float pitch) { + this.pitch = pitch; + } + public @NotNull Location getBukkitLocation(World world) { + return new Location(world, getX(), getY(), getZ(), getYaw(), getPitch()); + } - public @Nullable Location getBukkitLocation() { - World world = Bukkit.getWorld(getWorldName()); - if (world == null) return null; - else return new Location(world, getX(), getY(), getZ(), getYaw(), getPitch()); - } + public @Nullable Location getBukkitLocation() { + World world = Bukkit.getWorld(getWorldName()); + if (world == null) return null; + else return new Location(world, getX(), getY(), getZ(), getYaw(), getPitch()); + } - @Override - public Object clone() { - try { - return super.clone(); - } catch (Exception ex) { - return null; - } - } + @Override + public Object clone() { + try { + return super.clone(); + } catch (Exception ex) { + return null; + } + } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof DataLocation)) return false; - DataLocation that = (DataLocation) o; - return that.worldName.equals(worldName) - && Double.compare(that.x, x) == 0 - && Double.compare(that.y, y) == 0 - && Double.compare(that.z, z) == 0 - && Float.compare(that.pitch, pitch) == 0 - && Float.compare(that.yaw, yaw) == 0; - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DataLocation)) return false; + DataLocation that = (DataLocation) o; + return that.worldName.equals(worldName) + && Double.compare(that.x, x) == 0 + && Double.compare(that.y, y) == 0 + && Double.compare(that.z, z) == 0 + && Float.compare(that.pitch, pitch) == 0 + && Float.compare(that.yaw, yaw) == 0; + } - @Override - public int hashCode() { - return Objects.hash(x, y, z, yaw, pitch); - } + @Override + public int hashCode() { + return Objects.hash(x, y, z, yaw, pitch); + } - @Override - public String toString() { - return worldName + " " + x + " " + y + " " + z + " " + yaw + " " + pitch; - } + @Override + public String toString() { + return worldName + " " + x + " " + y + " " + z + " " + yaw + " " + pitch; + } - public String toFlatString() { - return worldName + "@" + format.format(x) + ", " + format.format(y) + ", " + format.format(z); - } + public String toFlatString() { + return worldName + "@" + format.format(x) + ", " + format.format(y) + ", " + format.format(z); + } - @Deprecated - public String toSerializedString() { - return serializeToText(); - } + @Deprecated + public String toSerializedString() { + return serializeToText(); + } - public String serializeToText() { - if (getYaw() != 0 || getPitch() != 0) { - return worldName + ";" + x + ";" + y + ";" + z + ";" + yaw + ";" + pitch; - } else { - return worldName + ";" + x + ";" + y + ";" + z; - } - } - - public static DataLocation deserializeText(String s) { - if (s == null || !s.contains(";")) return null; - String[] args = StringUtils.split(s, ";"); - if (args.length < 4) return null; - try { - String worldName = args[0]; - double x = NumberConversions.toDouble(args[1]); - double y = NumberConversions.toDouble(args[2]); - double z = NumberConversions.toDouble(args[3]); - float yaw = 0; - float pitch = 0; - if (args.length == 6) { - yaw = NumberConversions.toFloat(args[4]); - pitch = NumberConversions.toFloat(args[5]); - } - return new DataLocation(worldName, x, y, z, yaw, pitch); - } catch (Exception ex) { - return null; - } - } - - @Deprecated - public static DataLocation parseString(String s) { - return deserializeText(s); - } + public String serializeToText() { + if (getYaw() != 0 || getPitch() != 0) { + return worldName + ";" + x + ";" + y + ";" + z + ";" + yaw + ";" + pitch; + } else { + return worldName + ";" + x + ";" + y + ";" + z; + } + } } \ No newline at end of file diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java index 28ea100..852b397 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java @@ -9,24 +9,24 @@ import java.util.Collections; public class ConfigMessage extends ConfigValue { - public ConfigMessage(String configSection) { - this(configSection, null); - } + public ConfigMessage(String configSection) { + this(configSection, null); + } - public ConfigMessage(String configSection, String defaultValue) { - super(ConfigManager.getMessageConfig(), configSection, String.class, defaultValue); - } + public ConfigMessage(String configSection, String defaultValue) { + super(ConfigManager.getMessageConfig(), configSection, String.class, defaultValue); + } - public void send(CommandSender sender) { - MessageUtil.send(sender, get()); - } + public void send(CommandSender sender) { + MessageUtil.send(sender, get()); + } - public void sendWithPlaceholders(CommandSender sender) { - MessageUtil.sendWithPlaceholders(sender, get()); - } + public void sendWithPlaceholders(CommandSender sender) { + MessageUtil.sendWithPlaceholders(sender, get()); + } - public void sendWithPlaceholders(CommandSender sender, String[] params, Object[] values) { - MessageUtil.sendWithPlaceholders(sender, Collections.singletonList(get()), params, values); - } + public void sendWithPlaceholders(CommandSender sender, String[] params, Object[] values) { + MessageUtil.sendWithPlaceholders(sender, Collections.singletonList(get()), params, values); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java index 278035a..d129568 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java @@ -8,23 +8,23 @@ import org.jetbrains.annotations.Nullable; public class ConfigMessageList extends ConfigValueList { - public ConfigMessageList(String configSection) { - super(ConfigManager.getMessageConfig(), configSection, String.class); - } + public ConfigMessageList(String configSection) { + super(ConfigManager.getMessageConfig(), configSection, String.class); + } - public ConfigMessageList(String configSection, String[] defaultValue) { - super(ConfigManager.getMessageConfig(), configSection, String.class, defaultValue); - } + public ConfigMessageList(String configSection, String[] defaultValue) { + super(ConfigManager.getMessageConfig(), configSection, String.class, defaultValue); + } - public void send(@Nullable CommandSender sender) { - MessageUtil.send(sender, get()); - } + public void send(@Nullable CommandSender sender) { + MessageUtil.send(sender, get()); + } - public void sendWithPlaceholders(@Nullable CommandSender sender) { - MessageUtil.sendWithPlaceholders(sender, get()); - } + public void sendWithPlaceholders(@Nullable CommandSender sender) { + MessageUtil.sendWithPlaceholders(sender, get()); + } - public void sendWithPlaceholders(@Nullable CommandSender sender, String[] params, Object[] values) { - MessageUtil.sendWithPlaceholders(sender, get(), params, values); - } + public void sendWithPlaceholders(@Nullable CommandSender sender, String[] params, Object[] values) { + MessageUtil.sendWithPlaceholders(sender, get(), params, values); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java index d8ebfdb..4233686 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java @@ -9,63 +9,63 @@ import java.util.Arrays; import java.util.List; public class ConfigValueList { - FileConfig source; - String configSection; - Class clazz; + FileConfig source; + String configSection; + Class clazz; - V[] defaultValue; + V[] defaultValue; - public ConfigValueList(String configSection, Class clazz) { - this(ConfigManager.getPluginConfig(), configSection, clazz); - } + public ConfigValueList(String configSection, Class clazz) { + this(ConfigManager.getPluginConfig(), configSection, clazz); + } - public ConfigValueList(String configSection, Class clazz, V[] defaultValue) { - this(ConfigManager.getPluginConfig(), configSection, clazz, defaultValue); - } + public ConfigValueList(String configSection, Class clazz, V[] defaultValue) { + this(ConfigManager.getPluginConfig(), configSection, clazz, defaultValue); + } - public ConfigValueList(FileConfig configuration, String configSection, Class clazz) { - this(configuration, configSection, clazz, null); - } + public ConfigValueList(FileConfig configuration, String configSection, Class clazz) { + this(configuration, configSection, clazz, null); + } - public ConfigValueList(FileConfig configuration, String configSection, Class clazz, V[] defaultValue) { - this.source = configuration; - this.configSection = configSection; - this.clazz = clazz; - this.defaultValue = defaultValue; - } + public ConfigValueList(FileConfig configuration, String configSection, Class clazz, V[] defaultValue) { + this.source = configuration; + this.configSection = configSection; + this.clazz = clazz; + this.defaultValue = defaultValue; + } - public FileConfiguration getConfiguration() { - return this.source.getConfig(); - } + public FileConfiguration getConfiguration() { + return this.source.getConfig(); + } - public ArrayList get() { - List list = getConfiguration().getList(this.configSection); - if (list == null) { - if (defaultValue != null) { - return new ArrayList<>(Arrays.asList(defaultValue)); - } else { - return new ArrayList<>(); - } - } else { - ArrayList result = new ArrayList<>(); + public ArrayList get() { + List list = getConfiguration().getList(this.configSection); + if (list == null) { + if (defaultValue != null) { + return new ArrayList<>(Arrays.asList(defaultValue)); + } else { + return new ArrayList<>(); + } + } else { + ArrayList result = new ArrayList<>(); - for (Object object : list) { - if (this.clazz.isInstance(object)) { - result.add(this.clazz.cast(object)); - } - } - return result; - } - } + for (Object object : list) { + if (this.clazz.isInstance(object)) { + result.add(this.clazz.cast(object)); + } + } + return result; + } + } - public void set(ArrayList value) { - getConfiguration().set(this.configSection, value); - this.save(); - } + public void set(ArrayList value) { + getConfiguration().set(this.configSection, value); + this.save(); + } - public void save() { - this.source.save(); - } + public void save() { + this.source.save(); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueMap.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueMap.java index 0498222..12e7eba 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueMap.java +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueMap.java @@ -14,66 +14,66 @@ import java.util.function.Function; public class ConfigValueMap { - @NotNull FileConfig source; - @NotNull String configSection; + @NotNull FileConfig source; + @NotNull String configSection; - @NotNull Function keyCast; - @NotNull Class valueClazz; + @NotNull Function keyCast; + @NotNull Class valueClazz; - @Nullable LinkedHashMap valueCache; + @Nullable LinkedHashMap valueCache; - public ConfigValueMap(@NotNull String configSection, @NotNull Function keyCast, - @NotNull Class valueClazz) { - this(ConfigManager.getPluginConfig(), configSection, keyCast, valueClazz); - } + public ConfigValueMap(@NotNull String configSection, @NotNull Function keyCast, + @NotNull Class valueClazz) { + this(ConfigManager.getPluginConfig(), configSection, keyCast, valueClazz); + } - public ConfigValueMap(@NotNull FileConfig configuration, @NotNull String configSection, - @NotNull Function keyCast, @NotNull Class valueClazz) { - this.source = configuration; - this.configSection = configSection; - this.keyCast = keyCast; - this.valueClazz = valueClazz; - } + public ConfigValueMap(@NotNull FileConfig configuration, @NotNull String configSection, + @NotNull Function keyCast, @NotNull Class valueClazz) { + this.source = configuration; + this.configSection = configSection; + this.keyCast = keyCast; + this.valueClazz = valueClazz; + } - public @NotNull FileConfiguration getConfiguration() { - return this.source.getConfig(); - } + public @NotNull FileConfiguration getConfiguration() { + return this.source.getConfig(); + } - public void clearCache() { - this.valueCache = null; - } + public void clearCache() { + this.valueCache = null; + } - @NotNull - public Map get() { - if (valueCache != null) return valueCache; - ConfigurationSection section = getConfiguration().getConfigurationSection(this.configSection); - if (section == null) return new LinkedHashMap<>(); - Set keys = section.getKeys(false); - if (keys.isEmpty()) return new LinkedHashMap<>(); - else { - LinkedHashMap result = new LinkedHashMap<>(); - for (String key : keys) { - K finalKey = keyCast.apply(key); - Object val = section.get(key); - V finalValue = this.valueClazz.isInstance(val) ? this.valueClazz.cast(val) : null; - if (finalKey != null && finalValue != null) { - result.put(finalKey, finalValue); - } - } - this.valueCache = result; - return result; - } - } + @NotNull + public Map get() { + if (valueCache != null) return valueCache; + ConfigurationSection section = getConfiguration().getConfigurationSection(this.configSection); + if (section == null) return new LinkedHashMap<>(); + Set keys = section.getKeys(false); + if (keys.isEmpty()) return new LinkedHashMap<>(); + else { + LinkedHashMap result = new LinkedHashMap<>(); + for (String key : keys) { + K finalKey = keyCast.apply(key); + Object val = section.get(key); + V finalValue = this.valueClazz.isInstance(val) ? this.valueClazz.cast(val) : null; + if (finalKey != null && finalValue != null) { + result.put(finalKey, finalValue); + } + } + this.valueCache = result; + return result; + } + } - public void set(LinkedHashMap valuesMap) { - this.valueCache = valuesMap; - getConfiguration().createSection(this.configSection, valuesMap); - this.save(); - } + public void set(LinkedHashMap valuesMap) { + this.valueCache = valuesMap; + getConfiguration().createSection(this.configSection, valuesMap); + this.save(); + } - public void save() { - this.source.save(); - } + public void save() { + this.source.save(); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/listener/UserListener.java b/src/main/java/cc/carm/plugin/moeteleport/listener/UserListener.java index 5f7464b..5034916 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/listener/UserListener.java +++ b/src/main/java/cc/carm/plugin/moeteleport/listener/UserListener.java @@ -15,28 +15,28 @@ import java.util.UUID; public class UserListener implements Listener { - @EventHandler - public void onJoin(PlayerJoinEvent event) { - UUID uuid = event.getPlayer().getUniqueId(); - UserData data = Main.getUserManager().loadData(uuid); - Main.getUserManager().getUserDataMap().put(uuid, data); - } + @EventHandler + public void onJoin(PlayerJoinEvent event) { + UUID uuid = event.getPlayer().getUniqueId(); + UserData data = Main.getUserManager().loadData(uuid); + Main.getUserManager().getUserDataMap().put(uuid, data); + } - @EventHandler - public void onQuit(PlayerQuitEvent event) { - Player player = event.getPlayer(); - Main.getRequestManager().cancelAllRequests(player); - Main.getUserManager().getData(player).save(); //保存 - Main.getUserManager().getUserDataMap().remove(player.getUniqueId()); - } + @EventHandler + public void onQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + Main.getRequestManager().cancelAllRequests(player); + Main.getUserManager().getData(player).save(); //保存 + Main.getUserManager().getUserDataMap().remove(player.getUniqueId()); + } - @EventHandler - public void onDeath(PlayerDeathEvent event) { - if (PluginConfig.DEATH_GO_BACK.get()) { - Player player = event.getEntity(); - Main.getUserManager().getData(player).setLastLocation(player.getLocation()); - PluginMessages.DEATH_BACK.send(player); - } - } + @EventHandler + public void onDeath(PlayerDeathEvent event) { + if (PluginConfig.DEATH_GO_BACK.get()) { + Player player = event.getEntity(); + Main.getUserManager().getData(player).setLastLocation(player.getLocation()); + PluginMessages.DEATH_BACK.send(player); + } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java index 27db053..7cdc6a0 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java +++ b/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java @@ -6,32 +6,32 @@ import cc.carm.plugin.moeteleport.configuration.file.FileConfig; public class ConfigManager { - private static FileConfig config; - private static FileConfig messageConfig; + private static FileConfig config; + private static FileConfig messageConfig; - public static void initConfig() { - ConfigManager.config = new FileConfig(Main.getInstance(), "config.yml"); - ConfigManager.messageConfig = new FileConfig(Main.getInstance(), "messages.yml"); - } + public static void initConfig() { + ConfigManager.config = new FileConfig(Main.getInstance(), "config.yml"); + ConfigManager.messageConfig = new FileConfig(Main.getInstance(), "messages.yml"); + } - public static FileConfig getPluginConfig() { - return config; - } + public static FileConfig getPluginConfig() { + return config; + } - public static FileConfig getMessageConfig() { - return messageConfig; - } + public static FileConfig getMessageConfig() { + return messageConfig; + } - public static void reload() { - getPluginConfig().reload(); - getMessageConfig().reload(); - PluginConfig.PERMISSIONS.clearCache(); - } + public static void reload() { + getPluginConfig().reload(); + getMessageConfig().reload(); + PluginConfig.PERMISSIONS.clearCache(); + } - public static void saveConfig() { - getPluginConfig().save(); - getMessageConfig().save(); - } + public static void saveConfig() { + getPluginConfig().save(); + getMessageConfig().save(); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/RequestManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/RequestManager.java index a6a58c6..d939455 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/manager/RequestManager.java +++ b/src/main/java/cc/carm/plugin/moeteleport/manager/RequestManager.java @@ -14,127 +14,127 @@ import java.util.UUID; public class RequestManager { - public BukkitRunnable checkRunnable; + public BukkitRunnable checkRunnable; - public RequestManager(Main main) { - this.checkRunnable = new BukkitRunnable() { - @Override - public void run() { - checkRequests(); - } - }; - this.checkRunnable.runTaskTimerAsynchronously(main, 100L, 20L); - } + public RequestManager(Main main) { + this.checkRunnable = new BukkitRunnable() { + @Override + public void run() { + checkRequests(); + } + }; + this.checkRunnable.runTaskTimerAsynchronously(main, 100L, 20L); + } - public void shutdown() { - if (!this.checkRunnable.isCancelled()) { - this.checkRunnable.cancel(); - } - } + public void shutdown() { + if (!this.checkRunnable.isCancelled()) { + this.checkRunnable.cancel(); + } + } - public void checkRequests() { - Main.getUserManager().getUserDataMap().values() - .forEach(data -> data.getReceivedRequests().entrySet().stream() - .filter(entry -> entry.getValue().isExpired()) - .peek(entry -> PluginMessages.Request.SENT_TIMEOUT.sendWithPlaceholders( - entry.getValue().getSender(), new String[]{"%(player)"}, - new Object[]{entry.getValue().getReceiver().getName()})) - .peek(entry -> PluginMessages.Request.RECEIVED_TIMEOUT.sendWithPlaceholders( - entry.getValue().getReceiver(), new String[]{"%(player)"}, - new Object[]{entry.getValue().getSender().getName()})) - .peek(entry -> Main.getUserManager() - .getData(entry.getValue().getSender()).getSentRequests() - .remove(entry.getKey())) - .forEach(entry -> data.getReceivedRequests().remove(entry.getKey())) - ); - } + public void checkRequests() { + Main.getUserManager().getUserDataMap().values() + .forEach(data -> data.getReceivedRequests().entrySet().stream() + .filter(entry -> entry.getValue().isExpired()) + .peek(entry -> PluginMessages.Request.SENT_TIMEOUT.sendWithPlaceholders( + entry.getValue().getSender(), new String[]{"%(player)"}, + new Object[]{entry.getValue().getReceiver().getName()})) + .peek(entry -> PluginMessages.Request.RECEIVED_TIMEOUT.sendWithPlaceholders( + entry.getValue().getReceiver(), new String[]{"%(player)"}, + new Object[]{entry.getValue().getSender().getName()})) + .peek(entry -> Main.getUserManager() + .getData(entry.getValue().getSender()).getSentRequests() + .remove(entry.getKey())) + .forEach(entry -> data.getReceivedRequests().remove(entry.getKey())) + ); + } - public void sendRequest(Player sender, Player receiver, TeleportRequest.RequestType type) { - int expireTime = PluginConfig.EXPIRE_TIME.get(); + public void sendRequest(Player sender, Player receiver, TeleportRequest.RequestType type) { + int expireTime = PluginConfig.EXPIRE_TIME.get(); - PluginMessages.Request.SENT.sendWithPlaceholders(sender, - new String[]{"%(player)", "%(expire)"}, - new Object[]{receiver.getName(), expireTime} - ); + PluginMessages.Request.SENT.sendWithPlaceholders(sender, + new String[]{"%(player)", "%(expire)"}, + new Object[]{receiver.getName(), expireTime} + ); - switch (type) { - case TPA: { - PluginMessages.TPA.sendWithPlaceholders(receiver, - new String[]{"%(player)", "%(expire)"}, - new Object[]{sender.getName(), expireTime} - ); - break; - } - case TPA_HERE: { - PluginMessages.TPA_HERE.sendWithPlaceholders(receiver, - new String[]{"%(player)", "%(expire)"}, - new Object[]{sender.getName(), expireTime} - ); - break; - } - } + switch (type) { + case TPA: { + PluginMessages.TPA.sendWithPlaceholders(receiver, + new String[]{"%(player)", "%(expire)"}, + new Object[]{sender.getName(), expireTime} + ); + break; + } + case TPA_HERE: { + PluginMessages.TPA_HERE.sendWithPlaceholders(receiver, + new String[]{"%(player)", "%(expire)"}, + new Object[]{sender.getName(), expireTime} + ); + break; + } + } - TeleportRequest request = new TeleportRequest(sender, receiver, type); - Main.getUserManager().getData(receiver).getReceivedRequests().put(sender.getUniqueId(), request); - Main.getUserManager().getData(sender).getSentRequests().add(receiver.getUniqueId()); + TeleportRequest request = new TeleportRequest(sender, receiver, type); + Main.getUserManager().getData(receiver).getReceivedRequests().put(sender.getUniqueId(), request); + Main.getUserManager().getData(sender).getSentRequests().add(receiver.getUniqueId()); - } + } - public void acceptRequest(TeleportRequest request) { - PluginMessages.ACCEPTED.sendWithPlaceholders(request.getSender(), - new String[]{"%(player)"}, - new Object[]{request.getReceiver().getName()} - ); - PluginMessages.TP_ACCEPT.sendWithPlaceholders(request.getReceiver(), - new String[]{"%(player)"}, - new Object[]{request.getSender().getName()} - ); - TeleportManager.teleport(request.getTeleportPlayer(), request.getTeleportLocation(), true); - removeRequests(request); - } + public void acceptRequest(TeleportRequest request) { + PluginMessages.ACCEPTED.sendWithPlaceholders(request.getSender(), + new String[]{"%(player)"}, + new Object[]{request.getReceiver().getName()} + ); + PluginMessages.TP_ACCEPT.sendWithPlaceholders(request.getReceiver(), + new String[]{"%(player)"}, + new Object[]{request.getSender().getName()} + ); + TeleportManager.teleport(request.getTeleportPlayer(), request.getTeleportLocation(), true); + removeRequests(request); + } - public void denyRequest(TeleportRequest request) { - PluginMessages.DENIED.sendWithPlaceholders(request.getSender(), - new String[]{"%(player)"}, - new Object[]{request.getReceiver().getName()} - ); - PluginMessages.TP_DENY.sendWithPlaceholders(request.getReceiver(), - new String[]{"%(player)"}, - new Object[]{request.getSender().getName()} - ); - removeRequests(request); - } + public void denyRequest(TeleportRequest request) { + PluginMessages.DENIED.sendWithPlaceholders(request.getSender(), + new String[]{"%(player)"}, + new Object[]{request.getReceiver().getName()} + ); + PluginMessages.TP_DENY.sendWithPlaceholders(request.getReceiver(), + new String[]{"%(player)"}, + new Object[]{request.getSender().getName()} + ); + removeRequests(request); + } - public void removeRequests(TeleportRequest request) { - Main.getUserManager().getData(request.getSender()) - .getSentRequests() - .remove(request.getReceiver().getUniqueId()); - Main.getUserManager().getData(request.getReceiver()) - .getReceivedRequests() - .remove(request.getSender().getUniqueId()); - } + public void removeRequests(TeleportRequest request) { + Main.getUserManager().getData(request.getSender()) + .getSentRequests() + .remove(request.getReceiver().getUniqueId()); + Main.getUserManager().getData(request.getReceiver()) + .getReceivedRequests() + .remove(request.getSender().getUniqueId()); + } - public void cancelAllRequests(Player player) { - UUID playerUUID = player.getUniqueId(); - UserData data = Main.getUserManager().getData(player); - data.getReceivedRequests().keySet().stream() - .peek(senderUUID -> PluginMessages.Request.OFFLINE.sendWithPlaceholders( - Bukkit.getPlayer(senderUUID), - new String[]{"%(player)"}, new Object[]{player.getName()} - )).map(senderUUID -> Main.getUserManager().getData(senderUUID)) - .filter(Objects::nonNull).map(UserData::getSentRequests) - .forEach(receivers -> receivers.remove(playerUUID)); + public void cancelAllRequests(Player player) { + UUID playerUUID = player.getUniqueId(); + UserData data = Main.getUserManager().getData(player); + data.getReceivedRequests().keySet().stream() + .peek(senderUUID -> PluginMessages.Request.OFFLINE.sendWithPlaceholders( + Bukkit.getPlayer(senderUUID), + new String[]{"%(player)"}, new Object[]{player.getName()} + )).map(senderUUID -> Main.getUserManager().getData(senderUUID)) + .filter(Objects::nonNull).map(UserData::getSentRequests) + .forEach(receivers -> receivers.remove(playerUUID)); - data.getSentRequests().stream() - .peek(receiverUUID -> PluginMessages.Request.OFFLINE.sendWithPlaceholders( - Bukkit.getPlayer(receiverUUID), - new String[]{"%(player)"}, new Object[]{player.getName()} - )).map(receiverUUID -> Main.getUserManager().getData(receiverUUID)) - .filter(Objects::nonNull).map(UserData::getReceivedRequests) - .forEach(senders -> senders.remove(playerUUID)); + data.getSentRequests().stream() + .peek(receiverUUID -> PluginMessages.Request.OFFLINE.sendWithPlaceholders( + Bukkit.getPlayer(receiverUUID), + new String[]{"%(player)"}, new Object[]{player.getName()} + )).map(receiverUUID -> Main.getUserManager().getData(receiverUUID)) + .filter(Objects::nonNull).map(UserData::getReceivedRequests) + .forEach(senders -> senders.remove(playerUUID)); - data.getSentRequests().clear(); - data.getReceivedRequests().clear(); - } + data.getSentRequests().clear(); + data.getReceivedRequests().clear(); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/TeleportManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/TeleportManager.java index c011da5..dd2ee01 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/manager/TeleportManager.java +++ b/src/main/java/cc/carm/plugin/moeteleport/manager/TeleportManager.java @@ -11,51 +11,51 @@ import org.bukkit.entity.Player; public class TeleportManager { - public static void teleport(Player player, DataLocation targetLocation, boolean onlySafety) { - Location location = targetLocation.getBukkitLocation(); - if (location == null) { - PluginMessages.NOT_AVAILABLE.sendWithPlaceholders(player, - new String[]{"%(location)"}, - new Object[]{targetLocation.toFlatString()} - ); - } else { - teleport(player, location, onlySafety); - } - } + public static void teleport(Player player, DataLocation targetLocation, boolean onlySafety) { + Location location = targetLocation.getBukkitLocation(); + if (location == null) { + PluginMessages.NOT_AVAILABLE.sendWithPlaceholders(player, + new String[]{"%(location)"}, + new Object[]{targetLocation.toFlatString()} + ); + } else { + teleport(player, location, onlySafety); + } + } - public static void teleport(Player player, Location targetLocation, boolean onlySafety) { - if (targetLocation.isWorldLoaded()) { - if (!onlySafety || TeleportManager.isSafeLocation(targetLocation)) { - Main.getUserManager().getData(player).setLastLocation(player.getLocation()); - player.teleport(targetLocation); - PluginMessages.TELEPORTING.sendWithPlaceholders(player, - new String[]{"%(location)"}, - new Object[]{new DataLocation(targetLocation).toFlatString()} - ); - } else { - PluginMessages.DANGEROUS.send(player); - } - } else { - PluginMessages.NOT_AVAILABLE.sendWithPlaceholders(player, - new String[]{"%(location)"}, - new Object[]{new DataLocation(targetLocation).toFlatString()} - ); - } - } + public static void teleport(Player player, Location targetLocation, boolean onlySafety) { + if (targetLocation.isWorldLoaded()) { + if (!onlySafety || TeleportManager.isSafeLocation(targetLocation)) { + Main.getUserManager().getData(player).setLastLocation(player.getLocation()); + player.teleport(targetLocation); + PluginMessages.TELEPORTING.sendWithPlaceholders(player, + new String[]{"%(location)"}, + new Object[]{new DataLocation(targetLocation).toFlatString()} + ); + } else { + PluginMessages.DANGEROUS.send(player); + } + } else { + PluginMessages.NOT_AVAILABLE.sendWithPlaceholders(player, + new String[]{"%(location)"}, + new Object[]{new DataLocation(targetLocation).toFlatString()} + ); + } + } - public static boolean isSafeLocation(Location location) { - Block leg = location.getBlock(); - if (!leg.getType().isAir()) { - return false; // not transparent (will suffocate) - } - Block head = leg.getRelative(BlockFace.UP); - if (!head.getType().isAir()) { - return false; // not transparent (will suffocate) - } - Block ground = leg.getRelative(BlockFace.DOWN); - return ground.getType().isSolid() - && !PluginConfig.DANGEROUS_TYPES.get().contains(ground.getType().name()); - } + public static boolean isSafeLocation(Location location) { + Block leg = location.getBlock(); + if (!leg.getType().isAir()) { + return false; // not transparent (will suffocate) + } + Block head = leg.getRelative(BlockFace.UP); + if (!head.getType().isAir()) { + return false; // not transparent (will suffocate) + } + Block ground = leg.getRelative(BlockFace.DOWN); + return ground.getType().isSolid() + && !PluginConfig.DANGEROUS_TYPES.get().contains(ground.getType().name()); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java index a74b614..893b15f 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java +++ b/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java @@ -14,51 +14,51 @@ import java.util.UUID; public class UserManager { - private final File dataFolder; + private final File dataFolder; - private final HashMap userDataMap = new HashMap<>(); + private final HashMap userDataMap = new HashMap<>(); - public UserManager(Main main) { - this.dataFolder = new File(main.getDataFolder() + "/data"); - if (!dataFolder.isDirectory() || !dataFolder.exists()) { - boolean success = dataFolder.mkdir(); - } - } + public UserManager(Main main) { + this.dataFolder = new File(main.getDataFolder() + "/data"); + if (!dataFolder.isDirectory() || !dataFolder.exists()) { + boolean success = dataFolder.mkdir(); + } + } - @NotNull - public UserData loadData(UUID userUUID) { - return new UserData(getDataFolder(), userUUID); - } + @NotNull + public UserData loadData(UUID userUUID) { + return new UserData(getDataFolder(), userUUID); + } - @Nullable - public UserData getData(UUID userUUID) { - return getUserDataMap().get(userUUID); - } + @Nullable + public UserData getData(UUID userUUID) { + return getUserDataMap().get(userUUID); + } - @NotNull - public UserData getData(Player player) { - return getUserDataMap().get(player.getUniqueId()); - } + @NotNull + public UserData getData(Player player) { + return getUserDataMap().get(player.getUniqueId()); + } - public int getMaxHome(Player player) { - Map permissions = PluginConfig.PERMISSIONS.get(); - int current = PluginConfig.DEFAULT_HOME.get(); + public int getMaxHome(Player player) { + Map permissions = PluginConfig.PERMISSIONS.get(); + int current = PluginConfig.DEFAULT_HOME.get(); - for (Map.Entry entry : permissions.entrySet()) { - if (entry.getKey() > current && player.hasPermission( - Main.getInstance().getName() + "." + entry.getValue() - )) { - current = entry.getKey(); - } - } - return current; - } + for (Map.Entry entry : permissions.entrySet()) { + if (entry.getKey() > current && player.hasPermission( + Main.getInstance().getName() + "." + entry.getValue() + )) { + current = entry.getKey(); + } + } + return current; + } - public HashMap getUserDataMap() { - return userDataMap; - } + public HashMap getUserDataMap() { + return userDataMap; + } - public File getDataFolder() { - return dataFolder; - } + public File getDataFolder() { + return dataFolder; + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/model/TeleportRequest.java b/src/main/java/cc/carm/plugin/moeteleport/model/TeleportRequest.java index 7916fc8..ebae564 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/model/TeleportRequest.java +++ b/src/main/java/cc/carm/plugin/moeteleport/model/TeleportRequest.java @@ -7,65 +7,65 @@ import org.jetbrains.annotations.NotNull; public class TeleportRequest { - final @NotNull Player sender; - final @NotNull Player receiver; - final @NotNull RequestType type; + final @NotNull Player sender; + final @NotNull Player receiver; + final @NotNull RequestType type; - final long createTime; + final long createTime; - public TeleportRequest(@NotNull Player sender, - @NotNull Player receiver, - @NotNull RequestType type) { - this.sender = sender; - this.receiver = receiver; - this.type = type; - this.createTime = System.currentTimeMillis(); - } + public TeleportRequest(@NotNull Player sender, + @NotNull Player receiver, + @NotNull RequestType type) { + this.sender = sender; + this.receiver = receiver; + this.type = type; + this.createTime = System.currentTimeMillis(); + } - public @NotNull Player getSender() { - return sender; - } + public @NotNull Player getSender() { + return sender; + } - public @NotNull Player getReceiver() { - return receiver; - } + public @NotNull Player getReceiver() { + return receiver; + } - public @NotNull Player getTeleportPlayer() { - return getType() == RequestType.TPA ? getSender() : getReceiver(); - } + public @NotNull Player getTeleportPlayer() { + return getType() == RequestType.TPA ? getSender() : getReceiver(); + } - public @NotNull Location getTeleportLocation() { - return getType() == RequestType.TPA_HERE ? getSender().getLocation() : getReceiver().getLocation(); - } + public @NotNull Location getTeleportLocation() { + return getType() == RequestType.TPA_HERE ? getSender().getLocation() : getReceiver().getLocation(); + } - public @NotNull RequestType getType() { - return type; - } + public @NotNull RequestType getType() { + return type; + } - public long getCreateTime() { - return createTime; - } + public long getCreateTime() { + return createTime; + } - public long getActiveTime() { - return System.currentTimeMillis() - getCreateTime(); - } + public long getActiveTime() { + return System.currentTimeMillis() - getCreateTime(); + } - public long getRemainTime() { - return PluginConfig.EXPIRE_TIME.get() * 1000 - getActiveTime(); - } + public long getRemainTime() { + return PluginConfig.EXPIRE_TIME.get() * 1000 - getActiveTime(); + } - public long getRemainSeconds() { - return getRemainTime() / 1000; - } + public long getRemainSeconds() { + return getRemainTime() / 1000; + } - public boolean isExpired() { - return getActiveTime() > PluginConfig.EXPIRE_TIME.get() * 1000; - } + public boolean isExpired() { + return getActiveTime() > PluginConfig.EXPIRE_TIME.get() * 1000; + } - public enum RequestType { - TPA, - TPA_HERE - } + public enum RequestType { + TPA, + TPA_HERE + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/model/UserData.java b/src/main/java/cc/carm/plugin/moeteleport/model/UserData.java index d5f4a5b..dc85ad5 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/model/UserData.java +++ b/src/main/java/cc/carm/plugin/moeteleport/model/UserData.java @@ -15,122 +15,118 @@ import java.util.concurrent.ConcurrentHashMap; public class UserData { - private final @NotNull File dataFile; - private final @NotNull FileConfiguration dataConfig; + private final @NotNull File dataFile; + private final @NotNull FileConfiguration dataConfig; + private final HashSet sentRequests = new HashSet<>(); // 记录发出的请求 + private final ConcurrentHashMap receivedRequests = new ConcurrentHashMap<>(); // 记录收到的传送请求 + public boolean enableAutoSelect = false; + private @Nullable Location lastLocation; + private LinkedHashMap homeLocations; - private @Nullable Location lastLocation; + public UserData(@NotNull File dataFolder, @NotNull UUID uuid) { + this(new File(dataFolder, uuid + ".yml")); + } - private LinkedHashMap homeLocations; + public UserData(@NotNull File file) { + if (!file.exists()) { + try { + boolean success = file.createNewFile(); + } catch (IOException e) { + Main.error("在加载用户 " + file.getName() + " 的数据时出现异常。"); + Main.error(e.getLocalizedMessage()); + } + } + this.dataFile = file; + this.dataConfig = YamlConfiguration.loadConfiguration(dataFile); + loadHomeData(); + } - private final HashSet sentRequests = new HashSet<>(); // 记录发出的请求 - private final ConcurrentHashMap receivedRequests = new ConcurrentHashMap<>(); // 记录收到的传送请求 + public void loadHomeData() { + LinkedHashMap data = new LinkedHashMap<>(); + Optional.ofNullable(getDataConfig().getConfigurationSection("homes")) + .ifPresent(section -> section.getKeys(false).forEach(homeName -> { + DataLocation location = DataLocation.deserializeText(section.getString(homeName)); + if (location != null) data.put(homeName, location); + })); + this.homeLocations = data; + } - public boolean enableAutoSelect = false; + public LinkedHashMap getHomeLocations() { + return homeLocations; + } - public UserData(@NotNull File dataFolder, @NotNull UUID uuid) { - this(new File(dataFolder, uuid + ".yml")); - } + public void setHomeLocation(String homeName, Location location) { + delHomeLocation(homeName); + getHomeLocations().put(homeName, new DataLocation(location)); + } - public UserData(@NotNull File file) { - if (!file.exists()) { - try { - boolean success = file.createNewFile(); - } catch (IOException e) { - Main.error("在加载用户 " + file.getName() + " 的数据时出现异常。"); - Main.error(e.getLocalizedMessage()); - } - } - this.dataFile = file; - this.dataConfig = YamlConfiguration.loadConfiguration(dataFile); - loadHomeData(); - } + public void delHomeLocation(String homeName) { + Map.Entry lastLocation = getHomeLocation(homeName); + if (lastLocation != null) getHomeLocations().remove(lastLocation.getKey()); + } - public void loadHomeData() { - LinkedHashMap data = new LinkedHashMap<>(); - Optional.ofNullable(getDataConfig().getConfigurationSection("homes")) - .ifPresent(section -> section.getKeys(false).forEach(homeName -> { - DataLocation location = DataLocation.deserializeText(section.getString(homeName)); - if (location != null) data.put(homeName, location); - })); - this.homeLocations = data; - } + public Map.Entry getHomeLocation(@Nullable String homeName) { + LinkedHashMap homes = getHomeLocations(); + if (homeName == null) { + if (homes.containsKey("home")) { + return new AbstractMap.SimpleEntry<>("home", homes.get("home")); + } else { + return homes.entrySet().stream().findFirst().orElse(null); + } + } else { + return homes.entrySet().stream() + .filter(entry -> entry.getKey().equalsIgnoreCase(homeName)) + .findFirst().orElse(null); + } + } - public LinkedHashMap getHomeLocations() { - return homeLocations; - } + public @Nullable Location getLastLocation() { + return lastLocation; + } - public void setHomeLocation(String homeName, Location location) { - delHomeLocation(homeName); - getHomeLocations().put(homeName, new DataLocation(location)); - } + public void setLastLocation(@Nullable Location lastLocation) { + this.lastLocation = lastLocation; + } - public void delHomeLocation(String homeName) { - Map.Entry lastLocation = getHomeLocation(homeName); - if (lastLocation != null) getHomeLocations().remove(lastLocation.getKey()); - } + public HashSet getSentRequests() { + return sentRequests; + } - public Map.Entry getHomeLocation(@Nullable String homeName) { - LinkedHashMap homes = getHomeLocations(); - if (homeName == null) { - if (homes.containsKey("home")) { - return new AbstractMap.SimpleEntry<>("home", homes.get("home")); - } else { - return homes.entrySet().stream().findFirst().orElse(null); - } - } else { - return homes.entrySet().stream() - .filter(entry -> entry.getKey().equalsIgnoreCase(homeName)) - .findFirst().orElse(null); - } - } + public ConcurrentHashMap getReceivedRequests() { + return receivedRequests; + } - public @Nullable Location getLastLocation() { - return lastLocation; - } + public boolean isEnableAutoSelect() { + return enableAutoSelect; + } - public void setLastLocation(@Nullable Location lastLocation) { - this.lastLocation = lastLocation; - } + public void setEnableAutoSelect(boolean enableAutoSelect) { + this.enableAutoSelect = enableAutoSelect; + } - public HashSet getSentRequests() { - return sentRequests; - } + public @NotNull File getDataFile() { + return dataFile; + } - public ConcurrentHashMap getReceivedRequests() { - return receivedRequests; - } + public @NotNull FileConfiguration getDataConfig() { + return dataConfig; + } - public void setEnableAutoSelect(boolean enableAutoSelect) { - this.enableAutoSelect = enableAutoSelect; - } + public LinkedHashMap saveToMap() { + LinkedHashMap homeLocations = getHomeLocations(); + LinkedHashMap data = new LinkedHashMap<>(); + if (homeLocations.isEmpty()) return data; + homeLocations.forEach((name, loc) -> data.put(name, loc.serializeToText())); + return data; + } - public boolean isEnableAutoSelect() { - return enableAutoSelect; - } - - public @NotNull File getDataFile() { - return dataFile; - } - - public @NotNull FileConfiguration getDataConfig() { - return dataConfig; - } - - public LinkedHashMap saveToMap() { - LinkedHashMap homeLocations = getHomeLocations(); - LinkedHashMap data = new LinkedHashMap<>(); - if (homeLocations.isEmpty()) return data; - homeLocations.forEach((name, loc) -> data.put(name, loc.serializeToText())); - return data; - } - - public void save() { - try { - getDataConfig().createSection("homes", saveToMap()); - getDataConfig().save(getDataFile()); - } catch (Exception ex) { - Main.error("在保存 " + getDataFile().getName() + " 时出现异常。"); - Main.error(ex.getLocalizedMessage()); - } - } + public void save() { + try { + getDataConfig().createSection("homes", saveToMap()); + getDataConfig().save(getDataFile()); + } catch (Exception ex) { + Main.error("在保存 " + getDataFile().getName() + " 时出现异常。"); + Main.error(ex.getLocalizedMessage()); + } + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/util/ColorParser.java b/src/main/java/cc/carm/plugin/moeteleport/util/ColorParser.java index 5e3c289..8a35afb 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/util/ColorParser.java +++ b/src/main/java/cc/carm/plugin/moeteleport/util/ColorParser.java @@ -1,4 +1,3 @@ - package cc.carm.plugin.moeteleport.util; import java.util.regex.Matcher; @@ -7,8 +6,7 @@ import java.util.regex.Pattern; public class ColorParser { public static String parse(String text) { - text = parseHexColor(text); - return parseColor(text); + return parseColor(parseHexColor(text)); } public static String parseColor(final String text) { diff --git a/src/main/java/cc/carm/plugin/moeteleport/util/MessageUtil.java b/src/main/java/cc/carm/plugin/moeteleport/util/MessageUtil.java index c853086..5651202 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/util/MessageUtil.java +++ b/src/main/java/cc/carm/plugin/moeteleport/util/MessageUtil.java @@ -10,67 +10,67 @@ import java.util.*; public class MessageUtil { - public static boolean hasPlaceholderAPI() { - return Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null; - } + public static boolean hasPlaceholderAPI() { + return Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null; + } - public static void send(@Nullable CommandSender sender, List messages) { - if (messages == null || messages.isEmpty() || sender == null) return; - for (String s : messages) { - sender.sendMessage(ColorParser.parse(s)); - } - } + public static void send(@Nullable CommandSender sender, List messages) { + if (messages == null || messages.isEmpty() || sender == null) return; + for (String s : messages) { + sender.sendMessage(ColorParser.parse(s)); + } + } - public static void send(@Nullable CommandSender sender, String... messages) { - send(sender, Arrays.asList(messages)); - } + public static void send(@Nullable CommandSender sender, String... messages) { + send(sender, Arrays.asList(messages)); + } - public static void sendWithPlaceholders(CommandSender sender, String... messages) { - sendWithPlaceholders(sender, Arrays.asList(messages)); - } + public static void sendWithPlaceholders(CommandSender sender, String... messages) { + sendWithPlaceholders(sender, Arrays.asList(messages)); + } - public static void sendWithPlaceholders(@Nullable CommandSender sender, List messages) { - if (messages == null || messages.isEmpty() || sender == null) return; - if (hasPlaceholderAPI() && sender instanceof Player) { - send(sender, PlaceholderAPI.setPlaceholders((Player) sender, messages)); - } else { - send(sender, messages); - } - } + public static void sendWithPlaceholders(@Nullable CommandSender sender, List messages) { + if (messages == null || messages.isEmpty() || sender == null) return; + if (hasPlaceholderAPI() && sender instanceof Player) { + send(sender, PlaceholderAPI.setPlaceholders((Player) sender, messages)); + } else { + send(sender, messages); + } + } - public static void sendWithPlaceholders(@Nullable CommandSender sender, List messages, String param, Object value) { - sendWithPlaceholders(sender, messages, new String[]{param}, new Object[]{value}); - } + public static void sendWithPlaceholders(@Nullable CommandSender sender, List messages, String param, Object value) { + sendWithPlaceholders(sender, messages, new String[]{param}, new Object[]{value}); + } - public static void sendWithPlaceholders(@Nullable CommandSender sender, List messages, String[] params, Object[] values) { - sendWithPlaceholders(sender, setCustomParams(messages, params, values)); - } + public static void sendWithPlaceholders(@Nullable CommandSender sender, List messages, String[] params, Object[] values) { + sendWithPlaceholders(sender, setCustomParams(messages, params, values)); + } - public static List setCustomParams(List messages, String param, Object value) { - return setCustomParams(messages, new String[]{param}, new Object[]{value}); - } + public static List setCustomParams(List messages, String param, Object value) { + return setCustomParams(messages, new String[]{param}, new Object[]{value}); + } - public static List setCustomParams(List messages, String[] params, Object[] values) { - if (params.length != values.length) return messages; - HashMap paramsMap = new HashMap<>(); - for (int i = 0; i < params.length; i++) { - paramsMap.put(params[i], values[i]); - } - return setCustomParams(messages, paramsMap); - } + public static List setCustomParams(List messages, String[] params, Object[] values) { + if (params.length != values.length) return messages; + HashMap paramsMap = new HashMap<>(); + for (int i = 0; i < params.length; i++) { + paramsMap.put(params[i], values[i]); + } + return setCustomParams(messages, paramsMap); + } - public static List setCustomParams(List messages, HashMap params) { - List list = new ArrayList<>(); - for (String message : messages) { - String afterMessage = message; - for (Map.Entry entry : params.entrySet()) { - afterMessage = afterMessage.replace(entry.getKey(), entry.getValue().toString()); - } - list.add(afterMessage); - } - return list; - } + public static List setCustomParams(List messages, HashMap params) { + List list = new ArrayList<>(); + for (String message : messages) { + String afterMessage = message; + for (Map.Entry entry : params.entrySet()) { + afterMessage = afterMessage.replace(entry.getKey(), entry.getValue().toString()); + } + list.add(afterMessage); + } + return list; + } }