/* * 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 com.github.games647.fastlogin.bungee.BungeeLoginSession; import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.bungee.event.BungeeFastLoginAutoLoginEvent; import com.github.games647.fastlogin.core.StoredProfile; import com.github.games647.fastlogin.core.message.ChannelMessage; import com.github.games647.fastlogin.core.message.LoginActionMessage; import com.github.games647.fastlogin.core.message.LoginActionMessage.Type; import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.shared.ForceLoginManagement; import com.github.games647.fastlogin.core.shared.LoginSession; import com.github.games647.fastlogin.core.shared.event.FastLoginAutoLoginEvent; import java.util.UUID; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.Server; public class ForceLoginTask extends ForceLoginManagement { 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, 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 public void run() { if (session == null) { return; } super.run(); if (!isOnlineMode()) { session.setAlreadySaved(true); } } @Override public boolean forceLogin(ProxiedPlayer player) { if (session.isAlreadyLogged()) { return true; } session.setAlreadyLogged(true); return super.forceLogin(player); } @Override public FastLoginAutoLoginEvent callFastLoginAutoLoginEvent(LoginSession session, StoredProfile profile) { return core.getPlugin().getProxy().getPluginManager() .callEvent(new BungeeFastLoginAutoLoginEvent(session, profile)); } @Override public boolean forceRegister(ProxiedPlayer player) { return session.isAlreadyLogged() || super.forceRegister(player); } @Override public void onForceActionSuccess(LoginSession session) { //sub channel name Type type = Type.LOGIN; if (session.needsRegistration()) { type = Type.REGISTER; } UUID proxyId = UUID.fromString(ProxyServer.getInstance().getConfig().getUuid()); ChannelMessage loginMessage = new LoginActionMessage(type, player.getName(), proxyId); core.getPlugin().sendPluginMessage(server, loginMessage); } @Override public String getName(ProxiedPlayer player) { return player.getName(); } @Override public boolean isOnline(ProxiedPlayer player) { return player.isConnected(); } @Override public boolean isOnlineMode() { return forcedOnlineMode || player.getPendingConnection().isOnlineMode(); } }