Add floodgate service to Bungee

This commit is contained in:
games647
2021-10-05 15:39:01 +02:00
parent a3bf875976
commit 28480a0f01
9 changed files with 30 additions and 11 deletions

View File

@ -53,6 +53,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.geysermc.floodgate.api.FloodgateApi;
import org.slf4j.Logger; import org.slf4j.Logger;
/** /**
@ -146,7 +147,7 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
private boolean initializeFloodgate() { private boolean initializeFloodgate() {
if (getServer().getPluginManager().getPlugin("Floodgate") != null) { if (getServer().getPluginManager().getPlugin("Floodgate") != null) {
floodgateService = new FloodgateService(core); floodgateService = new FloodgateService(FloodgateApi.getInstance(), core);
} }
// Check Floodgate config values // Check Floodgate config values

View File

@ -54,7 +54,7 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
public NameCheckTask(FastLoginBukkit plugin, Random random, Player player, PacketEvent packetEvent, public NameCheckTask(FastLoginBukkit plugin, Random random, Player player, PacketEvent packetEvent,
String username, PublicKey publicKey) { String username, PublicKey publicKey) {
super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getCore().getFloodgateService()); super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getFloodgateService());
this.plugin = plugin; this.plugin = plugin;
this.packetEvent = packetEvent; this.packetEvent = packetEvent;

View File

@ -53,7 +53,7 @@ public class ProtocolSupportListener extends JoinManagement<Player, CommandSende
private final RateLimiter rateLimiter; private final RateLimiter rateLimiter;
public ProtocolSupportListener(FastLoginBukkit plugin, RateLimiter rateLimiter) { public ProtocolSupportListener(FastLoginBukkit plugin, RateLimiter rateLimiter) {
super(plugin.getCore(), plugin.getCore().getAuthPluginHook()); super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getFloodgateService());
this.plugin = plugin; this.plugin = plugin;
this.rateLimiter = rateLimiter; this.rateLimiter = rateLimiter;

View File

@ -33,6 +33,7 @@ import com.github.games647.fastlogin.bungee.listener.PluginMessageListener;
import com.github.games647.fastlogin.core.AsyncScheduler; import com.github.games647.fastlogin.core.AsyncScheduler;
import com.github.games647.fastlogin.core.CommonUtil; import com.github.games647.fastlogin.core.CommonUtil;
import com.github.games647.fastlogin.core.hooks.AuthPlugin; import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import com.github.games647.fastlogin.core.hooks.FloodgateService;
import com.github.games647.fastlogin.core.message.ChangePremiumMessage; import com.github.games647.fastlogin.core.message.ChangePremiumMessage;
import com.github.games647.fastlogin.core.message.ChannelMessage; import com.github.games647.fastlogin.core.message.ChannelMessage;
import com.github.games647.fastlogin.core.message.NamespaceKey; import com.github.games647.fastlogin.core.message.NamespaceKey;
@ -59,6 +60,7 @@ import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.api.plugin.PluginManager; import net.md_5.bungee.api.plugin.PluginManager;
import net.md_5.bungee.api.scheduler.GroupedThreadFactory; import net.md_5.bungee.api.scheduler.GroupedThreadFactory;
import org.geysermc.floodgate.api.FloodgateApi;
import org.slf4j.Logger; import org.slf4j.Logger;
/** /**
@ -70,6 +72,7 @@ public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSen
private FastLoginCore<ProxiedPlayer, CommandSender, FastLoginBungee> core; private FastLoginCore<ProxiedPlayer, CommandSender, FastLoginBungee> core;
private AsyncScheduler scheduler; private AsyncScheduler scheduler;
private FloodgateService floodgateService;
private Logger logger; private Logger logger;
@Override @Override
@ -83,6 +86,10 @@ public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSen
return; return;
} }
if (isPluginInstalled("Floodgate")) {
floodgateService = new FloodgateService(FloodgateApi.getInstance(), core);
}
//events //events
PluginManager pluginManager = getProxy().getPluginManager(); PluginManager pluginManager = getProxy().getPluginManager();
@ -185,4 +192,9 @@ public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSen
public boolean isPluginInstalled(String name) { public boolean isPluginInstalled(String name) {
return getProxy().getPluginManager().getPlugin(name) != null; return getProxy().getPluginManager().getPlugin(name) != null;
} }
@Override
public FloodgateService getFloodgateService() {
return floodgateService;
}
} }

View File

@ -49,7 +49,7 @@ public class AsyncPremiumCheck extends JoinManagement<ProxiedPlayer, CommandSend
public AsyncPremiumCheck(FastLoginBungee plugin, PreLoginEvent preLoginEvent, PendingConnection connection, public AsyncPremiumCheck(FastLoginBungee plugin, PreLoginEvent preLoginEvent, PendingConnection connection,
String username) { String username) {
super(plugin.getCore(), plugin.getCore().getAuthPluginHook()); super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getFloodgateService());
this.plugin = plugin; this.plugin = plugin;
this.preLoginEvent = preLoginEvent; this.preLoginEvent = preLoginEvent;

View File

@ -41,9 +41,11 @@ import org.geysermc.floodgate.api.player.FloodgatePlayer;
public class FloodgateService { public class FloodgateService {
private final FloodgateApi floodgate;
private final FastLoginCore<?, ?, ?> core; private final FastLoginCore<?, ?, ?> core;
public FloodgateService(FastLoginCore<?, ?, ?> core) { public FloodgateService(FloodgateApi floodgate, FastLoginCore<?, ?, ?> core) {
this.floodgate = floodgate;
this.core = core; this.core = core;
} }
@ -84,10 +86,11 @@ public class FloodgateService {
* @param username the name of the player * @param username the name of the player
* @param source an instance of LoginSource * @param source an instance of LoginSource
*/ */
public void checkFloodgateNameConflict(String username, LoginSource source, FloodgatePlayer floodgatePlayer) { public void checkNameConflict(String username, LoginSource source) {
String allowConflict = core.getConfig().get("allowFloodgateNameConflict").toString().toLowerCase(); String allowConflict = core.getConfig().get("allowFloodgateNameConflict").toString().toLowerCase();
// check if the Bedrock player is linked to a Java account // check if the Bedrock player is linked to a Java account
FloodgatePlayer floodgatePlayer = getFloodgatePlayer(username);
boolean isLinked = floodgatePlayer.getLinkedPlayer() != null; boolean isLinked = floodgatePlayer.getLinkedPlayer() != null;
if ("false".equals(allowConflict) if ("false".equals(allowConflict)
@ -151,6 +154,5 @@ public class FloodgateService {
public boolean isFloodgateConnection(String username) { public boolean isFloodgateConnection(String username) {
return getFloodgatePlayer(username) != null; return getFloodgatePlayer(username) != null;
} }
} }

View File

@ -36,8 +36,6 @@ import java.util.Optional;
import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.Configuration;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
public abstract class JoinManagement<P extends C, C, S extends LoginSource> { public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
protected final FastLoginCore<P, C, ?> core; protected final FastLoginCore<P, C, ?> core;
@ -60,7 +58,7 @@ public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
//check if the player is connecting through Floodgate //check if the player is connecting through Floodgate
if (floodgateService != null) { if (floodgateService != null) {
if (floodgateService.isFloodgateConnection(username)) { if (floodgateService.isFloodgateConnection(username)) {
floodgateService.checkFloodgateNameConflict(username, source, floodgatePlayer); floodgateService.checkNameConflict(username, source);
// skip flow for any floodgate player // skip flow for any floodgate player
return; return;
} }

View File

@ -26,6 +26,7 @@
package com.github.games647.fastlogin.velocity; package com.github.games647.fastlogin.velocity;
import com.github.games647.fastlogin.core.AsyncScheduler; import com.github.games647.fastlogin.core.AsyncScheduler;
import com.github.games647.fastlogin.core.hooks.FloodgateService;
import com.github.games647.fastlogin.core.message.ChangePremiumMessage; import com.github.games647.fastlogin.core.message.ChangePremiumMessage;
import com.github.games647.fastlogin.core.message.ChannelMessage; import com.github.games647.fastlogin.core.message.ChannelMessage;
import com.github.games647.fastlogin.core.message.SuccessMessage; import com.github.games647.fastlogin.core.message.SuccessMessage;
@ -138,6 +139,11 @@ public class FastLoginVelocity implements PlatformPlugin<CommandSource> {
return server.getPluginManager().isLoaded(name); return server.getPluginManager().isLoaded(name);
} }
@Override
public FloodgateService getFloodgateService() {
return null;
}
public FastLoginCore<Player, CommandSource, FastLoginVelocity> getCore() { public FastLoginCore<Player, CommandSource, FastLoginVelocity> getCore() {
return core; return core;
} }

View File

@ -50,7 +50,7 @@ public class AsyncPremiumCheck extends JoinManagement<Player, CommandSource, Vel
private final InboundConnection connection; private final InboundConnection connection;
public AsyncPremiumCheck(FastLoginVelocity plugin, InboundConnection connection, String username, Continuation continuation, PreLoginEvent preLoginEvent) { public AsyncPremiumCheck(FastLoginVelocity plugin, InboundConnection connection, String username, Continuation continuation, PreLoginEvent preLoginEvent) {
super(plugin.getCore(), plugin.getCore().getAuthPluginHook()); super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getFloodgateService());
this.plugin = plugin; this.plugin = plugin;
this.connection = connection; this.connection = connection;
this.username = username; this.username = username;