Move Floodgate name conflict check to Core

This commit is contained in:
Smart123s committed 2021-06-12 19:57:31 +02:00
1 parent 0e8ad6e318
commit ee2b3a37f8
7 files changed
+106 -83

No files matched your search

@@ -31,8 +31,11 @@ import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import com.github.games647.fastlogin.core.shared.event.FastLoginPreLoginEvent;
import java.io.IOException;
import java.util.Optional;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import net.md_5.bungee.config.Configuration;
public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
@@ -52,6 +55,13 @@ public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
return;
}
//check if the player is connecting through Floodgate
FloodgatePlayer floodgatePlayer = getFloodgatePlayer(username);
if (floodgatePlayer != null) {
checkFloodgateNameConflict(username, source, floodgatePlayer);
return;
}
callFastLoginPreLoginEvent(username, source, profile);
Configuration config = core.getConfig();
@@ -131,6 +141,60 @@ public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
return false;
}
/**
* Check if the player's name conflicts an existing Java player's name, and
* kick them if it does
*
* @param core the FastLoginCore
* @param username the name of the player
* @param source an instance of LoginSource
*/
public void checkFloodgateNameConflict(String username, LoginSource source, FloodgatePlayer floodgatePlayer) {
String allowConflict = core.getConfig().get("allowFloodgateNameConflict").toString().toLowerCase();
// check if the Bedrock player is linked to a Java account
boolean isLinked = floodgatePlayer.getLinkedPlayer() != null;
if (allowConflict.equals("false")
|| allowConflict.equals("linked") && !isLinked) {
// check for conflicting Premium Java name
Optional<Profile> premiumUUID = Optional.empty();
try {
premiumUUID = core.getResolver().findProfile(username);
} catch (IOException | RateLimitException e) {
core.getPlugin().getLog().error(
"Could not check wether Floodgate Player {}'s name conflicts a premium Java player's name.",
username);
try {
source.kick("Could not check if your name conflicts an existing Java Premium Player's name");
} catch (Exception e1) {
core.getPlugin().getLog().error("Could not kick Player {}", username);
}
}
if (premiumUUID.isPresent()) {
core.getPlugin().getLog().info("Bedrock Player {}'s name conflicts an existing Java Premium Player's name",
username);
try {
source.kick("Your name conflicts an existing Java Premium Player's name");
} catch (Exception e) {
core.getPlugin().getLog().error("Could not kick Player {}", username);
}
}
} else {
core.getPlugin().getLog().info("Skipping name conflict checking for player {}", username);
}
}
/**
* Check if a player is connecting through Floodgate
* @param id UUID for BungeeCord, username for Bukkit
* @return true if the player is connecting through Floodgate
* <br> null if Floodgate is unavailable
*/
protected abstract FloodgatePlayer getFloodgatePlayer(Object id);
public abstract FastLoginPreLoginEvent callFastLoginPreLoginEvent(String username, S source, StoredProfile profile);
public abstract void requestPremiumLogin(S source, StoredProfile profile, String username, boolean registered);