diff --git a/lib/BungeeCord.jar b/lib/BungeeCord.jar new file mode 100644 index 00000000..5e7bd18b Binary files /dev/null and b/lib/BungeeCord.jar differ diff --git a/lib/bukkit-1.4.7-R1.0.jar b/lib/bukkit-1.4.7-R1.0.jar deleted file mode 100644 index 1f9725a9..00000000 Binary files a/lib/bukkit-1.4.7-R1.0.jar and /dev/null differ diff --git a/lib/bungeecord-api-1.4.7-20130228.060400-44.jar b/lib/bungeecord-api-1.4.7-20130228.060400-44.jar deleted file mode 100644 index 5e49cf3e..00000000 Binary files a/lib/bungeecord-api-1.4.7-20130228.060400-44.jar and /dev/null differ diff --git a/pom.xml b/pom.xml index 04b9995b..0a40138d 100644 --- a/pom.xml +++ b/pom.xml @@ -28,12 +28,12 @@ - 2.7.11b3 + 2.7.12b1 org.bukkit bukkit - 1.4.7-R1.0 + 1.5-R0.1-SNAPSHOT net.milkbowl.vault @@ -122,9 +122,9 @@ net.md-5 bungeecord-api - 1.4.7-SNAPSHOT + 1.5-SNAPSHOT system - ${project.basedir}/lib/bungeecord-api-1.4.7-20130228.060400-44.jar + ${project.basedir}/lib/BungeeCord.jar com.sun.mail diff --git a/src/main/java/uk/org/whoami/authme/AuthMe.java b/src/main/java/uk/org/whoami/authme/AuthMe.java index 8fa9ad91..24d8400e 100644 --- a/src/main/java/uk/org/whoami/authme/AuthMe.java +++ b/src/main/java/uk/org/whoami/authme/AuthMe.java @@ -95,6 +95,7 @@ public class AuthMe extends JavaPlugin { public API api; public HashMap captcha = new HashMap(); public HashMap cap = new HashMap(); + public HashMap bungeesIp = new HashMap(); public MultiverseCore mv = null; @Override @@ -233,7 +234,11 @@ public class AuthMe extends JavaPlugin { api = new API(this, database); management = new Management(database, this); - + + if (Settings.bungee) { + this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", new BungeeCord(this)); + } PluginManager pm = getServer().getPluginManager(); if (pm.isPluginEnabled("Spout")) { pm.registerEvents(new AuthMeSpoutListener(database), this); diff --git a/src/main/java/uk/org/whoami/authme/BungeeCord.java b/src/main/java/uk/org/whoami/authme/BungeeCord.java new file mode 100644 index 00000000..a23c907d --- /dev/null +++ b/src/main/java/uk/org/whoami/authme/BungeeCord.java @@ -0,0 +1,52 @@ +package uk.org.whoami.authme; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; + +import uk.org.whoami.authme.settings.Settings; + + +public class BungeeCord implements PluginMessageListener { + + public AuthMe plugin; + + public BungeeCord(AuthMe plugin) { + this.plugin = plugin; + } + + @Override + public void onPluginMessageReceived(String channel, Player player, + byte[] message) { + + if (channel.equals("BungeeCord")) { + DataInputStream in = new DataInputStream(new ByteArrayInputStream( + message)); + try { + + String packetType = in.readUTF(); + + if (packetType.equals("IP")) { + + if (player.isOnline()) { + String ip = in.readUTF(); + + if (!Settings.noConsoleSpam) + ConsoleLogger.info( + "Got data from bungeecord: Player " + + player.getName() + + " Logged in with IP :" + ip); + + String name = player.getName(); + plugin.bungeesIp.put(name, ip); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/uk/org/whoami/authme/Management.java b/src/main/java/uk/org/whoami/authme/Management.java index 31f851af..db679062 100644 --- a/src/main/java/uk/org/whoami/authme/Management.java +++ b/src/main/java/uk/org/whoami/authme/Management.java @@ -5,8 +5,6 @@ import java.util.Date; import java.util.List; import me.muizers.Notifications.Notification; -import net.md_5.bungee.api.connection.ConnectedPlayer; -import net.md_5.bungee.api.connection.ProxiedPlayer; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -62,12 +60,14 @@ public class Management { String name = player.getName().toLowerCase(); String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee && player instanceof ProxiedPlayer) { - ProxiedPlayer pPlayer = (ProxiedPlayer) player; - ip = pPlayer.getAddress().getAddress().getHostAddress(); - } else if (Settings.bungee && player instanceof ConnectedPlayer) { - ConnectedPlayer cPlayer = (ConnectedPlayer) player; - ip = cPlayer.getAddress().getAddress().getHostAddress(); + String playerName = player.getName(); + if (Settings.bungee) { + try { + if (plugin.bungeesIp.containsKey(playerName)) + ip = plugin.bungeesIp.get(playerName); + } catch (NoClassDefFoundError ncdfe) { + ConsoleLogger.showError("Your BungeeCord version is outdated"); + } } World world = player.getWorld(); Location spawnLoc = world.getSpawnLocation(); diff --git a/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java b/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java index d7e08a85..0820dd21 100644 --- a/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java @@ -20,8 +20,6 @@ import java.security.NoSuchAlgorithmException; import java.util.Date; import me.muizers.Notifications.Notification; -import net.md_5.bungee.api.connection.ConnectedPlayer; -import net.md_5.bungee.api.connection.ProxiedPlayer; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -78,14 +76,16 @@ public class RegisterCommand implements CommandExecutor { final Player player = (Player) sender; final String name = player.getName().toLowerCase(); + final String playerName = player.getName(); String ipA = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee && player instanceof ProxiedPlayer) { - ProxiedPlayer pPlayer = (ProxiedPlayer) player; - ipA = pPlayer.getAddress().getAddress().getHostAddress(); - } else if (Settings.bungee && player instanceof ConnectedPlayer) { - ConnectedPlayer cPlayer = (ConnectedPlayer) player; - ipA = cPlayer.getAddress().getAddress().getHostAddress(); + if (Settings.bungee) { + try { + if (plugin.bungeesIp.containsKey(playerName)) + ipA = plugin.bungeesIp.get(playerName); + } catch (NoClassDefFoundError ncdfe) { + ConsoleLogger.showError("Your BungeeCord version is outdated"); + } } final String ip = ipA; diff --git a/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java b/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java index 6a64034d..7999bc18 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java @@ -110,7 +110,13 @@ public class MySQLDataSource implements DataSource { + lastlocZ + " smallint(6) DEFAULT '0'," + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - + + rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); + if (!rs.next()) { + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + columnPassword + " VARCHAR(255) NOT NULL;"); + } + rs.close(); rs = con.getMetaData().getColumns(null, null, tableName, columnIp); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " diff --git a/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java b/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java index c7ced642..2abef34f 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java @@ -93,7 +93,13 @@ public class SqliteDataSource implements DataSource { + lastlocZ + " smallint(6) DEFAULT '0'," + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - + + rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); + if (!rs.next()) { + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + columnPassword + " VARCHAR(255) NOT NULL;"); + } + rs.close(); rs = con.getMetaData().getColumns(null, null, tableName, columnIp); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " diff --git a/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java b/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java index 66a5e8a6..4b8796fb 100644 --- a/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java @@ -16,12 +16,12 @@ package uk.org.whoami.authme.listener; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; import java.util.Date; import java.util.HashMap; -import net.md_5.bungee.api.connection.ConnectedPlayer; -import net.md_5.bungee.api.connection.ProxiedPlayer; - import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -664,9 +664,36 @@ public class AuthMePlayerListener implements Listener { Location spawnLoc = world.getSpawnLocation(); gm = player.getGameMode().getValue(); final String name = player.getName().toLowerCase(); + final String playerName = player.getName(); gameMode.put(name, gm); BukkitScheduler sched = plugin.getServer().getScheduler(); final PlayerJoinEvent e = event; + + sched.scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + try { + + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + + try { + out.writeUTF("IP"); + } catch (IOException e) { + // Can never happen + } + + plugin.getServer() + .getPlayerExact(playerName) + .sendPluginMessage(plugin, "BungeeCord", + b.toByteArray()); + + } catch (Exception exception) { + + exception.printStackTrace(); + + } + } + }, 21L); if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { @@ -674,12 +701,13 @@ public class AuthMePlayerListener implements Listener { } String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee && player instanceof ProxiedPlayer) { - ProxiedPlayer pPlayer = (ProxiedPlayer) player; - ip = pPlayer.getAddress().getAddress().getHostAddress(); - } else if (Settings.bungee && player instanceof ConnectedPlayer) { - ConnectedPlayer cPlayer = (ConnectedPlayer) player; - ip = cPlayer.getAddress().getAddress().getHostAddress(); + if (Settings.bungee) { + try { + if (plugin.bungeesIp.containsKey(playerName)) + ip = plugin.bungeesIp.get(playerName); + } catch (NoClassDefFoundError ncdfe) { + ConsoleLogger.showError("Your BungeeCord version is outdated"); + } } if(Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { int gM = gameMode.get(name); @@ -961,10 +989,9 @@ public class AuthMePlayerListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onPlayerInteract(PlayerInteractEvent event) { - if (event.isCancelled() || event.getPlayer() == null) { - return; - } - + if (event.isCancelled() || event.getPlayer() == null) return; + if (event.getClickedBlock() == null) return; + Player player = event.getPlayer(); String name = player.getName().toLowerCase(); @@ -982,11 +1009,16 @@ public class AuthMePlayerListener implements Listener { } } - final int sign = event.getClickedBlock().getTypeId(); - if (sign == Material.SIGN_POST.getId() || sign == Material.WALL_SIGN.getId()) { - event.setUseInteractedBlock(org.bukkit.event.Event.Result.DENY); + try { + final int sign = event.getClickedBlock().getTypeId(); + if (sign == Material.SIGN_POST.getId() || sign == Material.WALL_SIGN.getId()) { + event.setUseInteractedBlock(org.bukkit.event.Event.Result.DENY); + } + } catch (NullPointerException npe) { + } + event.setCancelled(true); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d203ce4b..51e8b41e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ author: darkwarriros,Xephi website: http://www.multiplayer-italia.com/ description: AuthMe prevents people, which aren't logged in, from doing stuff like placing blocks, moving, typing commands or seeing the inventory of the current player. main: uk.org.whoami.authme.AuthMe -version: 2.7.11b3 +version: 2.7.12b1 softdepend: [Vault, ChestShop, Spout, Multiverse-Core, Notifications, Citizens, CombatTag] commands: register: