Skip to content
This repository has been archived by the owner on Feb 4, 2024. It is now read-only.

Commit

Permalink
Custom skill filtering (mod support) (#110)
Browse files Browse the repository at this point in the history
- Filter out "Unique" admin skill added by Tahlan Shipworks mod from Admin skills preview in Query builder and results.
- Add merging CSV support for filtering more skills from Admin skills preview in Query builder and results.
  • Loading branch information
jaghaimo authored Jun 17, 2023
1 parent 91f848d commit 1e0b06b
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 44 deletions.
2 changes: 2 additions & 0 deletions assets/data/stelnet/exclude/skill_by_id.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
id
tahlan_aptitude_special
2 changes: 1 addition & 1 deletion assets/mod_info.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "Stellar Networks",
"author": "Jaghaimo",
"utility": true,
"version": "3.1.2",
"version": "3.1.3",
"description": "A collection of intel boards for Starsector",
"gameVersion": "0.96a-RC10",
"modPlugin": "stelnet.StelnetMod",
Expand Down
8 changes: 4 additions & 4 deletions assets/stelnet.version
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"modVersion": {
"major": 3,
"minor": 1,
"patch": 2
"patch": 3
},
"directDownloadURL": "https://github.com/jaghaimo/stelnet/releases/download/3.1.2/stelnet-3.1.2.zip",
"changelogURL": "https://raw.githubusercontent.com/jaghaimo/stelnet/3.1.2/changelog.txt"
}
"directDownloadURL": "https://github.com/jaghaimo/stelnet/releases/download/3.1.3/stelnet-3.1.3.zip",
"changelogURL": "https://raw.githubusercontent.com/jaghaimo/stelnet/3.1.3/changelog.txt"
}
5 changes: 5 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
Version 3.1.3 (2023.06.17)
- Filter out "Unique" admin skill added by Tahlan Shipworks mod from Admin skills preview in Query builder and results.
- Add merging CSV support for filtering more skills from Admin skills preview in Query builder and results.


Version 3.1.2 (2023.06.10)
- Add back Special Contact from Nexerelin to Contacts Board (accidentally removed in 3.1.0).
- Fix crash on Exploration intel filtering (NPE if any intel returned `null` tags).
Expand Down
2 changes: 2 additions & 0 deletions src/stelnet/SettingsListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import stelnet.settings.BooleanSettings;
import stelnet.settings.IntSettings;
import stelnet.settings.Modules;
import stelnet.util.Excluder;
import stelnet.util.ModConstants;
import stelnet.util.StelnetHelper;

Expand All @@ -56,6 +57,7 @@ public static void apply() {

public static void resetCache() {
DmodProvider.resetCache();
Excluder.resetCache();
FactionProvider.resetCache();
SkillProvider.resetCache();
ItemQueryProvider.resetCache();
Expand Down
2 changes: 1 addition & 1 deletion src/stelnet/board/query/provider/MarketProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public static List<SectorEntityToken> convertMarketsToTokens(List<MarketAPI> mar

public static List<MarketAPI> getMarkets(boolean refreshContent) {
List<MarketAPI> markets = Global.getSector().getEconomy().getMarketsCopy();
List<Filter> filters = Arrays.<Filter>asList(Excluder.getMarketFilters(), new MarketNotHidden());
List<Filter> filters = Arrays.<Filter>asList(Excluder.getMarketFilter(), new MarketNotHidden());
CollectionUtils.reduce(markets, filters);
if (refreshContent && needsRefresh) {
log.debug("Refreshing all markets, this may take a moment");
Expand Down
2 changes: 2 additions & 0 deletions src/stelnet/board/query/provider/SkillProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.List;
import stelnet.filter.Filter;
import stelnet.util.CollectionUtils;
import stelnet.util.Excluder;

public class SkillProvider {

Expand All @@ -32,6 +33,7 @@ private List<SkillSpecAPI> getAllSkillSpecs() {
for (String skillId : skillIds) {
skillSpecs.add(Global.getSettings().getSkillSpec(skillId));
}
CollectionUtils.reduce(skillSpecs, Excluder.getSkillFilter());
return skillSpecs;
}
}
16 changes: 16 additions & 0 deletions src/stelnet/filter/AnyHasId.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.fs.starfarer.api.campaign.econ.MarketAPI;
import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
import com.fs.starfarer.api.campaign.econ.SubmarketSpecAPI;
import com.fs.starfarer.api.characters.MutableCharacterStatsAPI.SkillLevelAPI;
import com.fs.starfarer.api.characters.SkillSpecAPI;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;

Expand All @@ -14,6 +16,12 @@ public final class AnyHasId extends MarketFilter {

@Override
public boolean accept(Object object) {
if (object instanceof SkillLevelAPI) {
return acceptSkillLevel((SkillLevelAPI) object);
}
if (object instanceof SkillSpecAPI) {
return acceptSkillSpec((SkillSpecAPI) object);
}
if (object instanceof SubmarketAPI) {
return acceptSubmarket((SubmarketAPI) object);
}
Expand All @@ -28,6 +36,14 @@ protected boolean acceptMarket(MarketAPI market) {
return id.equalsIgnoreCase(market.getId());
}

protected boolean acceptSkillLevel(SkillLevelAPI skillLevel) {
return acceptSkillSpec(skillLevel.getSkill());
}

protected boolean acceptSkillSpec(SkillSpecAPI skillSpec) {
return id.equalsIgnoreCase(skillSpec.getId());
}

protected boolean acceptSubmarket(SubmarketAPI submarket) {
return id.equalsIgnoreCase(submarket.getSpecId());
}
Expand Down
83 changes: 45 additions & 38 deletions src/stelnet/util/Excluder.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package stelnet.util;

import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
Expand All @@ -24,82 +23,90 @@ public class Excluder extends Reader {
private static final String MARKET_BY_ID = "data/stelnet/exclude/market_by_id.csv";
private static final String MARKET_BY_SYSTEM = "data/stelnet/exclude/market_by_system.csv";
private static final String MARKET_BY_TAG = "data/stelnet/exclude/market_by_tag.csv";
private static final String SKILL_BY_ID = "data/stelnet/exclude/skill_by_id.csv";

private static transient List<Filter> filters;
private static transient Filter marketFilter;
private static transient Filter skillFilter;
private static transient Filter submarketFilter;

public static void resetCache() {
marketFilter = null;
skillFilter = null;
submarketFilter = null;
}

public static Filter getSubmarketFilter() {
return Excluder.getSubmarketFilters(
BooleanSettings.MARKET_USE_OPEN_MARKET.get(),
BooleanSettings.MARKET_USE_MILITARY_MARKET.get(),
BooleanSettings.MARKET_USE_BLACK_MARKET.get(),
BooleanSettings.MARKET_USE_CUSTOM_MARKET.get()
);
if (submarketFilter == null) {
submarketFilter = getSubmarketFilters();
}
return submarketFilter;
}

public static Filter getMarketFilter() {
if (marketFilter == null) {
List<Filter> marketFilters = new LinkedList<>();
addMarketByFactionFilters(marketFilters);
addAnyByIdFilters(marketFilters, MARKET_BY_ID);
addMarketBySystemFilters(marketFilters);
addMarketByTagFilters(marketFilters);
marketFilter = new LogicalNot(new LogicalOr(marketFilters, "Markets"));
}
return marketFilter;
}

public static Filter getMarketFilters() {
if (filters == null) {
filters = new ArrayList<>();
filters = getMarketByFactionFilters(filters);
filters = getMarketByIdFilters(filters);
filters = getMarketBySystemFilters(filters);
filters = getMarketByTagFilters(filters);
public static Filter getSkillFilter() {
if (skillFilter == null) {
List<Filter> skillFilters = new LinkedList<>();
addAnyByIdFilters(skillFilters, SKILL_BY_ID);
skillFilter = new LogicalNot(new LogicalOr(skillFilters, "Skills"));
}
return new LogicalNot(new LogicalOr(filters, "Markets"));
return skillFilter;
}

private static Filter getSubmarketFilters(
boolean useOpenMarket,
boolean useMilitaryMarket,
boolean useBlackMarket,
boolean useCustomMarkets
) {
private static Filter getSubmarketFilters() {
Filter storage = new AnyHasId(Submarkets.SUBMARKET_STORAGE);
Filter openMarket = new AnyHasId(Submarkets.SUBMARKET_OPEN);
Filter militaryMarket = new AnyHasId(Submarkets.GENERIC_MILITARY);
Filter blackMarket = new AnyHasId(Submarkets.SUBMARKET_BLACK);
List<Filter> filters = new LinkedList<>();
if (useOpenMarket) {
if (BooleanSettings.MARKET_USE_OPEN_MARKET.get()) {
filters.add(openMarket);
}
if (useMilitaryMarket) {
if (BooleanSettings.MARKET_USE_MILITARY_MARKET.get()) {
filters.add(militaryMarket);
}
if (useBlackMarket) {
if (BooleanSettings.MARKET_USE_BLACK_MARKET.get()) {
filters.add(blackMarket);
}
if (useCustomMarkets) {
if (BooleanSettings.MARKET_USE_CUSTOM_MARKET.get()) {
filters.add(
new LogicalNot(new LogicalOr(Arrays.asList(storage, openMarket, militaryMarket, blackMarket), "Custom"))
);
}
return new LogicalAnd(Arrays.asList(new LogicalNot(storage), new LogicalOr(filters, "Submarkets")));
}

private static List<Filter> getMarketByFactionFilters(List<Filter> filters) {
for (String factionId : getStrings(MARKET_BY_FACTION, ModConstants.STELNET_ID)) {
filters.add(new MarketBelongsToFaction(factionId));
private static void addAnyByIdFilters(List<Filter> filters, String filename) {
for (String marketId : getStrings(filename, ModConstants.STELNET_ID)) {
filters.add(new AnyHasId(marketId));
}
return filters;
}

private static List<Filter> getMarketByIdFilters(List<Filter> filters) {
for (String marketId : getStrings(MARKET_BY_ID, ModConstants.STELNET_ID)) {
filters.add(new AnyHasId(marketId));
private static void addMarketByFactionFilters(List<Filter> filters) {
for (String factionId : getStrings(MARKET_BY_FACTION, ModConstants.STELNET_ID)) {
filters.add(new MarketBelongsToFaction(factionId));
}
return filters;
}

private static List<Filter> getMarketBySystemFilters(List<Filter> filters) {
private static void addMarketBySystemFilters(List<Filter> filters) {
for (String systemId : getStrings(MARKET_BY_SYSTEM, ModConstants.STELNET_ID)) {
filters.add(new MarketIsInSystem(systemId));
}
return filters;
}

private static List<Filter> getMarketByTagFilters(List<Filter> filters) {
private static void addMarketByTagFilters(List<Filter> filters) {
for (String tag : getStrings(MARKET_BY_TAG, ModConstants.STELNET_ID)) {
filters.add(new AnyHasTag(tag));
}
return filters;
}
}
2 changes: 2 additions & 0 deletions src/uilib/ShowPeopleTooltip.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import stelnet.filter.SkillIsAdmin;
import stelnet.filter.SkillIsCombatOfficer;
import stelnet.util.CollectionUtils;
import stelnet.util.Excluder;

@RequiredArgsConstructor
public class ShowPeopleTooltip implements TooltipCreator {
Expand Down Expand Up @@ -56,6 +57,7 @@ public String getTitle(List<SkillLevelAPI> skills) {

private List<SkillLevelAPI> getSkills() {
List<SkillLevelAPI> skills = person.getStats().getSkillsCopy();
CollectionUtils.reduce(skills, Excluder.getSkillFilter());
CollectionUtils.reduce(
skills,
new LogicalOr(Arrays.<Filter>asList(new SkillIsAdmin(), new SkillIsCombatOfficer()), "Any Skill")
Expand Down

0 comments on commit 1e0b06b

Please sign in to comment.