Skip to content

Commit fef29a0

Browse files
committed
Update to new build logic
1 parent b58b71a commit fef29a0

13 files changed

+124
-87
lines changed

settings.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ include("netty-common")
3232
include("spigot")
3333
include("bungeecord")
3434
include("velocity")
35+
include("sponge")
3536
include("fabric")
3637
// Patch modules
3738
include(":patch:adventure-text-serializer-gson")

sponge/build.gradle

-53
This file was deleted.

sponge/build.gradle.kts

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import org.spongepowered.gradle.plugin.config.PluginLoaders
2+
import org.spongepowered.plugin.metadata.model.PluginDependency
3+
4+
plugins {
5+
packetevents.`shadow-conventions`
6+
packetevents.`library-conventions`
7+
id("org.spongepowered.gradle.plugin") version("2.0.2")
8+
}
9+
10+
repositories {
11+
maven("https://repo.spongepowered.org/repository/maven-public/") // Sponge
12+
maven("https://repo.viaversion.com/")
13+
}
14+
15+
sponge {
16+
apiVersion("11.1.0-SNAPSHOT")
17+
loader {
18+
name(PluginLoaders.JAVA_PLAIN)
19+
version("2.4.1-SNAPSHOT")
20+
}
21+
22+
plugin("packetevents") {
23+
displayName("PacketEvents")
24+
entrypoint("io.github.retrooper.packetevents.sponge.PacketEventsPlugin")
25+
license("GPL-3")
26+
dependency("spongeapi") {
27+
loadOrder(PluginDependency.LoadOrder.AFTER)
28+
optional(false)
29+
}
30+
dependency("viaversion") {
31+
version("*")
32+
loadOrder(PluginDependency.LoadOrder.AFTER)
33+
optional(true)
34+
}
35+
}
36+
}
37+
38+
dependencies {
39+
compileOnly(libs.netty)
40+
shadow(libs.adventure.nbt)
41+
shadow(project(":api", "shadow"))
42+
shadow(project(":netty-common"))
43+
44+
compileOnly(libs.via.version)
45+
}

sponge/src/main/java/io/github/retrooper/packetevents/sponge/InternalSpongeListener.java

+9
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@
2222
import com.github.retrooper.packetevents.util.FakeChannelUtil;
2323
import io.github.retrooper.packetevents.sponge.injector.SpongeChannelInjector;
2424
import net.kyori.adventure.text.Component;
25+
import org.spongepowered.api.Server;
2526
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
2627
import org.spongepowered.api.event.Listener;
2728
import org.spongepowered.api.event.Order;
2829
import org.spongepowered.api.event.filter.Getter;
30+
import org.spongepowered.api.event.lifecycle.StartedEngineEvent;
2931
import org.spongepowered.api.event.network.ServerSideConnectionEvent;
3032

3133
public class InternalSpongeListener {
@@ -49,4 +51,11 @@ public void onJoin(ServerSideConnectionEvent.Join event, @Getter("player") Serve
4951
// Set player object in the injectors
5052
injector.updatePlayer(user, player);
5153
}
54+
55+
@Listener(order = Order.EARLY)
56+
public void onStart(StartedEngineEvent<Server> event) {
57+
if (PacketEvents.getAPI().getSettings().shouldCheckForUpdates()) {
58+
PacketEvents.getAPI().getUpdateChecker().handleUpdateCheck();
59+
}
60+
}
5261
}

sponge/src/main/java/io/github/retrooper/packetevents/sponge/PacketEventsPlugin.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ public void onServerStart(final StartingEngineEvent<Server> event) {
5353
PacketEvents.getAPI().load();
5454

5555
// Register your listeners
56-
// TODO disable debug
57-
PacketEvents.getAPI().getSettings().debug(true).downsampleColors(false).bStats(true).checkForUpdates(true).timeStampMode(TimeStampMode.MILLIS).reEncodeByDefault(true);
56+
PacketEvents.getAPI().getSettings().debug(false).downsampleColors(false).checkForUpdates(true).timeStampMode(TimeStampMode.MILLIS).reEncodeByDefault(true);
5857
PacketEvents.getAPI().init();
5958

6059
SimplePacketListenerAbstract listener = new SimplePacketListenerAbstract(PacketListenerPriority.HIGH) {

sponge/src/main/java/io/github/retrooper/packetevents/sponge/factory/SpongePacketEventsBuilder.java

+9-10
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.spongepowered.plugin.PluginContainer;
4747

4848
public class SpongePacketEventsBuilder {
49+
4950
private static PacketEventsAPI<PluginContainer> API_INSTANCE;
5051

5152
public static void clearBuildCache() {
@@ -81,6 +82,7 @@ public static PacketEventsAPI<PluginContainer> buildNoCache(PluginContainer plug
8182
private final LogManager logManager = new SpongeLogManager();
8283
private boolean loaded;
8384
private boolean initialized;
85+
private boolean terminated;
8486
private boolean lateBind = false;
8587

8688
@Override
@@ -127,20 +129,11 @@ public boolean isLoaded() {
127129

128130
@Override
129131
public void init() {
130-
//Load if we haven't loaded already
132+
// Load if we haven't loaded already
131133
load();
132134

133135
if (initialized) return;
134136

135-
if (settings.shouldCheckForUpdates()) {
136-
getUpdateChecker().handleUpdateCheck();
137-
}
138-
139-
if (settings.isbStatsEnabled()) {
140-
// TODO: how do we do this? bStats wants @Inject but that won't work here.
141-
// https://github.com/Bastian/bstats-metrics/blob/1.x.x/bstats-sponge/src/examples/java/ExamplePlugin.java
142-
}
143-
144137
Sponge.eventManager().registerListeners(plugin, new InternalSpongeListener());
145138

146139
if (lateBind) {
@@ -180,9 +173,15 @@ public void terminate() {
180173
// Unregister all listeners. Because if we attempt to reload, we will end up with duplicate listeners.
181174
getEventManager().unregisterAllListeners();
182175
initialized = false;
176+
terminated = true;
183177
}
184178
}
185179

180+
@Override
181+
public boolean isTerminated() {
182+
return terminated;
183+
}
184+
186185
@Override
187186
public PluginContainer getPlugin() {
188187
return plugin;

sponge/src/main/java/io/github/retrooper/packetevents/sponge/injector/handlers/PacketEventsDecoder.java

+28-3
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,24 @@
1818

1919
package io.github.retrooper.packetevents.sponge.injector.handlers;
2020

21+
import com.github.retrooper.packetevents.PacketEvents;
2122
import com.github.retrooper.packetevents.exception.PacketProcessException;
23+
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
2224
import com.github.retrooper.packetevents.protocol.ConnectionState;
2325
import com.github.retrooper.packetevents.protocol.player.User;
2426
import com.github.retrooper.packetevents.util.ExceptionUtil;
2527
import com.github.retrooper.packetevents.util.PacketEventsImplHelper;
28+
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDisconnect;
2629
import io.github.retrooper.packetevents.sponge.injector.connection.ServerConnectionInitializer;
2730
import io.github.retrooper.packetevents.sponge.util.SpongeReflectionUtil;
2831
import io.netty.buffer.ByteBuf;
2932
import io.netty.channel.ChannelHandlerContext;
3033
import io.netty.handler.codec.MessageToMessageDecoder;
34+
import net.kyori.adventure.text.Component;
35+
import org.spongepowered.api.Sponge;
3136
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
37+
import org.spongepowered.api.scheduler.Task;
38+
import org.spongepowered.plugin.PluginContainer;
3239

3340
import java.util.List;
3441

@@ -49,8 +56,8 @@ public PacketEventsDecoder(PacketEventsDecoder decoder) {
4956
}
5057

5158
public void read(ChannelHandlerContext ctx, ByteBuf input, List<Object> out) throws Exception {
52-
PacketEventsImplHelper.handleServerBoundPacket(ctx.channel(), user, player, input, true);
53-
out.add(input.retain());
59+
Object buffer = PacketEventsImplHelper.handleServerBoundPacket(ctx.channel(), user, player, input, true);
60+
out.add(ByteBufHelper.retain(buffer));
5461
}
5562

5663
@Override
@@ -68,7 +75,25 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws E
6875
if (ExceptionUtil.isException(cause, PacketProcessException.class)
6976
&& !SpongeReflectionUtil.isMinecraftServerInstanceDebugging()
7077
&& (user != null && user.getDecoderState() != ConnectionState.HANDSHAKING)) {
71-
cause.printStackTrace();
78+
if (PacketEvents.getAPI().getSettings().isFullStackTraceEnabled()) {
79+
cause.printStackTrace();
80+
} else {
81+
PacketEvents.getAPI().getLogManager().warn(cause.getMessage());
82+
}
83+
84+
if (PacketEvents.getAPI().getSettings().isKickOnPacketExceptionEnabled()) {
85+
try {
86+
user.sendPacket(new WrapperPlayServerDisconnect(Component.text("Invalid packet")));
87+
} catch (Exception ignored) { // There may (?) be an exception if the player is in the wrong state...
88+
// Do nothing.
89+
}
90+
user.closeConnection();
91+
if (player != null) {
92+
Sponge.server().scheduler().submit(Task.builder().plugin((PluginContainer) PacketEvents.getAPI().getPlugin()).execute(() -> player.kick(Component.text("Invalid packet"))).build());
93+
}
94+
95+
PacketEvents.getAPI().getLogManager().warn("Disconnected " + user.getProfile().getName() + " due to invalid packet!");
96+
}
7297
}
7398
}
7499

sponge/src/main/java/io/github/retrooper/packetevents/sponge/manager/protocol/ProtocolManagerImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ public void receivePacket(Object channel, Object byteBuf) {
9090
if (ChannelHelper.isOpen(channel)) {
9191
List<String> handlerNames = ChannelHelper.pipelineHandlerNames(channel);
9292
//Account for ViaVersion
93-
if (handlerNames.contains("encoder")) {
94-
ChannelHelper.fireChannelReadInContext(channel, "decoder", byteBuf);
93+
if (handlerNames.contains("via-encoder")) {
94+
ChannelHelper.fireChannelReadInContext(channel, "via-decoder", byteBuf);
9595
} else if (handlerNames.contains("decompress")) {
9696
//We will have to just skip through the minecraft server's decompression handler
9797
ChannelHelper.fireChannelReadInContext(channel, "decompress", byteBuf);

sponge/src/main/java/io/github/retrooper/packetevents/sponge/manager/server/ServerManagerImpl.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ private ServerVersion resolveVersionNoCache() {
3636

3737
// Our PEVersion class can parse this version and detect if it is a newer version than what is currently supported
3838
// and account for that properly
39-
PEVersion version = new PEVersion(minecraftRelease);
40-
PEVersion latestVersion = new PEVersion(ServerVersion.getLatest().getReleaseName());
39+
PEVersion version = PEVersion.fromString(minecraftRelease);
40+
PEVersion latestVersion = PEVersion.fromString(ServerVersion.getLatest().getReleaseName());
4141
if (version.isNewerThan(latestVersion)) {
4242
//We do not support this version yet, so let us warn the user
43-
plugin.logger().warn("[packetevents] We currently do not support the minecraft version "
44-
+ version + ", so things might break. PacketEvents will behave as if the minecraft version were "
45-
+ latestVersion + "!");
43+
plugin.logger().warn("[packetevents] We currently do not support the minecraft version {}," +
44+
" so things might break. " +
45+
"PacketEvents will behave as if the minecraft version were {}!", version, latestVersion);
4646
return ServerVersion.getLatest();
4747
}
4848

@@ -53,7 +53,7 @@ private ServerVersion resolveVersionNoCache() {
5353
}
5454
}
5555

56-
plugin.logger().warn("[packetevents] Your server software is preventing us from checking the server version. This is what we found: " + minecraftRelease + ". We will assume the server version is " + fallbackVersion.name() + "...");
56+
plugin.logger().warn("[packetevents] Your server software is preventing us from checking the server version. This is what we found: {}. We will assume the server version is {}...", minecraftRelease, fallbackVersion.name());
5757
return fallbackVersion;
5858
}
5959

sponge/src/main/java/io/github/retrooper/packetevents/sponge/netty/buffer/ByteBufOperatorModernImpl.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ public short readShort(Object buffer) {
7979
return ((ByteBuf)buffer).readShort();
8080
}
8181

82+
@Override
83+
public int readMedium(Object buffer) {
84+
return ((ByteBuf)buffer).readMedium();
85+
}
86+
8287
@Override
8388
public int readInt(Object buffer) {
8489
return ((ByteBuf)buffer).readInt();
@@ -105,6 +110,12 @@ public void writeShort(Object buffer, int value) {
105110
((ByteBuf)buffer).writeShort(value);
106111
}
107112

113+
114+
@Override
115+
public void writeMedium(Object buffer, int value) {
116+
((ByteBuf)buffer).writeMedium(value);
117+
}
118+
108119
@Override
109120
public void writeInt(Object buffer, int value) {
110121
((ByteBuf)buffer).writeInt(value);
@@ -192,7 +203,7 @@ public Object writeBytes(Object buffer, byte[] bytes, int offset, int length) {
192203

193204
@Override
194205
public void readBytes(Object buffer, byte[] bytes) {
195-
((ByteBuf)buffer).readBytes(bytes);
206+
((ByteBuf)buffer).readBytes(bytes);
196207
}
197208

198209
@Override

sponge/src/main/java/io/github/retrooper/packetevents/sponge/util/SpongeConversionUtil.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
2424
import org.spongepowered.api.block.BlockState;
2525

26-
public class SpongeConversionUtil {
26+
public final class SpongeConversionUtil {
2727

2828
public static ItemStack fromSpongeItemStack(org.spongepowered.api.item.inventory.ItemStack itemStack) {
2929
return SpongeReflectionUtil.decodeSpongeItemStack(itemStack);

sponge/src/main/java/io/github/retrooper/packetevents/sponge/util/SpongeReflectionUtil.java

+10-8
Original file line numberDiff line numberDiff line change
@@ -240,14 +240,16 @@ public static Object getPlayerConnection(ServerPlayer player) {
240240

241241
public static com.github.retrooper.packetevents.protocol.item.ItemStack decodeSpongeItemStack(ItemStack in) {
242242
Object buffer = PooledByteBufAllocator.DEFAULT.buffer();
243-
//3 reflection calls
244-
Object packetDataSerializer = createPacketDataSerializer(buffer);
245-
writeNMSItemStackPacketDataSerializer(packetDataSerializer, in);
246-
//No more reflection from here on.
247-
PacketWrapper<?> wrapper = PacketWrapper.createUniversalPacketWrapper(buffer);
248-
com.github.retrooper.packetevents.protocol.item.ItemStack stack = wrapper.readItemStack();
249-
ByteBufHelper.release(buffer);
250-
return stack;
243+
try {
244+
// 3 reflection calls
245+
Object packetDataSerializer = createPacketDataSerializer(buffer);
246+
writeNMSItemStackPacketDataSerializer(packetDataSerializer, in);
247+
// No more reflection from here on.
248+
PacketWrapper<?> wrapper = PacketWrapper.createUniversalPacketWrapper(buffer);
249+
return wrapper.readItemStack();
250+
} finally {
251+
ByteBufHelper.release(buffer);
252+
}
251253
}
252254

253255
public static ItemStack encodeSpongeItemStack(com.github.retrooper.packetevents.protocol.item.ItemStack in) {

sponge/src/main/java/io/github/retrooper/packetevents/sponge/util/viaversion/ViaVersionUtil.java

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ private static void load() {
4242

4343
public static void checkIfViaIsPresent() {
4444
boolean present = Sponge.pluginManager().plugin("viaversion").isPresent();
45-
System.out.println("via present? " + present);
4645
available = present ? ViaState.ENABLED : ViaState.DISABLED;
4746
}
4847

0 commit comments

Comments
 (0)