Add support for multiple bungeecords (Fixes #19)

This commit is contained in:
games647
2016-05-28 17:21:08 +02:00
parent 3e844be65d
commit cb876a52bd
24 changed files with 187 additions and 217 deletions
@@ -2,9 +2,12 @@ package com.github.games647.fastlogin.bungee;
import com.github.games647.fastlogin.bungee.FastLoginBungee;
import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
import com.github.games647.fastlogin.core.LoginSession;
import com.github.games647.fastlogin.core.PlayerProfile;
import java.util.UUID;
import java.util.logging.Level;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.event.PreLoginEvent;
@@ -21,15 +24,18 @@ public class AsyncPremiumCheck implements Runnable {
@Override
public void run() {
PendingConnection connection = preLoginEvent.getConnection();
plugin.getSession().remove(connection);
String username = connection.getName();
try {
PlayerProfile playerProfile = plugin.getCore().getStorage().getProfile(username, true);
if (playerProfile != null) {
if (playerProfile.isPremium()) {
if (playerProfile.getUserId() != -1) {
PlayerProfile profile = plugin.getCore().getStorage().loadProfile(username);
if (profile != null) {
if (profile.isPremium()) {
if (profile.getUserId() != -1) {
plugin.getSession().put(connection, new LoginSession(username, true, profile));
connection.setOnlineMode(true);
}
} else if (playerProfile.getUserId() == -1) {
} else if (profile.getUserId() == -1) {
//user not exists in the db
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
if (plugin.getConfiguration().getBoolean("autoRegister")
@@ -38,7 +44,7 @@ public class AsyncPremiumCheck implements Runnable {
if (premiumUUID != null) {
plugin.getLogger().log(Level.FINER, "Player {0} uses a premium username", username);
connection.setOnlineMode(true);
plugin.getPendingAutoRegister().put(connection, new Object());
plugin.getSession().put(connection, new LoginSession(username, false, profile));
}
}
}
@@ -1,14 +1,10 @@
package com.github.games647.fastlogin.bungee;
import com.github.games647.fastlogin.core.FastLoginCore;
import com.github.games647.fastlogin.core.PlayerProfile;
import com.google.common.cache.CacheBuilder;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.io.File;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import net.md_5.bungee.api.scheduler.GroupedThreadFactory;
@@ -31,15 +27,6 @@ public class BungeeCore extends FastLoginCore {
return plugin.getLogger();
}
@Override
public ConcurrentMap<String, PlayerProfile> buildCache() {
return CacheBuilder
.newBuilder()
.concurrencyLevel(20)
.expireAfterAccess(30, TimeUnit.MINUTES)
.<String, PlayerProfile>build().asMap();
}
@Override
public ThreadFactory getThreadFactory() {
String pluginName = plugin.getDescription().getName();
@@ -5,6 +5,7 @@ import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
import com.github.games647.fastlogin.bungee.listener.PlayerConnectionListener;
import com.github.games647.fastlogin.bungee.listener.PluginMessageListener;
import com.github.games647.fastlogin.core.FastLoginCore;
import com.github.games647.fastlogin.core.LoginSession;
import com.google.common.cache.CacheBuilder;
import java.io.File;
@@ -41,6 +42,11 @@ public class FastLoginBungee extends Plugin {
.expireAfterWrite(1, TimeUnit.MINUTES)
.<PendingConnection, Object>build().asMap();
private final ConcurrentMap<PendingConnection, LoginSession> session = CacheBuilder
.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)
.<PendingConnection, LoginSession>build().asMap();
@Override
public void onEnable() {
loginCore.setMojangApiConnector(new MojangApiBungee(loginCore));
@@ -112,8 +118,8 @@ public class FastLoginBungee extends Plugin {
return configuration;
}
public ConcurrentMap<PendingConnection, Object> getPendingAutoRegister() {
return pendingAutoRegister;
public ConcurrentMap<PendingConnection, LoginSession> getSession() {
return session;
}
/**
@@ -1,11 +1,13 @@
package com.github.games647.fastlogin.bungee;
import com.github.games647.fastlogin.core.PlayerProfile;
import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
import com.github.games647.fastlogin.core.LoginSession;
import com.github.games647.fastlogin.core.PlayerProfile;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import java.util.UUID;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
@@ -24,17 +26,19 @@ public class ForceLoginTask implements Runnable {
@Override
public void run() {
PlayerProfile playerProfile = plugin.getCore().getStorage().getProfile(player.getName(), false);
PendingConnection pendingConnection = player.getPendingConnection();
LoginSession session = plugin.getSession().remove(pendingConnection);
PlayerProfile playerProfile = session.getProfile();
//force login only on success
if (player.getPendingConnection().isOnlineMode()) {
boolean autoRegister = plugin.getPendingAutoRegister().remove(player.getPendingConnection()) != null;
if (pendingConnection.isOnlineMode()) {
boolean autoRegister = session.needsRegistration();
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
if (authPlugin == null) {
sendBukkitLoginNotification(autoRegister);
} else if (player.isConnected()) {
if (autoRegister) {
if (session.needsRegistration()) {
String password = plugin.generateStringPassword();
if (authPlugin.forceRegister(player, password)) {
sendBukkitLoginNotification(autoRegister);
@@ -14,7 +14,8 @@ public class AsyncStatusMessage implements Runnable {
private final String targetPlayer;
private final boolean toPremium;
public AsyncStatusMessage(FastLoginBungee plugin, ProxiedPlayer fromPlayer, String targetPlayer, boolean toPremium) {
public AsyncStatusMessage(FastLoginBungee plugin, ProxiedPlayer fromPlayer, String targetPlayer
, boolean toPremium) {
this.plugin = plugin;
this.fromPlayer = fromPlayer;
this.targetPlayer = targetPlayer;
@@ -31,7 +32,7 @@ public class AsyncStatusMessage implements Runnable {
}
private void turnOffPremium() {
PlayerProfile playerProfile = plugin.getCore().getStorage().getProfile(targetPlayer, true);
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(targetPlayer);
if (!playerProfile.isPremium()) {
if (fromPlayer.isConnected()) {
TextComponent textComponent = new TextComponent("You are not in the premium list");
@@ -51,7 +52,7 @@ public class AsyncStatusMessage implements Runnable {
}
private void activatePremium() {
PlayerProfile playerProfile = plugin.getCore().getStorage().getProfile(targetPlayer, true);
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(targetPlayer);
if (playerProfile.isPremium()) {
if (fromPlayer.isConnected()) {
TextComponent textComponent = new TextComponent("You are already on the premium list");
@@ -63,7 +64,6 @@ public class AsyncStatusMessage implements Runnable {
}
playerProfile.setPremium(true);
//todo: set uuid
plugin.getCore().getStorage().save(playerProfile);
TextComponent textComponent = new TextComponent("Added to the list of premium players");
textComponent.setColor(ChatColor.DARK_GREEN);
@@ -3,6 +3,7 @@ package com.github.games647.fastlogin.bungee.listener;
import com.github.games647.fastlogin.bungee.AsyncPremiumCheck;
import com.github.games647.fastlogin.bungee.FastLoginBungee;
import com.github.games647.fastlogin.bungee.ForceLoginTask;
import com.github.games647.fastlogin.core.LoginSession;
import com.github.games647.fastlogin.core.PlayerProfile;
import com.google.common.base.Charsets;
@@ -51,7 +52,8 @@ public class PlayerConnectionListener implements Listener {
PendingConnection connection = player.getPendingConnection();
String username = connection.getName();
if (connection.isOnlineMode()) {
PlayerProfile playerProfile = plugin.getCore().getStorage().getProfile(player.getName(), false);
LoginSession session = plugin.getSession().get(connection);
PlayerProfile playerProfile = session.getProfile();
playerProfile.setUuid(player.getUniqueId());
//bungeecord will do this automatically so override it on disabled option
@@ -57,7 +57,7 @@ public class PluginMessageListener implements Listener {
if (fromPlayer.getPendingConnection().isOnlineMode()) {
//bukkit module successfully received and force logged in the user
//update only on success to prevent corrupt data
PlayerProfile playerProfile = plugin.getCore().getStorage().getProfile(fromPlayer.getName(), false);
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(fromPlayer.getName());
playerProfile.setPremium(true);
//we override this in the loginevent
plugin.getCore().getStorage().save(playerProfile);