Update to new build logic

This commit is contained in:
SamB440 committed 2024-10-13 21:30:17 +01:00
1 parent b58b71a5b1
commit fef29a0697
13 files changed
+124 -87

No files matched your search

+1
View File
@@ -32,6 +32,7 @@ include("netty-common")
include("spigot")
include("bungeecord")
include("velocity")
include("sponge")
include("fabric")
// Patch modules
include(":patch:adventure-text-serializer-gson")
-53
View File
@@ -1,53 +0,0 @@
import org.spongepowered.gradle.plugin.config.PluginLoaders
import org.spongepowered.plugin.metadata.model.PluginDependency
plugins {
id("org.spongepowered.gradle.plugin") version("2.0.2")
}
repositories {
maven { url 'https://repo.spongepowered.org/repository/maven-public/' } // Sponge
maven { url 'https://repo.viaversion.com/' }
}
sponge {
apiVersion("11.0.0-SNAPSHOT")
loader {
name(PluginLoaders.JAVA_PLAIN)
version("2.2.1")
}
plugin("packetevents") {
displayName("PacketEvents")
entrypoint("io.github.retrooper.packetevents.sponge.PacketEventsPlugin")
license("GPL-3")
dependency("spongeapi") {
loadOrder(PluginDependency.LoadOrder.AFTER)
optional(false)
}
dependency("viaversion") {
version("*")
loadOrder(PluginDependency.LoadOrder.AFTER)
optional(true)
}
}
}
shadowJar {
relocate 'net.kyori.adventure.text.serializer.gson', 'io.github.retrooper.packetevents.adventure.serializer.gson'
relocate 'net.kyori.adventure.text.serializer.legacy', 'io.github.retrooper.packetevents.adventure.serializer.legacy'
dependencies {
exclude(dependency('com.google.code.gson:gson:2.8.0'))
exclude(dependency('com.google.code.gson:gson:2.8.5'))
exclude(dependency('com.google.code.gson:gson:2.8.8'))
}
}
dependencies {
compileOnly 'io.netty:netty-all:4.1.75.Final'
api project(':api')
api project(':netty-common')
api(adventureDependencies)
compileOnly 'com.viaversion:viaversion:4.5.0'
}
+45
View File
@@ -0,0 +1,45 @@
import org.spongepowered.gradle.plugin.config.PluginLoaders
import org.spongepowered.plugin.metadata.model.PluginDependency
plugins {
packetevents.`shadow-conventions`
packetevents.`library-conventions`
id("org.spongepowered.gradle.plugin") version("2.0.2")
}
repositories {
maven("https://repo.spongepowered.org/repository/maven-public/") // Sponge
maven("https://repo.viaversion.com/")
}
sponge {
apiVersion("11.1.0-SNAPSHOT")
loader {
name(PluginLoaders.JAVA_PLAIN)
version("2.4.1-SNAPSHOT")
}
plugin("packetevents") {
displayName("PacketEvents")
entrypoint("io.github.retrooper.packetevents.sponge.PacketEventsPlugin")
license("GPL-3")
dependency("spongeapi") {
loadOrder(PluginDependency.LoadOrder.AFTER)
optional(false)
}
dependency("viaversion") {
version("*")
loadOrder(PluginDependency.LoadOrder.AFTER)
optional(true)
}
}
}
dependencies {
compileOnly(libs.netty)
shadow(libs.adventure.nbt)
shadow(project(":api", "shadow"))
shadow(project(":netty-common"))
compileOnly(libs.via.version)
}
@@ -22,10 +22,12 @@ import com.github.retrooper.packetevents.protocol.player.User;
import com.github.retrooper.packetevents.util.FakeChannelUtil;
import io.github.retrooper.packetevents.sponge.injector.SpongeChannelInjector;
import net.kyori.adventure.text.Component;
import org.spongepowered.api.Server;
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.Order;
import org.spongepowered.api.event.filter.Getter;
import org.spongepowered.api.event.lifecycle.StartedEngineEvent;
import org.spongepowered.api.event.network.ServerSideConnectionEvent;
public class InternalSpongeListener {
@@ -49,4 +51,11 @@ public class InternalSpongeListener {
// Set player object in the injectors
injector.updatePlayer(user, player);
}
@Listener(order = Order.EARLY)
public void onStart(StartedEngineEvent<Server> event) {
if (PacketEvents.getAPI().getSettings().shouldCheckForUpdates()) {
PacketEvents.getAPI().getUpdateChecker().handleUpdateCheck();
}
}
}
@@ -53,8 +53,7 @@ public class PacketEventsPlugin {
PacketEvents.getAPI().load();
// Register your listeners
// TODO disable debug
PacketEvents.getAPI().getSettings().debug(true).downsampleColors(false).bStats(true).checkForUpdates(true).timeStampMode(TimeStampMode.MILLIS).reEncodeByDefault(true);
PacketEvents.getAPI().getSettings().debug(false).downsampleColors(false).checkForUpdates(true).timeStampMode(TimeStampMode.MILLIS).reEncodeByDefault(true);
PacketEvents.getAPI().init();
SimplePacketListenerAbstract listener = new SimplePacketListenerAbstract(PacketListenerPriority.HIGH) {
@@ -46,6 +46,7 @@ import org.spongepowered.api.scheduler.Task;
import org.spongepowered.plugin.PluginContainer;
public class SpongePacketEventsBuilder {
private static PacketEventsAPI<PluginContainer> API_INSTANCE;
public static void clearBuildCache() {
@@ -81,6 +82,7 @@ public class SpongePacketEventsBuilder {
private final LogManager logManager = new SpongeLogManager();
private boolean loaded;
private boolean initialized;
private boolean terminated;
private boolean lateBind = false;
@Override
@@ -127,20 +129,11 @@ public class SpongePacketEventsBuilder {
@Override
public void init() {
//Load if we haven't loaded already
// Load if we haven't loaded already
load();
if (initialized) return;
if (settings.shouldCheckForUpdates()) {
getUpdateChecker().handleUpdateCheck();
}
if (settings.isbStatsEnabled()) {
// TODO: how do we do this? bStats wants @Inject but that won't work here.
// https://github.com/Bastian/bstats-metrics/blob/1.x.x/bstats-sponge/src/examples/java/ExamplePlugin.java
}
Sponge.eventManager().registerListeners(plugin, new InternalSpongeListener());
if (lateBind) {
@@ -180,9 +173,15 @@ public class SpongePacketEventsBuilder {
// Unregister all listeners. Because if we attempt to reload, we will end up with duplicate listeners.
getEventManager().unregisterAllListeners();
initialized = false;
terminated = true;
}
}
@Override
public boolean isTerminated() {
return terminated;
}
@Override
public PluginContainer getPlugin() {
return plugin;
@@ -18,17 +18,24 @@
package io.github.retrooper.packetevents.sponge.injector.handlers;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.ConnectionState;
import com.github.retrooper.packetevents.protocol.player.User;
import com.github.retrooper.packetevents.util.ExceptionUtil;
import com.github.retrooper.packetevents.util.PacketEventsImplHelper;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDisconnect;
import io.github.retrooper.packetevents.sponge.injector.connection.ServerConnectionInitializer;
import io.github.retrooper.packetevents.sponge.util.SpongeReflectionUtil;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;
import net.kyori.adventure.text.Component;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
import org.spongepowered.api.scheduler.Task;
import org.spongepowered.plugin.PluginContainer;
import java.util.List;
@@ -49,8 +56,8 @@ public class PacketEventsDecoder extends MessageToMessageDecoder<ByteBuf> {
}
public void read(ChannelHandlerContext ctx, ByteBuf input, List<Object> out) throws Exception {
PacketEventsImplHelper.handleServerBoundPacket(ctx.channel(), user, player, input, true);
out.add(input.retain());
Object buffer = PacketEventsImplHelper.handleServerBoundPacket(ctx.channel(), user, player, input, true);
out.add(ByteBufHelper.retain(buffer));
}
@Override
@@ -68,7 +75,25 @@ public class PacketEventsDecoder extends MessageToMessageDecoder<ByteBuf> {
if (ExceptionUtil.isException(cause, PacketProcessException.class)
&& !SpongeReflectionUtil.isMinecraftServerInstanceDebugging()
&& (user != null && user.getDecoderState() != ConnectionState.HANDSHAKING)) {
cause.printStackTrace();
if (PacketEvents.getAPI().getSettings().isFullStackTraceEnabled()) {
cause.printStackTrace();
} else {
PacketEvents.getAPI().getLogManager().warn(cause.getMessage());
}
if (PacketEvents.getAPI().getSettings().isKickOnPacketExceptionEnabled()) {
try {
user.sendPacket(new WrapperPlayServerDisconnect(Component.text("Invalid packet")));
} catch (Exception ignored) { // There may (?) be an exception if the player is in the wrong state...
// Do nothing.
}
user.closeConnection();
if (player != null) {
Sponge.server().scheduler().submit(Task.builder().plugin((PluginContainer) PacketEvents.getAPI().getPlugin()).execute(() -> player.kick(Component.text("Invalid packet"))).build());
}
PacketEvents.getAPI().getLogManager().warn("Disconnected " + user.getProfile().getName() + " due to invalid packet!");
}
}
}
@@ -90,8 +90,8 @@ public class ProtocolManagerImpl implements ProtocolManager {
if (ChannelHelper.isOpen(channel)) {
List<String> handlerNames = ChannelHelper.pipelineHandlerNames(channel);
//Account for ViaVersion
if (handlerNames.contains("encoder")) {
ChannelHelper.fireChannelReadInContext(channel, "decoder", byteBuf);
if (handlerNames.contains("via-encoder")) {
ChannelHelper.fireChannelReadInContext(channel, "via-decoder", byteBuf);
} else if (handlerNames.contains("decompress")) {
//We will have to just skip through the minecraft server's decompression handler
ChannelHelper.fireChannelReadInContext(channel, "decompress", byteBuf);
@@ -36,13 +36,13 @@ public class ServerManagerImpl implements ServerManager {
// Our PEVersion class can parse this version and detect if it is a newer version than what is currently supported
// and account for that properly
PEVersion version = new PEVersion(minecraftRelease);
PEVersion latestVersion = new PEVersion(ServerVersion.getLatest().getReleaseName());
PEVersion version = PEVersion.fromString(minecraftRelease);
PEVersion latestVersion = PEVersion.fromString(ServerVersion.getLatest().getReleaseName());
if (version.isNewerThan(latestVersion)) {
//We do not support this version yet, so let us warn the user
plugin.logger().warn("[packetevents] We currently do not support the minecraft version "
+ version + ", so things might break. PacketEvents will behave as if the minecraft version were "
+ latestVersion + "!");
plugin.logger().warn("[packetevents] We currently do not support the minecraft version {}," +
" so things might break. " +
"PacketEvents will behave as if the minecraft version were {}!", version, latestVersion);
return ServerVersion.getLatest();
}
@@ -53,7 +53,7 @@ public class ServerManagerImpl implements ServerManager {
}
}
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() + "...");
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());
return fallbackVersion;
}
@@ -79,6 +79,11 @@ public class ByteBufOperatorModernImpl implements ByteBufOperator {
return ((ByteBuf)buffer).readShort();
}
@Override
public int readMedium(Object buffer) {
return ((ByteBuf)buffer).readMedium();
}
@Override
public int readInt(Object buffer) {
return ((ByteBuf)buffer).readInt();
@@ -105,6 +110,12 @@ public class ByteBufOperatorModernImpl implements ByteBufOperator {
((ByteBuf)buffer).writeShort(value);
}
@Override
public void writeMedium(Object buffer, int value) {
((ByteBuf)buffer).writeMedium(value);
}
@Override
public void writeInt(Object buffer, int value) {
((ByteBuf)buffer).writeInt(value);
@@ -192,7 +203,7 @@ public class ByteBufOperatorModernImpl implements ByteBufOperator {
@Override
public void readBytes(Object buffer, byte[] bytes) {
((ByteBuf)buffer).readBytes(bytes);
((ByteBuf)buffer).readBytes(bytes);
}
@Override
@@ -23,7 +23,7 @@ import com.github.retrooper.packetevents.protocol.item.ItemStack;
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
import org.spongepowered.api.block.BlockState;
public class SpongeConversionUtil {
public final class SpongeConversionUtil {
public static ItemStack fromSpongeItemStack(org.spongepowered.api.item.inventory.ItemStack itemStack) {
return SpongeReflectionUtil.decodeSpongeItemStack(itemStack);
@@ -240,14 +240,16 @@ public final class SpongeReflectionUtil {
public static com.github.retrooper.packetevents.protocol.item.ItemStack decodeSpongeItemStack(ItemStack in) {
Object buffer = PooledByteBufAllocator.DEFAULT.buffer();
//3 reflection calls
Object packetDataSerializer = createPacketDataSerializer(buffer);
writeNMSItemStackPacketDataSerializer(packetDataSerializer, in);
//No more reflection from here on.
PacketWrapper<?> wrapper = PacketWrapper.createUniversalPacketWrapper(buffer);
com.github.retrooper.packetevents.protocol.item.ItemStack stack = wrapper.readItemStack();
ByteBufHelper.release(buffer);
return stack;
try {
// 3 reflection calls
Object packetDataSerializer = createPacketDataSerializer(buffer);
writeNMSItemStackPacketDataSerializer(packetDataSerializer, in);
// No more reflection from here on.
PacketWrapper<?> wrapper = PacketWrapper.createUniversalPacketWrapper(buffer);
return wrapper.readItemStack();
} finally {
ByteBufHelper.release(buffer);
}
}
public static ItemStack encodeSpongeItemStack(com.github.retrooper.packetevents.protocol.item.ItemStack in) {
@@ -42,7 +42,6 @@ public class ViaVersionUtil {
public static void checkIfViaIsPresent() {
boolean present = Sponge.pluginManager().plugin("viaversion").isPresent();
System.out.println("via present? " + present);
available = present ? ViaState.ENABLED : ViaState.DISABLED;
}