Fixed bedrock players not passing whitelist correctly

This commit is contained in:
Elias Müller 2023-12-10 15:46:44 +01:00
parent 41152d7864
commit f1e917ab7c
3 changed files with 22 additions and 10 deletions

View File

@ -3,16 +3,16 @@ package eu.mhsl.craftattack.spawn.appliances.whitelist;
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerLoginEvent;
public class PlayerJoinListener extends ApplianceListener<Whitelist> { public class PlayerJoinListener extends ApplianceListener<Whitelist> {
@EventHandler @EventHandler
public void preLoginEvent(AsyncPlayerPreLoginEvent preLoginEvent) { public void preLoginEvent(PlayerLoginEvent preLoginEvent) {
try { try {
getAppliance().login(preLoginEvent); getAppliance().login(preLoginEvent);
} catch (DisconnectInfo.Throwable e) { } catch (DisconnectInfo.Throwable e) {
preLoginEvent.disallow( preLoginEvent.disallow(
AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, PlayerLoginEvent.Result.KICK_WHITELIST,
e.getDisconnectScreen().getComponent() e.getDisconnectScreen().getComponent()
); );
} }

View File

@ -2,10 +2,11 @@ package eu.mhsl.craftattack.spawn.appliances.whitelist;
import com.google.gson.Gson; import com.google.gson.Gson;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.util.server.Floodgate;
import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo;
import org.apache.http.client.utils.URIBuilder; import org.apache.http.client.utils.URIBuilder;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerLoginEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.IOException; import java.io.IOException;
@ -27,16 +28,23 @@ public class Whitelist extends Appliance {
super("whitelist"); super("whitelist");
} }
public void login(AsyncPlayerPreLoginEvent login) throws DisconnectInfo.Throwable { public void login(PlayerLoginEvent login) throws DisconnectInfo.Throwable {
try { try {
UserData data = this.fetchUserData(login.getUniqueId()); UserData data = this.fetchUserData(login.getPlayer().getUniqueId());
if(!data.username.equalsIgnoreCase(login.getName())) String purePlayerName;
if(Floodgate.isBedrock(login.getPlayer())) {
purePlayerName = Floodgate.getBedrockPlayer(login.getPlayer()).getUsername();
} else {
purePlayerName = login.getPlayer().getName();
}
if(!data.username.equalsIgnoreCase(purePlayerName))
throw new DisconnectInfo.Throwable( throw new DisconnectInfo.Throwable(
"Nutzername geändert", "Nutzername geändert",
String.format("Der Name '%s' stimmt nicht mit '%s' überein.", data.username, login.getName()), String.format("Der Name '%s' stimmt nicht mit '%s' überein.", data.username, login.getPlayer().getName()),
"Bitte kontaktiere einen Admin, um Deine Anmeldedaten zu aktualisieren!", "Bitte kontaktiere einen Admin, um Deine Anmeldedaten zu aktualisieren!",
login.getUniqueId() login.getPlayer().getUniqueId()
); );
} catch (DisconnectInfo.Throwable e) { } catch (DisconnectInfo.Throwable e) {
@ -46,7 +54,7 @@ public class Whitelist extends Appliance {
"Interner Serverfehler", "Interner Serverfehler",
"Deine Zugangsdaten konnten nicht abgerufen werden.", "Deine Zugangsdaten konnten nicht abgerufen werden.",
"Versuche es später erneut oder kontaktiere einen Admin!", "Versuche es später erneut oder kontaktiere einen Admin!",
login.getUniqueId() login.getPlayer().getUniqueId()
); );
} }
} }

View File

@ -12,6 +12,10 @@ public class Floodgate {
return instance.isFloodgatePlayer(p.getUniqueId()); return instance.isFloodgatePlayer(p.getUniqueId());
} }
public static FloodgatePlayer getBedrockPlayer(Player p) {
return instance.getPlayer(p.getUniqueId());
}
public static void runBedrockOnly(Player p, Consumer<FloodgatePlayer> callback) { public static void runBedrockOnly(Player p, Consumer<FloodgatePlayer> callback) {
if(isBedrock(p)) callback.accept(instance.getPlayer(p.getUniqueId())); if(isBedrock(p)) callback.accept(instance.getPlayer(p.getUniqueId()));
} }