Skip to content

Commit 65737f0

Browse files
committed
refactor: migrate from kotlin to java for api platform plugins
1 parent 00d207e commit 65737f0

File tree

42 files changed

+2093
-593
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2093
-593
lines changed

api/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ tasks.named<ShadowJar>("shadowJar") {
3838
relocate("org.bouncycastle", "app.simplecloud.api.shaded.v${versionPath}.bouncycastle")
3939
relocate("org.intellij", "app.simplecloud.api.shaded.v${versionPath}.intellij")
4040
relocate("org.jetbrains", "app.simplecloud.api.shaded.v${versionPath}.jetbrains")
41-
relocate("kotlin", "app.simplecloud.api.shaded.v${versionPath}.kotlin")
4241

4342
relocate("google", "app.simplecloud.api.shaded.v${versionPath}.google")
4443
relocate("native", "app.simplecloud.api.shaded.v${versionPath}.native")

api/src/main/java/app/simplecloud/api/event/server/ServerUpdatedEvent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ public interface ServerUpdatedEvent {
4444
String getTimestamp();
4545
}
4646

47+

api/src/main/java/app/simplecloud/api/internal/event/server/ServerUpdatedEventImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,4 @@ private String convertServerTypeToString(build.buf.gen.simplecloud.controller.v2
104104
}
105105
}
106106

107+

api/src/main/java/app/simplecloud/api/internal/server/ServerApiImpl.java

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@
55
import app.simplecloud.api.server.ServerApi;
66
import app.simplecloud.api.server.ServerQuery;
77
import app.simplecloud.api.server.StartServerRequest;
8+
import app.simplecloud.api.server.UpdateServerRequest;
89
import app.simplecloud.api.web.ApiException;
910
import app.simplecloud.api.web.apis.ServersApi;
11+
import app.simplecloud.api.web.models.ModelsDeletePropertiesRequest;
12+
import app.simplecloud.api.web.models.ModelsDeletePropertiesResponse;
1013
import app.simplecloud.api.web.models.ModelsListServersResponse;
14+
import app.simplecloud.api.web.models.ModelsPatchPropertiesRequest;
15+
import app.simplecloud.api.web.models.ModelsPatchPropertiesResponse;
16+
import app.simplecloud.api.web.models.ModelsPatchServerRequest;
17+
import app.simplecloud.api.web.models.ModelsPatchServerResponse;
1118
import app.simplecloud.api.web.models.ModelsServerSummary;
1219
import app.simplecloud.api.web.models.ModelsStartServerRequest;
1320
import app.simplecloud.api.web.models.ModelsStartServerResponse;
21+
import org.jetbrains.annotations.NotNull;
1422
import org.jetbrains.annotations.Nullable;
1523

24+
import java.util.HashMap;
1625
import java.util.List;
26+
import java.util.Map;
1727
import java.util.concurrent.CompletableFuture;
1828

1929
public class ServerApiImpl implements ServerApi {
@@ -161,5 +171,98 @@ public CompletableFuture<Void> stopServer(String id) {
161171
}
162172
});
163173
}
174+
175+
@Override
176+
public CompletableFuture<Server> updateServer(String id, UpdateServerRequest request) {
177+
return CompletableFuture.supplyAsync(() -> {
178+
try {
179+
ModelsPatchServerRequest patchRequest = getModelsPatchServerRequest(request);
180+
181+
ModelsPatchServerResponse response = serversApi.v0ServersPatch(
182+
this.options.getNetworkId(),
183+
this.options.getNetworkSecret(),
184+
id,
185+
patchRequest
186+
);
187+
188+
if (response.getServer() == null) {
189+
throw new RuntimeException("Server update response did not contain server data");
190+
}
191+
192+
return new ServerImpl(response.getServer());
193+
} catch (ApiException e) {
194+
throw new RuntimeException(e);
195+
}
196+
});
197+
}
198+
199+
@NotNull
200+
private static ModelsPatchServerRequest getModelsPatchServerRequest(UpdateServerRequest request) {
201+
ModelsPatchServerRequest patchRequest = new ModelsPatchServerRequest();
202+
patchRequest.setMaxMemory(request.getMaxMemory());
203+
patchRequest.setMaxPlayers(request.getMaxPlayers());
204+
patchRequest.setMinMemory(request.getMinMemory());
205+
patchRequest.setProperties(request.getProperties());
206+
patchRequest.setPlayerCount(request.getPlayerCount());
207+
if (request.getState() != null) {
208+
patchRequest.setState(request.getState().name());
209+
}
210+
return patchRequest;
211+
}
212+
213+
@Override
214+
public CompletableFuture<Server> getCurrentServer() {
215+
String serverId = System.getenv("SIMPLECLOUD_UNIQUE_ID");
216+
if (serverId == null || serverId.isEmpty()) {
217+
return CompletableFuture.failedFuture(
218+
new IllegalStateException("SIMPLECLOUD_UNIQUE_ID environment variable is not set")
219+
);
220+
}
221+
return getServerById(serverId);
222+
}
223+
224+
@Override
225+
public CompletableFuture<Map<String, Object>> updateServerProperties(String id, Map<String, Object> properties) {
226+
return CompletableFuture.supplyAsync(() -> {
227+
try {
228+
ModelsPatchPropertiesRequest request = new ModelsPatchPropertiesRequest();
229+
request.setProperties(properties);
230+
231+
ModelsPatchPropertiesResponse response = serversApi.v0ServersPropertiesPatch(
232+
this.options.getNetworkId(),
233+
this.options.getNetworkSecret(),
234+
id,
235+
request
236+
);
237+
238+
Map<String, Object> result = response.getProperties();
239+
return result != null ? result : new HashMap<>();
240+
} catch (ApiException e) {
241+
throw new RuntimeException(e);
242+
}
243+
});
244+
}
245+
246+
@Override
247+
public CompletableFuture<Map<String, Object>> deleteServerProperties(String id, List<String> keys) {
248+
return CompletableFuture.supplyAsync(() -> {
249+
try {
250+
ModelsDeletePropertiesRequest request = new ModelsDeletePropertiesRequest();
251+
request.setKeys(keys);
252+
253+
ModelsDeletePropertiesResponse response = serversApi.v0ServersPropertiesDelete(
254+
this.options.getNetworkId(),
255+
this.options.getNetworkSecret(),
256+
id,
257+
request
258+
);
259+
260+
Map<String, Object> result = response.getProperties();
261+
return result != null ? result : new HashMap<>();
262+
} catch (ApiException e) {
263+
throw new RuntimeException(e);
264+
}
265+
});
266+
}
164267
}
165268

api/src/main/java/app/simplecloud/api/server/ServerApi.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.jetbrains.annotations.Nullable;
44

55
import java.util.List;
6+
import java.util.Map;
67
import java.util.concurrent.CompletableFuture;
78

89
/**
@@ -53,5 +54,39 @@ default CompletableFuture<List<Server>> getAllServers() {
5354
* @return a CompletableFuture that completes when the server stop is initiated
5455
*/
5556
CompletableFuture<Void> stopServer(String id);
57+
58+
/**
59+
* Updates an existing server instance.
60+
*
61+
* @param id the unique ID of the server to update
62+
* @param request the update request containing fields to update
63+
* @return a CompletableFuture that completes with the updated Server instance
64+
*/
65+
CompletableFuture<Server> updateServer(String id, UpdateServerRequest request);
66+
67+
/**
68+
* Retrieves the current server instance using the SIMPLECLOUD_UNIQUE_ID environment variable.
69+
*
70+
* @return a CompletableFuture that completes with the current server, or fails if not found
71+
*/
72+
CompletableFuture<Server> getCurrentServer();
73+
74+
/**
75+
* Updates server properties by merging with existing properties (deep merge).
76+
*
77+
* @param id the unique ID of the server
78+
* @param properties the properties to merge
79+
* @return a CompletableFuture that completes with the updated properties
80+
*/
81+
CompletableFuture<Map<String, Object>> updateServerProperties(String id, Map<String, Object> properties);
82+
83+
/**
84+
* Deletes specific property keys from a server.
85+
*
86+
* @param id the unique ID of the server
87+
* @param keys the property keys to delete
88+
* @return a CompletableFuture that completes with the remaining properties
89+
*/
90+
CompletableFuture<Map<String, Object>> deleteServerProperties(String id, List<String> keys);
5691
}
5792

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package app.simplecloud.api.server;
2+
3+
import org.jetbrains.annotations.Nullable;
4+
5+
import java.util.Map;
6+
7+
/**
8+
* Request object for updating an existing server instance.
9+
*/
10+
public class UpdateServerRequest {
11+
@Nullable
12+
private Integer playerCount;
13+
@Nullable
14+
private ServerState state;
15+
@Nullable
16+
private Map<String, Object> properties;
17+
@Nullable
18+
private Integer minMemory;
19+
@Nullable
20+
private Integer maxMemory;
21+
@Nullable
22+
private Integer maxPlayers;
23+
24+
public UpdateServerRequest() {
25+
}
26+
27+
@Nullable
28+
public Integer getPlayerCount() {
29+
return playerCount;
30+
}
31+
32+
public void setPlayerCount(@Nullable Integer playerCount) {
33+
this.playerCount = playerCount;
34+
}
35+
36+
@Nullable
37+
public ServerState getState() {
38+
return state;
39+
}
40+
41+
public void setState(@Nullable ServerState state) {
42+
this.state = state;
43+
}
44+
45+
@Nullable
46+
public Map<String, Object> getProperties() {
47+
return properties;
48+
}
49+
50+
public void setProperties(@Nullable Map<String, Object> properties) {
51+
this.properties = properties;
52+
}
53+
54+
@Nullable
55+
public Integer getMinMemory() {
56+
return minMemory;
57+
}
58+
59+
public void setMinMemory(@Nullable Integer minMemory) {
60+
this.minMemory = minMemory;
61+
}
62+
63+
@Nullable
64+
public Integer getMaxMemory() {
65+
return maxMemory;
66+
}
67+
68+
public void setMaxMemory(@Nullable Integer maxMemory) {
69+
this.maxMemory = maxMemory;
70+
}
71+
72+
@Nullable
73+
public Integer getMaxPlayers() {
74+
return maxPlayers;
75+
}
76+
77+
public void setMaxPlayers(@Nullable Integer maxPlayers) {
78+
this.maxPlayers = maxPlayers;
79+
}
80+
}
81+

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
22

33
plugins {
44
id("java")
5+
id("java-library")
56
alias(libs.plugins.shadow)
67
alias(libs.plugins.sonatype.central.portal.publisher)
78
`maven-publish`
@@ -32,6 +33,7 @@ tasks.named<ShadowJar>("shadowJar") {
3233

3334
subprojects {
3435
apply(plugin = "java")
36+
apply(plugin = "java-library")
3537
apply(plugin = "maven-publish")
3638
apply(plugin = "com.gradleup.shadow")
3739
apply(plugin = "org.gradle.signing")

platform/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
22

33
tasks.named("shadowJar", ShadowJar::class).configure {
4-
enabled = false
4+
enabled = true
55
}

platform/bungeecord/build.gradle.kts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,13 @@ plugins {
55
}
66

77
dependencies {
8-
implementation(rootProject.libs.kotlin.stdlib)
9-
implementation(rootProject.libs.kotlin.reflect)
10-
implementation(rootProject.libs.kotlin.coroutines)
118
compileOnly(rootProject.libs.bungeecord)
129
implementation(project(":platform:shared"))
13-
api(rootProject.libs.simplecloud.controller) {
14-
exclude(group = "org.jetbrains.kotlin")
15-
exclude(group = "org.jetbrains.kotlinx")
16-
}
17-
api(rootProject.libs.simplecloud.player) {
18-
exclude(group = "net.kyori")
19-
exclude(group = "org.jetbrains.kotlin")
20-
exclude(group = "org.jetbrains.kotlinx")
21-
}
10+
implementation(project(":api"))
2211
}
2312

2413
tasks.named("shadowJar", ShadowJar::class) {
14+
dependsOn(":api:shadowJar")
2515
mergeServiceFiles()
2616

2717
relocate("com.google.protobuf", "app.simplecloud.relocate.google.protobuf")
@@ -60,4 +50,4 @@ modrinth {
6050
loaders.add("waterfall")
6151
changelog.set("https://docs.simplecloud.app/changelog")
6252
syncBodyFrom.set(rootProject.file("README.md").readText())
63-
}
53+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package app.simplecloud.api.platform.bungeecord;
2+
3+
import app.simplecloud.api.CloudApi;
4+
import app.simplecloud.api.platform.shared.PlayerSynchronizer;
5+
import net.md_5.bungee.api.plugin.Plugin;
6+
7+
public class BungeeCordApiProvider extends Plugin {
8+
9+
private final CloudApi cloudApi = CloudApi.create();
10+
private final PlayerSynchronizer playerSynchronizer = new PlayerSynchronizer(
11+
cloudApi,
12+
() -> (long) getProxy().getOnlineCount()
13+
);
14+
15+
@Override
16+
public void onEnable() {
17+
getLogger().info("SimpleCloud v3 API provider initialized!");
18+
getProxy().getPluginManager().registerListener(this, new PlayerConnectionListener(playerSynchronizer));
19+
20+
playerSynchronizer.start();
21+
}
22+
23+
@Override
24+
public void onDisable() {
25+
getLogger().info("SimpleCloud v3 API provider uninitialized!");
26+
playerSynchronizer.stop();
27+
}
28+
}
29+

0 commit comments

Comments
 (0)