Skip to content

Commit

Permalink
feat: Add favorite filter [skip ci] (#2376)
Browse files Browse the repository at this point in the history
* feat: Add favorite filter

* fix: Fix revealed favorite items not rendering star

* ci: spotless formatting

---------

Co-authored-by: JamieCallan117 <JamieCallan117@users.noreply.github.com>
  • Loading branch information
JamieCallan117 and JamieCallan117 committed Mar 17, 2024
1 parent 2929a43 commit 2f55163
Show file tree
Hide file tree
Showing 8 changed files with 107 additions and 8 deletions.
@@ -1,14 +1,17 @@
/*
* Copyright © Wynntils 2022-2023.
* Copyright © Wynntils 2022-2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.models.items.items.game;

import com.wynntils.models.emeralds.EmeraldModel;
import com.wynntils.models.items.properties.EmeraldValuedItemProperty;
import com.wynntils.models.items.properties.NamedItemProperty;
import com.wynntils.models.items.properties.NumberedTierItemProperty;
import com.wynntils.utils.MathUtils;

public class EmeraldPouchItem extends GameItem implements NumberedTierItemProperty, EmeraldValuedItemProperty {
public class EmeraldPouchItem extends GameItem
implements NamedItemProperty, NumberedTierItemProperty, EmeraldValuedItemProperty {
private final int tier;
private final int value;

Expand Down Expand Up @@ -53,6 +56,11 @@ public int getEmeraldValue() {
return value;
}

@Override
public String getName() {
return "Emerald Pouch [Tier " + MathUtils.toRoman(tier) + "]";
}

@Override
public String toString() {
return "EmeraldPouchItem{" + "tier=" + tier + ", value=" + value + '}';
Expand Down
@@ -1,18 +1,19 @@
/*
* Copyright © Wynntils 2022-2023.
* Copyright © Wynntils 2022-2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.models.items.items.game;

import com.wynntils.models.ingredients.type.IngredientInfo;
import com.wynntils.models.items.properties.LeveledItemProperty;
import com.wynntils.models.items.properties.NamedItemProperty;
import com.wynntils.models.items.properties.ProfessionItemProperty;
import com.wynntils.models.items.properties.QualityTierItemProperty;
import com.wynntils.models.profession.type.ProfessionType;
import java.util.List;

public class IngredientItem extends GameItem
implements QualityTierItemProperty, LeveledItemProperty, ProfessionItemProperty {
implements QualityTierItemProperty, LeveledItemProperty, NamedItemProperty, ProfessionItemProperty {
private final IngredientInfo ingredientInfo;

public IngredientItem(IngredientInfo ingredientInfo) {
Expand All @@ -33,6 +34,11 @@ public int getLevel() {
return ingredientInfo.level();
}

@Override
public String getName() {
return ingredientInfo.name();
}

@Override
public String toString() {
return "IngredientItem{" + "ingredientInfo=" + ingredientInfo + '}';
Expand Down
@@ -1,13 +1,15 @@
/*
* Copyright © Wynntils 2022-2023.
* Copyright © Wynntils 2022-2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.models.items.items.game;

import com.wynntils.models.elements.type.PowderTierInfo;
import com.wynntils.models.items.properties.NamedItemProperty;
import com.wynntils.models.items.properties.NumberedTierItemProperty;
import com.wynntils.utils.MathUtils;

public class PowderItem extends GameItem implements NumberedTierItemProperty {
public class PowderItem extends GameItem implements NamedItemProperty, NumberedTierItemProperty {
private final PowderTierInfo powderTierInfo;

public PowderItem(PowderTierInfo powderTierInfo) {
Expand All @@ -23,6 +25,12 @@ public int getTier() {
return powderTierInfo.tier();
}

@Override
public String getName() {
return powderTierInfo.element().getSymbol() + " "
+ powderTierInfo.element().getName() + " Powder " + MathUtils.toRoman(powderTierInfo.tier());
}

@Override
public String toString() {
return "PowderItem{" + "powderTierInfo=" + powderTierInfo + '}';
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright © Wynntils 2023.
* Copyright © Wynntils 2023-2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.services.favorites;
Expand All @@ -13,6 +13,7 @@
import com.wynntils.models.ingredients.type.IngredientInfo;
import com.wynntils.models.items.WynnItem;
import com.wynntils.models.items.items.game.GearBoxItem;
import com.wynntils.models.items.items.game.GearItem;
import com.wynntils.models.items.items.game.IngredientItem;
import com.wynntils.models.items.items.gui.IngredientPouchItem;
import com.wynntils.utils.type.Pair;
Expand Down Expand Up @@ -53,6 +54,11 @@ public boolean calculateFavorite(ItemStack itemStack, WynnItem wynnItem) {
return isFavorite(ingredientItem.getIngredientInfo().name());
}

// This is for unidentified items that have been revealed
if (wynnItem instanceof GearItem gearItem) {
return isFavorite(gearItem.getName());
}

if (wynnItem instanceof IngredientPouchItem pouchItem) {
for (Pair<IngredientInfo, Integer> ingredientPair : pouchItem.getIngredients()) {
IngredientInfo ingredientProfile = ingredientPair.a();
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright © Wynntils 2023.
* Copyright © Wynntils 2023-2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.services.itemfilter;
Expand All @@ -11,13 +11,15 @@
import com.wynntils.models.items.WynnItem;
import com.wynntils.models.stats.type.StatType;
import com.wynntils.services.itemfilter.filters.AnyStatFilters;
import com.wynntils.services.itemfilter.filters.BooleanStatFilter;
import com.wynntils.services.itemfilter.filters.PercentageStatFilter;
import com.wynntils.services.itemfilter.filters.RangedStatFilters;
import com.wynntils.services.itemfilter.filters.StringStatFilter;
import com.wynntils.services.itemfilter.statproviders.ActualStatProvider;
import com.wynntils.services.itemfilter.statproviders.CountedItemStatProvider;
import com.wynntils.services.itemfilter.statproviders.DurabilityStatProvider;
import com.wynntils.services.itemfilter.statproviders.EmeraldValueStatProvider;
import com.wynntils.services.itemfilter.statproviders.FavoriteStatProvider;
import com.wynntils.services.itemfilter.statproviders.GearRestrictionStatProvider;
import com.wynntils.services.itemfilter.statproviders.GearTypeStatProvider;
import com.wynntils.services.itemfilter.statproviders.HealthStatProvider;
Expand Down Expand Up @@ -421,6 +423,8 @@ private void registerStatProviders() {
for (StatType statType : Models.Stat.getAllStatTypes()) {
registerStatProvider(new ActualStatProvider(statType));
}

registerStatProvider(new FavoriteStatProvider());
}

private void registerStatProvider(ItemStatProvider<?> statProvider) {
Expand All @@ -445,6 +449,7 @@ private void registerStatFilters() {
StatValue.class, new RangedStatFilters.RangedStatValueStatFilter.RangedStatValueStatFilterFactory());

registerStatFilter(StatValue.class, new PercentageStatFilter.PercentageStatFilterFactory());
registerStatFilter(Boolean.class, new BooleanStatFilter.BooleanStatFilterFactory());

// String is the fallback type, so it should be registered last
registerStatFilter(String.class, new StringStatFilter.StringStatFilterFactory());
Expand Down
@@ -0,0 +1,35 @@
/*
* Copyright © Wynntils 2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.services.itemfilter.filters;

import com.wynntils.services.itemfilter.type.StatFilter;
import com.wynntils.services.itemfilter.type.StatFilterFactory;
import java.util.Optional;

public class BooleanStatFilter extends StatFilter<Boolean> {
private final boolean value;

BooleanStatFilter(boolean value) {
this.value = value;
}

@Override
public boolean matches(Boolean value) {
return this.value == value;
}

public static class BooleanStatFilterFactory extends StatFilterFactory<BooleanStatFilter> {
@Override
public Optional<BooleanStatFilter> create(String inputString) {
if (inputString.equalsIgnoreCase("true")) {
return Optional.of(new BooleanStatFilter(true));
} else if (inputString.equalsIgnoreCase("false")) {
return Optional.of(new BooleanStatFilter(false));
} else {
return Optional.empty();
}
}
}
}
@@ -0,0 +1,27 @@
/*
* Copyright © Wynntils 2024.
* This file is released under LGPLv3. See LICENSE for full license details.
*/
package com.wynntils.services.itemfilter.statproviders;

import com.wynntils.core.components.Services;
import com.wynntils.models.items.WynnItem;
import com.wynntils.models.items.properties.NamedItemProperty;
import com.wynntils.services.itemfilter.type.ItemStatProvider;
import java.util.List;

public class FavoriteStatProvider extends ItemStatProvider<Boolean> {
@Override
public List<Boolean> getValue(WynnItem wynnItem) {
if (wynnItem instanceof NamedItemProperty namedItem) {
return List.of(Services.Favorites.isFavorite(namedItem.getName()));
}

return List.of(false);
}

@Override
public List<String> getAliases() {
return List.of("fav");
}
}
4 changes: 4 additions & 0 deletions common/src/main/resources/assets/wynntils/lang/en_us.json
Expand Up @@ -2144,6 +2144,9 @@
"service.wynntils.itemFilter.filter.anyString.description": "Filters whether an item has a string stat",
"service.wynntils.itemFilter.filter.anyString.name": "Any (String)",
"service.wynntils.itemFilter.filter.anyString.usage": "\"profession: *\" would match any item with a profession stat",
"service.wynntils.itemFilter.filter.boolean.description": "Filters whether a value is true or false",
"service.wynntils.itemFilter.filter.boolean.name": "True/False (Boolean)",
"service.wynntils.itemFilter.filter.boolean.usage": "\"favorite:true\" would match any item that is a favorite",
"service.wynntils.itemFilter.filter.percentage.description": "Filters whether a StatValue's percentage value is in the filter range",
"service.wynntils.itemFilter.filter.percentage.name": "Percentage (StatValue)",
"service.wynntils.itemFilter.filter.percentage.usage": "Specify a single number (\"5%%\"), or a range (\"5-10%%\" or \">=13%%\" or \"<25%%\")",
Expand All @@ -2165,6 +2168,7 @@
"service.wynntils.itemFilter.stat.countedItem.description": "Count of an item (e.g. health potion), this is not the same as the amount of items in a stack.",
"service.wynntils.itemFilter.stat.durability.description": "Durability of the item",
"service.wynntils.itemFilter.stat.emeraldValue.description": "Emerald value of the item",
"service.wynntils.itemFilter.stat.favorite.description": "Is the item marked as a favorite",
"service.wynntils.itemFilter.stat.gearRestriction.description": "Gear restriction of the item",
"service.wynntils.itemFilter.stat.gearType.description": "Gear type of the item (e.g. helmet)",
"service.wynntils.itemFilter.stat.health.description": "The item's base health value",
Expand Down

0 comments on commit 2f55163

Please sign in to comment.