From 581609eedef1a2f68fd520834762d88ecb2a5a96 Mon Sep 17 00:00:00 2001 From: Zach Iverson Date: Fri, 24 Jun 2011 17:00:12 -0400 Subject: [PATCH] 1. Accounts/Session are now reloaded from the database when a player joins the server to take external changes into effect 2. Allowed commands configuration (guest.allowed-commands) 3. Inventory protection now stores items and armor in the database to prevent item loss 4. register.error.disabled message fixed --- src/main/java/com/cypherx/xauth/Util.java | 15 +- .../xauth/commands/ChangePasswordCommand.java | 2 +- .../cypherx/xauth/commands/LoginCommand.java | 2 +- .../cypherx/xauth/commands/LogoutCommand.java | 2 +- .../xauth/commands/RegisterCommand.java | 2 +- .../cypherx/xauth/commands/xAuthCommand.java | 16 +- .../xauth/datamanager/DataManager.java | 179 +++++++++++++++++- .../xauth/listeners/xAuthBlockListener.java | 4 +- .../xauth/listeners/xAuthEntityListener.java | 6 +- .../xauth/listeners/xAuthPlayerListener.java | 46 ++--- src/main/java/com/cypherx/xauth/xAuth.java | 46 ++++- .../java/com/cypherx/xauth/xAuthMessages.java | 2 +- .../java/com/cypherx/xauth/xAuthPlayer.java | 10 +- .../java/com/cypherx/xauth/xAuthSettings.java | 12 +- src/main/resources/config.yml | 3 + src/main/resources/plugin.yml | 2 +- 16 files changed, 280 insertions(+), 69 deletions(-) diff --git a/src/main/java/com/cypherx/xauth/Util.java b/src/main/java/com/cypherx/xauth/Util.java index 866cf83..7768c86 100644 --- a/src/main/java/com/cypherx/xauth/Util.java +++ b/src/main/java/com/cypherx/xauth/Util.java @@ -3,7 +3,7 @@ package com.cypherx.xauth; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; -import java.io.FileReader; +//import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; @@ -80,7 +80,7 @@ public class Util { return sb.toString(); } - public static boolean getOnlineMode() { + /*public static boolean getOnlineMode() { BufferedReader br = null; String value = null; String line; @@ -99,7 +99,7 @@ public class Util { } return Boolean.parseBoolean(value); - } + }*/ public static boolean isValidName(Player player) { String playerName = player.getName().toLowerCase(); @@ -199,4 +199,13 @@ public class Util { public static Timestamp getNow() { return new Timestamp(System.currentTimeMillis()); } + + public static int[] stringToInt(String[] strArray) { + int[] intArray = new int[strArray.length]; + + for (int i = 0; i < strArray.length; i++) + intArray[i] = Integer.parseInt(strArray[i]); + + return intArray; + } } \ No newline at end of file diff --git a/src/main/java/com/cypherx/xauth/commands/ChangePasswordCommand.java b/src/main/java/com/cypherx/xauth/commands/ChangePasswordCommand.java index d3e75a4..9b9db5b 100644 --- a/src/main/java/com/cypherx/xauth/commands/ChangePasswordCommand.java +++ b/src/main/java/com/cypherx/xauth/commands/ChangePasswordCommand.java @@ -23,7 +23,7 @@ public class ChangePasswordCommand implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (sender instanceof Player) { Player player = (Player)sender; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(player.getName()); if (!xAuthSettings.pwAllowChange) { xAuthMessages.send("cpwErrDisabled", player); diff --git a/src/main/java/com/cypherx/xauth/commands/LoginCommand.java b/src/main/java/com/cypherx/xauth/commands/LoginCommand.java index 0d668d3..b86b02a 100644 --- a/src/main/java/com/cypherx/xauth/commands/LoginCommand.java +++ b/src/main/java/com/cypherx/xauth/commands/LoginCommand.java @@ -22,7 +22,7 @@ public class LoginCommand implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (sender instanceof Player) { Player player = (Player)sender; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(player.getName()); if (args.length < 1) { xAuthMessages.send("loginUsage", player); diff --git a/src/main/java/com/cypherx/xauth/commands/LogoutCommand.java b/src/main/java/com/cypherx/xauth/commands/LogoutCommand.java index a8b93a2..c3615cd 100644 --- a/src/main/java/com/cypherx/xauth/commands/LogoutCommand.java +++ b/src/main/java/com/cypherx/xauth/commands/LogoutCommand.java @@ -19,7 +19,7 @@ public class LogoutCommand implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (sender instanceof Player) { Player player = (Player)sender; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(player.getName()); if (!xPlayer.hasSession()) { xAuthMessages.send("logoutErrLogged", player); diff --git a/src/main/java/com/cypherx/xauth/commands/RegisterCommand.java b/src/main/java/com/cypherx/xauth/commands/RegisterCommand.java index 6269229..8b2cae5 100644 --- a/src/main/java/com/cypherx/xauth/commands/RegisterCommand.java +++ b/src/main/java/com/cypherx/xauth/commands/RegisterCommand.java @@ -23,7 +23,7 @@ public class RegisterCommand implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (sender instanceof Player) { Player player = (Player)sender; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(player.getName()); if (!xAuthSettings.regEnabled) { xAuthMessages.send("regErrDisabled", player); diff --git a/src/main/java/com/cypherx/xauth/commands/xAuthCommand.java b/src/main/java/com/cypherx/xauth/commands/xAuthCommand.java index 0656c7f..fc6e312 100644 --- a/src/main/java/com/cypherx/xauth/commands/xAuthCommand.java +++ b/src/main/java/com/cypherx/xauth/commands/xAuthCommand.java @@ -72,7 +72,7 @@ public class xAuthCommand implements CommandExecutor { String targetName = args[1]; String password = args[2]; String email = (args.length > 3 ? args[3] : null); - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (xPlayer.isRegistered()) { xAuthMessages.send("admnRegRegistered", player, xPlayer.getPlayer()); @@ -94,7 +94,7 @@ public class xAuthCommand implements CommandExecutor { String targetName = args[1]; String password = args[2]; String email = (args.length > 3 ? args[3] : null); - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (xPlayer.isRegistered()) { xAuthLog.info(targetName + " is already registered!"); @@ -124,7 +124,7 @@ public class xAuthCommand implements CommandExecutor { } String targetName = args[1]; - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (!xPlayer.isRegistered()) { xAuthMessages.send("admnCpwRegistered", player, xPlayer.getPlayer()); @@ -144,7 +144,7 @@ public class xAuthCommand implements CommandExecutor { } String targetName = args[1]; - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (!xPlayer.isRegistered()) { xAuthLog.info("This player is not registered!"); @@ -174,7 +174,7 @@ public class xAuthCommand implements CommandExecutor { } String targetName = args[1]; - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (!xPlayer.hasSession()) { xAuthMessages.send("admnLogoutLogged", player, xPlayer.getPlayer()); @@ -194,7 +194,7 @@ public class xAuthCommand implements CommandExecutor { } String targetName = args[1]; - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (!xPlayer.hasSession()) { xAuthLog.info(targetName + " is not logged in!"); @@ -224,7 +224,7 @@ public class xAuthCommand implements CommandExecutor { } String targetName = args[1]; - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (!xPlayer.isRegistered()) { xAuthMessages.send("admnUnregRegistered", player, xPlayer.getPlayer()); @@ -248,7 +248,7 @@ public class xAuthCommand implements CommandExecutor { } String targetName = args[1]; - xAuthPlayer xPlayer = dataManager.getPlayerByName(targetName); + xAuthPlayer xPlayer = dataManager.getPlayer(targetName); if (!xPlayer.isRegistered()) { xAuthLog.info(targetName + " is not registered!"); diff --git a/src/main/java/com/cypherx/xauth/datamanager/DataManager.java b/src/main/java/com/cypherx/xauth/datamanager/DataManager.java index f5e9e92..5f68889 100644 --- a/src/main/java/com/cypherx/xauth/datamanager/DataManager.java +++ b/src/main/java/com/cypherx/xauth/datamanager/DataManager.java @@ -9,10 +9,14 @@ import java.sql.Statement; import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + import com.cypherx.xauth.Account; import com.cypherx.xauth.Session; import com.cypherx.xauth.StrikeBan; import com.cypherx.xauth.TeleLocation; +import com.cypherx.xauth.Util; import com.cypherx.xauth.xAuth; import com.cypherx.xauth.xAuthLog; import com.cypherx.xauth.xAuthPlayer; @@ -142,18 +146,142 @@ public class DataManager { ); stmt.execute( - "CREATE TABLE IF NOT EXISTS `" + xAuthSettings.tblStrike + "` (" + - "`host` CHAR(15) NOT NULL," + - "`bantime` DATETIME NOT NULL," + - "PRIMARY KEY(`host`)" + - ")" - ); + "CREATE TABLE IF NOT EXISTS `" + xAuthSettings.tblStrike + "` (" + + "`host` CHAR(15) NOT NULL," + + "`bantime` DATETIME NOT NULL," + + "PRIMARY KEY(`host`)" + + ")" + ); + + stmt.execute( + "CREATE TABLE IF NOT EXISTS `inventory` (" + + "`playername` VARCHAR(255) NOT NULL," + + "`itemid` TEXT NOT NULL," + + "`amount` TEXT NOT NULL," + + "`durability` TEXT NOT NULL," + + "PRIMARY KEY (`playername`)" + + ")" + ); } catch (SQLException e) { xAuthLog.severe("Could not check/create database tables!", e); } } - public xAuthPlayer getPlayerByName(String playerName) { + public void insertInventory(xAuthPlayer xPlayer) { + try { + prepStmt = connection.prepareStatement( + "SELECT *" + + " FROM `" + xAuthSettings.tblInventory + "`" + + " WHERE `playername` = ?" + ); + prepStmt.setString(1, xPlayer.getPlayerName()); + rs = prepStmt.executeQuery(); + + if (rs.next()) + return; + } catch (SQLException e) { + xAuthLog.severe("Could not check inventory for player: " + xPlayer.getPlayerName(), e); + } + + PlayerInventory inv = xPlayer.getPlayer().getInventory(); + StringBuilder sbItems = new StringBuilder(); + StringBuilder sbAmount = new StringBuilder(); + StringBuilder sbDurability = new StringBuilder(); + + for (ItemStack item : inv.getContents()) { + int itemid = 0; + int amount = 0; + short durability = 0; + + if (item != null) { + itemid = item.getTypeId(); + amount = item.getAmount(); + durability = item.getDurability(); + } + + sbItems.append(itemid + ","); + sbAmount.append(amount + ","); + sbDurability.append(durability + ","); + } + + for (ItemStack item : inv.getArmorContents()) { + int itemid = 0; + int amount = 0; + short durability = 0; + + if (item != null) { + itemid = item.getTypeId(); + amount = item.getAmount(); + durability = item.getDurability(); + } + + sbItems.append(itemid + ","); + sbAmount.append(amount + ","); + sbDurability.append(durability + ","); + } + + sbItems.deleteCharAt(sbItems.lastIndexOf(",")); + sbAmount.deleteCharAt(sbAmount.lastIndexOf(",")); + sbDurability.deleteCharAt(sbDurability.lastIndexOf(",")); + + try { + prepStmt = connection.prepareStatement( + "INSERT INTO `" + xAuthSettings.tblInventory + "`" + + " VALUES" + + "(?, ?, ?, ?)" + ); + prepStmt.setString(1, xPlayer.getPlayerName()); + prepStmt.setString(2, sbItems.toString()); + prepStmt.setString(3, sbAmount.toString()); + prepStmt.setString(4, sbDurability.toString()); + prepStmt.executeUpdate(); + } catch (SQLException e) { + xAuthLog.severe("Could not insert inventory for player: " + xPlayer.getPlayerName(), e); + } + } + + public ItemStack[] getInventory(xAuthPlayer xPlayer) { + try { + prepStmt = connection.prepareStatement( + "SELECT *" + + " FROM `" + xAuthSettings.tblInventory + "`" + + " WHERE `playername` = ?" + ); + prepStmt.setString(1, xPlayer.getPlayerName()); + rs = prepStmt.executeQuery(); + + if (rs.next()) { + int[] itemid = Util.stringToInt(rs.getString("itemid").split(",")); + int[] amount = Util.stringToInt(rs.getString("amount").split(",")); + int[] durability = Util.stringToInt(rs.getString("durability").split(",")); + ItemStack[] inv = new ItemStack[itemid.length]; + + for (int i = 0; i < inv.length; i++) + inv[i] = new ItemStack(itemid[i], amount[i], (short)durability[i]); + + return inv; + } + } catch (SQLException e) { + xAuthLog.severe("Could not load inventory for player: " + xPlayer.getPlayerName(), e); + } + + return null; + } + + public void deleteInventory(xAuthPlayer xPlayer) { + try { + prepStmt = connection.prepareStatement( + "DELETE FROM `" + xAuthSettings.tblInventory + "`" + + " WHERE `playername` = ?" + ); + prepStmt.setString(1, xPlayer.getPlayerName()); + prepStmt.executeUpdate(); + } catch (SQLException e) { + xAuthLog.severe("Could not delete inventory for player: " + xPlayer.getPlayerName(), e); + } + } + + public xAuthPlayer getPlayer(String playerName) { String lowPlayerName = playerName.toLowerCase(); if (playerCache.containsKey(lowPlayerName)) @@ -167,6 +295,20 @@ public class DataManager { return xPlayer; } + public xAuthPlayer getPlayerJoin(String playerName) { + String lowPlayerName = playerName.toLowerCase(); + + if (playerCache.containsKey(lowPlayerName)) + return reloadPlayer(playerCache.get(lowPlayerName)); + + xAuthPlayer xPlayer = getPlayerFromDb(playerName); + if (xPlayer == null) + xPlayer = new xAuthPlayer(playerName); + + playerCache.put(lowPlayerName, xPlayer); + return xPlayer; + } + public xAuthPlayer getPlayerFromDb(String playerName) { xAuthPlayer xPlayer = null; @@ -190,6 +332,29 @@ public class DataManager { return xPlayer; } + public xAuthPlayer reloadPlayer(xAuthPlayer xPlayer) { + try { + prepStmt = connection.prepareStatement( + "SELECT a.*, s.*" + + " FROM `" + xAuthSettings.tblAccount + "` a" + + " LEFT JOIN `" + xAuthSettings.tblSession + "` s" + + " ON a.id = s.accountid" + + " WHERE `playername` = ?" + ); + prepStmt.setString(1, xPlayer.getPlayerName()); + rs = prepStmt.executeQuery(); + + if (rs.next()) { + xPlayer.setAccount(buildAccount(rs)); + xPlayer.setSession(buildSession(rs)); + } + } catch (SQLException e) { + xAuthLog.severe("Could not reload player: " + xPlayer.getPlayerName(), e); + } + + return xPlayer; + } + public int getActive(String playerName) { try { prepStmt = connection.prepareStatement( diff --git a/src/main/java/com/cypherx/xauth/listeners/xAuthBlockListener.java b/src/main/java/com/cypherx/xauth/listeners/xAuthBlockListener.java index a537ede..474ba5c 100644 --- a/src/main/java/com/cypherx/xauth/listeners/xAuthBlockListener.java +++ b/src/main/java/com/cypherx/xauth/listeners/xAuthBlockListener.java @@ -26,7 +26,7 @@ public class xAuthBlockListener extends BlockListener { if (event.isCancelled()) return; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(event.getPlayer().getName()); //if (!xAuthSettings.rstrBreak && !xPlayer.isRegistered()) //return; @@ -43,7 +43,7 @@ public class xAuthBlockListener extends BlockListener { if (event.isCancelled()) return; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(event.getPlayer().getName()); //if (!xAuthSettings.rstrPlace && !xPlayer.isRegistered()) //return; diff --git a/src/main/java/com/cypherx/xauth/listeners/xAuthEntityListener.java b/src/main/java/com/cypherx/xauth/listeners/xAuthEntityListener.java index bd0f1a8..a6c9332 100644 --- a/src/main/java/com/cypherx/xauth/listeners/xAuthEntityListener.java +++ b/src/main/java/com/cypherx/xauth/listeners/xAuthEntityListener.java @@ -31,7 +31,7 @@ public class xAuthEntityListener extends EntityListener { Entity entity = event.getEntity(); if (entity instanceof Player && ((Player)entity).isOnline()) { // player taking damage - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(((Player)entity).getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(((Player)entity).getName()); //if (!xAuthSettings.rstrDmgTaken && !xPlayer.isRegistered()) //return; @@ -46,7 +46,7 @@ public class xAuthEntityListener extends EntityListener { Entity damager = edbeEvent.getDamager(); if (damager instanceof Player) { - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(((Player)damager).getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(((Player)damager).getName()); //if (!xAuthSettings.rstrDmgGiven && !xPlayer.isRegistered()) //return; @@ -67,7 +67,7 @@ public class xAuthEntityListener extends EntityListener { Entity target = event.getTarget(); if (target instanceof Player) { - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(((Player)target).getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(((Player)target).getName()); //if (!xAuthSettings.rstrMobTarget && !xPlayer.isRegistered()) //return; diff --git a/src/main/java/com/cypherx/xauth/listeners/xAuthPlayerListener.java b/src/main/java/com/cypherx/xauth/listeners/xAuthPlayerListener.java index 4925ee8..9f987af 100644 --- a/src/main/java/com/cypherx/xauth/listeners/xAuthPlayerListener.java +++ b/src/main/java/com/cypherx/xauth/listeners/xAuthPlayerListener.java @@ -1,6 +1,5 @@ package com.cypherx.xauth.listeners; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -55,7 +54,7 @@ public class xAuthPlayerListener extends PlayerListener { public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayerJoin(player.getName()); boolean isRegistered = xPlayer.isRegistered(); if (!xPlayer.isAuthenticated() && (isRegistered || (!isRegistered && xPlayer.mustRegister()))) { @@ -89,7 +88,7 @@ public class xAuthPlayerListener extends PlayerListener { public void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(player.getName()); if (xPlayer.isGuest()) plugin.removeGuest(xPlayer); @@ -104,7 +103,7 @@ public class xAuthPlayerListener extends PlayerListener { if (event.isCancelled()) return; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(event.getPlayer().getName()); //if (!xAuthSettings.rstrChat && !xPlayer.isRegistered()) //return; @@ -121,21 +120,22 @@ public class xAuthPlayerListener extends PlayerListener { if (event.isCancelled()) return; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(event.getPlayer().getName()); //if (!xAuthSettings.rstrCommands && !xPlayer.isRegistered()) //return; if (xPlayer.isGuest()) { - String command = event.getMessage().split(" ")[0]; + String command = event.getMessage().split(" ")[0].replaceFirst("/", ""); - if (!command.equals("/register") && !command.equals("/login") && !command.equals("/l")) { - if (xPlayer.canNotify()) - xPlayer.sendIllegalActionNotice(); + if (xAuthSettings.allowedCmds.contains(command)) + return; - event.setMessage("/"); - event.setCancelled(true); - } + if (xPlayer.canNotify()) + xPlayer.sendIllegalActionNotice(); + + event.setMessage("/"); + event.setCancelled(true); } } @@ -143,7 +143,7 @@ public class xAuthPlayerListener extends PlayerListener { if (event.isCancelled()) return; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(event.getPlayer().getName()); //if (!xAuthSettings.rstrInteract && !xPlayer.isRegistered()) //return; @@ -154,7 +154,6 @@ public class xAuthPlayerListener extends PlayerListener { if (action == Action.LEFT_CLICK_BLOCK) { if (type == Material.NOTE_BLOCK - //|| type == Material.TNT || type == Material.WOODEN_DOOR || type == Material.LEVER || type == Material.IRON_DOOR @@ -189,10 +188,6 @@ public class xAuthPlayerListener extends PlayerListener { event.setCancelled(true); } } - - /*xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); - if (xPlayer.isGuest()) - event.setCancelled(true);*/ } public void onPlayerMove(PlayerMoveEvent event) { @@ -200,21 +195,22 @@ public class xAuthPlayerListener extends PlayerListener { return; Player player = event.getPlayer(); - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(player.getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(player.getName()); //if (!xAuthSettings.rstrMovement && !xPlayer.isRegistered()) //return; if (xPlayer.isGuest()) { - Location loc = plugin.getLocationToTeleport(player.getWorld()); - player.teleport(loc); - event.setFrom(loc); - event.setTo(loc); + //Location loc = plugin.getLocationToTeleport(player.getWorld()); + //player.teleport(loc); + + //event.setFrom(loc); + event.setTo(plugin.getLocationToTeleport(player.getWorld())); if (xPlayer.canNotify()) xPlayer.sendIllegalActionNotice(); - event.setCancelled(true); + //event.setCancelled(true); } } @@ -222,7 +218,7 @@ public class xAuthPlayerListener extends PlayerListener { if (event.isCancelled()) return; - xAuthPlayer xPlayer = plugin.getDataManager().getPlayerByName(event.getPlayer().getName()); + xAuthPlayer xPlayer = plugin.getDataManager().getPlayer(event.getPlayer().getName()); //if (!xAuthSettings.rstrPickup && !xPlayer.isRegistered()) //return; diff --git a/src/main/java/com/cypherx/xauth/xAuth.java b/src/main/java/com/cypherx/xauth/xAuth.java index bfb30dd..d31b3e5 100644 --- a/src/main/java/com/cypherx/xauth/xAuth.java +++ b/src/main/java/com/cypherx/xauth/xAuth.java @@ -29,7 +29,7 @@ public class xAuth extends JavaPlugin { Player[] players = getServer().getOnlinePlayers(); if (players.length > 0) { for (Player player : players) { - xAuthPlayer xPlayer = dataManager.getPlayerByName(player.getName()); + xAuthPlayer xPlayer = dataManager.getPlayer(player.getName()); if (xPlayer.isGuest()) removeGuest(xPlayer); } @@ -52,7 +52,8 @@ public class xAuth extends JavaPlugin { xAuthSettings.setup(dataFolder); xAuthMessages.setup(dataFolder); - if (xAuthSettings.autoDisable && Util.getOnlineMode()) { + // Util.getOnlineMode() -> getServer().getOnlineMode() + if (xAuthSettings.autoDisable && getServer().getOnlineMode()) { xAuthLog.warning("Disabling - Server is running in online-mode"); getServer().getPluginManager().disablePlugin(this); return; @@ -125,7 +126,7 @@ public class xAuth extends JavaPlugin { private void handleReload(Player[] players) { for (Player player : players) { - xAuthPlayer xPlayer = dataManager.getPlayerByName(player.getName()); + xAuthPlayer xPlayer = dataManager.getPlayerJoin(player.getName()); boolean isRegistered = xPlayer.isRegistered(); if (!xPlayer.isAuthenticated() && (isRegistered || (!isRegistered && xPlayer.mustRegister()))) { @@ -167,8 +168,9 @@ public class xAuth extends JavaPlugin { Player player = xPlayer.getPlayer(); PlayerInventory playerInv = player.getInventory(); - xPlayer.setInventory(playerInv.getContents()); - xPlayer.setArmor(playerInv.getArmorContents()); + dataManager.insertInventory(xPlayer); + //xPlayer.setInventory(playerInv.getContents()); + //xPlayer.setArmor(playerInv.getArmorContents()); playerInv.clear(); playerInv.setHelmet(null); playerInv.setChestplate(null); @@ -179,15 +181,41 @@ public class xAuth extends JavaPlugin { if (player.getHealth() > 0) xPlayer.setLocation(player.getLocation()); - Location loc = getLocationToTeleport(player.getWorld()); - player.teleport(loc); + player.teleport(getLocationToTeleport(player.getWorld())); } public void restore(xAuthPlayer xPlayer) { Player player = xPlayer.getPlayer(); PlayerInventory playerInv = player.getInventory(); - ItemStack[] inv = xPlayer.getInventory(); + ItemStack[] inv = dataManager.getInventory(xPlayer); + ItemStack[] items = new ItemStack[inv.length - 4]; + ItemStack[] armor = new ItemStack[4]; + + for (int i = 0; i < inv.length - 4; i++) + items[i] = inv[i]; + + //Backpack fix + if (playerInv.getSize() > items.length) { + ItemStack[] newItems = new ItemStack[playerInv.getSize()]; + + for(int i = 0; i < items.length; i++) + newItems[i] = items[i]; + + items = newItems; + } + //end Backpack fix + + armor[0] = inv[inv.length - 4]; + armor[1] = inv[inv.length - 3]; + armor[2] = inv[inv.length - 2]; + armor[3] = inv[inv.length - 1]; + + playerInv.setContents(items); + playerInv.setArmorContents(armor); + dataManager.deleteInventory(xPlayer); + + /*ItemStack[] inv = xPlayer.getInventory(); //Backpack fix if (playerInv.getSize() > inv.length) { ItemStack[] newInv = new ItemStack[playerInv.getSize()]; @@ -200,7 +228,7 @@ public class xAuth extends JavaPlugin { //end Backpack fix playerInv.setContents(inv); - playerInv.setArmorContents(xPlayer.getArmor()); + playerInv.setArmorContents(xPlayer.getArmor());*/ if (xPlayer.getLocation() != null) xPlayer.getPlayer().teleport(xPlayer.getLocation()); diff --git a/src/main/java/com/cypherx/xauth/xAuthMessages.java b/src/main/java/com/cypherx/xauth/xAuthMessages.java index 9ed08f0..59ecfa7 100644 --- a/src/main/java/com/cypherx/xauth/xAuthMessages.java +++ b/src/main/java/com/cypherx/xauth/xAuthMessages.java @@ -106,7 +106,7 @@ public class xAuthMessages { regUsage = getString("register.usage", regUsage); regSuccess = getString("register.success", regSuccess); - regErrDisabled = getString("register.error.disable", regErrDisabled); + regErrDisabled = getString("register.error.disabled", regErrDisabled); regErrRegistered = getString("register.error.registered", regErrRegistered); regErrMultiple = getString("register.error.multiple", regErrMultiple); regErrPassword = getString("register.error.password", regErrPassword); diff --git a/src/main/java/com/cypherx/xauth/xAuthPlayer.java b/src/main/java/com/cypherx/xauth/xAuthPlayer.java index ec81ce9..5096182 100644 --- a/src/main/java/com/cypherx/xauth/xAuthPlayer.java +++ b/src/main/java/com/cypherx/xauth/xAuthPlayer.java @@ -5,7 +5,7 @@ import java.sql.Timestamp; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; +//import org.bukkit.inventory.ItemStack; public class xAuthPlayer { private String playerName; @@ -13,8 +13,8 @@ public class xAuthPlayer { private Session session; private boolean guest = false; private Location location; - private ItemStack[] inventory; - private ItemStack[] armor; + //private ItemStack[] inventory; + //private ItemStack[] armor; private Timestamp lastNotifyTime; private int strikes = 0; private int timeoutTaskId; @@ -127,7 +127,7 @@ public class xAuthPlayer { return location; } - public void setInventory(ItemStack[] inventory) { + /*public void setInventory(ItemStack[] inventory) { this.inventory = inventory; } @@ -141,7 +141,7 @@ public class xAuthPlayer { public ItemStack[] getArmor() { return armor; - } + }*/ public void setLastNotifyTime(Timestamp lastNotifyTime) { this.lastNotifyTime = lastNotifyTime; diff --git a/src/main/java/com/cypherx/xauth/xAuthSettings.java b/src/main/java/com/cypherx/xauth/xAuthSettings.java index 0fb70d0..3a42eec 100644 --- a/src/main/java/com/cypherx/xauth/xAuthSettings.java +++ b/src/main/java/com/cypherx/xauth/xAuthSettings.java @@ -1,6 +1,8 @@ package com.cypherx.xauth; import java.io.File; +import java.util.Arrays; +import java.util.List; import org.bukkit.util.config.Configuration; @@ -24,6 +26,7 @@ public class xAuthSettings { public static String tblSession = "sessions"; public static String tblStrike = "strike_bans"; public static String tblLocation = "tele_locations"; + public static String tblInventory = "inventory"; /*public static String colAccId = "id"; public static String colAccPlayerName = "playername"; public static String colAccPassword = "password"; @@ -58,6 +61,7 @@ public class xAuthSettings { // guest public static int guestTimeout = 300; public static int notifyCooldown = 5; + public static List allowedCmds = Arrays.asList(new String[]{"register", "login", "l"}); // session public static int sessionLength = 3600; @@ -84,7 +88,7 @@ public class xAuthSettings { /* * REMEMBER TO CHANGE VERSION AFTER MODIFYING DEFAULT SETTINGS */ - public static int version = 1; + public static int version = 2; public static void setup(File dataFolder) { file = new File(dataFolder, "config.yml"); @@ -114,6 +118,7 @@ public class xAuthSettings { tblSession = getString("mysql.tables.session", tblSession); tblStrike = getString("mysql.tables.strike", tblStrike); tblLocation = getString("mysql.tables.location", tblLocation); + tblInventory = getString("mysql.tables.inventory", tblInventory); /*colAccId = getString("mysql.columns.account.id", colAccId); colAccPlayerName = getString("mysql.columns.account.playername", colAccPlayerName); colAccPassword = getString("mysql.columns.account.password", colAccPassword); @@ -144,6 +149,7 @@ public class xAuthSettings { guestTimeout = getInt("guest.timeout", guestTimeout); notifyCooldown = getInt("guest.notify-cooldown", notifyCooldown); + allowedCmds = getStrList("guest.allowed-commands", allowedCmds); sessionLength = getInt("session.length", sessionLength); verifyIp = getBool("session.verifyip", verifyIp); @@ -177,6 +183,10 @@ public class xAuthSettings { return config.getBoolean(key, def); } + private static List getStrList(String key, List def) { + return config.getStringList(key, def); + } + private static void update() { if (version > getInt("version", version)) { xAuthLog.info("Updating file: config.yml"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1654920..43866cc 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -29,6 +29,7 @@ mysql: session: [tblSession] strike: [tblStrike] location: [tblLocation] + inventory: [tblInventory] registration: # Enable/disable new registrations @@ -74,6 +75,8 @@ guest: timeout: [guestTimeout] # Amount of time, in seconds, between "You must be logged in.." messages notify-cooldown: [notifyCooldown] + # Commands that players who are not registered or logged in may execute + allowed-commands: [allowedCmds] session: # Amount of time, in seconds, that a session will remain valid diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c83b971..f088a8a 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: 2.0b2 +version: 2.0b3 description: Offline-Mode Security Suite author: CypherX commands: