Skip to content

Commit e7e90f7

Browse files
committed
fix: adventure bungeecord integration
1 parent bc2bc1a commit e7e90f7

File tree

7 files changed

+63
-14
lines changed

7 files changed

+63
-14
lines changed

api/build.gradle.kts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,42 @@ openApiGenerate {
9090
)
9191
}
9292

93-
tasks.compileJava {
93+
// Fix OpenAPI generator bug: oneOf schemas with Object option have wrong instanceof order
94+
// The generator checks "instanceof Object" before specific types, which always matches
95+
tasks.register("fixOpenApiGeneratedCode") {
9496
dependsOn("openApiGenerate")
97+
doLast {
98+
val modelsDir = file("$buildDir/generated/src/main/java/app/simplecloud/api/web/models")
99+
modelsDir.listFiles()?.filter { it.name.startsWith("V0") && it.name.endsWith(".java") }?.forEach { file ->
100+
var content = file.readText()
101+
102+
// Fix the write() method: move "instanceof Object" check to the end
103+
// Pattern: check for specific type first, then Object
104+
val writeMethodPattern = Regex(
105+
"""(// check if the actual instance is of the type `Object`\s+if \(value\.getActualInstance\(\) instanceof Object\) \{[^}]+\}\s+)(// check if the actual instance is of the type `(\w+)`\s+if \(value\.getActualInstance\(\) instanceof \3\) \{[^}]+\})""",
106+
RegexOption.DOT_MATCHES_ALL
107+
)
108+
content = content.replace(writeMethodPattern) { match ->
109+
// Swap: put specific type check before Object check
110+
"${match.groupValues[2]}\n ${match.groupValues[1]}"
111+
}
112+
113+
// Fix setActualInstance(): move "instanceof Object" check to the end
114+
val setInstancePattern = Regex(
115+
"""(public void setActualInstance\(Object instance\) \{\s+)(if \(instance instanceof Object\) \{\s+super\.setActualInstance\(instance\);\s+return;\s+\}\s+)(if \(instance instanceof (\w+)\) \{)""",
116+
RegexOption.DOT_MATCHES_ALL
117+
)
118+
content = content.replace(setInstancePattern) { match ->
119+
"${match.groupValues[1]}${match.groupValues[3]}"
120+
}
121+
122+
file.writeText(content)
123+
}
124+
}
125+
}
126+
127+
tasks.compileJava {
128+
dependsOn("fixOpenApiGeneratedCode")
95129
}
96130

97131
tasks.named<Javadoc>("javadoc") {

api/src/main/java/app/simplecloud/api/internal/group/GroupApiImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public CompletableFuture<Group> createGroup(CreateGroupRequest request) {
134134
ModelsCreateServerGroupResponse response = serverGroupsApi.v0ServerGroupsPost(
135135
this.options.getNetworkId(),
136136
this.options.getNetworkSecret(),
137-
apiRequest
137+
new V0ServerGroupsPostRequest(apiRequest)
138138
);
139139

140140
ModelsServerGroupSummary summary = new ModelsServerGroupSummary();
@@ -192,7 +192,7 @@ public CompletableFuture<Group> updateGroup(String id, UpdateGroupRequest reques
192192
this.options.getNetworkId(),
193193
this.options.getNetworkSecret(),
194194
id,
195-
apiRequest
195+
new V0ServerGroupsPutRequest(apiRequest)
196196
);
197197

198198
ModelsServerGroupSummary summary = new ModelsServerGroupSummary();
@@ -306,7 +306,7 @@ public CompletableFuture<Map<String, Object>> updateGroupProperties(String id, M
306306
this.options.getNetworkId(),
307307
this.options.getNetworkSecret(),
308308
id,
309-
request
309+
new V0PersistentServersPropertiesPatchRequest(request)
310310
);
311311

312312
Map<String, Object> result = response.getProperties();
@@ -328,7 +328,7 @@ public CompletableFuture<Map<String, Object>> deleteGroupProperties(String id, L
328328
this.options.getNetworkId(),
329329
this.options.getNetworkSecret(),
330330
id,
331-
request
331+
new V0PersistentServersPropertiesDeleteRequest(request)
332332
);
333333

334334
Map<String, Object> result = response.getProperties();

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
import app.simplecloud.api.web.models.ModelsServerSummary;
1919
import app.simplecloud.api.web.models.ModelsStartServerRequest;
2020
import app.simplecloud.api.web.models.ModelsStartServerResponse;
21+
import app.simplecloud.api.web.models.V0PersistentServersPropertiesDeleteRequest;
22+
import app.simplecloud.api.web.models.V0PersistentServersPropertiesPatchRequest;
23+
import app.simplecloud.api.web.models.V0ServersPatchRequest;
24+
import app.simplecloud.api.web.models.V0ServersPostRequest;
2125
import org.jetbrains.annotations.NotNull;
2226
import org.jetbrains.annotations.Nullable;
2327

@@ -198,7 +202,7 @@ public CompletableFuture<Server> startServer(StartServerRequest request) {
198202
ModelsStartServerResponse modelsStartServerResponse = serversApi.v0ServersPost(
199203
this.options.getNetworkId(),
200204
this.options.getNetworkSecret(),
201-
apiRequest
205+
new V0ServersPostRequest(apiRequest)
202206
);
203207
return new ServerImpl(modelsStartServerResponse.getServer());
204208
} catch (ApiException e) {
@@ -232,7 +236,7 @@ public CompletableFuture<Server> updateServer(String id, UpdateServerRequest req
232236
this.options.getNetworkId(),
233237
this.options.getNetworkSecret(),
234238
id,
235-
patchRequest
239+
new V0ServersPatchRequest(patchRequest)
236240
);
237241

238242
if (response.getServer() == null) {
@@ -282,7 +286,7 @@ public CompletableFuture<Map<String, Object>> updateServerProperties(String id,
282286
this.options.getNetworkId(),
283287
this.options.getNetworkSecret(),
284288
id,
285-
request
289+
new V0PersistentServersPropertiesPatchRequest(request)
286290
);
287291

288292
Map<String, Object> result = response.getProperties();
@@ -304,7 +308,7 @@ public CompletableFuture<Map<String, Object>> deleteServerProperties(String id,
304308
this.options.getNetworkId(),
305309
this.options.getNetworkSecret(),
306310
id,
307-
request
311+
new V0PersistentServersPropertiesDeleteRequest(request)
308312
);
309313

310314
Map<String, Object> result = response.getProperties();

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
`signing`
1010
}
1111

12-
val baseVersion = "0.1.0-platform.10"
12+
val baseVersion = "0.1.0-platform.11"
1313
val commitHash = System.getenv("COMMIT_HASH")
1414
val isSnapshot = commitHash != null
1515

gradle/libs.versions.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ velocity = "3.4.0-SNAPSHOT"
2020
bungeecord = "1.21-R0.4"
2121
paper = "1.21.4-R0.1-SNAPSHOT"
2222

23-
adventure-api = "4.25.0"
24-
adventure-gson = "4.25.0"
23+
adventure = "4.25.0"
24+
adventure-platform = "4.4.1"
2525

2626
minotaur = "2.8.7"
2727
sonatype-central-portal-publisher = "1.2.3"
@@ -47,8 +47,9 @@ paper-api = { module = "io.papermc.paper:paper-api", version.ref = "paper" }
4747
velocity = { module = "com.velocitypowered:velocity-api", version.ref = "velocity" }
4848
bungeecord = { module = "net.md-5:bungeecord-api", version.ref = "bungeecord" }
4949

50-
adventure-api = { module = "net.kyori:adventure-api", version.ref = "adventure-api" }
51-
adventure-gson = { module = "net.kyori:adventure-text-serializer-gson", version.ref = "adventure-gson" }
50+
adventure-api = { module = "net.kyori:adventure-api", version.ref = "adventure" }
51+
adventure-gson = { module = "net.kyori:adventure-text-serializer-gson", version.ref = "adventure" }
52+
adventure-bungeecord = { module = "net.kyori:adventure-platform-bungeecord", version.ref = "adventure-platform" }
5253

5354
[plugins]
5455
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }

platform/bungeecord/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55
dependencies {
66
compileOnly(rootProject.libs.bungeecord)
77
compileOnly(rootProject.libs.adventure.api)
8+
implementation(rootProject.libs.adventure.bungeecord)
89
implementation(project(":platform:shared"))
910
implementation(project(":api")) {
1011
exclude(group = "net.kyori")

platform/bungeecord/src/main/java/app/simplecloud/api/platform/bungeecord/BungeeCordApiProvider.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import app.simplecloud.api.internal.integration.player.PlayerIntegration;
55
import app.simplecloud.api.player.CloudPlayer;
66
import app.simplecloud.api.platform.shared.PlayerSynchronizer;
7+
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
78
import net.md_5.bungee.api.chat.TextComponent;
89
import net.md_5.bungee.api.connection.ProxiedPlayer;
910
import net.md_5.bungee.api.plugin.Plugin;
@@ -17,6 +18,8 @@ public class BungeeCordApiProvider extends Plugin {
1718
private PlayerSynchronizer playerSynchronizer;
1819
private PlayerIntegration playerIntegration;
1920

21+
private BungeeAudiences bungeeAudiences;
22+
2023
@Override
2124
public void onEnable() {
2225
this.cloudApi = CloudApi.create();
@@ -29,6 +32,8 @@ public void onEnable() {
2932
playerIntegration.onKick(this::handleKickRequest);
3033
playerIntegration.onConnect(this::handleConnectRequest);
3134

35+
this.bungeeAudiences = BungeeAudiences.create(this);
36+
3237
getLogger().info("SimpleCloud v3 API provider initialized!");
3338
getProxy().getPluginManager().registerListener(this, new PlayerConnectionListener(playerSynchronizer, playerIntegration));
3439

@@ -41,6 +46,10 @@ public void onDisable() {
4146
getLogger().info("SimpleCloud v3 API provider uninitialized!");
4247
playerSynchronizer.stop();
4348
playerIntegration.stop();
49+
50+
if (bungeeAudiences != null) {
51+
bungeeAudiences.close();
52+
}
4453
}
4554

4655
private CompletableFuture<Boolean> handleKickRequest(String playerUniqueId, String reason) {

0 commit comments

Comments
 (0)