From 847eb3fe5d67b188a511ed99a48368241554a1e2 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sun, 31 May 2026 22:31:02 +0200 Subject: [PATCH] Add even more Advancements --- .../SQL/src/de/steamwar/sql/EventFight.kt | 12 +-- .../advancements/Advancements.java | 74 ++++++------------- 2 files changed, 30 insertions(+), 56 deletions(-) diff --git a/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt b/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt index 7f6d2de2..34288b7d 100644 --- a/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt +++ b/CommonCore/SQL/src/de/steamwar/sql/EventFight.kt @@ -148,19 +148,19 @@ class EventFight(id: EntityID) : IntEntity(id), Comparable { } @JvmStatic - fun getHighestPlacement(fighter: SteamwarUser) = + fun countPlacement(fighter: SteamwarUser, placement: Int) = useDb { exec( - "SELECT MIN(TT.Placement) AS Placement FROM FightPlayer INNER JOIN Fight F on FightPlayer.FightID = F.FightID INNER JOIN EventFight EF on F.FightID = EF.Fight INNER JOIN TeamTeilnahme TT on TT.EventID = EF.EventID WHERE UserID = ?", - args = listOf(IntegerColumnType() to fighter.id.value) + "SELECT COUNT(*) AS PlacementCount FROM FightPlayer INNER JOIN Fight F on FightPlayer.FightID = F.FightID INNER JOIN EventFight EF on F.FightID = EF.Fight INNER JOIN TeamTeilnahme TT on TT.EventID = EF.EventID WHERE UserID = ? AND Placement = ?", + args = listOf(IntegerColumnType() to fighter.id.value, IntegerColumnType() to placement) ) { if (it.next()) { - it.getInt("Placement") + it.getInt("PlacementCount") } else { - Int.MAX_VALUE + 0 } } - ?: Int.MAX_VALUE + ?: 0 } } diff --git a/VelocityCore/src/de/steamwar/velocitycore/advancements/Advancements.java b/VelocityCore/src/de/steamwar/velocitycore/advancements/Advancements.java index 9128bf7b..846e05f0 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/advancements/Advancements.java +++ b/VelocityCore/src/de/steamwar/velocitycore/advancements/Advancements.java @@ -173,59 +173,36 @@ public class Advancements { return (int) (fights / Math.max(eventFightCount / 100.0, 1)); } ); - // playtime.add(previous); - // TODO: Implement per Type counter! if (i == 0) { - Advancement third = new Advancement( - "steamwar:advancements/event_placement_3", - Optional.of(previous), - new Advancement.Display( - Component.text("3. Place in Event"), - Component.text(""), - "copper_block", - Advancement.Display.FrameType.TASK, - 2f, - 9.5f - ), - Advancement.HidePolicy.PREVIOUS_UNFINISHED, - 1, - user -> EventFight.getHighestPlacement(user) <= 3 ? 1 : 0 - ); - Advancement first = new Advancement( - "steamwar:advancements/event_placement_1", - Optional.of(third), - new Advancement.Display( - Component.text("1. Place in Event"), - Component.text(""), - "gold_block", - Advancement.Display.FrameType.CHALLENGE, - 3f, - 9f - ), - Advancement.HidePolicy.WITH_PREVIOUS, - 1, - user -> EventFight.getHighestPlacement(user) == 1 ? 1 : 0 - ); - new Advancement( - "steamwar:advancements/event_placement_2", - Optional.of(first), - new Advancement.Display( - Component.text("2. Place in Event"), - Component.text(""), - "iron_block", - Advancement.Display.FrameType.GOAL, - 4f, - 9.25f - ), - Advancement.HidePolicy.WITH_PREVIOUS, - 1, - user -> EventFight.getHighestPlacement(user) <= 2 ? 1 : 0 - ); + placementsCounts(previous, 9f, 1, "gold_block", Advancement.Display.FrameType.CHALLENGE); + placementsCounts(previous, 10f, 2, "iron_block", Advancement.Display.FrameType.GOAL); + placementsCounts(previous, 11f, 3, "copper_block", Advancement.Display.FrameType.TASK); } } } + private static void placementsCounts(Advancement previous, float yCoord, int placement, String item, Advancement.Display.FrameType frameType) { + for (int placementCount = 1; placementCount <= 10; placementCount++) { + int finalPlacementCount = placementCount; + previous = new Advancement( + "steamwar:advancements/event_placement_" + placement + "_" + placementCount, + Optional.of(previous), + new Advancement.Display( + Component.text(placementCount + "x " + placement + ". Place in Event"), + Component.text(""), + item, + frameType, + 2f + (placementCount - 1f), + yCoord + ), + Advancement.HidePolicy.WITH_PREVIOUS, + 1, + user -> EventFight.countPlacement(user, placement) >= finalPlacementCount ? 1 : 0 + ); + } + } + static { Advancement previous = ROOT; int[] checkedCounts = new int[]{1, 10, 100, 250, 500, 750, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000}; @@ -254,9 +231,6 @@ public class Advancements { } static { - // WarGear - // MiniWarGear - // WarShip Advancement previous = ROOT; int[] acceptedCounts = new int[]{1, 5, 10, 15, 25, 50, 100, 150, 200, 250, 500, 750, 1000}; for (int i = 0; i < acceptedCounts.length; i++) {