diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tp/UntrackedExecutor.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tp/UntrackedExecutor.java new file mode 100644 index 0000000..a18a15d --- /dev/null +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tp/UntrackedExecutor.java @@ -0,0 +1,118 @@ +package top.nololiyt.worldpermissions.commands.tp; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import top.nololiyt.worldpermissions.MarksAPILinker; +import top.nololiyt.worldpermissions.RootPlugin; +import top.nololiyt.worldpermissions.commands.Executor; +import top.nololiyt.worldpermissions.entitiesandtools.DotDividedStringBuilder; +import top.nololiyt.worldpermissions.entitiesandtools.MessagesSender; +import top.nololiyt.worldpermissions.entitiesandtools.OfflinePlayersPosition; +import top.nololiyt.worldpermissions.entitiesandtools.StringPair; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class UntrackedExecutor extends Executor +{ + protected final static String layerName = "untracked"; + + @Override + public String permissionName() + { + return null; + } + + @Override + public String messageKey() + { + return layerName; + } + + @Override + public List getTabComplete(RootPlugin rootPlugin, int ordinal) + { + switch (ordinal) + { + case 0: + MarksAPILinker marksAPI = rootPlugin.getMarksAPILinker(); + return marksAPI == null ? + new ArrayList<>(rootPlugin.getLocalMarksManager().allMarksName()) : + marksAPI.getMarksAPI().getAllMarksKey(() -> null); + default: + return new ArrayList<>(); + } + } + + @Override + protected boolean run(int layer, RootPlugin rootPlugin, + DotDividedStringBuilder messageKey, CommandSender commandSender, + String[] args) + { + if (args.length - 1 != layer) + return false; + + String markName = args[layer]; + + MessagesSender messagesSender = new MessagesSender(rootPlugin.getMessagesManager(), + commandSender, new StringPair[]{ + null, null, + StringPair.markName(markName), + StringPair.senderName(commandSender.getName()) + }); + + if ((!rootPlugin.getConfig().getBoolean("offline-players-tracker.enabled"))) + { + messagesSender.send(messageKey.append("tracker-not-enabled")); + return true; + } + + MarksAPILinker marksAPI = rootPlugin.getMarksAPILinker(); + Location location = marksAPI == null ? + rootPlugin.getLocalMarksManager().getMark(markName) : + marksAPI.getMarksAPI().getMark(markName, () -> commandSender); + if (location == null) + { + messagesSender.send(messageKey.append("no-such-mark")); + return true; + } + + File dir = new File(rootPlugin.getDataFolder().getAbsolutePath(), "playersData"); + dir.mkdirs(); + String dirPath = dir.getAbsolutePath(); + + long suc = 0; + long fai = 0; + DotDividedStringBuilder failureMessage = new DotDividedStringBuilder(messageKey).append(""); + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) + { + File file = new File(dirPath, player.getUniqueId().toString() + ".yml"); + if (file.exists()) + continue; + + messagesSender.getArgs()[0] = StringPair.playerName(player.getName()); + try + { + new OfflinePlayersPosition(location, true).saveTo(file); + suc++; + } + catch (IOException ex) + { + fai++; + messagesSender.send(failureMessage); + ex.printStackTrace(); + } + } + + messagesSender.getArgs()[0] = StringPair.teleportedCount(String.valueOf(suc)); + messagesSender.getArgs()[1] = StringPair.unteleportedCount(String.valueOf(fai)); + messagesSender.send(messageKey.append("completed")); + return true; + } +} \ No newline at end of file diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tpsingle/OfflineExecutor.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tpsingle/OfflineExecutor.java index 53446c4..6bce0dc 100644 --- a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tpsingle/OfflineExecutor.java +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/tpsingle/OfflineExecutor.java @@ -36,7 +36,7 @@ public String messageKey() } @Override - public List getTabComplete(RootPlugin rootPlugin,int ordinal) + public List getTabComplete(RootPlugin rootPlugin, int ordinal) { switch (ordinal) { @@ -89,7 +89,7 @@ protected boolean run(int layer, RootPlugin rootPlugin, return true; } - if(Bukkit.getPlayer(arguments.playerName) != null) + if (Bukkit.getPlayer(arguments.playerName) != null) { messagesSender.send(messageKey.append("player-is-online")); return true; @@ -110,7 +110,7 @@ protected boolean run(int layer, RootPlugin rootPlugin, } World world = null; - if(!arguments.worldName.isEmpty()) + if (!arguments.worldName.isEmpty()) { world = Bukkit.getWorld(arguments.worldName); if (world == null) @@ -179,13 +179,13 @@ private boolean setPosition(File dir, OfflinePlayer player, World world, Locatio { dir.mkdirs(); File file = new File(dir.getAbsolutePath(), player.getUniqueId().toString() + ".yml"); - if (file.exists()) + if (!file.exists()) + return false; + + OfflinePlayersPosition position = OfflinePlayersPosition.fromFile(file); + if (world != null && (!position.getPosition().getWorld().equals(world))) { - OfflinePlayersPosition position = OfflinePlayersPosition.fromFile(file); - if (world != null && (!position.getPosition().getWorld().equals(world))) - { - return false; - } + return false; } new OfflinePlayersPosition(mark, true).saveTo(file); return true;