Skip to content

Commit

Permalink
分离PlayerListener
Browse files Browse the repository at this point in the history
  • Loading branch information
yueyinqiu committed Jun 23, 2020
1 parent 442965b commit 94c2272
Show file tree
Hide file tree
Showing 3 changed files with 157 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
Original file line number Diff line number Diff line change
@@ -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<String> worlds = rootPlugin.getConfig().getStringList("controlled-worlds");
String destName = world.getName();
return worlds.contains(destName);
}
}

0 comments on commit 94c2272

Please # to comment.