Skip to content

Commit dd5cfda

Browse files
committed
Add additional endpoints
1 parent 7d7df44 commit dd5cfda

3 files changed

Lines changed: 57 additions & 40 deletions

File tree

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# LittleWeb
22
Spigot plugin that exposes a REST API for developers to consume
33

4-
Requires plugin [LittleLink](https://github.com/Pequla/LittleLink/releases/latest)
4+
> Requires plugin [LittleLink](https://github.com/Pequla/LittleLink/releases/latest)
55
66
## Configuration
77

@@ -217,6 +217,12 @@ Sample response:
217217

218218
> When there are no players online the `list` will be returned as an empty array
219219

220+
There are also additional endpoints for targeting specific fields:
221+
222+
- GET `/api/status/players` (Returns only the `players` object)
223+
- GET `/api/status/plugins` (Returns only the `plugins` array)
224+
- GET `/api/status/world` (Returns only the `world` object)
225+
220226
### GET `/api/user`
221227

222228
> The `uuid` query parameter is mandatory. So the example url should be `/api/user?uuid=69c154a4-0a6a-4578-b169-c4be379e1e8e`

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66

7-
<groupId>com.pequla.link</groupId>
7+
<groupId>com.pequla</groupId>
88
<artifactId>little-web</artifactId>
9-
<version>1.3</version>
9+
<version>1.4</version>
1010
<packaging>jar</packaging>
1111

1212
<name>LittleWeb</name>
@@ -79,7 +79,7 @@
7979
<dependency>
8080
<groupId>com.pequla</groupId>
8181
<artifactId>little-link</artifactId>
82-
<version>1.7</version>
82+
<version>1.8</version>
8383
<scope>provided</scope>
8484
</dependency>
8585
<dependency>

src/main/java/com/pequla/link/LittleWeb.java

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.fasterxml.jackson.databind.ObjectMapper;
55
import com.pequla.link.model.*;
66
import com.pequla.link.service.DataService;
7-
import org.bukkit.ChatColor;
87
import org.bukkit.World;
98
import org.bukkit.plugin.PluginDescriptionFile;
109
import org.bukkit.plugin.PluginManager;
@@ -52,41 +51,17 @@ public void onEnable() {
5251
.name(p.getName())
5352
.build()).collect(Collectors.toList()))));
5453

55-
Spark.get("/api/status", (request, response) -> {
56-
HashSet<PlayerData> list = new HashSet<>();
57-
getServer().getOnlinePlayers().forEach(player -> list.add(PlayerData.builder()
58-
.id(player.getUniqueId().toString())
59-
.name(player.getName())
60-
.build())
61-
);
62-
List<PluginData> plugins = Arrays.stream(manager.getPlugins())
63-
.map(p -> {
64-
PluginDescriptionFile description = p.getDescription();
65-
return PluginData.builder()
66-
.name(p.getName())
67-
.website(p.getDescription().getWebsite())
68-
.description(description.getDescription())
69-
.version(description.getVersion())
70-
.authors(description.getAuthors())
71-
.build();
72-
}).collect(Collectors.toList());
73-
74-
World world = getServer().getWorlds().get(0);
75-
return mapper.writeValueAsString(ServerStatus.builder()
76-
.players(PlayerStatus.builder()
77-
.online(list.size())
78-
.max(getServer().getMaxPlayers())
79-
.list(list)
80-
.build())
81-
.plugins(plugins)
82-
.world(WorldData.builder()
83-
.seed(String.valueOf(world.getSeed()))
84-
.time(world.getTime())
85-
.type(getServer().getWorldType())
86-
.build())
87-
.version(getServer().getVersion())
88-
.build());
89-
});
54+
Spark.get("/api/status", (request, response) ->
55+
mapper.writeValueAsString(ServerStatus.builder()
56+
.players(getPlayerStatus())
57+
.plugins(getPluginData(manager))
58+
.world(getWorldData())
59+
.version(getServer().getVersion())
60+
.build()));
61+
62+
Spark.get("/api/status/players", (request, response) -> mapper.writeValueAsString(getPlayerStatus()));
63+
Spark.get("/api/status/plugins", (request, response) -> mapper.writeValueAsString(getPluginData(manager)));
64+
Spark.get("/api/status/world", (request, response) -> mapper.writeValueAsString(getWorldData()));
9065

9166
Spark.get("/api/user", (request, response) -> {
9267
String uuid = request.queryParams("uuid");
@@ -128,6 +103,42 @@ public void onDisable() {
128103
Spark.stop();
129104
}
130105

106+
public PlayerStatus getPlayerStatus() {
107+
HashSet<PlayerData> list = new HashSet<>();
108+
getServer().getOnlinePlayers().forEach(player -> list.add(PlayerData.builder()
109+
.id(player.getUniqueId().toString())
110+
.name(player.getName())
111+
.build())
112+
);
113+
return PlayerStatus.builder()
114+
.online(list.size())
115+
.max(getServer().getMaxPlayers())
116+
.list(list)
117+
.build();
118+
}
119+
120+
public List<PluginData> getPluginData(PluginManager manager) {
121+
return Arrays.stream(manager.getPlugins()).map(p -> {
122+
PluginDescriptionFile description = p.getDescription();
123+
return PluginData.builder()
124+
.name(p.getName())
125+
.website(p.getDescription().getWebsite())
126+
.description(description.getDescription())
127+
.version(description.getVersion())
128+
.authors(description.getAuthors())
129+
.build();
130+
}).collect(Collectors.toList());
131+
}
132+
133+
public WorldData getWorldData() {
134+
World world = getServer().getWorlds().get(0);
135+
return WorldData.builder()
136+
.seed(String.valueOf(world.getSeed()))
137+
.time(world.getTime())
138+
.type(getServer().getWorldType())
139+
.build();
140+
}
141+
131142
public static String generateError(String error) throws JsonProcessingException {
132143
ObjectMapper mapper = DataService.getInstance().getMapper();
133144
return mapper.writeValueAsString(WebError.builder()

0 commit comments

Comments
 (0)