diff --git a/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java b/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java index 148773fc..e4aca33f 100644 --- a/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java +++ b/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java @@ -3,6 +3,9 @@ package fr.xephi.authme.hooks; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteStreams; import fr.xephi.authme.AuthMe; +import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.cache.auth.PlayerCache; + import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; @@ -43,6 +46,30 @@ public class BungeeCordMessage implements PluginMessageListener { // Put the IP (only the ip not the port) in the hashMap plugin.realIp.put(player.getName().toLowerCase(), ip); } + if (subChannel.equals("Forward")) + { + String str = in.readUTF(); + if (!str.startsWith("AuthMe")) + return; + String[] args = str.split(";"); + try { + String name = args[2]; + PlayerAuth auth = plugin.database.getAuth(name); + if (auth == null) + return; + if (args[1].equalsIgnoreCase("login")) + { + PlayerCache.getInstance().addPlayer(auth); + plugin.database.setLogged(name); + } + else if (args[1].equalsIgnoreCase("logout")) + { + PlayerCache.getInstance().removePlayer(name); + plugin.database.setUnlogged(name); + } + } catch (Exception e) + {} + } } } diff --git a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java index 96f65ddc..0c9ffd7c 100644 --- a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java @@ -14,6 +14,10 @@ import fr.xephi.authme.listener.AuthMePlayerListener; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils.GroupType; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -113,6 +117,21 @@ public class ProcessSyncronousPlayerLogin implements Runnable { } } + protected void sendBungeeMessage() { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + try { + String str = "AuthMe;login;" + name; + out.writeUTF("Forward"); + out.writeUTF("ALL"); + out.writeUTF("AuthMe"); + out.writeShort(str.length()); + out.writeUTF(str); + player.sendPluginMessage(plugin, "BungeeCord", b.toByteArray()); + } catch (Exception e) + {} + } + /** * Method run. * @@ -186,7 +205,8 @@ public class ProcessSyncronousPlayerLogin implements Runnable { // The Login event now fires (as intended) after everything is processed Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); player.saveData(); - + if (Settings.bungee) + sendBungeeMessage(); // Login is finish, display welcome message if (Settings.useWelcomeMessage) if (Settings.broadcastWelcomeMessage) { diff --git a/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java b/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java index 6b4b9c0e..9d37320a 100644 --- a/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java +++ b/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java @@ -9,6 +9,10 @@ import fr.xephi.authme.output.Messages; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.task.MessageTask; import fr.xephi.authme.task.TimeoutTask; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; + import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; @@ -38,6 +42,21 @@ public class ProcessSyncronousPlayerLogout implements Runnable { this.name = player.getName().toLowerCase(); } + protected void sendBungeeMessage() { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + try { + String str = "AuthMe;login;" + name; + out.writeUTF("Forward"); + out.writeUTF("ALL"); + out.writeUTF("AuthMe"); + out.writeShort(str.length()); + out.writeUTF(str); + player.sendPluginMessage(plugin, "BungeeCord", b.toByteArray()); + } catch (Exception e) + {} + } + /** * Method run. * @@ -76,6 +95,8 @@ public class ProcessSyncronousPlayerLogout implements Runnable { } // Player is now logout... Time to fire event ! Bukkit.getServer().getPluginManager().callEvent(new LogoutEvent(player)); + if (Settings.bungee) + sendBungeeMessage(); m.send(player, MessageKey.LOGOUT_SUCCESS); ConsoleLogger.info(player.getName() + " logged out"); }