Skip to content

Commit aad43a5

Browse files
committed
feat(sponge): Added support for SpongeAPI 14+
1 parent 37abaae commit aad43a5

File tree

12 files changed

+199
-10
lines changed

12 files changed

+199
-10
lines changed

backend/sponge/API-10/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ sponge {
2020
}
2121
plugin("signedvelocity") {
2222
displayName("SignedVelocity")
23-
entrypoint("io.github._4drian3d.signedvelocity.sponge.SignedVelocity")
23+
entrypoint("io.github._4drian3d.signedvelocity.sponge10.SignedVelocity")
2424
description(project.description)
2525
links {
2626
homepage("https://github.com/4drian3d/SignedVelocity")

backend/sponge/API-10/src/main/java/io/github/_4drian3d/signedvelocity/sponge/SignedVelocity.java renamed to backend/sponge/API-10/src/main/java/io/github/_4drian3d/signedvelocity/sponge10/SignedVelocity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
package io.github._4drian3d.signedvelocity.sponge;
1+
package io.github._4drian3d.signedvelocity.sponge10;
22

33
import com.google.inject.Inject;
44
import com.google.inject.Injector;
55
import io.github._4drian3d.signedvelocity.sponge.common.handler.ProxyDataHandler;
66
import io.github._4drian3d.signedvelocity.sponge.common.listener.PlayerCommandListener;
77
import io.github._4drian3d.signedvelocity.sponge.common.listener.SignedListener;
88
import io.github._4drian3d.signedvelocity.sponge.common.modules.SignedModule;
9-
import io.github._4drian3d.signedvelocity.sponge.listener.DecorateChatListener;
9+
import io.github._4drian3d.signedvelocity.sponge10.listener.DecorateChatListener;
1010
import io.github._4drian3d.signedvelocity.sponge.common.listener.PlayerQuitListener;
11-
import io.github._4drian3d.signedvelocity.sponge.listener.SubmitChatListener;
11+
import io.github._4drian3d.signedvelocity.sponge10.listener.SubmitChatListener;
1212
import org.spongepowered.api.ResourceKey;
1313
import org.spongepowered.api.Server;
1414
import org.spongepowered.api.event.Listener;

backend/sponge/API-10/src/main/java/io/github/_4drian3d/signedvelocity/sponge/listener/DecorateChatListener.java renamed to backend/sponge/API-10/src/main/java/io/github/_4drian3d/signedvelocity/sponge10/listener/DecorateChatListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github._4drian3d.signedvelocity.sponge.listener;
1+
package io.github._4drian3d.signedvelocity.sponge10.listener;
22

33
import com.google.inject.Inject;
44
import com.google.inject.name.Named;

backend/sponge/API-10/src/main/java/io/github/_4drian3d/signedvelocity/sponge/listener/SubmitChatListener.java renamed to backend/sponge/API-10/src/main/java/io/github/_4drian3d/signedvelocity/sponge10/listener/SubmitChatListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github._4drian3d.signedvelocity.sponge.listener;
1+
package io.github._4drian3d.signedvelocity.sponge10.listener;
22

33
import com.google.inject.Inject;
44
import com.google.inject.name.Named;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import org.spongepowered.gradle.plugin.config.PluginLoaders
2+
import org.spongepowered.plugin.metadata.model.PluginDependency
3+
4+
plugins {
5+
id("org.spongepowered.gradle.plugin")
6+
alias(libs.plugins.shadow)
7+
}
8+
9+
dependencies {
10+
implementation(projects.signedvelocityBackendCommon)
11+
implementation(projects.signedvelocitySpongeCommon)
12+
implementation(projects.signedvelocitySponge10)
13+
}
14+
15+
sponge {
16+
apiVersion("14.0.0")
17+
license("GPL-3")
18+
loader {
19+
name(PluginLoaders.JAVA_PLAIN)
20+
version("1.0")
21+
}
22+
plugin("signedvelocity") {
23+
displayName("SignedVelocity")
24+
entrypoint("io.github._4drian3d.signedvelocity.sponge14.SignedVelocity")
25+
description(project.description)
26+
links {
27+
homepage("https://github.com/4drian3d/SignedVelocity")
28+
source("https://github.com/4drian3d/SignedVelocity")
29+
issues("https://github.com/4drian3d/SignedVelocity/issues")
30+
}
31+
contributor("4drian3d") {
32+
description("Lead Developer")
33+
}
34+
dependency("spongeapi") {
35+
loadOrder(PluginDependency.LoadOrder.AFTER)
36+
optional(false)
37+
}
38+
this.version("${project.version}-API14")
39+
}
40+
}
41+
42+
tasks {
43+
build {
44+
dependsOn(shadowJar)
45+
}
46+
shadowJar {
47+
archiveBaseName.set("${rootProject.name}-Sponge-14")
48+
archiveClassifier.set("")
49+
doLast {
50+
copy {
51+
from(archiveFile)
52+
into("${rootProject.projectDir}/build")
53+
}
54+
}
55+
}
56+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.github._4drian3d.signedvelocity.sponge14;
2+
3+
import com.google.inject.Inject;
4+
import com.google.inject.Injector;
5+
import io.github._4drian3d.signedvelocity.sponge10.listener.DecorateChatListener;
6+
import io.github._4drian3d.signedvelocity.sponge10.listener.SubmitChatListener;
7+
import io.github._4drian3d.signedvelocity.sponge14.handler.ProxyDataHandler;
8+
import io.github._4drian3d.signedvelocity.sponge.common.listener.PlayerCommandListener;
9+
import io.github._4drian3d.signedvelocity.sponge.common.listener.SignedListener;
10+
import io.github._4drian3d.signedvelocity.sponge.common.modules.SignedModule;
11+
import io.github._4drian3d.signedvelocity.sponge14.listener.PlayerQuitListener;
12+
import org.spongepowered.api.ResourceKey;
13+
import org.spongepowered.api.Server;
14+
import org.spongepowered.api.event.Listener;
15+
import org.spongepowered.api.event.lifecycle.StartedEngineEvent;
16+
import org.spongepowered.api.network.EngineConnectionState;
17+
import org.spongepowered.api.network.channel.raw.RawDataChannel;
18+
import org.spongepowered.plugin.builtin.jvm.Plugin;
19+
20+
import java.util.stream.Stream;
21+
22+
@Plugin("signedvelocity")
23+
public class SignedVelocity {
24+
@Inject
25+
private Injector injector;
26+
27+
@Listener
28+
public void onEngineStart(final StartedEngineEvent<Server> event) {
29+
this.injector = this.injector.createChildInjector(new SignedModule());
30+
31+
Stream.of(SubmitChatListener.class, DecorateChatListener.class, PlayerCommandListener.class, PlayerQuitListener.class)
32+
.map(injector::getInstance)
33+
.forEach(SignedListener::register);
34+
event.game()
35+
.channelManager()
36+
.ofType(ResourceKey.of("signedvelocity", "main"), RawDataChannel.class)
37+
.play()
38+
.addHandler(EngineConnectionState.Game.class, injector.getInstance(ProxyDataHandler.class));
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.github._4drian3d.signedvelocity.sponge14.handler;
2+
3+
import com.google.inject.Inject;
4+
import com.google.inject.name.Named;
5+
import io.github._4drian3d.signedvelocity.common.queue.SignedQueue;
6+
import io.github._4drian3d.signedvelocity.common.queue.SignedResult;
7+
import org.spongepowered.api.network.EngineConnectionState;
8+
import org.spongepowered.api.network.channel.ChannelBuf;
9+
import org.spongepowered.api.network.channel.raw.play.RawPlayDataHandler;
10+
11+
import java.util.UUID;
12+
13+
public final class ProxyDataHandler implements RawPlayDataHandler<EngineConnectionState.Game> {
14+
@Inject
15+
@Named("chat")
16+
private SignedQueue chatQueue;
17+
@Inject
18+
@Named("command")
19+
private SignedQueue commandQueue;
20+
21+
@Override
22+
public void handlePayload(final ChannelBuf data, final EngineConnectionState.Game connection) {
23+
final UUID playerId = UUID.fromString(data.readUTF());
24+
final String source = data.readUTF();
25+
final String result = data.readUTF();
26+
27+
final SignedQueue queue = switch (source) {
28+
case "COMMAND_RESULT" -> commandQueue;
29+
case "CHAT_RESULT" -> chatQueue;
30+
default -> throw new IllegalArgumentException("Invalid source " + source);
31+
};
32+
final SignedResult resulted = switch (result) {
33+
case "CANCEL" -> SignedResult.cancel();
34+
case "MODIFY" -> SignedResult.modify(data.readUTF());
35+
case "ALLOWED" -> SignedResult.allowed();
36+
default -> throw new IllegalArgumentException("Invalid result " + result);
37+
};
38+
queue.dataFrom(playerId).complete(resulted);
39+
}
40+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.github._4drian3d.signedvelocity.sponge14.listener;
2+
3+
import com.google.inject.Inject;
4+
import com.google.inject.name.Named;
5+
import io.github._4drian3d.signedvelocity.common.queue.SignedQueue;
6+
import io.github._4drian3d.signedvelocity.sponge.common.listener.SignedListener;
7+
import org.spongepowered.api.event.EventListenerRegistration;
8+
import org.spongepowered.api.event.EventManager;
9+
import org.spongepowered.api.event.Order;
10+
import org.spongepowered.api.event.network.ServerSideConnectionEvent;
11+
import org.spongepowered.api.network.EngineConnectionState;
12+
import org.spongepowered.plugin.PluginContainer;
13+
14+
import java.util.Optional;
15+
16+
public final class PlayerQuitListener implements SignedListener<ServerSideConnectionEvent.Disconnect> {
17+
@Inject
18+
@Named("chat")
19+
private SignedQueue chatQueue;
20+
@Inject
21+
@Named("command")
22+
private SignedQueue commandQueue;
23+
@Inject
24+
private EventManager eventManager;
25+
@Inject
26+
private PluginContainer pluginContainer;
27+
28+
@Override
29+
public void register() {
30+
eventManager.registerListener(
31+
EventListenerRegistration.builder(ServerSideConnectionEvent.Disconnect.class)
32+
.listener(this)
33+
.plugin(this.pluginContainer)
34+
.order(Order.DEFAULT)
35+
.beforeModifications(false)
36+
.build()
37+
);
38+
}
39+
40+
@Override
41+
public void handle(final ServerSideConnectionEvent.Disconnect event) {
42+
event.connection()
43+
.state()
44+
.flatMap(state -> state instanceof EngineConnectionState.Authenticated auth
45+
? Optional.of(auth.profile().uniqueId()) : Optional.empty())
46+
.ifPresent(playerUUID -> {
47+
this.chatQueue.removeData(playerUUID);
48+
this.commandQueue.removeData(playerUUID);
49+
});
50+
}
51+
}

backend/sponge/API-8/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ sponge {
2020
}
2121
plugin("signedvelocity") {
2222
displayName("SignedVelocity")
23-
entrypoint("io.github._4drian3d.signedvelocity.sponge.SignedVelocity")
23+
entrypoint("io.github._4drian3d.signedvelocity.sponge8.SignedVelocity")
2424
description(project.description)
2525
links {
2626
homepage("https://github.com/4drian3d/SignedVelocity")

backend/sponge/API-8/src/main/java/io/github/_4drian3d/signedvelocity/sponge/SignedVelocity.java renamed to backend/sponge/API-8/src/main/java/io/github/_4drian3d/signedvelocity/sponge8/SignedVelocity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github._4drian3d.signedvelocity.sponge;
1+
package io.github._4drian3d.signedvelocity.sponge8;
22

33
import com.google.inject.Inject;
44
import com.google.inject.Injector;
@@ -7,7 +7,7 @@
77
import io.github._4drian3d.signedvelocity.sponge.common.listener.PlayerQuitListener;
88
import io.github._4drian3d.signedvelocity.sponge.common.listener.SignedListener;
99
import io.github._4drian3d.signedvelocity.sponge.common.modules.SignedModule;
10-
import io.github._4drian3d.signedvelocity.sponge.listener.PlayerChatListener;
10+
import io.github._4drian3d.signedvelocity.sponge8.listener.PlayerChatListener;
1111
import org.spongepowered.api.ResourceKey;
1212
import org.spongepowered.api.Server;
1313
import org.spongepowered.api.event.Listener;

0 commit comments

Comments
 (0)