xAuth/src/main/java/com/cypherx/xauth/listeners/xAuthPlayerListener.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);
}
}