Skip to content

Commit 5c294a6

Browse files
authored
Implement scoreboard filters (#1118)
Signed-off-by: Pablo Herrera <pabloherrerapalacio@gmail.com>
1 parent 91f2d10 commit 5c294a6

File tree

17 files changed

+542
-341
lines changed

17 files changed

+542
-341
lines changed

core/src/main/java/tc/oc/pgm/blitz/BlitzConfig.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@ public class BlitzConfig {
1010
private final int lives;
1111
private final boolean broadcastLives;
1212
private final Filter filter;
13+
private final Filter scoreboardFilter;
1314
private final Filter joinFilter;
1415

15-
public BlitzConfig(int lives, boolean broadcastLives, Filter filter, Filter joinFilter) {
16+
public BlitzConfig(
17+
int lives,
18+
boolean broadcastLives,
19+
Filter filter,
20+
Filter scoreboardFilter,
21+
Filter joinFilter) {
1622
assertTrue(lives > 0, "lives must be greater than zero");
1723

1824
this.lives = lives;
1925
this.broadcastLives = broadcastLives;
2026
this.filter = filter;
27+
this.scoreboardFilter = scoreboardFilter;
2128
this.joinFilter = joinFilter;
2229
}
2330

@@ -38,6 +45,10 @@ public Filter getFilter() {
3845
return this.filter;
3946
}
4047

48+
public Filter getScoreboardFilter() {
49+
return scoreboardFilter;
50+
}
51+
4152
public Filter getJoinFilter() {
4253
return joinFilter;
4354
}

core/src/main/java/tc/oc/pgm/blitz/BlitzMatchModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.bukkit.event.EventPriority;
2121
import org.bukkit.event.Listener;
2222
import org.bukkit.util.Vector;
23+
import tc.oc.pgm.api.filter.Filter;
2324
import tc.oc.pgm.api.match.Match;
2425
import tc.oc.pgm.api.match.MatchModule;
2526
import tc.oc.pgm.api.match.MatchScope;
@@ -55,6 +56,10 @@ public BlitzConfig getConfig() {
5556
return this.config;
5657
}
5758

59+
public Filter getScoreboardFilter() {
60+
return config.getScoreboardFilter();
61+
}
62+
5863
/** Whether or not the player participated in the match and was eliminated. */
5964
public boolean isPlayerEliminated(UUID player) {
6065
return this.eliminatedPlayers.contains(player);

core/src/main/java/tc/oc/pgm/blitz/BlitzModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import tc.oc.pgm.api.match.Match;
1818
import tc.oc.pgm.filters.FilterModule;
1919
import tc.oc.pgm.filters.matcher.StaticFilter;
20+
import tc.oc.pgm.filters.parse.DynamicFilterValidation;
2021
import tc.oc.pgm.filters.parse.FilterParser;
2122
import tc.oc.pgm.util.xml.InvalidXMLException;
2223
import tc.oc.pgm.util.xml.Node;
@@ -57,6 +58,7 @@ public BlitzModule parse(MapFactory factory, Logger logger, Document doc)
5758
int lives = Integer.MAX_VALUE;
5859
boolean broadcastLives = false;
5960
Filter filter = null;
61+
Filter scoreboardFilter = null;
6062
Filter joinFilter = null;
6163

6264
FilterParser filters = factory.getFilters();
@@ -66,11 +68,15 @@ public BlitzModule parse(MapFactory factory, Logger logger, Document doc)
6668
XMLUtils.parseNumberInRange(
6769
Node.fromChildOrAttr(blitzEl, "lives"), Integer.class, Range.atLeast(1), 1);
6870
filter = filters.parseProperty(blitzEl, "filter", StaticFilter.ALLOW);
71+
scoreboardFilter =
72+
filters.parseProperty(
73+
blitzEl, "scoreboard-filter", StaticFilter.ALLOW, DynamicFilterValidation.PARTY);
6974
joinFilter = filters.parseProperty(blitzEl, "join-filter", StaticFilter.DENY);
7075
}
7176

7277
if (lives != Integer.MAX_VALUE) {
73-
return new BlitzModule(new BlitzConfig(lives, broadcastLives, filter, joinFilter));
78+
return new BlitzModule(
79+
new BlitzConfig(lives, broadcastLives, filter, scoreboardFilter, joinFilter));
7480
}
7581

7682
return null;

core/src/main/java/tc/oc/pgm/controlpoint/ControlPointParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public static ControlPointDefinition parseControlPoint(
135135
XMLUtils.parseNumber(
136136
el.getAttribute("points-growth"), Float.class, Float.POSITIVE_INFINITY);
137137
boolean showProgress = XMLUtils.parseBoolean(el.getAttribute("show-progress"), koth || pd);
138-
ShowOptions options = ShowOptions.parse(el);
138+
ShowOptions options = ShowOptions.parse(filterParser, el);
139139
Boolean required = XMLUtils.parseBoolean(el.getAttribute("required"), null);
140140

141141
ControlPointDefinition.CaptureCondition captureCondition =

core/src/main/java/tc/oc/pgm/core/CoreModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public CoreModule parse(MapFactory context, Logger logger, Document doc)
138138
}
139139

140140
boolean showProgress = XMLUtils.parseBoolean(coreEl.getAttribute("show-progress"), false);
141-
ShowOptions options = ShowOptions.parse(coreEl);
141+
ShowOptions options = ShowOptions.parse(context.getFilters(), coreEl);
142142
Boolean required = XMLUtils.parseBoolean(coreEl.getAttribute("required"), null);
143143
ProximityMetric proximityMetric =
144144
ProximityMetric.parse(

core/src/main/java/tc/oc/pgm/destroyable/DestroyableModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public DestroyableModule parse(MapFactory context, Logger logger, Document doc)
132132
XMLUtils.parseBoolean(destroyableEl.getAttribute("show-progress"), false);
133133
boolean sparks = XMLUtils.parseBoolean(destroyableEl.getAttribute("sparks"), false);
134134
boolean repairable = XMLUtils.parseBoolean(destroyableEl.getAttribute("repairable"), true);
135-
ShowOptions options = ShowOptions.parse(destroyableEl);
135+
ShowOptions options = ShowOptions.parse(context.getFilters(), destroyableEl);
136136
Boolean required = XMLUtils.parseBoolean(destroyableEl.getAttribute("required"), null);
137137
ProximityMetric proximityMetric =
138138
ProximityMetric.parse(

core/src/main/java/tc/oc/pgm/flag/FlagParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public FlagDefinition parseFlag(Element el) throws InvalidXMLException {
248248

249249
String id = el.getAttributeValue("id");
250250
String name = el.getAttributeValue("name");
251-
ShowOptions options = ShowOptions.parse(el);
251+
ShowOptions options = ShowOptions.parse(filterParser, el);
252252
Boolean required = XMLUtils.parseBoolean(el.getAttribute("required"), null);
253253
DyeColor color = XMLUtils.parseDyeColor(el.getAttribute("color"), null);
254254
FeatureReference<TeamFactory> owner =

core/src/main/java/tc/oc/pgm/goals/Goal.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.bukkit.DyeColor;
99
import org.jetbrains.annotations.Nullable;
1010
import tc.oc.pgm.api.feature.Feature;
11+
import tc.oc.pgm.api.filter.Filter;
1112
import tc.oc.pgm.api.match.Match;
1213
import tc.oc.pgm.api.party.Competitor;
1314
import tc.oc.pgm.api.party.Party;
@@ -50,6 +51,8 @@ default boolean isCompleted(Optional<? extends Competitor> competitor) {
5051
*/
5152
boolean hasShowOption(ShowOption option);
5253

54+
Filter getScoreboardFilter();
55+
5356
boolean isRequired();
5457

5558
/**

core/src/main/java/tc/oc/pgm/goals/ShowOptions.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,45 @@
33
import java.util.EnumSet;
44
import java.util.Set;
55
import org.jdom2.Element;
6+
import tc.oc.pgm.api.filter.Filter;
7+
import tc.oc.pgm.filters.matcher.StaticFilter;
8+
import tc.oc.pgm.filters.parse.DynamicFilterValidation;
9+
import tc.oc.pgm.filters.parse.FilterParser;
610
import tc.oc.pgm.util.xml.InvalidXMLException;
711
import tc.oc.pgm.util.xml.XMLUtils;
812

913
public class ShowOptions {
1014

1115
private final Set<ShowOption> options;
16+
private final Filter scoreboardFilter;
1217

13-
private ShowOptions(Set<ShowOption> options) {
18+
private ShowOptions(Set<ShowOption> options, Filter scoreboardFilter) {
1419
this.options = options;
20+
this.scoreboardFilter = scoreboardFilter;
1521
}
1622

17-
public static ShowOptions parse(Element el) throws InvalidXMLException {
23+
public static ShowOptions parse(FilterParser parser, Element el) throws InvalidXMLException {
1824
Set<ShowOption> options = EnumSet.noneOf(ShowOption.class);
1925
boolean show = XMLUtils.parseBoolean(el.getAttribute("show"), true);
2026
for (ShowOption option : ShowOption.values()) {
2127
if (XMLUtils.parseBoolean(el.getAttribute(option.getName()), show)) {
2228
options.add(option);
2329
}
2430
}
25-
return new ShowOptions(options);
31+
Filter scoreboardFilter =
32+
parser.parseProperty(
33+
el, "scoreboard-filter", StaticFilter.ALLOW, DynamicFilterValidation.MATCH);
34+
return new ShowOptions(options, scoreboardFilter);
2635
}
2736

2837
public boolean hasOption(ShowOption option) {
2938
return options.contains(option);
3039
}
3140

41+
public Filter getScoreboardFilter() {
42+
return scoreboardFilter;
43+
}
44+
3245
@Override
3346
public String toString() {
3447
return options.toString();

core/src/main/java/tc/oc/pgm/goals/SimpleGoal.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.bukkit.Color;
1313
import org.bukkit.DyeColor;
1414
import org.jetbrains.annotations.Nullable;
15+
import tc.oc.pgm.api.filter.Filter;
1516
import tc.oc.pgm.api.map.MapProtos;
1617
import tc.oc.pgm.api.match.Match;
1718
import tc.oc.pgm.api.party.Competitor;
@@ -93,6 +94,10 @@ public boolean hasShowOption(ShowOption flag) {
9394
return this.definition.hasShowOption(flag);
9495
}
9596

97+
public Filter getScoreboardFilter() {
98+
return this.definition.getShowOptions().getScoreboardFilter();
99+
}
100+
96101
@Override
97102
public boolean isRequired() {
98103
Boolean required = getDefinition().isRequired();

0 commit comments

Comments
 (0)