mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-08-01 03:34:44 +02:00
Differentiate Floodgate players during login
This commit is contained in:
@@ -80,6 +80,38 @@ public abstract class FloodgateManagement<P extends C, C, L extends LoginSession
|
||||
}
|
||||
|
||||
profile = core.getStorage().loadProfile(username);
|
||||
|
||||
if (profile.isSaved()) {
|
||||
if (!profile.isFloodgateMigrated()) {
|
||||
if (isLinked) {
|
||||
profile.setFloodgate(FloodgateState.LINKED);
|
||||
core.getPlugin().getLog().info(
|
||||
"Player {} will be migrated to the v2 database schema as a linked Floodgate user",
|
||||
username);
|
||||
} else {
|
||||
profile.setFloodgate(FloodgateState.TRUE);
|
||||
core.getPlugin().getLog().info(
|
||||
"Player {} will be migrated to the v2 database schema as a Floodgate user", username);
|
||||
}
|
||||
} else if (profile.getFloodgate() == FloodgateState.TRUE && isLinked) {
|
||||
core.getPlugin().getLog()
|
||||
.info("Player {} is already stored by FastLogin as a non-linked Bedrock Edition player",
|
||||
username);
|
||||
return;
|
||||
} else if (profile.getFloodgate() == FloodgateState.FALSE && isLinked) {
|
||||
profile.setFloodgate(FloodgateState.LINKED);
|
||||
core.getPlugin().getLog().info(
|
||||
"Player {} will be changed from a Java player to a linked Floodgate player",
|
||||
username);
|
||||
}
|
||||
} else {
|
||||
if (isLinked) {
|
||||
profile.setFloodgate(FloodgateState.LINKED);
|
||||
} else {
|
||||
profile.setFloodgate(FloodgateState.TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
AuthPlugin<P> authPlugin = core.getAuthPluginHook();
|
||||
|
||||
try {
|
||||
@@ -119,13 +151,17 @@ public abstract class FloodgateManagement<P extends C, C, L extends LoginSession
|
||||
}
|
||||
}
|
||||
|
||||
// defer auto registration, if it's not enabled in the config
|
||||
if (!isRegistered && !isAutoAuthAllowed(autoRegisterFloodgate)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//logging in from bedrock for a second time threw an error with UUID
|
||||
if (profile == null) {
|
||||
profile = new StoredProfile(getUUID(player), username, true, getAddress(player).toString());
|
||||
// stop the auto login procedure, if the current connection's parameters don't match the one stored in our
|
||||
// database
|
||||
// ex. we stored a LINKED account, but the current connection is not linked
|
||||
if ((profile.getFloodgate() == FloodgateState.LINKED && !isLinked)
|
||||
|| (profile.getFloodgate() == FloodgateState.TRUE && isLinked)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//start Bukkit/Bungee specific tasks
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2015-2022 games647 and contributors
|
||||
* Copyright (c) 2015-2023 games647 and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
@@ -49,17 +49,31 @@ public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
|
||||
|
||||
public void onLogin(String username, S source) {
|
||||
core.getPlugin().getLog().info("Handling player {}", username);
|
||||
|
||||
//check if the player is connecting through Bedrock Edition
|
||||
if (bedrockService != null && bedrockService.isBedrockConnection(username)) {
|
||||
//perform Bedrock specific checks
|
||||
if (bedrockService.performChecks(username, source)) {
|
||||
//skip Java checks, since they are not needed
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
StoredProfile profile = core.getStorage().loadProfile(username);
|
||||
|
||||
//can't be a premium Java player, if it's not saved in the database
|
||||
if (profile == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
//check if the player is connecting through Bedrock Edition
|
||||
if (bedrockService != null && bedrockService.isBedrockConnection(username)) {
|
||||
//perform Bedrock specific checks and skip Java checks, if they are not needed
|
||||
if (bedrockService.performChecks(username, source)) {
|
||||
return;
|
||||
}
|
||||
if (!profile.isFloodgateMigrated()) {
|
||||
profile.setFloodgate(FloodgateState.FALSE);
|
||||
core.getPlugin().getLog().info(
|
||||
"Player {} will be migrated to the v2 database schema as a JAVA user", username);
|
||||
} else if (profile.getFloodgate() == FloodgateState.TRUE) {
|
||||
core.getPlugin().getLog().info("Player {} is already stored by FastLogin as a Bedrock Edition player",
|
||||
username);
|
||||
return;
|
||||
}
|
||||
|
||||
callFastLoginPreLoginEvent(username, source, profile);
|
||||
@@ -139,6 +153,12 @@ public abstract class JoinManagement<P extends C, C, S extends LoginSource> {
|
||||
if (core.getConfig().get("nameChangeCheck", false)) {
|
||||
StoredProfile storedProfile = core.getStorage().loadProfile(profile.getId());
|
||||
if (storedProfile != null) {
|
||||
if (storedProfile.getFloodgate() == FloodgateState.TRUE) {
|
||||
core.getPlugin().getLog()
|
||||
.info("Player {} is already stored by FastLogin as a Bedrock Edition player.", username);
|
||||
return false;
|
||||
}
|
||||
|
||||
//uuid exists in the database
|
||||
core.getPlugin().getLog().info("GameProfile {} changed it's username", profile);
|
||||
|
||||
|
@@ -26,7 +26,6 @@
|
||||
package com.github.games647.fastlogin.core.storage;
|
||||
|
||||
import com.github.games647.craftapi.UUIDAdapter;
|
||||
import com.github.games647.fastlogin.core.StoredProfile;
|
||||
import com.github.games647.fastlogin.core.shared.FloodgateState;
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
|
Reference in New Issue
Block a user