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 net.kyori.adventure.text.format.TextColor;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.entity.Player;
|
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 class AdminMarker extends Appliance {
|
||||||
public TextColor getPlayerColor(Player player) {
|
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.AQUA.asRGB()); // TODO read permission from config
|
||||||
return TextColor.color(Color.WHITE.asRGB());
|
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 net.kyori.adventure.text.format.TextColor;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
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) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
event.joinMessage(null);
|
event.joinMessage(null);
|
||||||
IteratorUtil.onlinePlayers(player -> {
|
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.Main;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
|
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.afkTag.AfkTag;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.sleepTag.SleepTag;
|
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.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -74,10 +71,4 @@ public class DisplayName extends Appliance {
|
|||||||
Main.instance().getLogger().log(Level.SEVERE, e, e::getMessage);
|
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;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
|
||||||
public class DisplayNameUpdateListener extends ApplianceListener<DisplayName> {
|
public class DisplayNameUpdateListener extends ApplianceListener<DisplayName> {
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onJoin(PlayerJoinEvent event) {
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
this.getAppliance().update(event.getPlayer());
|
this.getAppliance().update(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
@ -38,9 +38,9 @@ public class Outlawed extends Appliance implements DisplayName.Prefixed {
|
|||||||
if(!player.isOnline()) return;
|
if(!player.isOnline()) return;
|
||||||
if(status != Status.FORCED) return;
|
if(status != Status.FORCED) return;
|
||||||
try {
|
try {
|
||||||
this.queryAppliance(Whitelist.class).integrityCheck(player);
|
this.queryAppliance(Whitelist.class).fullIntegrityCheck(player);
|
||||||
} catch(DisconnectInfo.Throwable e) {
|
} catch(DisconnectInfo.Throwable e) {
|
||||||
Bukkit.getScheduler().runTask(Main.instance(), () -> e.getDisconnectScreen().applyKick(player));
|
e.getDisconnectScreen().applyKick(player);
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
20 * 60,
|
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.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.PlayerLoginEvent;
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
|
||||||
public class PlayerJoinListener extends ApplianceListener<Whitelist> {
|
public class PlayerJoinListener extends ApplianceListener<Whitelist> {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void preLoginEvent(PlayerLoginEvent preLoginEvent) {
|
public void preLoginEvent(AsyncPlayerPreLoginEvent event) {
|
||||||
try {
|
try {
|
||||||
this.getAppliance().integrityCheck(preLoginEvent.getPlayer());
|
this.getAppliance().integrityCheck(event.getUniqueId(), event.getName());
|
||||||
} catch(DisconnectInfo.Throwable e) {
|
} catch(DisconnectInfo.Throwable e) {
|
||||||
preLoginEvent.disallow(
|
event.disallow(
|
||||||
PlayerLoginEvent.Result.KICK_WHITELIST,
|
AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST,
|
||||||
e.getDisconnectScreen().getComponent()
|
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.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class Whitelist extends Appliance {
|
public class Whitelist extends Appliance {
|
||||||
|
private final HashMap<UUID, WhitelistRepository.UserData> userData = new HashMap<>();
|
||||||
public Whitelist() {
|
public Whitelist() {
|
||||||
super("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 {
|
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);
|
boolean overrideCheck = this.localConfig().getBoolean("overrideIntegrityCheck", false);
|
||||||
WhitelistRepository.UserData user = overrideCheck
|
WhitelistRepository.UserData user = overrideCheck
|
||||||
? new WhitelistRepository.UserData(player.getUniqueId(), player.getName(), "", "", 0L, 0L)
|
? new WhitelistRepository.UserData(uuid, name, "", "", 0L, 0L)
|
||||||
: this.fetchUserData(player.getUniqueId());
|
: this.fetchUserData(uuid);
|
||||||
|
|
||||||
|
this.userData.put(uuid, user);
|
||||||
Main.logger().info(String.format("got userdata %s", user.toString()));
|
Main.logger().info(String.format("got userdata %s", user.toString()));
|
||||||
|
|
||||||
if(this.timestampRelevant(user.banned_until())) {
|
if(this.timestampRelevant(user.banned_until())) {
|
||||||
@ -50,24 +84,9 @@ public class Whitelist extends Appliance {
|
|||||||
"Du wurdest vom Server gebannt.",
|
"Du wurdest vom Server gebannt.",
|
||||||
String.format("Dein Bann läuft am %s um %s ab!", dateFormat.format(bannedDate), timeFormat.format(bannedDate)),
|
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.",
|
"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) {
|
} catch(DisconnectInfo.Throwable e) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
@ -76,7 +95,7 @@ public class Whitelist extends Appliance {
|
|||||||
"Interner Serverfehler",
|
"Interner Serverfehler",
|
||||||
"Deine Anmeldedaten konnten nicht abgerufen/ überprüft werden.",
|
"Deine Anmeldedaten konnten nicht abgerufen/ überprüft werden.",
|
||||||
"Versuche es später erneut oder kontaktiere einen Admin!",
|
"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);
|
Player player = Bukkit.getPlayer(user.user);
|
||||||
if(player != null) {
|
if(player != null) {
|
||||||
try {
|
try {
|
||||||
this.integrityCheck(player);
|
this.fullIntegrityCheck(player);
|
||||||
} catch(DisconnectInfo.Throwable e) {
|
} catch(DisconnectInfo.Throwable e) {
|
||||||
e.getDisconnectScreen().applyKick(player);
|
e.getDisconnectScreen().applyKick(player);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user