From 11327e9bf2226fa1d6602021837fa2d0d3e99dc0 Mon Sep 17 00:00:00 2001 From: JustinasLa Date: Wed, 30 Sep 2026 19:12:45 +0200 Subject: [PATCH] feat: credit aged brews taken from BreweryX barrels brew_age credits the player who takes a brew aged at least one BreweryX year out of a barrel, once per brew, using the same take-and-tag approach as distilling. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../activitytf/listeners/BreweryListener.java | 17 ++++++++++++++--- src/main/resources/config.yml | 11 +++++++++++ .../listeners/BreweryListenerTest.java | 8 ++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/tfminecraft/activitytf/listeners/BreweryListener.java b/src/main/java/net/tfminecraft/activitytf/listeners/BreweryListener.java index fc17d94..18330be 100644 --- a/src/main/java/net/tfminecraft/activitytf/listeners/BreweryListener.java +++ b/src/main/java/net/tfminecraft/activitytf/listeners/BreweryListener.java @@ -1,6 +1,7 @@ package net.tfminecraft.activitytf.listeners; import com.dre.brewery.BIngredients; +import com.dre.brewery.Barrel; import com.dre.brewery.Brew; import com.dre.brewery.api.events.IngedientAddEvent; import com.dre.brewery.api.events.brew.BrewModifyEvent; @@ -32,6 +33,10 @@ public class BreweryListener implements Listener { static final NamespacedKey DISTILLED = new NamespacedKey("activity", "brew_distilled"); + static final NamespacedKey AGED = new NamespacedKey("activity", "brew_aged"); + + // Brews younger than this many BreweryX years have not been aged on purpose. + static final float MIN_AGE_YEARS = 1.0f; // Clicks that take the clicked item out of its slot. static final Set TAKES = EnumSet.of( @@ -79,9 +84,10 @@ private static int cookedMinutes(Brew brew) { return ingredients == null ? 0 : ingredients.getCookedTime(); } - // BreweryX distils on a timer with no player attached, so the credit goes to whoever - // takes a distilled brew out of a brewing stand's bottle slots. The tag written onto - // the brew keeps it from counting again when it is put back and taken out. + // BreweryX distils and ages with no player attached, so the credit goes to whoever + // takes a distilled brew out of a brewing stand's bottle slots, or a brew aged for at + // least a year out of a barrel. The tag written onto the brew keeps it from counting + // again when it is put back and taken out. @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onContainerTake(InventoryClickEvent event) { if (!(event.getWhoClicked() instanceof Player player) || !TAKES.contains(event.getAction())) { @@ -98,6 +104,11 @@ public void onContainerTake(InventoryClickEvent event) { if (brew != null && brew.getDistillRuns() > 0) { creditOnce(player, clicked, event.getSlot(), item, DISTILLED, "brew_distill"); } + } else if (clicked.getHolder(false) instanceof Barrel) { + Brew brew = Brew.get(item); + if (brew != null && brew.getAgeTime() >= MIN_AGE_YEARS) { + creditOnce(player, clicked, event.getSlot(), item, AGED, "brew_age"); + } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 218e942..7b63450 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -352,6 +352,17 @@ activities: # every: 3 # points: 1 # daily-cap: 1 + # BreweryX: brews aged at least a year taken out of a barrel, each brew once + brew_age: + display: "#e6ca40&lAge Brews" + description: + - "&7Take &a%every% &7brews aged at least a year out of a barrel." + - "&7Earn &a%points% &7activity points per completion." + - "&7" + material: BARREL + every: 3 + points: 1 + daily-cap: 1 # RPCharacters: profession upgrades purchased profession_upgrade: display: "#e6ca40&lProfession Upgrade" diff --git a/src/test/java/net/tfminecraft/activitytf/listeners/BreweryListenerTest.java b/src/test/java/net/tfminecraft/activitytf/listeners/BreweryListenerTest.java index d2dd004..18b18b7 100644 --- a/src/test/java/net/tfminecraft/activitytf/listeners/BreweryListenerTest.java +++ b/src/test/java/net/tfminecraft/activitytf/listeners/BreweryListenerTest.java @@ -144,6 +144,14 @@ void aBrewThatNeverLeftItsSlotLosesOnlyItsOwnTag() { assertTrue(BreweryListener.markOnce(data, BreweryListener.DISTILLED, 9L)); } + @Test + void distillingAndAgingAreTrackedSeparately() { + PersistentDataContainer data = stubData(); + assertTrue(BreweryListener.markOnce(data, BreweryListener.DISTILLED, 1L)); + assertTrue(BreweryListener.markOnce(data, BreweryListener.AGED, 2L)); + assertFalse(BreweryListener.markOnce(data, BreweryListener.AGED, 3L)); + } + @Test void onlyClicksThatTakeTheItemCount() { assertTrue(BreweryListener.TAKES.contains(InventoryAction.PICKUP_ALL));