async whitelist check
This commit is contained in:
parent
0e3a54a1b9
commit
e36256d5be
@ -4,10 +4,6 @@ import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AdminMarker extends Appliance {
|
||||
public TextColor getPlayerColor(Player player) {
|
||||
@ -15,10 +11,4 @@ public class AdminMarker extends Appliance {
|
||||
return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config
|
||||
return TextColor.color(Color.WHITE.asRGB());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected List<Listener> listeners() {
|
||||
return List.of(new AdminMarkerListener());
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
package eu.mhsl.craftattack.spawn.appliances.adminMarker;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class AdminMarkerListener extends ApplianceListener<AdminMarker> {
|
||||
private TextColor getPlayerColor(Player player) {
|
||||
if(player.hasPermission("chatcolor"))
|
||||
return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config
|
||||
return TextColor.color(Color.WHITE.asRGB());
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@ import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
@ -27,7 +28,7 @@ public class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
||||
);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
event.joinMessage(null);
|
||||
IteratorUtil.onlinePlayers(player -> {
|
||||
|
@ -3,7 +3,6 @@ package eu.mhsl.craftattack.spawn.appliances.displayName;
|
||||
import eu.mhsl.craftattack.spawn.Main;
|
||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
|
||||
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarkerListener;
|
||||
import eu.mhsl.craftattack.spawn.appliances.afkTag.AfkTag;
|
||||
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
||||
import eu.mhsl.craftattack.spawn.appliances.sleepTag.SleepTag;
|
||||
@ -17,8 +16,6 @@ import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
@ -74,10 +71,4 @@ public class DisplayName extends Appliance {
|
||||
Main.instance().getLogger().log(Level.SEVERE, e, e::getMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected List<Listener> listeners() {
|
||||
return List.of(new AdminMarkerListener());
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
public class DisplayNameUpdateListener extends ApplianceListener<DisplayName> {
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void onJoin(PlayerJoinEvent event) {
|
||||
this.getAppliance().update(event.getPlayer());
|
||||
}
|
||||
|
@ -38,9 +38,9 @@ public class Outlawed extends Appliance implements DisplayName.Prefixed {
|
||||
if(!player.isOnline()) return;
|
||||
if(status != Status.FORCED) return;
|
||||
try {
|
||||
this.queryAppliance(Whitelist.class).integrityCheck(player);
|
||||
this.queryAppliance(Whitelist.class).fullIntegrityCheck(player);
|
||||
} catch(DisconnectInfo.Throwable e) {
|
||||
Bukkit.getScheduler().runTask(Main.instance(), () -> e.getDisconnectScreen().applyKick(player));
|
||||
e.getDisconnectScreen().applyKick(player);
|
||||
}
|
||||
}),
|
||||
20 * 60,
|
||||
|
@ -3,18 +3,28 @@ 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.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
public class PlayerJoinListener extends ApplianceListener<Whitelist> {
|
||||
@EventHandler
|
||||
public void preLoginEvent(PlayerLoginEvent preLoginEvent) {
|
||||
public void preLoginEvent(AsyncPlayerPreLoginEvent event) {
|
||||
try {
|
||||
this.getAppliance().integrityCheck(preLoginEvent.getPlayer());
|
||||
this.getAppliance().integrityCheck(event.getUniqueId(), event.getName());
|
||||
} catch(DisconnectInfo.Throwable e) {
|
||||
preLoginEvent.disallow(
|
||||
PlayerLoginEvent.Result.KICK_WHITELIST,
|
||||
event.disallow(
|
||||
AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST,
|
||||
e.getDisconnectScreen().getComponent()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void joinEvent(PlayerJoinEvent event) {
|
||||
try {
|
||||
this.getAppliance().lateIntegrityCheck(event.getPlayer());
|
||||
} catch(DisconnectInfo.Throwable e) {
|
||||
e.getDisconnectScreen().applyKick(event.getPlayer());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,29 +13,63 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class Whitelist extends Appliance {
|
||||
private final HashMap<UUID, WhitelistRepository.UserData> userData = new HashMap<>();
|
||||
public Whitelist() {
|
||||
super("whitelist");
|
||||
}
|
||||
|
||||
public void integrityCheck(Player player) throws DisconnectInfo.Throwable {
|
||||
public void fullIntegrityCheck(Player player) throws DisconnectInfo.Throwable {
|
||||
this.integrityCheck(player.getUniqueId(), player.getName());
|
||||
this.lateIntegrityCheck(player);
|
||||
}
|
||||
|
||||
public void lateIntegrityCheck(Player player) throws DisconnectInfo.Throwable {
|
||||
@Nullable WhitelistRepository.UserData user = this.userData.get(player.getUniqueId());
|
||||
if(user == null) {
|
||||
throw new DisconnectInfo.Throwable(
|
||||
"Nutzerdaten nicht geladen",
|
||||
"Deine Nutzerdaten sind noch nicht bereit!",
|
||||
"warte einige Sekunden und versuche es erneut. Falls es weiterhin nicht funktioniert kontaktiere einen Admin!",
|
||||
player.getUniqueId()
|
||||
);
|
||||
}
|
||||
this.queryAppliance(Outlawed.class).updateForcedStatus(player, this.timestampRelevant(user.outlawed_until()));
|
||||
|
||||
String purePlayerName = Floodgate.isBedrock(player)
|
||||
? Floodgate.getBedrockPlayer(player).getUsername()
|
||||
: player.getName();
|
||||
|
||||
if(!user.username().trim().equalsIgnoreCase(purePlayerName))
|
||||
throw new DisconnectInfo.Throwable(
|
||||
"Nutzername geändert",
|
||||
String.format("Der Name '%s' stimmt nicht mit '%s' überein.", user.username(), player.getName()),
|
||||
"Bitte kontaktiere einen Admin, um Deine Anmeldedaten zu aktualisieren!",
|
||||
player.getUniqueId()
|
||||
);
|
||||
}
|
||||
|
||||
public void integrityCheck(UUID uuid, String name) throws DisconnectInfo.Throwable {
|
||||
try {
|
||||
Main.instance().getLogger().info(String.format("Running integrityCheck for %s", player.getName()));
|
||||
Main.instance().getLogger().info(String.format("Running integrityCheck for %s", name));
|
||||
boolean overrideCheck = this.localConfig().getBoolean("overrideIntegrityCheck", false);
|
||||
WhitelistRepository.UserData user = overrideCheck
|
||||
? new WhitelistRepository.UserData(player.getUniqueId(), player.getName(), "", "", 0L, 0L)
|
||||
: this.fetchUserData(player.getUniqueId());
|
||||
? new WhitelistRepository.UserData(uuid, name, "", "", 0L, 0L)
|
||||
: this.fetchUserData(uuid);
|
||||
|
||||
this.userData.put(uuid, user);
|
||||
Main.logger().info(String.format("got userdata %s", user.toString()));
|
||||
|
||||
if(this.timestampRelevant(user.banned_until())) {
|
||||
@ -50,24 +84,9 @@ public class Whitelist extends Appliance {
|
||||
"Du wurdest vom Server gebannt.",
|
||||
String.format("Dein Bann läuft am %s um %s ab!", dateFormat.format(bannedDate), timeFormat.format(bannedDate)),
|
||||
"Wende dich an einen Admin für weitere Informationen.",
|
||||
player.getUniqueId()
|
||||
uuid
|
||||
);
|
||||
}
|
||||
|
||||
this.queryAppliance(Outlawed.class).updateForcedStatus(player, this.timestampRelevant(user.outlawed_until()));
|
||||
|
||||
String purePlayerName = Floodgate.isBedrock(player)
|
||||
? Floodgate.getBedrockPlayer(player).getUsername()
|
||||
: player.getName();
|
||||
|
||||
if(!user.username().trim().equalsIgnoreCase(purePlayerName))
|
||||
throw new DisconnectInfo.Throwable(
|
||||
"Nutzername geändert",
|
||||
String.format("Der Name '%s' stimmt nicht mit '%s' überein.", user.username(), player.getName()),
|
||||
"Bitte kontaktiere einen Admin, um Deine Anmeldedaten zu aktualisieren!",
|
||||
player.getUniqueId()
|
||||
);
|
||||
|
||||
} catch(DisconnectInfo.Throwable e) {
|
||||
throw e;
|
||||
} catch(Exception e) {
|
||||
@ -76,7 +95,7 @@ public class Whitelist extends Appliance {
|
||||
"Interner Serverfehler",
|
||||
"Deine Anmeldedaten konnten nicht abgerufen/ überprüft werden.",
|
||||
"Versuche es später erneut oder kontaktiere einen Admin!",
|
||||
player.getUniqueId()
|
||||
uuid
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -111,7 +130,7 @@ public class Whitelist extends Appliance {
|
||||
Player player = Bukkit.getPlayer(user.user);
|
||||
if(player != null) {
|
||||
try {
|
||||
this.integrityCheck(player);
|
||||
this.fullIntegrityCheck(player);
|
||||
} catch(DisconnectInfo.Throwable e) {
|
||||
e.getDisconnectScreen().applyKick(player);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user