1
0
mirror of https://github.com/moparisthebest/xAuth synced 2024-08-13 16:53:52 -04:00
xAuth/src/main/java/com/cypherx/xauth/xAuthPlayerListener.java
CypherX 88f74bfe41 Various NullPointerException errors fixed
Players will now be teleported to ground level instead of underground or in the air when not logged in
Added configuration node to turn on/off location protection (misc.protect-locaton)
MineQuest entity interaction fixed
2011-05-12 17:39:11 -04:00

160 lines
4.2 KiB
Java

package com.cypherx.xauth;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.*;
/**
* Handle events for all Player related events
* @author CypherX
*/
public class xAuthPlayerListener extends PlayerListener
{
private final xAuth plugin;
public xAuthPlayerListener(final xAuth instance)
{
plugin = instance;
}
public void onPlayerLogin(PlayerLoginEvent event)
{
Player player = event.getPlayer();
if (player.isOnline())
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "A player with this name is already online.");
if (xAuth.settings.getBool("filter.enabled") && !plugin.isNameLegal(player.getName()))
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, xAuth.strings.getString("misc.filterkickmsg"));
if (xAuth.settings.getBool("filter.block-blankname") && player.getName().trim().equals(""))
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, xAuth.strings.getString("misc.blankkickmsg"));
}
public void onPlayerJoin(PlayerJoinEvent event)
{
final Player player = event.getPlayer();
if (!plugin.isLoggedIn(player))
{
if (!plugin.isRegistered(player.getName()))
{
if (!plugin.mustRegister(player))
return;
plugin.saveLocation(player);
plugin.saveInventory(player);
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
public void run() {
player.sendMessage(xAuth.strings.getString("register.login"));
}
}, 5);
}
else
{
plugin.saveLocation(player);
plugin.saveInventory(player);
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
player.sendMessage(xAuth.strings.getString("login.login"));
}
}, 5);
}
}
}
public void onPlayerQuit(PlayerQuitEvent event)
{
plugin.logout(event.getPlayer());
}
//Prevents players from executing commands
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
String[] msg = event.getMessage().split(" ");
if (!plugin.isCmdAllowed(msg[0]))
plugin.handleEvent(player, event);
if (event.isCancelled())
event.setMessage("/");
}
//Prevents player from being able to chat
public void onPlayerChat(PlayerChatEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
plugin.handleEvent(player, event);
}
//Prevents player from being able to drop an item (inventory should be empty anyway)
public void onPlayerDropItem(PlayerDropItemEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
plugin.handleEvent(player, event);
}
public void onPlayerInteract(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
plugin.handleEvent(player, event);
}
//Prevents player from moving
public void onPlayerMove(PlayerMoveEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
plugin.handleEvent(player, event);
if (event.isCancelled()) {
Location loc;
//protect location by teleporting user to spawn
if (xAuth.settings.getBool("misc.protect-location")) {
World w = player.getWorld();
loc = w.getSpawnLocation();
//underground, go up 1 block until air is reached
while (w.getBlockTypeIdAt(loc) != 0)
loc = new Location(w, loc.getX(), loc.getY() + 1, loc.getZ());
//in the air, go down 1 block until the ground is reached
while (w.getBlockTypeIdAt((int) loc.getX(), (int) loc.getY() - 1, (int) loc.getZ()) == 0)
loc = new Location(w, loc.getX(), loc.getY() - 1, loc.getZ());
}
else
loc = event.getFrom();
player.teleport(loc);
event.setTo(loc);
event.setFrom(loc);
}
}
//Prevents player from picking up items
public void onPlayerPickupItem(PlayerPickupItemEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
plugin.handleEvent(player, event);
}
}