diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java index f11794c7..dcb6c9f4 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java @@ -29,6 +29,7 @@ import com.github.games647.craftapi.UUIDAdapter; import com.github.games647.fastlogin.bungee.BungeeLoginSession; import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.bungee.task.AsyncPremiumCheck; +import com.github.games647.fastlogin.bungee.task.FloodgateAuthTask; import com.github.games647.fastlogin.bungee.task.ForceLoginTask; import com.github.games647.fastlogin.core.RateLimiter; import com.github.games647.fastlogin.core.StoredProfile; @@ -55,6 +56,8 @@ import net.md_5.bungee.connection.LoginResult.Property; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; +import org.geysermc.floodgate.api.FloodgateApi; +import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -181,6 +184,15 @@ public class ConnectListener implements Listener { ProxiedPlayer player = serverConnectedEvent.getPlayer(); Server server = serverConnectedEvent.getServer(); + if (plugin.isPluginInstalled("floodgate")) { + FloodgatePlayer floodgatePlayer = FloodgateApi.getInstance().getPlayer(player.getUniqueId()); + if (floodgatePlayer != null) { + Runnable floodgateAuthTask = new FloodgateAuthTask(plugin.getCore(), player, floodgatePlayer, server); + plugin.getScheduler().runAsync(floodgateAuthTask); + return; + } + } + BungeeLoginSession session = plugin.getSession().get(player.getPendingConnection()); if (session == null) { return; diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java new file mode 100644 index 00000000..2612f7d6 --- /dev/null +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java @@ -0,0 +1,88 @@ +/* + * SPDX-License-Identifier: MIT + * + * The MIT License (MIT) + * + * Copyright (c) 2015-2021 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.games647.fastlogin.bungee.task; + +import java.net.InetSocketAddress; +import java.util.UUID; + +import org.geysermc.floodgate.api.player.FloodgatePlayer; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.connection.Server; + +import com.github.games647.fastlogin.bungee.BungeeLoginSession; +import com.github.games647.fastlogin.bungee.FastLoginBungee; +import com.github.games647.fastlogin.core.shared.FastLoginCore; +import com.github.games647.fastlogin.core.shared.FloodgateManagement; + +public class FloodgateAuthTask + extends FloodgateManagement { + + private final Server server; + + public FloodgateAuthTask(FastLoginCore core, ProxiedPlayer player, + FloodgatePlayer floodgatePlayer, Server server) { + super(core, player, floodgatePlayer); + this.server = server; + } + + @Override + public void run() { + super.run(); + + if (!performLogin) { + return; + } + + BungeeLoginSession session = new BungeeLoginSession(player.getName(), isRegistered, profile); + + // enable auto login based on the value of 'autoLoginFloodgate' in config.yml + boolean forcedOnlineMode = autoLoginFloodgate.equals("true") + || (autoLoginFloodgate.equals("linked") && isLinked); + + // run login task + Runnable forceLoginTask = new ForceLoginTask(core.getPlugin().getCore(), player, server, session, + forcedOnlineMode); + core.getPlugin().getScheduler().runAsync(forceLoginTask); + } + + @Override + protected String getName(ProxiedPlayer player) { + return player.getName(); + } + + @Override + protected UUID getUUID(ProxiedPlayer player) { + return player.getUniqueId(); + } + + @Override + protected InetSocketAddress getAddress(ProxiedPlayer player) { + return player.getAddress(); + } + +} diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/ForceLoginTask.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/ForceLoginTask.java index 0a7f862c..092cc0c1 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/ForceLoginTask.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/ForceLoginTask.java @@ -49,11 +49,21 @@ public class ForceLoginTask private final Server server; + //treat player as if they had a premium account, even when they don't + //used for Floodgate auto login/register + private final boolean forcedOnlineMode; + public ForceLoginTask(FastLoginCore core, - ProxiedPlayer player, Server server, BungeeLoginSession session) { + ProxiedPlayer player, Server server, BungeeLoginSession session, boolean forcedOnlineMode) { super(core, player, session); this.server = server; + this.forcedOnlineMode = forcedOnlineMode; + } + + public ForceLoginTask(FastLoginCore core, ProxiedPlayer player, + Server server, BungeeLoginSession session) { + this(core, player, server, session, false); } @Override @@ -116,6 +126,6 @@ public class ForceLoginTask @Override public boolean isOnlineMode() { - return player.getPendingConnection().isOnlineMode(); + return forcedOnlineMode || player.getPendingConnection().isOnlineMode(); } }