232 lines
6.8 KiB
Java
232 lines
6.8 KiB
Java
package com.cypherx.xauth.listeners;
|
|
|
|
import org.bukkit.Material;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.Event;
|
|
import org.bukkit.event.block.Action;
|
|
import org.bukkit.event.player.*;
|
|
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
|
import org.bukkit.plugin.Plugin;
|
|
import org.bukkit.plugin.PluginManager;
|
|
|
|
import com.cypherx.xauth.Session;
|
|
import com.cypherx.xauth.Util;
|
|
import com.cypherx.xauth.xAuth;
|
|
import com.cypherx.xauth.xAuthMessages;
|
|
import com.cypherx.xauth.xAuthPlayer;
|
|
import com.cypherx.xauth.xAuthSettings;
|
|
import com.cypherx.xauth.database.DbUtil;
|
|
|
|
public class xAuthPlayerListener extends PlayerListener {
|
|
private final xAuth plugin;
|
|
|
|
public xAuthPlayerListener(xAuth plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
public void registerEvents() {
|
|
PluginManager pm = plugin.getServer().getPluginManager();
|
|
pm.registerEvent(Event.Type.PLAYER_CHAT, this, Event.Priority.Lowest, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this, Event.Priority.Lowest, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_INTERACT, this, Event.Priority.Lowest, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_JOIN, this, Event.Priority.Monitor, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_KICK, this, Event.Priority.Monitor, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_LOGIN, this, Event.Priority.Lowest, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_MOVE, this, Event.Priority.Lowest, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, this, Event.Priority.Lowest, plugin);
|
|
pm.registerEvent(Event.Type.PLAYER_QUIT, this, Event.Priority.Monitor, plugin);
|
|
}
|
|
|
|
public void onPlayerLogin(PlayerLoginEvent event) {
|
|
if (!event.getResult().equals(Result.ALLOWED))
|
|
return;
|
|
|
|
String host = event.getKickMessage();
|
|
if (host != null && plugin.isBanned(host))
|
|
event.disallow(Result.KICK_OTHER, xAuthMessages.get("joinErrBanned", null, null));
|
|
|
|
Player player = event.getPlayer();
|
|
if (xAuthSettings.reverseESS && player.isOnline())
|
|
event.disallow(Result.KICK_OTHER, xAuthMessages.get("joinErrOnline", null, null));
|
|
|
|
if (!Util.isValidName(player))
|
|
event.disallow(Result.KICK_OTHER, xAuthMessages.get("joinErrName", null, null));
|
|
}
|
|
|
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
|
final Player player = event.getPlayer();
|
|
|
|
//Easyban fix?
|
|
if (player == null)
|
|
return;
|
|
|
|
xAuthPlayer xPlayer = plugin.getPlayerJoin(player.getName());
|
|
boolean isRegistered = xPlayer.isRegistered();
|
|
|
|
if (!xPlayer.isAuthenticated() && (isRegistered || (!isRegistered && xPlayer.mustRegister()))) {
|
|
final String fieldName;
|
|
plugin.createGuest(xPlayer);
|
|
|
|
if (isRegistered)
|
|
fieldName = "joinLogin";
|
|
else
|
|
fieldName = "joinRegister";
|
|
|
|
// this is needed to send the message after the "xxx has joined.." announcement
|
|
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
|
|
public void run() {
|
|
xAuthMessages.send(fieldName, player);
|
|
}
|
|
}, 1);
|
|
}
|
|
}
|
|
|
|
public void onPlayerKick(PlayerKickEvent event) {
|
|
// prevent WorldGuard from kicking the already online player
|
|
// if another with the same name joins
|
|
if (xAuthSettings.reverseESS) {
|
|
Plugin wgPlugin = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
|
|
|
|
if (wgPlugin != null && event.getReason().equals("Logged in from another location."))
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
|
Player player = event.getPlayer();
|
|
xAuthPlayer xPlayer = plugin.getPlayer(player.getName());
|
|
|
|
if (xPlayer.isGuest())
|
|
plugin.removeGuest(xPlayer);
|
|
else if (xPlayer.hasSession()) {
|
|
Session session = xPlayer.getSession();
|
|
if (session.isExpired())
|
|
DbUtil.deleteSession(xPlayer);
|
|
}
|
|
}
|
|
|
|
public void onPlayerChat(PlayerChatEvent event) {
|
|
if (event.isCancelled())
|
|
return;
|
|
|
|
xAuthPlayer xPlayer = plugin.getPlayer(event.getPlayer().getName());
|
|
|
|
//if (!xAuthSettings.rstrChat && !xPlayer.isRegistered())
|
|
//return;
|
|
|
|
if (xPlayer.isGuest()) {
|
|
if (xPlayer.canNotify())
|
|
xPlayer.sendIllegalActionNotice();
|
|
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
|
if (event.isCancelled())
|
|
return;
|
|
|
|
xAuthPlayer xPlayer = plugin.getPlayer(event.getPlayer().getName());
|
|
|
|
//if (!xAuthSettings.rstrCommands && !xPlayer.isRegistered())
|
|
//return;
|
|
|
|
if (xPlayer.isGuest()) {
|
|
String command = event.getMessage().split(" ")[0].replaceFirst("/", "");
|
|
|
|
if (xAuthSettings.allowedCmds.contains(command))
|
|
return;
|
|
|
|
if (xPlayer.canNotify())
|
|
xPlayer.sendIllegalActionNotice();
|
|
|
|
event.setMessage("/");
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
|
if (event.isCancelled())
|
|
return;
|
|
|
|
xAuthPlayer xPlayer = plugin.getPlayer(event.getPlayer().getName());
|
|
|
|
//if (!xAuthSettings.rstrInteract && !xPlayer.isRegistered())
|
|
//return;
|
|
|
|
if (xPlayer.isGuest()) {
|
|
Action action = event.getAction();
|
|
Material type = event.getClickedBlock().getType();
|
|
|
|
if (action == Action.LEFT_CLICK_BLOCK) {
|
|
if (type == Material.NOTE_BLOCK
|
|
|| type == Material.WOODEN_DOOR
|
|
|| type == Material.LEVER
|
|
|| type == Material.IRON_DOOR
|
|
|| type == Material.STONE_BUTTON
|
|
|| type == Material.TRAP_DOOR) {
|
|
if (xPlayer.canNotify())
|
|
xPlayer.sendIllegalActionNotice();
|
|
|
|
event.setCancelled(true);
|
|
}
|
|
} else if (action == Action.RIGHT_CLICK_BLOCK) {
|
|
if (type == Material.DISPENSER
|
|
|| type == Material.NOTE_BLOCK
|
|
|| type == Material.BED
|
|
|| type == Material.CHEST
|
|
|| type == Material.WORKBENCH
|
|
|| type == Material.FURNACE
|
|
|| type == Material.SIGN
|
|
|| type == Material.WOODEN_DOOR
|
|
|| type == Material.LEVER
|
|
|| type == Material.IRON_DOOR
|
|
|| type == Material.STONE_BUTTON
|
|
|| type == Material.JUKEBOX
|
|
|| type == Material.TRAP_DOOR) {
|
|
if (xPlayer.canNotify())
|
|
xPlayer.sendIllegalActionNotice();
|
|
|
|
event.setCancelled(true);
|
|
}
|
|
} else if (action == Action.PHYSICAL) {
|
|
if (type == Material.SOIL || type == Material.STONE_PLATE || type == Material.WOOD_PLATE)
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onPlayerMove(PlayerMoveEvent event) {
|
|
if (event.isCancelled())
|
|
return;
|
|
|
|
Player player = event.getPlayer();
|
|
xAuthPlayer xPlayer = plugin.getPlayer(player.getName());
|
|
|
|
//if (!xAuthSettings.rstrMovement && !xPlayer.isRegistered())
|
|
//return;
|
|
|
|
if (xPlayer.isGuest()) {
|
|
if (xAuthSettings.protectLoc)
|
|
event.setTo(plugin.getLocationToTeleport(player.getWorld()));
|
|
else
|
|
event.setTo(xPlayer.getLocation());
|
|
|
|
if (xPlayer.canNotify())
|
|
xPlayer.sendIllegalActionNotice();
|
|
}
|
|
}
|
|
|
|
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
|
if (event.isCancelled())
|
|
return;
|
|
|
|
xAuthPlayer xPlayer = plugin.getPlayer(event.getPlayer().getName());
|
|
|
|
//if (!xAuthSettings.rstrPickup && !xPlayer.isRegistered())
|
|
//return;
|
|
|
|
if (xPlayer.isGuest())
|
|
event.setCancelled(true);
|
|
}
|
|
} |