From 5e3db1e78c33fe5d0ed1029ec8993a035341cd3c Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 23 Dec 2025 23:40:58 +0100 Subject: [PATCH 1/3] fixed event commands, removed infinite saturation, added player join check --- .../event/command/EventOpenSessionCommand.java | 4 ++-- .../listeners/DeathrunPlayerDamageListener.java | 6 ------ .../eventController/EventController.java | 11 +++++++++-- .../eventController/EventPlayerLoginListener.java | 15 +++++++++++++++ 4 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/command/EventOpenSessionCommand.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/command/EventOpenSessionCommand.java index 1bf11fe..1b9d8c4 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/command/EventOpenSessionCommand.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/command/EventOpenSessionCommand.java @@ -19,10 +19,10 @@ public class EventOpenSessionCommand extends ApplianceCommand { @Override protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { - if(args.length == 1) { + if(args.length == 0) { this.getAppliance().openEvent(Event.EventType.SMALL); } else { - this.getAppliance().openEvent(Event.EventType.valueOf(args[1])); + this.getAppliance().openEvent(Event.EventType.valueOf(args[0])); } sender.sendMessage(Component.text("Event-Server gestartet!", NamedTextColor.GREEN)); } diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/listeners/DeathrunPlayerDamageListener.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/listeners/DeathrunPlayerDamageListener.java index 2a98a42..c45e4f4 100644 --- a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/listeners/DeathrunPlayerDamageListener.java +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/listeners/DeathrunPlayerDamageListener.java @@ -6,7 +6,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; public class DeathrunPlayerDamageListener extends ApplianceListener { @EventHandler @@ -23,9 +22,4 @@ public class DeathrunPlayerDamageListener extends ApplianceListener { if(!(event.getEntity() instanceof Player)) return; event.setCancelled(true); } - - @EventHandler - public void onHunger(FoodLevelChangeEvent event) { - if(!this.getAppliance().isBeforeStart()) event.setCancelled(true); - } } diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java index a043079..818e2dc 100644 --- a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java @@ -81,6 +81,10 @@ public class EventController extends Appliance { this.selectedEvent = null; } + public boolean hasLoadedEvent() { + return this.selectedEvent != null; + } + public void scheduleStart(long durationMinutes) { if(this.selectedEvent == null) throw new ApplianceCommand.Error("There is no event selected!"); this.durationMinutes = durationMinutes; @@ -88,7 +92,7 @@ public class EventController extends Appliance { } public void cancelStart() { - this.countdown.cancel(); + if(this.countdown.isRunning()) this.countdown.cancel(); } private Component format(Countdown.AnnouncementData data) { @@ -154,7 +158,10 @@ public class EventController extends Appliance { Bukkit.getScheduler().runTaskLater( Main.instance(), - () -> Bukkit.getOnlinePlayers().forEach(player -> PluginMessage.connect(player, "craftattack")), + () -> { + Bukkit.getOnlinePlayers().forEach(player -> PluginMessage.connect(player, "craftattack")); + this.unloadEvent(); + }, Ticks.TICKS_PER_SECOND * 7 ); } diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java new file mode 100644 index 0000000..15bb354 --- /dev/null +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java @@ -0,0 +1,15 @@ +package eu.mhsl.craftattack.spawn.event.appliances.eventController; + +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import net.kyori.adventure.text.Component; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + +public class EventPlayerLoginListener extends ApplianceListener { + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + if(event.getPlayer().hasPermission("admin")) return; + if(this.getAppliance().hasLoadedEvent()) return; + event.getPlayer().kick(Component.text("Es ist kein Event geladen.")); + } +} -- 2.30.2 From fc502e3da8d81b76398a18ccc59823a5efc6ff4b Mon Sep 17 00:00:00 2001 From: lars Date: Wed, 24 Dec 2025 00:16:22 +0100 Subject: [PATCH 2/3] fixed player join when no event is loaded --- .../spawn/event/appliances/deathrun/Deathrun.java | 2 +- .../appliances/eventController/EventController.java | 10 +++++++++- .../eventController/EventPlayerLoginListener.java | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/Deathrun.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/Deathrun.java index 74d782e..9bfd80c 100644 --- a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/Deathrun.java +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/deathrun/Deathrun.java @@ -127,7 +127,7 @@ public class Deathrun extends Appliance implements Event, Scorable { public void stop() { this.getScoreboardBuilder().stopAutomaticUpdates(); Title title = Title.title(Component.text("Ende!"), Component.empty()); - this.pvpTask.cancel(); + if(this.pvpTask != null) this.pvpTask.cancel(); this.pvpDisabled = true; Bukkit.getOnlinePlayers().forEach(player -> { player.showTitle(title); diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java index 818e2dc..bdc8206 100644 --- a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventController.java @@ -18,6 +18,7 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.GameRule; import org.bukkit.Statistic; +import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -86,7 +87,7 @@ public class EventController extends Appliance { } public void scheduleStart(long durationMinutes) { - if(this.selectedEvent == null) throw new ApplianceCommand.Error("There is no event selected!"); + if(!this.hasLoadedEvent()) throw new ApplianceCommand.Error("There is no event selected!"); this.durationMinutes = durationMinutes; this.countdown.start(); } @@ -188,6 +189,13 @@ public class EventController extends Appliance { return String.format("%02d:%02d:%02d", seconds / 3600, (seconds / 60) % 60, seconds % 60); } + @Override + protected @NotNull List listeners() { + return List.of( + new EventPlayerLoginListener() + ); + } + @Override protected @NotNull List> commands() { return List.of( diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java index 15bb354..8f88700 100644 --- a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/EventPlayerLoginListener.java @@ -8,7 +8,7 @@ import org.bukkit.event.player.PlayerJoinEvent; public class EventPlayerLoginListener extends ApplianceListener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - if(event.getPlayer().hasPermission("admin")) return; + if(event.getPlayer().isOp()) return; if(this.getAppliance().hasLoadedEvent()) return; event.getPlayer().kick(Component.text("Es ist kein Event geladen.")); } -- 2.30.2 From 2ca97c88fcc32b2fee563d3e9d9497e3b0e74a62 Mon Sep 17 00:00:00 2001 From: lars Date: Wed, 24 Dec 2025 00:49:50 +0100 Subject: [PATCH 3/3] made score staying the highest ever reached --- .../scoreboard/EventScoreboardBuilder.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/scoreboard/EventScoreboardBuilder.java b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/scoreboard/EventScoreboardBuilder.java index 7cb2965..d130ef4 100644 --- a/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/scoreboard/EventScoreboardBuilder.java +++ b/event/src/main/java/eu/mhsl/craftattack/spawn/event/appliances/eventController/scoreboard/EventScoreboardBuilder.java @@ -53,9 +53,6 @@ public class EventScoreboardBuilder { objective.numberFormat(NumberFormat.blank()); UUID uuid = p.getUniqueId(); - scoreList.removeIf(e -> e.playerUuid().equals(uuid)); - scoreList.add(new EventScoreEntry(uuid, p.getName(), this.scorable.getScore(p))); - scoreList.sort(this.scoreComparator); int size = scoreList.size(); @@ -140,8 +137,19 @@ public class EventScoreboardBuilder { } private void updateScore(Player p) { - this.playerScores.removeIf(entry -> entry.playerUuid().equals(p.getUniqueId())); - this.playerScores.add(new EventScoreEntry(p.getUniqueId(), p.getName(), this.scorable.getScore(p))); + EventScoreEntry previousEntry = this.playerScores.stream() + .filter(entry -> entry.playerUuid().equals(p.getUniqueId())) + .findFirst() + .orElse(null); + if(previousEntry == null) { + this.playerScores.add(new EventScoreEntry(p.getUniqueId(), p.getName(), this.scorable.getScore(p))); + return; + } + int currentScore = this.scorable.getScore(p); + if(previousEntry.score() < currentScore) { + this.playerScores.removeIf(entry -> entry.playerUuid().equals(p.getUniqueId())); + this.playerScores.add(new EventScoreEntry(p.getUniqueId(), p.getName(), currentScore)); + } } public void updateScoreboards() { -- 2.30.2