From 94c227208ed160b23b296fb2c804bf0565ebdedb Mon Sep 17 00:00:00 2001 From: yueyinqiu Date: Tue, 23 Jun 2020 18:26:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BBPlayerListener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nololiyt/worldpermissions/RootPlugin.java | 9 ++- .../playerlisteners/LoginAndQuitListener.java | 79 +++++++++++++++++++ .../playerlisteners/TeleportListener.java | 71 +++++++++++++++++ 3 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/LoginAndQuitListener.java create mode 100644 NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/TeleportListener.java diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/RootPlugin.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/RootPlugin.java index 39b1dc1..fdb1758 100644 --- a/NWorldPermissions/src/top/nololiyt/worldpermissions/RootPlugin.java +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/RootPlugin.java @@ -3,6 +3,8 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; +import top.nololiyt.worldpermissions.playerlisteners.LoginAndQuitListener; +import top.nololiyt.worldpermissions.playerlisteners.TeleportListener; public class RootPlugin extends JavaPlugin { private MessagesManager messagesManager; @@ -23,10 +25,13 @@ public void onEnable() { saveDefaultConfig(); messagesManager = new MessagesManager(this); marksManager = new MarksManager(this); - + getCommand("nworldpermissions").setExecutor(new RootCommandExecutor(this)); + + Bukkit.getPluginManager().registerEvents( + new LoginAndQuitListener(this), this); Bukkit.getPluginManager().registerEvents( - new PlayerListener(this), this); + new TeleportListener(this), this); new UpdateChecker(this).checkAndLog(); } diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/LoginAndQuitListener.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/LoginAndQuitListener.java new file mode 100644 index 0000000..0bc75d4 --- /dev/null +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/LoginAndQuitListener.java @@ -0,0 +1,79 @@ +package top.nololiyt.worldpermissions.playerlisteners; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import top.nololiyt.worldpermissions.RootPlugin; +import top.nololiyt.worldpermissions.entities.DotDividedStringBuilder; +import top.nololiyt.worldpermissions.entities.StringPair; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class LoginAndQuitListener implements Listener +{ + private RootPlugin rootPlugin; + + public LoginAndQuitListener(RootPlugin rootPlugin) + { + this.rootPlugin = rootPlugin; + } + + @EventHandler + public void onPlayerLogin(PlayerJoinEvent e) + { + if ((!rootPlugin.getConfig().getBoolean("offline-players-tracker.enabled")) || + rootPlugin.getConfig().getBoolean("offline-players-tracker.record-only")) + { + return; + } + + Player player = e.getPlayer(); + File file = new File( + rootPlugin.getDataFolder().getAbsolutePath(), "playersData"); + file.mkdirs(); + file = new File(file.getAbsolutePath(), player.getUniqueId().toString() + ".yml"); + if (!file.exists()) + return; + + YamlConfiguration yamlConfiguration = YamlConfiguration + .loadConfiguration(file); + Object location = yamlConfiguration.get("position"); + if (location != null) + player.teleport((Location) location); + } + @EventHandler + public void onPlayerQuitEvent(PlayerQuitEvent e) + { + if(!rootPlugin.getConfig().getBoolean("offline-players-tracker.enabled")) + { + return; + } + Player player = e.getPlayer(); + try + { + File file = new File( + rootPlugin.getDataFolder().getAbsolutePath(), "playersData"); + file.mkdirs(); + file = new File(file.getAbsolutePath(), player.getUniqueId().toString() + ".yml"); + if (!file.exists()) + file.createNewFile(); + + YamlConfiguration yamlConfiguration = YamlConfiguration + .loadConfiguration(file); + yamlConfiguration.set("position", player.getLocation()); + yamlConfiguration.save(file); + } + catch (IOException ex) + { + ex.printStackTrace(); + } + } +} diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/TeleportListener.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/TeleportListener.java new file mode 100644 index 0000000..8d74ac8 --- /dev/null +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/playerlisteners/TeleportListener.java @@ -0,0 +1,71 @@ +package top.nololiyt.worldpermissions.playerlisteners; + +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; +import top.nololiyt.worldpermissions.RootPlugin; +import top.nololiyt.worldpermissions.entities.DotDividedStringBuilder; +import top.nololiyt.worldpermissions.entities.StringPair; + +import java.util.List; + +public class TeleportListener implements Listener +{ + private RootPlugin rootPlugin; + + public TeleportListener(RootPlugin rootPlugin) + { + this.rootPlugin = rootPlugin; + } + + @EventHandler + public void onPlayerTeleport(PlayerTeleportEvent e) + { + World dest = e.getTo().getWorld(); + if (dest.equals(e.getFrom().getWorld())) + { + return; + } + + String destName = dest.getName(); + + Player player = e.getPlayer(); + + if (!worldIsControlled(dest)) + { + return; + } + + StringPair[] pairs = new StringPair[]{ + StringPair.playerName(player.getDisplayName()) + }; + + if (player.hasPermission("nworldpermissions.forfreeto." + destName)) + { + String message = rootPlugin.getMessagesManager().getMessage( + new DotDividedStringBuilder( + "messages.to-players.when-teleport-to-controlled-worlds.teleported"), + pairs); + if (!message.isEmpty()) + player.sendMessage(message); + return; + } + + e.setCancelled(true); + String message = rootPlugin.getMessagesManager().getMessage( + new DotDividedStringBuilder( + "messages.to-players.when-teleport-to-controlled-worlds.denied" + ), pairs); + if (!message.isEmpty()) + player.sendMessage(message); + } + + private boolean worldIsControlled(World world) + { + List worlds = rootPlugin.getConfig().getStringList("controlled-worlds"); + String destName = world.getName(); + return worlds.contains(destName); + } +}