From 0ce69f207f48a6b794b535e3c07a56abdc33083c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 22 Jun 2025 10:59:38 +0200 Subject: [PATCH] fixed bugs in strike handling --- .../metaGameplay/strike/Strike.java | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/strike/Strike.java b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/strike/Strike.java index f0c0bf1..ece4f0b 100644 --- a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/strike/Strike.java +++ b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/strike/Strike.java @@ -6,6 +6,7 @@ import eu.mhsl.craftattack.spawn.core.appliance.Appliance; import eu.mhsl.craftattack.spawn.core.util.IteratorUtil; import eu.mhsl.craftattack.spawn.varo.appliances.metaGameplay.teams.Teams; import eu.mhsl.craftattack.spawn.varo.appliances.metaGameplay.teams.VaroTeam; +import io.papermc.paper.ban.BanListType; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentBuilder; import net.kyori.adventure.text.TextComponent; @@ -18,10 +19,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; public class Strike extends Appliance { @@ -37,16 +35,22 @@ public class Strike extends Appliance { public void leakCoordinates() { } + record StrikeInfo(List users, int totalWeight) { + } @Override public void httpApi(HttpServer.ApiBuilder apiBuilder) { - record StrikeInfo(List users, int totalWeight) { - } apiBuilder.post("update", StrikeInfo.class, (data, request) -> { Main.instance().getLogger().info(String.format( "API Triggered Strike-Profile update for %s", data.users.stream().map(UUID::toString).collect(Collectors.joining(", "))) ); + this.processUpdate(data); + return HttpServer.nothing; + }); + } + private void processUpdate(StrikeInfo data) { + try { VaroTeam select = null; for(UUID uuid : data.users) { select = this.queryAppliance(Teams.class).getTeamFromPlayer(uuid); @@ -56,6 +60,11 @@ public class Strike extends Appliance { VaroTeam team = select; switch(data.totalWeight) { + case 0 -> team.members.forEach(member -> { + Main.logger().info(String.format("Unbanning player %s because there are now 0 Strikes!", member.player.getName())); + Bukkit.getBanList(BanListType.PROFILE).pardon(member.player.getPlayerProfile()); + }); + case 1 -> { Main.logger().info(String.format("Cord leak for Team %s", team.name)); ComponentBuilder text = Component.text() @@ -96,11 +105,20 @@ public class Strike extends Appliance { () -> InvClear.add(member.player.getUniqueId()) ); }); - case 3 -> team.members.forEach(member -> member.player.banPlayer("projektausschluss")); - } - return HttpServer.nothing; - }); + case 3 -> { + team.members.forEach(member -> { + Main.logger().info(String.format("Banning player %s because of third Strike!", member.player.getName())); + Bukkit.getBanList(BanListType.PROFILE) + .addBan(member.player.getPlayerProfile(), "projektausschluiss", (Date) null, null); + }); + team.getOnlinePlayers().forEach(Player::kick); + } + } + } catch(Exception e) { + Main.logger().warning("Failed to process Strikes: " + e.getMessage()); + Main.logger().throwing("Strike", "process", e); + } } public void checkJoin(@NotNull Player player) {