Skip to content
This repository was archived by the owner on Apr 9, 2024. It is now read-only.

Commit 6aaa169

Browse files
authored
Merge pull request #2 from Andre601/feature/improved-condition-parsing
Better condition parsing
2 parents 356bc09 + 091a970 commit 6aaa169

File tree

16 files changed

+309
-159
lines changed

16 files changed

+309
-159
lines changed

bungeecord/src/main/java/ch/andre601/advancedserverlist/bungeecord/events/PingEvent.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ public void onProxyPing(ProxyPingEvent event){
8585
ping.setDescriptionComponent(component);
8686
}
8787

88+
if(profile.shouldHidePlayers()){
89+
ping.setPlayers(null);
90+
91+
ping.setFavicon(ping.getFaviconObject());
92+
ping.setVersion(protocol);
93+
94+
event.setResponse(ping);
95+
return;
96+
}
97+
8898
if(!profile.getPlayerCount().isEmpty()){
8999
protocol.setName(ComponentParser.text(profile.getPlayerCount())
90100
.replacements(replacements)

bungeecord/src/main/java/ch/andre601/advancedserverlist/bungeecord/logging/BungeeLogger.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public void info(String msg, Object... args){
4444
}
4545

4646
@Override
47-
public void warn(String msg){
48-
logger.warning(msg);
47+
public void warn(String msg, Object... args){
48+
logger.warning(String.format(msg, args));
4949
}
5050

5151
@Override

core/src/main/java/ch/andre601/advancedserverlist/core/file/FileHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public boolean reloadProfiles(){
130130
if(tmp == null)
131131
continue;
132132

133-
profiles.add(new ServerListProfile(tmp));
133+
profiles.add(new ServerListProfile(tmp, logger));
134134
logger.info("Loaded " + file.getName());
135135
}
136136

core/src/main/java/ch/andre601/advancedserverlist/core/interfaces/PluginLogger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public interface PluginLogger{
2929

3030
void info(String msg, Object... args);
3131

32-
void warn(String msg);
32+
void warn(String msg, Object... args);
3333

3434
void warn(String msg, Throwable throwable);
3535
}

core/src/main/java/ch/andre601/advancedserverlist/core/profiles/ConditionsHolder.java

Lines changed: 0 additions & 137 deletions
This file was deleted.

core/src/main/java/ch/andre601/advancedserverlist/core/profiles/ProfileManager.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,8 @@ public ServerListProfile getProfile(){
5353
for(ServerListProfile profile : core.getFileHandler().getProfiles()){
5454
if(profile.getMotd().isEmpty() && profile.getPlayers().isEmpty() && profile.getPlayerCount().isEmpty())
5555
continue;
56-
57-
ConditionsHolder conditions = profile.getConditions();
58-
conditions.replacements(replacements);
59-
if(conditions.eval(core.getPluginLogger()))
56+
57+
if(profile.evalConditions(replacements))
6058
return profile;
6159
}
6260

core/src/main/java/ch/andre601/advancedserverlist/core/profiles/ServerListProfile.java

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,34 @@
2525

2626
package ch.andre601.advancedserverlist.core.profiles;
2727

28+
import ch.andre601.advancedserverlist.core.interfaces.PluginLogger;
29+
import ch.andre601.advancedserverlist.core.profiles.conditions.Expression;
2830
import org.spongepowered.configurate.ConfigurationNode;
2931
import org.spongepowered.configurate.serialize.SerializationException;
3032

33+
import java.util.ArrayList;
3134
import java.util.Collections;
3235
import java.util.List;
36+
import java.util.Map;
3337

3438
public class ServerListProfile{
3539

36-
private final ConditionsHolder conditions;
3740
private final int priority;
41+
private final List<Expression> expressions;
3842

3943
private final List<String> motd;
4044
private final List<String> players;
4145
private final String playerCount;
46+
private final boolean hidePlayers;
4247

43-
public ServerListProfile(ConfigurationNode node){
44-
this.conditions = new ConditionsHolder(getList(node, "conditions", false));
48+
public ServerListProfile(ConfigurationNode node, PluginLogger logger){
4549
this.priority = node.node("priority").getInt();
50+
this.expressions = createExpressions(getList(node, "conditions", false), logger);
4651

4752
this.motd = getList(node, "motd", true);
4853
this.players = getList(node, "players", false);
4954
this.playerCount = node.node("playerCount").getString("");
50-
}
51-
52-
public ConditionsHolder getConditions(){
53-
return conditions;
55+
this.hidePlayers = node.node("hidePlayers").getBoolean();
5456
}
5557

5658
public int getPriority(){
@@ -69,6 +71,44 @@ public String getPlayerCount(){
6971
return playerCount;
7072
}
7173

74+
public boolean shouldHidePlayers(){
75+
return hidePlayers;
76+
}
77+
78+
public boolean evalConditions(Map<String, Object> replacements){
79+
if(expressions.isEmpty())
80+
return true;
81+
82+
for(Expression expression : expressions){
83+
if(!expression.evaluate(replacements)){
84+
return false;
85+
}
86+
}
87+
88+
return true;
89+
}
90+
91+
private List<Expression> createExpressions(List<String> list, PluginLogger logger) {
92+
if(list.isEmpty())
93+
return Collections.emptyList();
94+
95+
List<Expression> expressions = new ArrayList<>();
96+
for(String str : list){
97+
Expression expression = new Expression(str);
98+
99+
switch(expression.getResult()){
100+
case VALID -> expressions.add(expression);
101+
case INVALID_EMPTY_PARTS -> logInvalid(logger, str, "Either left or right part of condition was empty.");
102+
case INVALID_NO_EXPRESSION -> logInvalid(logger, str, "Empty conditions are not allowed.");
103+
case INVALID_DOUBLE_OPERATOR -> logInvalid(logger, str, "Condition had two operands!");
104+
case INVALID_BROKEN_NOT_EQUAL -> logInvalid(logger, str, "Found '!' without '=' following it.");
105+
default -> logInvalid(logger, str, "Encountered unknown issue.");
106+
}
107+
}
108+
109+
return expressions;
110+
}
111+
72112
private List<String> getList(ConfigurationNode node, String key, boolean trim){
73113
List<String> list;
74114
try{
@@ -85,4 +125,8 @@ private List<String> getList(ConfigurationNode node, String key, boolean trim){
85125

86126
return list;
87127
}
128+
129+
private void logInvalid(PluginLogger logger, String expression, String reason){
130+
logger.warn("Invalid Condition '%s'! %s", expression, reason);
131+
}
88132
}

0 commit comments

Comments
 (0)