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.util.text.DisconnectInfo;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent;
public class PlayerJoinListener extends ApplianceListener<Whitelist> {
@EventHandler
public void preLoginEvent(AsyncPlayerPreLoginEvent preLoginEvent) {
public void preLoginEvent(PlayerLoginEvent preLoginEvent) {
try {
getAppliance().login(preLoginEvent);
} catch (DisconnectInfo.Throwable e) {
preLoginEvent.disallow(
AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST,
PlayerLoginEvent.Result.KICK_WHITELIST,
e.getDisconnectScreen().getComponent()
);
}

View File

@ -2,10 +2,11 @@ package eu.mhsl.craftattack.spawn.appliances.whitelist;
import com.google.gson.Gson;
import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.util.server.Floodgate;
import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo;
import org.apache.http.client.utils.URIBuilder;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
@ -27,16 +28,23 @@ public class Whitelist extends Appliance {
super("whitelist");
}
public void login(AsyncPlayerPreLoginEvent login) throws DisconnectInfo.Throwable {
public void login(PlayerLoginEvent login) throws DisconnectInfo.Throwable {
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(
"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!",
login.getUniqueId()
login.getPlayer().getUniqueId()
);
} catch (DisconnectInfo.Throwable e) {
@ -46,7 +54,7 @@ public class Whitelist extends Appliance {
"Interner Serverfehler",
"Deine Zugangsdaten konnten nicht abgerufen werden.",
"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());
}
public static FloodgatePlayer getBedrockPlayer(Player p) {
return instance.getPlayer(p.getUniqueId());
}
public static void runBedrockOnly(Player p, Consumer<FloodgatePlayer> callback) {
if(isBedrock(p)) callback.accept(instance.getPlayer(p.getUniqueId()));
}