Skip to content

Commit f5aa99f

Browse files
authored
Merge pull request #35 from PlaceholderAPI/001-gaby-add-build-placeholders
add %server_build% and %server_version_build% (closes #29)
2 parents fcb02f5 + c57640d commit f5aa99f

3 files changed

Lines changed: 93 additions & 47 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<modelVersion>4.0.0</modelVersion>
33
<groupId>com.extendedclip.papi.expansion.server</groupId>
44
<artifactId>server-expansion</artifactId>
5-
<version>2.6.0</version>
5+
<version>2.6.1</version>
66
<name>PAPI-Expansion-Server</name>
77
<description>PlaceholderAPI expansion for server placeholders</description>
88

src/main/java/com/extendedclip/papi/expansion/server/ServerExpansion.java

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.Date;
4343
import java.util.HashMap;
4444
import java.util.Map;
45+
import java.util.StringJoiner;
4546
import java.util.concurrent.TimeUnit;
4647
import java.util.regex.Matcher;
4748
import java.util.regex.Pattern;
@@ -53,11 +54,14 @@ public class ServerExpansion extends PlaceholderExpansion implements Cacheable,
5354
private Object craftServer;
5455
private Field tps;
5556
private String version;
56-
private String serverName = null;
57+
private final String variant;
58+
59+
// config stuff
60+
private String serverName;
5761
private String low = "&c";
5862
private String medium = "&e";
5963
private String high = "&a";
60-
private String variant;
64+
// -----
6165

6266
private final Cache<String, Integer> cache = Caffeine.newBuilder()
6367
.expireAfterWrite(1, TimeUnit.MINUTES)
@@ -66,18 +70,20 @@ public class ServerExpansion extends PlaceholderExpansion implements Cacheable,
6670
private final String VERSION = getClass().getPackage().getImplementationVersion();
6771

6872
public ServerExpansion() {
73+
this.version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
74+
6975
try {
70-
version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
7176
if (minecraftVersion() >= 17) {
7277
craftServer = Class.forName("net.minecraft.server.MinecraftServer").getMethod("getServer").invoke(null);
7378
} else {
7479
craftServer = Class.forName("net.minecraft.server." + version + ".MinecraftServer").getMethod("getServer").invoke(null);
7580
}
7681
tps = craftServer.getClass().getField("recentTps");
77-
variant = initializeVariant();
7882
} catch (Exception e) {
7983
e.printStackTrace();
8084
}
85+
86+
this.variant = ServerUtils.getServerVariant();
8187
}
8288

8389
@Override
@@ -114,30 +120,6 @@ public void clear() {
114120
return VERSION;
115121
}
116122

117-
public String initializeVariant() {
118-
try {
119-
Class.forName("net.pl3x.purpur.PurpurConfig");
120-
return "Purpur";
121-
} catch (ClassNotFoundException e) {
122-
try {
123-
Class.forName("com.tuinity.tuinity.config.TuinityConfig");
124-
return "Tuinity";
125-
} catch (ClassNotFoundException e1) {
126-
try {
127-
Class.forName("com.destroystokyo.paper.PaperConfig");
128-
return "Paper";
129-
} catch (ClassNotFoundException e2) {
130-
try {
131-
Class.forName("org.spigotmc.SpigotConfig");
132-
return "Spigot";
133-
} catch (ClassNotFoundException e3) {
134-
return "Unknown";
135-
}
136-
}
137-
}
138-
}
139-
}
140-
141123
@Override
142124
public Map<String, Object> getDefaults() {
143125
final Map<String, Object> defaults = new HashMap<>();
@@ -153,25 +135,25 @@ public String onRequest(OfflinePlayer p, String identifier) {
153135
final int MB = 1048576;
154136

155137
switch (identifier) {
156-
case "name":
157-
return serverName == null ? "" : serverName;
158-
case "variant":
159-
return variant;
160-
case "tps":
161-
return getTps(null);
138+
// Players placeholders
162139
case "online":
163140
return String.valueOf(Bukkit.getOnlinePlayers().size());
164141
case "max_players":
165142
return String.valueOf(Bukkit.getMaxPlayers());
166143
case "unique_joins":
167144
return String.valueOf(Bukkit.getOfflinePlayers().length);
168-
case "uptime":
169-
long seconds = TimeUnit.MILLISECONDS.toSeconds(ManagementFactory.getRuntimeMXBean().getUptime());
170-
return formatTime(Duration.of(seconds, ChronoUnit.SECONDS));
171-
case "has_whitelist":
172-
return Bukkit.getServer().hasWhitelist() ? PlaceholderAPIPlugin.booleanTrue() : PlaceholderAPIPlugin.booleanFalse();
145+
// -----
146+
147+
// Version placeholders
173148
case "version":
174-
return Bukkit.getBukkitVersion().split("-")[0];
149+
return ServerUtils.VERSION;
150+
case "build":
151+
return ServerUtils.BUILD;
152+
case "version_build":
153+
return ServerUtils.VERSION + '-' + ServerUtils.BUILD;
154+
// -----
155+
156+
// Ram placeholders
175157
case "ram_used":
176158
return String.valueOf((runtime.totalMemory() - runtime.freeMemory()) / MB);
177159
case "ram_free":
@@ -180,12 +162,29 @@ public String onRequest(OfflinePlayer p, String identifier) {
180162
return String.valueOf(runtime.totalMemory() / MB);
181163
case "ram_max":
182164
return String.valueOf(runtime.maxMemory() / MB);
165+
// -----
166+
167+
// Identity placeholders
168+
case "name":
169+
return serverName == null ? "" : serverName;
170+
case "variant":
171+
return variant;
172+
// -----
173+
174+
// Other placeholders
175+
case "tps":
176+
return getTps(null);
177+
case "uptime":
178+
long seconds = TimeUnit.MILLISECONDS.toSeconds(ManagementFactory.getRuntimeMXBean().getUptime());
179+
return formatTime(Duration.of(seconds, ChronoUnit.SECONDS));
183180
case "total_chunks":
184181
return String.valueOf(cache.get("chunks", k -> getChunks()));
185182
case "total_living_entities":
186183
return String.valueOf(cache.get("livingEntities", k -> getLivingEntities()));
187184
case "total_entities":
188185
return String.valueOf(cache.get("totalEntities", k -> getTotalEntities()));
186+
case "has_whitelist":
187+
return Bukkit.getServer().hasWhitelist() ? PlaceholderAPIPlugin.booleanTrue() : PlaceholderAPIPlugin.booleanFalse();
189188
}
190189

191190
if (identifier.startsWith("tps_")) {
@@ -322,14 +321,15 @@ public String getTps(String arg) {
322321
case "15_colored":
323322
case "fifteen_colored":
324323
return getColoredTps(tps()[2]);
325-
case "percent":
326-
StringBuilder sb = new StringBuilder();
324+
case "percent": {
325+
final StringJoiner joiner = new StringJoiner(ChatColor.GRAY + ", ");
326+
327327
for (double t : tps()) {
328-
sb.append(getColoredTpsPercent(t))
329-
.append(ChatColor.GRAY)
330-
.append(", ");
328+
joiner.add(getColoredTpsPercent(t));
331329
}
332-
return sb.toString();
330+
331+
return joiner.toString();
332+
}
333333
case "1_percent":
334334
case "one_percent":
335335
return getPercent(tps()[0]);
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.extendedclip.papi.expansion.server;
2+
3+
import org.bukkit.Bukkit;
4+
5+
public final class ServerUtils {
6+
7+
public static final String VERSION = Bukkit.getBukkitVersion().split("-")[0];
8+
public static final String BUILD;
9+
10+
static {
11+
String[] buildParts = Bukkit.getVersion().split("-");
12+
13+
if (buildParts.length >= 3) {
14+
BUILD = buildParts[2];
15+
} else {
16+
BUILD = "UNKNOWN";
17+
}
18+
}
19+
20+
private ServerUtils() { }
21+
22+
public static String getServerVariant() {
23+
try {
24+
Class.forName("net.pl3x.purpur.PurpurConfig");
25+
return "Purpur";
26+
} catch (ClassNotFoundException e) {
27+
try {
28+
Class.forName("com.tuinity.tuinity.config.TuinityConfig");
29+
return "Tuinity";
30+
} catch (ClassNotFoundException e1) {
31+
try {
32+
Class.forName("com.destroystokyo.paper.PaperConfig");
33+
return "Paper";
34+
} catch (ClassNotFoundException e2) {
35+
try {
36+
Class.forName("org.spigotmc.SpigotConfig");
37+
return "Spigot";
38+
} catch (ClassNotFoundException e3) {
39+
return "Unknown";
40+
}
41+
}
42+
}
43+
}
44+
}
45+
46+
}

0 commit comments

Comments
 (0)