diff --git a/pom.xml b/pom.xml
index fb5616f..932d05c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.cypherx
xauth
- 1.2.4
+ 1.2.5
xAuth
UTF-8
diff --git a/src/main/java/com/cypherx/xauth/CommandHandler.java b/src/main/java/com/cypherx/xauth/CommandHandler.java
index df6be96..91448a0 100644
--- a/src/main/java/com/cypherx/xauth/CommandHandler.java
+++ b/src/main/java/com/cypherx/xauth/CommandHandler.java
@@ -152,8 +152,7 @@ public class CommandHandler
if (target != null)
{
if (plugin.mustRegister(target)) {
- plugin.loginLocation.put(target, target.getLocation());
- target.teleport(target.getWorld().getSpawnLocation());
+ plugin.saveLocation(target);
plugin.saveInventory(target);
}
target.sendMessage(xAuth.strings.getString("unregister.target"));
@@ -232,8 +231,7 @@ public class CommandHandler
if (pTarget != null)
{
- plugin.loginLocation.put(pTarget, pTarget.getLocation());
- pTarget.teleport(pTarget.getWorld().getSpawnLocation());
+ plugin.saveLocation(pTarget);
plugin.saveInventory(pTarget);
pTarget.sendMessage(xAuth.strings.getString("logout.success.ended"));
}
@@ -285,8 +283,7 @@ public class CommandHandler
if (target != null)
{
if (plugin.mustRegister(target)) {
- plugin.loginLocation.put(target, target.getLocation());
- target.teleport(target.getWorld().getSpawnLocation());
+ plugin.saveLocation(target);
plugin.saveInventory(target);
}
target.sendMessage(xAuth.strings.getString("unregister.target"));
@@ -349,8 +346,7 @@ public class CommandHandler
if (pTarget != null)
{
- plugin.loginLocation.put(pTarget, pTarget.getLocation());
- pTarget.teleport(pTarget.getWorld().getSpawnLocation());
+ plugin.saveLocation(pTarget);
plugin.saveInventory(pTarget);
pTarget.sendMessage(xAuth.strings.getString("logout.success.ended"));
}
diff --git a/src/main/java/com/cypherx/xauth/Settings.java b/src/main/java/com/cypherx/xauth/Settings.java
index b0d4fda..42521ed 100644
--- a/src/main/java/com/cypherx/xauth/Settings.java
+++ b/src/main/java/com/cypherx/xauth/Settings.java
@@ -19,6 +19,7 @@ public class Settings
"session.verifyip",
"notify.limit",
"misc.allowed-cmds",
+ "misc.protect-location",
"login.strikes.enabled",
"login.strikes.amount",
"login.strikes.action",
@@ -79,6 +80,7 @@ public class Settings
defaults.put("misc.allow-changepw", true);
defaults.put("misc.allowed-cmds", Arrays.asList(new String[]{"/register", "/login"}));
defaults.put("misc.autosave", true);
+ defaults.put("misc.protect-location", true);
defaults.put("login.strikes.enabled", true);
defaults.put("login.strikes.amount", 5);
defaults.put("login.strikes.action", "kick");
diff --git a/src/main/java/com/cypherx/xauth/xAuth.java b/src/main/java/com/cypherx/xauth/xAuth.java
index 9c6b1b4..fbd4eea 100644
--- a/src/main/java/com/cypherx/xauth/xAuth.java
+++ b/src/main/java/com/cypherx/xauth/xAuth.java
@@ -6,7 +6,6 @@ import java.security.MessageDigest;
import java.util.concurrent.ConcurrentHashMap;
import java.util.ArrayList;
import java.util.Date;
-import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -60,7 +59,7 @@ public class xAuth extends JavaPlugin
private ConcurrentHashMap sessions = new ConcurrentHashMap();
private ConcurrentHashMap lastNotifyTimes = new ConcurrentHashMap();
private ConcurrentHashMap strikes = new ConcurrentHashMap();
- public HashMap loginLocation = new HashMap();
+ private ConcurrentHashMap locations = new ConcurrentHashMap();
private ArrayList illegalNames = new ArrayList();
public void onEnable()
@@ -105,10 +104,9 @@ public class xAuth extends JavaPlugin
{
for (Player player : players)
{
- if (mustRegister(player))
+ if (mustRegister(player) || isRegistered(player.getName()))
{
- loginLocation.put(player, player.getLocation());
- player.teleport(player.getWorld().getSpawnLocation());
+ saveLocation(player);
saveInventory(player);
player.sendMessage(strings.getString("misc.reloaded"));
}
@@ -171,8 +169,7 @@ public class xAuth extends JavaPlugin
{
for (Player player : players) {
if (!sessionExists(player.getName())) {
- player.teleport(loginLocation.get(player));
- loginLocation.remove(player);
+ restoreLocation(player);
restoreInventory(player);
}
}
@@ -293,9 +290,8 @@ public class xAuth extends JavaPlugin
//LOGIN / LOGOUT FUNCTIONS
public void login(Player player)
{
- player.teleport(loginLocation.get(player));
- loginLocation.remove(player);
startSession(player);
+ restoreLocation(player);
restoreInventory(player);
}
@@ -334,8 +330,7 @@ public class xAuth extends JavaPlugin
removeSession(pName);
}
else {
- player.teleport(loginLocation.get(player));
- loginLocation.remove(player);
+ restoreLocation(player);
restoreInventory(player);
}
}
@@ -399,11 +394,11 @@ public class xAuth extends JavaPlugin
{
if (lastNotifyTimes.get(player) == null)
return true;
-
+
Date nextNotifyTime = new Date(lastNotifyTimes.get(player).getTime() + (settings.getInt("notify.limit") * 1000));
if (nextNotifyTime.compareTo(new Date()) < 0)
return true;
-
+
return false;
}
@@ -418,7 +413,26 @@ public class xAuth extends JavaPlugin
lastNotifyTimes.remove(player);
lastNotifyTimes.put(player, date);
}
-
+
+ public void saveLocation(Player player) {
+ if (!settings.getBool("misc.protect-location"))
+ return;
+
+ locations.put(player, player.getLocation());
+ player.teleport(player.getWorld().getSpawnLocation());
+ }
+
+ public void restoreLocation(Player player) {
+ if (!settings.getBool("misc.protect-location"))
+ return;
+
+ Location loc = locations.get(player);
+
+ if (loc != null) {
+ player.teleport(loc);
+ locations.remove(player);
+ }
+ }
//INVENTORY FUNCTIONS
public void saveInventory(Player player)
{
@@ -525,8 +539,7 @@ public class xAuth extends JavaPlugin
if (player != null)
{
- loginLocation.put(player, player.getLocation());
- player.teleport(player.getWorld().getSpawnLocation());
+ saveLocation(player);
saveInventory(player);
player.sendMessage(strings.getString("logout.success.ended"));
}
diff --git a/src/main/java/com/cypherx/xauth/xAuthEntityListener.java b/src/main/java/com/cypherx/xauth/xAuthEntityListener.java
index a008cec..f4006e1 100644
--- a/src/main/java/com/cypherx/xauth/xAuthEntityListener.java
+++ b/src/main/java/com/cypherx/xauth/xAuthEntityListener.java
@@ -25,7 +25,7 @@ public class xAuthEntityListener extends EntityListener
Entity entity = event.getEntity();
//Player taking damage
- if (entity instanceof Player)
+ if (entity instanceof Player && ((Player)entity).isOnline())
plugin.handleEvent((Player)entity, event);
//Player dealing damage to other entity
else if (event instanceof EntityDamageByEntityEvent)
diff --git a/src/main/java/com/cypherx/xauth/xAuthPlayerListener.java b/src/main/java/com/cypherx/xauth/xAuthPlayerListener.java
index ae2e18e..e5b057e 100644
--- a/src/main/java/com/cypherx/xauth/xAuthPlayerListener.java
+++ b/src/main/java/com/cypherx/xauth/xAuthPlayerListener.java
@@ -1,6 +1,7 @@
package com.cypherx.xauth;
import org.bukkit.Location;
+import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.*;
@@ -37,14 +38,12 @@ public class xAuthPlayerListener extends PlayerListener
if (!plugin.isLoggedIn(player))
{
- plugin.loginLocation.put(player, player.getLocation());
- player.teleport(player.getWorld().getSpawnLocation());
-
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() {
@@ -54,6 +53,7 @@ public class xAuthPlayerListener extends PlayerListener
}
else
{
+ plugin.saveLocation(player);
plugin.saveInventory(player);
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
@@ -120,21 +120,29 @@ public class xAuthPlayerListener extends PlayerListener
if (event.isCancelled())
return;
- /*Location from = event.getFrom();
- Location to = event.getTo();
-
- if (from.getX() == to.getX() && from.getZ() == to.getZ())
- {
- if (from.getY() > to.getY())
- return;
- }*/
-
Player player = event.getPlayer();
plugin.handleEvent(player, event);
- Location loc = player.getWorld().getSpawnLocation();
+ if (event.isCancelled()) {
+ Location loc;
- if (event.isCancelled() && player.teleport(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);
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 35f6b73..1fc784d 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
name: xAuth
main: com.cypherx.xauth.xAuth
-version: 1.2.4
+version: 1.2.5
description: Allows players to register and maintain an account while the server is in offline-mode.
author: CypherX