diff --git a/build.gradle.kts b/build.gradle.kts index 6b887d66..cbe3285c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,8 @@ subprojects { rootProject.libs.taterlib.lite.base, rootProject.libs.taterlib.lite.core, rootProject.libs.taterlib.lite.metadata, - rootProject.libs.taterlib.lite.muxins + rootProject.libs.taterlib.lite.muxins, + rootProject.libs.taterlib.lite.network ).forEach { mainCompileOnly(it) } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index ac95edd5..b6e37cb0 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -28,6 +28,7 @@ dependencies { compileOnly(libs.mixin) compileOnly(libs.netty.buffer) compileOnly(libs.netty.codec) + compileOnly(libs.netty.unix.common) compileOnly(libs.asm.tree) compileOnly(libs.entrypoint.spoof) @@ -35,6 +36,7 @@ dependencies { implementation(libs.taterlib.lite.core) implementation(libs.taterlib.lite.metadata) implementation(libs.taterlib.lite.muxins) + implementation(libs.taterlib.lite.network) } tasks.withType { diff --git a/common/src/main/java/org/adde0109/pcf/PCF.java b/common/src/main/java/org/adde0109/pcf/PCF.java index 9c0b280e..db5200d3 100644 --- a/common/src/main/java/org/adde0109/pcf/PCF.java +++ b/common/src/main/java/org/adde0109/pcf/PCF.java @@ -1,5 +1,7 @@ package org.adde0109.pcf; +import static dev.neuralnexus.taterapi.network.Protocol.map; + import dev.neuralnexus.taterapi.loader.EntrypointLoader; import dev.neuralnexus.taterapi.meta.Constraint; import dev.neuralnexus.taterapi.meta.Constraints; @@ -10,8 +12,7 @@ import dev.neuralnexus.taterapi.meta.ModResource; import dev.neuralnexus.taterapi.meta.Platform; import dev.neuralnexus.taterapi.meta.Platforms; -import dev.neuralnexus.taterapi.network.NetworkRegistry; -import dev.neuralnexus.taterapi.registries.AdapterRegistry; +import dev.neuralnexus.taterapi.network.PayloadRegistry; import org.adde0109.pcf.forwarding.Mode; import org.adde0109.pcf.forwarding.compatibility.prelogin.ArclightPreLogin; @@ -79,8 +80,9 @@ void onInit() { // Modern forwarding init if (this.forwarding().enabled() && this.forwarding().mode().equals(Mode.MODERN)) { - NetworkRegistry.registerQueryPayload( - PlayerInfoQueryPayload.IDENTIFIER, PlayerInfoQueryPayload.STREAM_CODEC); + PayloadRegistry.register( + PlayerInfoQueryPayload.TYPE, + map(PlayerInfoQueryPayload.IDENTIFIER, MinecraftVersions.V7_2)); if (Constraint.builder().platform(Platforms.ARCLIGHT).result()) { logger.debug("Arclight detected, applying pre-login post processor"); @@ -198,12 +200,12 @@ public static void forceLoadConfig() { .getMethod("reload") .invoke(null); } else { - Class.forName("org.adde0109.pcf.v16_5.forge.Config") + Class.forName("org.adde0109.pcf.v26_1.forge.Config") .getMethod("reload") .invoke(null); } } else if (Constraint.builder().platform(Platforms.NEOFORGE).result()) { - Class.forName("org.adde0109.pcf.v20_2.neoforge.Config") + Class.forName("org.adde0109.pcf.v26_1.neoforge.Config") .getMethod("reload") .invoke(null); } @@ -215,13 +217,6 @@ public static void forceLoadConfig() { } } - private static final AdapterRegistry ADAPTER_REGISTRY = new AdapterRegistry(); - - @ApiStatus.Internal - public AdapterRegistry adapters() { - return ADAPTER_REGISTRY; - } - private Forwarding forwarding; public Forwarding forwarding() { diff --git a/common/src/main/java/org/adde0109/pcf/PCFForge.java b/common/src/main/java/org/adde0109/pcf/PCFForge.java index 5d81bc5e..59e2c03e 100644 --- a/common/src/main/java/org/adde0109/pcf/PCFForge.java +++ b/common/src/main/java/org/adde0109/pcf/PCFForge.java @@ -6,6 +6,7 @@ value = PCF.MOD_ID, modid = PCF.MOD_ID, name = PCF.MOD_NAME, + version = PCF.VERSION, useMetadata = true, serverSideOnly = true, acceptableRemoteVersions = "*") diff --git a/common/src/main/java/org/adde0109/pcf/PCFForgeLegacy.java b/common/src/main/java/org/adde0109/pcf/PCFForgeLegacy.java index 79f72cb0..f30a5f77 100644 --- a/common/src/main/java/org/adde0109/pcf/PCFForgeLegacy.java +++ b/common/src/main/java/org/adde0109/pcf/PCFForgeLegacy.java @@ -2,7 +2,12 @@ import cpw.mods.fml.common.Mod; -@Mod(modid = PCF.MOD_ID, name = PCF.MOD_NAME, acceptableRemoteVersions = "*", useMetadata = true) +@Mod( + modid = PCF.MOD_ID, + name = PCF.MOD_NAME, + version = PCF.VERSION, + acceptableRemoteVersions = "*", + useMetadata = true) public final class PCFForgeLegacy { public PCFForgeLegacy() { PCF.instance().onInit(); diff --git a/common/src/main/java/org/adde0109/pcf/crossstitch/CrossStitch.java b/common/src/main/java/org/adde0109/pcf/crossstitch/CrossStitch.java index 0011782c..dab00ede 100644 --- a/common/src/main/java/org/adde0109/pcf/crossstitch/CrossStitch.java +++ b/common/src/main/java/org/adde0109/pcf/crossstitch/CrossStitch.java @@ -71,15 +71,15 @@ public static boolean shouldNotWrapArgument(final @NonNull String identifier) { if (entry == null) { PCF.logger.debug( "Wrapping entryless argument type: " + argumentType.getClass().getName()); - buf.writeResourceLocation(MOD_ARGUMENT_INDICATOR); - buf.writeResourceLocation(EMPTY_IDENTIFIER); + buf.writeIdentifier(MOD_ARGUMENT_INDICATOR); + buf.writeIdentifier(EMPTY_IDENTIFIER); buf.writeVarInt(ZERO_LENGTH); return; } final String identifier = entry.bridge$identifier(); if (shouldNotWrapArgument(identifier)) { - buf.writeResourceLocation(identifier); + buf.writeIdentifier(identifier); serializer.bridge$serializeToNetwork(argumentType, buf); PCF.logger.debug("Not wrapping argument with identifier: " + identifier); return; @@ -93,8 +93,8 @@ public static boolean shouldNotWrapArgument(final @NonNull String identifier) { + entry.getClass().getName()); // Serialize wrapped argument type - buf.writeResourceLocation(MOD_ARGUMENT_INDICATOR); - buf.writeResourceLocation(entry.bridge$identifier()); + buf.writeIdentifier(MOD_ARGUMENT_INDICATOR); + buf.writeIdentifier(entry.bridge$identifier()); final ByteBuf extraData = Unpooled.buffer(); serializer.bridge$serializeToNetwork(argumentType, extraData); diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ConnectionBridge.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ConnectionBridge.java index 7a1fdf6a..e99e7007 100644 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ConnectionBridge.java +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ConnectionBridge.java @@ -1,11 +1,22 @@ package org.adde0109.pcf.forwarding.modern; +import io.netty.channel.Channel; + +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + import java.net.InetSocketAddress; public interface ConnectionBridge { - InetSocketAddress bridge$address(); + @NonNull InetSocketAddress bridge$address(); + + void bridge$address(final @NonNull InetSocketAddress address); + + @NonNull Channel bridge$channel(); - void bridge$address(InetSocketAddress address); + @Nullable Object bridge$getPacketListener(); - void bridge$send(Object packet); + default void bridge$send(final @NonNull Object packet) { + this.bridge$channel().writeAndFlush(packet).addListener(ModernForwarding::errorListener); + } } diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ModernForwarding.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ModernForwarding.java index aa2fd86c..717c4666 100644 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ModernForwarding.java +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ModernForwarding.java @@ -11,16 +11,17 @@ import com.mojang.authlib.GameProfile; import dev.neuralnexus.taterapi.event.Cancellable; +import dev.neuralnexus.taterapi.mc.server.players.NameAndId; import dev.neuralnexus.taterapi.meta.Constraint; import dev.neuralnexus.taterapi.meta.MinecraftVersions; -import dev.neuralnexus.taterapi.mixin.CancellableMixin; import dev.neuralnexus.taterapi.network.chat.ThrowingComponent; import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.server.players.NameAndId; +import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.DecoderException; +import io.netty.util.concurrent.Future; import org.adde0109.pcf.PCF; import org.adde0109.pcf.forwarding.Mode; @@ -32,8 +33,6 @@ import java.security.InvalidKeyException; import java.util.ArrayList; import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; /** @@ -53,10 +52,42 @@ * 1.20.x */ public final class ModernForwarding { - public static final Set TRANSACTION_IDS = ConcurrentHashMap.newKeySet(); - private static final Object REJECTED_PROXY_ERR = literal("Unapproved proxy host."); + private static final String HANDLER_SPLITTER = "splitter"; + private static final String HANDLER_PREPENDER = "prepender"; + + /** + * Injects the packet encoder and decoder into the pipeline to handle login query packets + * + * @param connection the connection + * @param ctx the channel handler context + */ + public static void injectIntoPipeline( + final @NonNull ConnectionBridge connection, final @NonNull ChannelHandlerContext ctx) { + if (ctx.pipeline().get(PacketDecoder.NAME) != null + || ctx.pipeline().get(PacketEncoder.NAME) != null) { + return; + } + PCF.logger.debug( + "Injecting packet handlers into pipeline of " + ctx.channel().remoteAddress()); + ctx.channel() + .pipeline() + .addAfter(HANDLER_SPLITTER, PacketDecoder.NAME, new PacketDecoder(connection)) + .addAfter(HANDLER_PREPENDER, PacketEncoder.NAME, new PacketEncoder()); + } + + /** + * Listener for logging errors during packet handling + * + * @param future the future to check for success or failure + */ + public static void errorListener(Future future) { + if (!future.isSuccess()) { + PCF.logger.error("An error occurred during packet handling", future.cause()); + } + } + /** * Abstract implementation of the hello packet handler * @@ -89,23 +120,14 @@ public static void handleHello( } slpl.bridge$setVelocityLoginMessageId(ThreadLocalRandom.current().nextInt()); - TRANSACTION_IDS.add(slpl.bridge$velocityLoginMessageId()); slpl.bridge$connection() .bridge$send( new ClientboundCustomQueryPacket( - slpl.bridge$velocityLoginMessageId(), PLAYER_INFO_PAYLOAD) - .toMC()); + slpl.bridge$velocityLoginMessageId(), PLAYER_INFO_PAYLOAD)); PCF.logger.debug("Sent Forward Request"); ci.cancel(); } - @ApiStatus.Internal - @FunctionalInterface - public interface PreProcessor { - void process( - final @NonNull ServerLoginPacketListenerBridge slpl, final @NonNull ByteBuf buf); - } - @ApiStatus.Internal @FunctionalInterface public interface PostProcessor { @@ -124,10 +146,8 @@ void process( throws Exception; } - @ApiStatus.Internal public static PreProcessor preProcessor = (slpl, buf) -> {}; - private static final PostProcessor DEFAULT_POST_PROCESSOR = - (slpl, profile, c) -> { + (slpl, profile, _) -> { final NameAndId nameAndId = new NameAndId(profile); slpl.bridge$logger_info( "UUID of player {} is {}", nameAndId.name(), nameAndId.id()); @@ -150,92 +170,31 @@ void process( private static final Object INVALID_SIGNATURE = translatable("multiplayer.disconnect.invalid_public_key_signature"); - /** - * Abstract implementation of the custom query packet handler - * - * @param slpl The ServerLoginPacketListenerImpl - * @param transactionId The transaction ID - * @param mcPacket The Minecraft packet - */ - public static void handleCustomQueryPacket( - final @NonNull ServerLoginPacketListenerBridge slpl, - final int transactionId, - final @NonNull Object mcPacket) { - handleCustomQueryPacket(slpl, transactionId, mcPacket, Cancellable.DUMMY); - } - - /** - * Abstract implementation of the custom query packet handler - * - * @param slpl The ServerLoginPacketListenerImpl - * @param transactionId The transaction ID - * @param mcPacket The Minecraft packet - * @param ci The callback info - */ - public static void handleCustomQueryPacket( - final @NonNull ServerLoginPacketListenerBridge slpl, - final int transactionId, - final @NonNull Object mcPacket, - final @NonNull CallbackInfo ci) { - handleCustomQueryPacket(slpl, transactionId, mcPacket, new CancellableMixin(ci)); - } - - /** - * Abstract implementation of the custom query packet handler - * - * @param slpl The ServerLoginPacketListenerImpl - * @param transactionId The transaction ID - * @param mcPacket The Minecraft packet - * @param c The cancellable wrapper - */ - public static void handleCustomQueryPacket( - final @NonNull ServerLoginPacketListenerBridge slpl, - final int transactionId, - final @NonNull Object mcPacket, - final @NonNull Cancellable c) { - if (transactionId != slpl.bridge$velocityLoginMessageId()) { - return; - } - final ServerboundCustomQueryAnswerPacket packet = - ServerboundCustomQueryAnswerPacket.fromMC(mcPacket); - try { - handleCustomQueryPacket(slpl, packet, c); - } catch (final ThrowingComponent e) { - slpl.bridge$disconnect(e.getComponent()); - } - c.cancel(); - } - /** * Abstract implementation of the custom query packet handler * * @param slpl The ServerLoginPacketListenerImpl * @param packet The Minecraft packet - * @param c The cancellable wrapper */ public static void handleCustomQueryPacket( final @NonNull ServerLoginPacketListenerBridge slpl, - final @NonNull ServerboundCustomQueryAnswerPacket packet, - final @NonNull Cancellable c) { + final @NonNull ServerboundCustomQueryAnswerPacket packet) { + final CustomQueryAnswerPayload.Raw rawPayload = + packet.payload() instanceof CustomQueryAnswerPayload.Raw raw ? raw : null; + // Validate payload presence - if (packet.payload() == null) { + if (rawPayload == null) { throw new ThrowingComponent(DIRECT_CONNECT_ERR); - } else if (packet.payload().data().readableBytes() == 0) { + } else if (rawPayload.data().readableBytes() == 0) { PCF.logger.error( "Received empty forwarding payload. Has Velocity been configured to use modern forwarding?"); throw new ThrowingComponent(EMPTY_PAYLOAD_ERR); } PCF.logger.debug("Received Forward Response"); - // Apply fixes - preProcessor.process(slpl, packet.payload().data()); - - // Remove transaction ID from pending set - TRANSACTION_IDS.remove(packet.transactionId()); - // Validate data try { - if (!checkIntegrity(packet.payload().data())) { + if (!checkIntegrity(rawPayload.data())) { if (Constraint.noGreaterThan(MinecraftVersions.V12_2).result()) { PCF.logger.error( "Ensure the `forwarding.secret` setting's value in PCF's config file doesn't have quotes around it!"); @@ -258,7 +217,7 @@ public static void handleCustomQueryPacket( // Decode payload final PlayerInfoQueryAnswerPayload payload = - PlayerInfoQueryAnswerPayload.STREAM_CODEC.decode(packet.payload().data()); + PlayerInfoQueryAnswerPayload.TYPE.codec().decode(rawPayload.data()); // Validate version final VelocityProxy.Version version = payload.version(); @@ -317,13 +276,14 @@ public static void handleCustomQueryPacket( // Proceed with login try { + final Cancellable cancellable = Cancellable.simple(); for (final PostProcessor processor : postProcessors) { - processor.process(slpl, payload.profile(), c); - if (c.cancelled()) { + processor.process(slpl, payload.profile(), cancellable); + if (cancellable.cancelled()) { break; } } - } catch (Exception e) { + } catch (final Exception e) { final NameAndId nameAndId = new NameAndId(payload.profile()); PCF.logger.warn("Exception while forwarding user " + nameAndId.name()); e.printStackTrace(); diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/PacketDecoder.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PacketDecoder.java new file mode 100644 index 00000000..d569e47c --- /dev/null +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PacketDecoder.java @@ -0,0 +1,83 @@ +package org.adde0109.pcf.forwarding.modern; + +import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; + +import dev.neuralnexus.taterapi.network.FriendlyByteBuf; +import dev.neuralnexus.taterapi.network.chat.ThrowingComponent; +import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; + +import org.adde0109.pcf.PCF; +import org.jspecify.annotations.NonNull; + +import java.util.List; + +public final class PacketDecoder extends MessageToMessageDecoder { + public static final String NAME = "pcf-decoder"; + + private final ConnectionBridge connection; + + public PacketDecoder(final @NonNull ConnectionBridge connection) { + this.connection = connection; + } + + @SuppressWarnings("RedundantThrows") + @Override + protected void decode( + final @NonNull ChannelHandlerContext ctx, + final @NonNull ByteBuf msg, + final List out) + throws Exception { + if (!msg.isReadable()) { + return; + } + if (!(this.connection.bridge$getPacketListener() + instanceof ServerLoginPacketListenerBridge slpl)) { + out.add(msg.retain()); + return; + } + + final int readerIndex = msg.readerIndex(); + final FriendlyByteBuf data = new FriendlyByteBuf(msg); + final int id = data.readVarInt(); + PCF.logger.debug( + "Received packet with ID 0x" + + Integer.toHexString(id) + + " from " + + ctx.channel().remoteAddress()); + + //noinspection SwitchStatementWithTooFewBranches + switch (id) { + case 0x02 -> { + final ServerboundCustomQueryAnswerPacket packet = + ServerboundCustomQueryAnswerPacket.STREAM_CODEC.decode(data); + + // Check if the packet should be handled + if (packet.transactionId() != slpl.bridge$velocityLoginMessageId()) { + msg.readerIndex(readerIndex); + break; + } + PCF.logger.debug( + "Handling ServerboundCustomQueryAnswerPacket from " + + ctx.channel().remoteAddress()); + + try { + handleCustomQueryPacket(slpl, packet); + } catch (final ThrowingComponent e) { + slpl.bridge$disconnect(e.getComponent()); + } finally { + msg.clear(); + } + } + // Reset reader index for unhandled packets + default -> msg.readerIndex(readerIndex); + } + + if (msg.isReadable()) { + out.add(msg.retain()); + } + } +} diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/PacketEncoder.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PacketEncoder.java new file mode 100644 index 00000000..1de935fe --- /dev/null +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PacketEncoder.java @@ -0,0 +1,37 @@ +package org.adde0109.pcf.forwarding.modern; + +import dev.neuralnexus.taterapi.network.FriendlyByteBuf; +import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; + +import org.adde0109.pcf.PCF; +import org.jspecify.annotations.NonNull; + +public final class PacketEncoder extends MessageToByteEncoder { + public static final String NAME = "pcf-encoder"; + + @SuppressWarnings("RedundantThrows") + @Override + protected void encode( + final @NonNull ChannelHandlerContext ctx, + final @NonNull ClientboundCustomQueryPacket msg, + final @NonNull ByteBuf buf) + throws Exception { + try { + PCF.logger.debug( + "Encoding " + + msg.getClass().getSimpleName() + + " to " + + ctx.channel().remoteAddress()); + final FriendlyByteBuf data = new FriendlyByteBuf(buf); + data.writeVarInt(0x04); + ClientboundCustomQueryPacket.STREAM_CODEC.encode(data, msg); + } catch (final Exception e) { + PCF.logger.error("Failed to encode packet " + msg.getClass().getName(), e); + throw e; + } + } +} diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryAnswerPayload.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryAnswerPayload.java index 496fd774..8bf36397 100644 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryAnswerPayload.java +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryAnswerPayload.java @@ -1,24 +1,16 @@ package org.adde0109.pcf.forwarding.modern; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readAddress; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readPayload; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readUUID; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readUtf; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readVarInt; - -import static org.adde0109.pcf.forwarding.modern.VelocityProxy.Version.MODERN_FORWARDING_WITH_KEY; -import static org.adde0109.pcf.forwarding.modern.VelocityProxy.Version.MODERN_FORWARDING_WITH_KEY_V2; import static org.adde0109.pcf.forwarding.modern.VelocityProxy.createProfile; -import static org.adde0109.pcf.forwarding.modern.VelocityProxy.readForwardedKey; import static org.adde0109.pcf.forwarding.modern.VelocityProxy.readSignerUuidOrElse; import com.mojang.authlib.GameProfile; +import dev.neuralnexus.taterapi.mc.world.entity.player.ProfilePublicKey; +import dev.neuralnexus.taterapi.network.FriendlyByteBuf; import dev.neuralnexus.taterapi.network.codec.StreamCodec; +import dev.neuralnexus.taterapi.network.protocol.PayloadType; import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import io.netty.buffer.ByteBuf; - import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; @@ -38,42 +30,44 @@ public record PlayerInfoQueryAnswerPayload( VelocityProxy.Version version, @NonNull InetAddress address, @NonNull GameProfile profile, - @Nullable ProfilePublicKeyData key, + ProfilePublicKey.@Nullable Data key, @Nullable UUID signer) implements CustomQueryAnswerPayload { - public static final StreamCodec<@NonNull ByteBuf, @NonNull PlayerInfoQueryAnswerPayload> + public static final StreamCodec<@NonNull FriendlyByteBuf, @NonNull PlayerInfoQueryAnswerPayload> STREAM_CODEC = CustomQueryAnswerPayload.codec( - PlayerInfoQueryAnswerPayload::write, - PlayerInfoQueryAnswerPayload::read); + PlayerInfoQueryAnswerPayload::encode, + PlayerInfoQueryAnswerPayload::decode); + public static final Type TYPE = + PayloadType.answer(PlayerInfoQueryAnswerPayload.class, STREAM_CODEC); - private static @NonNull PlayerInfoQueryAnswerPayload read(final @NonNull ByteBuf buf) { - final ByteBuf data = readPayload(buf); - final VelocityProxy.Version version = VelocityProxy.Version.from(readVarInt(data)); - final InetAddress address = readAddress(data); - final UUID playerId = readUUID(data); - final String playerName = readUtf(data, 16); + private static @NonNull PlayerInfoQueryAnswerPayload decode( + final @NonNull FriendlyByteBuf input) { + final FriendlyByteBuf data = input.readPayload(); // TODO: See if this is finally removable + final VelocityProxy.Version version = VelocityProxy.Version.from(data.readVarInt()); + final InetAddress address = data.readInetAddress(); + final UUID playerId = data.readUUID(); + final String playerName = data.readUtf(16); final GameProfile profile = createProfile(playerId, playerName, data); - ProfilePublicKeyData key = null; + ProfilePublicKey.Data key = null; UUID signer = null; switch (version) { - case MODERN_FORWARDING_WITH_KEY -> key = readForwardedKey(data); + case MODERN_FORWARDING_WITH_KEY -> key = new ProfilePublicKey.Data(data); case MODERN_FORWARDING_WITH_KEY_V2 -> { - key = readForwardedKey(data); + key = new ProfilePublicKey.Data(data); signer = readSignerUuidOrElse(data, playerId); } } return new PlayerInfoQueryAnswerPayload(version, address, profile, key, signer); } - private void write(final @NonNull ByteBuf buf) { + private void encode(final @NonNull FriendlyByteBuf output) { throw new UnsupportedOperationException( this.getClass().getName() + " does not support serialization."); } @Override - public @NonNull ByteBuf data() { - throw new UnsupportedOperationException( - this.getClass().getName() + " does not retain raw data."); + public @NonNull Type type() { + return TYPE; } } diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryPayload.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryPayload.java index 4fa52502..42ac0d2d 100644 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryPayload.java +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/PlayerInfoQueryPayload.java @@ -1,9 +1,8 @@ package org.adde0109.pcf.forwarding.modern; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readPayload; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.writePayload; - +import dev.neuralnexus.taterapi.network.FriendlyByteBuf; import dev.neuralnexus.taterapi.network.codec.StreamCodec; +import dev.neuralnexus.taterapi.network.protocol.PayloadType; import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; import io.netty.buffer.ByteBuf; @@ -18,20 +17,23 @@ * @param data the buffer */ public record PlayerInfoQueryPayload(@NonNull ByteBuf data) implements CustomQueryPayload { - public static final StreamCodec STREAM_CODEC = - CustomQueryPayload.codec(PlayerInfoQueryPayload::write, PlayerInfoQueryPayload::read); public static final String IDENTIFIER = VelocityProxy.PLAYER_INFO_CHANNEL.toString(); - - private static @NonNull PlayerInfoQueryPayload read(final @NonNull ByteBuf buf) { - return new PlayerInfoQueryPayload(readPayload(buf)); + public static final StreamCodec STREAM_CODEC = + CustomQueryPayload.codec( + PlayerInfoQueryPayload::encode, PlayerInfoQueryPayload::decode); + public static final Type TYPE = + PayloadType.query(PlayerInfoQueryPayload.class, IDENTIFIER).codec(STREAM_CODEC).build(); + + private static @NonNull PlayerInfoQueryPayload decode(final @NonNull FriendlyByteBuf buf) { + return new PlayerInfoQueryPayload(buf.readPayload()); } - private void write(final @NonNull ByteBuf buf) { - writePayload(buf, this.data); + private void encode(final @NonNull FriendlyByteBuf buf) { + buf.writePayload(this.data); } @Override - public @NonNull String id() { - return IDENTIFIER; + public @NonNull Type type() { + return TYPE; } } diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ProfilePublicKeyData.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ProfilePublicKeyData.java deleted file mode 100644 index 49a6b844..00000000 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ProfilePublicKeyData.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.adde0109.pcf.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Constraint; -import dev.neuralnexus.taterapi.meta.MinecraftVersions; -import dev.neuralnexus.taterapi.serialization.Codec; - -import org.adde0109.pcf.PCF; -import org.jspecify.annotations.NonNull; - -import java.security.PublicKey; -import java.time.Instant; - -/** - * Wrapper for MC's ProfilePublicKey.Data - * - * @param expiresAt the expiration time - * @param key the public key - * @param keySignature the key signature - */ -public record ProfilePublicKeyData( - @NonNull Instant expiresAt, @NonNull PublicKey key, byte[] keySignature) { - public static final Codec ADAPTER_CODEC; - - static { - if (Constraint.range(MinecraftVersions.V19, MinecraftVersions.V19_2).result()) { - ADAPTER_CODEC = - PCF.instance().adapters().getTo(ProfilePublicKeyData.class).orElse(null); - } else { - PCF.logger.debug( - "Not loading ProfilePublicKeyData adapter, version not between 1.19 and 1.19.2"); - ADAPTER_CODEC = null; - } - } - - @SuppressWarnings("unchecked") - public static @NonNull ProfilePublicKeyData fromMC(final @NonNull T obj) { - return ((Codec) ADAPTER_CODEC).encode(obj).unwrap(); - } - - @SuppressWarnings({"unchecked", "DataFlowIssue"}) - public @NonNull T toMC() { - return ((Codec) ADAPTER_CODEC).decode(this).unwrap(); - } -} diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ServerLoginPacketListenerBridge.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ServerLoginPacketListenerBridge.java index eece92c0..0de20f66 100644 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/ServerLoginPacketListenerBridge.java +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/ServerLoginPacketListenerBridge.java @@ -2,6 +2,8 @@ import com.mojang.authlib.GameProfile; +import dev.neuralnexus.taterapi.mc.world.entity.player.ProfilePublicKey; + import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; @@ -25,16 +27,16 @@ public interface ServerLoginPacketListenerBridge { void bridge$logger_error(final @NonNull String text, final Object... params); interface KeyV1 { - void bridge$setPlayerProfilePublicKey(@Nullable ProfilePublicKeyData publicKeyData); + void bridge$setPlayerProfilePublicKey(ProfilePublicKey.@Nullable Data publicKeyData); } interface KeyV2 { - @Nullable ProfilePublicKeyData bridge$profilePublicKeyData(); + ProfilePublicKey.@Nullable Data bridge$profilePublicKeyData(); - void bridge$setProfilePublicKeyData(final @Nullable ProfilePublicKeyData publicKeyData); + void bridge$setProfilePublicKeyData(final ProfilePublicKey.@Nullable Data publicKeyData); void bridge$validatePublicKey( - final @Nullable ProfilePublicKeyData keyData, final @Nullable UUID signer) + final ProfilePublicKey.@Nullable Data keyData, final @Nullable UUID signer) throws Exception; } } diff --git a/common/src/main/java/org/adde0109/pcf/forwarding/modern/VelocityProxy.java b/common/src/main/java/org/adde0109/pcf/forwarding/modern/VelocityProxy.java index 5115e253..b5f8be1a 100644 --- a/common/src/main/java/org/adde0109/pcf/forwarding/modern/VelocityProxy.java +++ b/common/src/main/java/org/adde0109/pcf/forwarding/modern/VelocityProxy.java @@ -1,13 +1,5 @@ package org.adde0109.pcf.forwarding.modern; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.Crypt.MAX_KEY_SIGNATURE_SIZE; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readByteArray; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readInstant; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readNullable; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readOrElse; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readPublicKey; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readUtf; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readVarInt; import static dev.neuralnexus.taterapi.resources.Identifier.identifier; import static org.adde0109.pcf.forwarding.modern.ReflectionUtils.getProperties; @@ -25,7 +17,6 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import io.netty.handler.codec.DecoderException; import org.adde0109.pcf.PCF; import org.jspecify.annotations.NonNull; @@ -60,6 +51,7 @@ public final class VelocityProxy { public static final byte MODERN_MAX_VERSION; public static final ByteBuf PLAYER_INFO_PACKET; public static final Object PLAYER_INFO_CHANNEL = identifier("velocity:player_info"); + public static final int SIGNATURE_SIZE = 32; static { if (PCF.instance().advanced().modernForwardingVersion() != Version.NO_OVERRIDE) { @@ -102,10 +94,18 @@ private VelocityProxy() {} * @throws AssertionError if the algorithm is not found or the key is invalid */ public static boolean checkIntegrity(final @NonNull ByteBuf buf) { - final byte[] signature = new byte[32]; + final int readableBytes = buf.readableBytes(); + if (readableBytes < SIGNATURE_SIZE) { + throw new AssertionError( + "Not enough bytes to read signature, expected at least " + + SIGNATURE_SIZE + + " but got " + + readableBytes); + } + final byte[] signature = new byte[SIGNATURE_SIZE]; buf.readBytes(signature); - final byte[] data = new byte[buf.readableBytes()]; + final byte[] data = new byte[readableBytes - SIGNATURE_SIZE]; buf.getBytes(buf.readerIndex(), data); try { @@ -138,7 +138,7 @@ public static boolean checkIntegrity(final @NonNull ByteBuf buf) { public static @NonNull GameProfile createProfile( final @NonNull UUID playerId, final @NonNull String playerName, - final @NonNull ByteBuf buf) { + final @NonNull FriendlyByteBuf buf) { final GameProfile profile; // com.mojang:authlib:7.0.0 or newer if (Constraint.noLessThan(MinecraftVersions.V21_9).result()) { @@ -160,14 +160,15 @@ public static boolean checkIntegrity(final @NonNull ByteBuf buf) { * @param buf the buffer * @return a multimap of properties */ - private static @NonNull Multimap readProperties(final @NonNull ByteBuf buf) { - final int count = readVarInt(buf); + private static @NonNull Multimap readProperties( + final @NonNull FriendlyByteBuf buf) { + final int count = buf.readVarInt(); final ImmutableMultimap.Builder propertiesBuilder = ImmutableMultimap.builder(); for (int i = 0; i < count; i++) { - final String name = readUtf(buf); - final String value = readUtf(buf); - final String signature = readNullable(buf, FriendlyByteBuf::readUtf); + final String name = buf.readUtf(); + final String value = buf.readUtf(); + final String signature = buf.readNullable(FriendlyByteBuf::readUtf); propertiesBuilder.put(name, new Property(name, value, signature)); } return propertiesBuilder.build(); @@ -180,13 +181,13 @@ public static boolean checkIntegrity(final @NonNull ByteBuf buf) { * @return a list of properties */ private static @NonNull List> readProperties_7( - final @NonNull ByteBuf buf) { - final int count = readVarInt(buf); + final @NonNull FriendlyByteBuf buf) { + final int count = buf.readVarInt(); final List> properties = new ArrayList<>(count); for (int i = 0; i < count; i++) { - final String name = readUtf(buf); - final String value = readUtf(buf); - final String signature = readNullable(buf, FriendlyByteBuf::readUtf); + final String name = buf.readUtf(); + final String value = buf.readUtf(); + final String signature = buf.readNullable(FriendlyByteBuf::readUtf); properties.add(new SimpleImmutableEntry<>(name, new Property(name, value, signature))); } return properties; @@ -200,22 +201,8 @@ public static boolean checkIntegrity(final @NonNull ByteBuf buf) { * @return The UUID read from the ByteBuf, or the given UUID if none is present */ public static @NonNull UUID readSignerUuidOrElse( - final @NonNull ByteBuf buf, final @NonNull UUID orElse) { - return readOrElse(buf, FriendlyByteBuf::readUUID, orElse); - } - - /** - * Modern Forwarding v2 - 1.19 - when using ProfilePublicKey::new
- * Modern Forwarding v3 - 1.19.1 - 1.19.2
- * - * @param buf The ByteBuf to read from - * @return The ProfilePublicKey.Data read from the ByteBuf - * @throws DecoderException If there was an error reading the key - */ - public static @NonNull ProfilePublicKeyData readForwardedKey(final @NonNull ByteBuf buf) - throws DecoderException { - return new ProfilePublicKeyData( - readInstant(buf), readPublicKey(buf), readByteArray(buf, MAX_KEY_SIGNATURE_SIZE)); + final @NonNull FriendlyByteBuf buf, final @NonNull UUID orElse) { + return buf.readOrElse(FriendlyByteBuf::readUUID, orElse); } public enum Version { diff --git a/common/src/main/java/org/adde0109/pcf/mixin/common/forwarding/modern/ConnectionMixin.java b/common/src/main/java/org/adde0109/pcf/mixin/common/forwarding/modern/ConnectionMixin.java new file mode 100644 index 00000000..238fd4da --- /dev/null +++ b/common/src/main/java/org/adde0109/pcf/mixin/common/forwarding/modern/ConnectionMixin.java @@ -0,0 +1,67 @@ +package org.adde0109.pcf.mixin.common.forwarding.modern; + +import static org.adde0109.pcf.forwarding.modern.ModernForwarding.injectIntoPipeline; + +import dev.neuralnexus.taterapi.meta.Mappings; +import dev.neuralnexus.taterapi.meta.anno.AConstraint; +import dev.neuralnexus.taterapi.meta.anno.AConstraints; +import dev.neuralnexus.taterapi.meta.anno.Versions; +import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; + +import org.adde0109.pcf.forwarding.modern.ConnectionBridge; +import org.jspecify.annotations.NonNull; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +public final class ConnectionMixin { + @AConstraints( + or = { + @AConstraint(mappings = Mappings.MOJANG), + @AConstraint( + mappings = Mappings.SEARGE, + version = + @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V20_4)) + }) + @Mixin(targets = "net.minecraft.network.Connection") + public abstract static class Mojang implements ConnectionBridge { + @Shadow + public abstract Channel shadow$channel(); + + @Override + public @NonNull Channel bridge$channel() { + return this.shadow$channel(); + } + + @Inject(method = "channelActive", at = @At("TAIL"), remap = false) + private void onChannelActive( + final @NonNull ChannelHandlerContext ctx, final @NonNull CallbackInfo ci) { + injectIntoPipeline(this, ctx); + } + } + + @AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V16_5)) + @Mixin(targets = "net.minecraft.network.NetworkManager") + public abstract static class Searge implements ConnectionBridge { + @Shadow + public abstract Channel shadow$channel(); + + @Override + public @NonNull Channel bridge$channel() { + return this.shadow$channel(); + } + + @Inject(method = "channelActive", at = @At("TAIL"), remap = false) + private void onChannelActive( + final @NonNull ChannelHandlerContext ctx, final @NonNull CallbackInfo ci) { + injectIntoPipeline(this, ctx); + } + } +} diff --git a/common/src/main/resources/META-INF/mods.toml b/common/src/main/resources/META-INF/mods.toml index 6d43b9c5..2c4738c8 100644 --- a/common/src/main/resources/META-INF/mods.toml +++ b/common/src/main/resources/META-INF/mods.toml @@ -12,7 +12,7 @@ displayURL = "${homepage_url}" logoFile = "${mod_name}.png" credits = "${authors}" authors = "${authors}" -displayTest = "NONE" +displayTest = "IGNORE_SERVER_VERSION" description = '''${description}''' # Forge Dependency diff --git a/common/src/main/resources/META-INF/services/org.adde0109.pcf.PCFInitializer b/common/src/main/resources/META-INF/services/org.adde0109.pcf.PCFInitializer index b5fc3664..04db8bdb 100644 --- a/common/src/main/resources/META-INF/services/org.adde0109.pcf.PCFInitializer +++ b/common/src/main/resources/META-INF/services/org.adde0109.pcf.PCFInitializer @@ -1,11 +1,5 @@ -org.adde0109.pcf.v7_10.forge.AdapterRegistryInit -org.adde0109.pcf.v12_2.forge.AdapterRegistryInit - -org.adde0109.pcf.v13_2.forge.AdapterRegistryInit - org.adde0109.pcf.v14_4.forge.ReloadConfigInit -org.adde0109.pcf.v16_5.forge.AdapterRegistryInit org.adde0109.pcf.v16_5.forge.Initializer org.adde0109.pcf.v16_5.forge.ReloadConfigInit @@ -13,15 +7,12 @@ org.adde0109.pcf.v17_1.forge.CrossStitchInit org.adde0109.pcf.v17_1.forge.DisplayTestInit org.adde0109.pcf.v17_1.forge.DisplayTestReg -org.adde0109.pcf.v19_2.forge.AdapterRegistryInit org.adde0109.pcf.v19_2.forge.CrossStitchInit -org.adde0109.pcf.v20_4.forge.AdapterRegistryInit org.adde0109.pcf.v20_4.forge.CrossStitchInit org.adde0109.pcf.v20_4.forge.ReloadConfigInit org.adde0109.pcf.v26_1.forge.DisplayTestInit -org.adde0109.pcf.v26_1.forge.DisplayTestReg org.adde0109.pcf.v26_1.forge.RegisterConfig org.adde0109.pcf.v26_1.forge.ReloadConfigInit @@ -31,5 +22,4 @@ org.adde0109.pcf.v20_2.neoforge.RegisterConfig org.adde0109.pcf.v26_1.neoforge.RegisterConfig org.adde0109.pcf.v26_1.neoforge.ReloadConfigInit -org.adde0109.pcf.v26_1.AdapterRegistryInit org.adde0109.pcf.v26_1.CrossStitchInit diff --git a/modern/v20_2/src/main/resources/pcf.mixins.v20_2.neoforge.json b/common/src/main/resources/pcf.mixins.common.json similarity index 69% rename from modern/v20_2/src/main/resources/pcf.mixins.v20_2.neoforge.json rename to common/src/main/resources/pcf.mixins.common.json index b44c05d8..204d63a5 100644 --- a/modern/v20_2/src/main/resources/pcf.mixins.v20_2.neoforge.json +++ b/common/src/main/resources/pcf.mixins.common.json @@ -8,6 +8,7 @@ "plugin": "org.adde0109.pcf.mixin.plugin.PCFMixinPlugin", "package": "org.adde0109.pcf.mixin", "server": [ - "v20_2.neoforge.forwarding.modern.ServerLoginPacketListenerImplDisconnectMixin" + "common.forwarding.modern.ConnectionMixin$Mojang", + "common.forwarding.modern.ConnectionMixin$Searge" ] } diff --git a/deobsf/v26_1/build.gradle.kts b/deobsf/v26_1/build.gradle.kts index 46388308..c48ed31b 100644 --- a/deobsf/v26_1/build.gradle.kts +++ b/deobsf/v26_1/build.gradle.kts @@ -31,18 +31,10 @@ unimined.minecraft(neoforge) { } dependencies { - evaluationDependsOn(":modern:v16_5") - forgeCompileOnly(srcSetAsDep(":modern:v16_5", "forge")) - evaluationDependsOn(":modern:v17_1") - forgeCompileOnly(srcSetAsDep(":modern:v17_1", "forge")) - evaluationDependsOn(":modern:v20_2") - forgeCompileOnly(project(":modern:v20_2")) forgeCompileOnly(project(":common")) - neoforgeCompileOnly(project(":modern:v20_2")) neoforgeCompileOnly(project(":common")) mainCompileOnly(libs.asm.tree) mainCompileOnly(libs.mixin) - mainCompileOnly(project(":modern:v20_2")) } tasks.jar { diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Config.java b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/Config.java similarity index 99% rename from modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Config.java rename to deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/Config.java index 3b0909fc..23aac66a 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Config.java +++ b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/Config.java @@ -1,4 +1,4 @@ -package org.adde0109.pcf.v16_5.forge; +package org.adde0109.pcf.v26_1.forge; import static org.adde0109.pcf.PCF.CONFIG_FILE_NAME; diff --git a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/DisplayTestInit.java b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/DisplayTestInit.java deleted file mode 100644 index 09207652..00000000 --- a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/DisplayTestInit.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.adde0109.pcf.v26_1.forge; - -import static org.adde0109.pcf.v17_1.forge.PCFBootstrap.IGNORE_SERVER_VERSION; - -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.AConstraints; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; - -import net.minecraftforge.fml.IExtensionPoint; - -import org.adde0109.pcf.PCFInitializer; - -@AConstraints({ - @AConstraint(platform = Platform.FORGE, version = @Versions(min = MinecraftVersion.V18_2)), - @AConstraint( // TODO: Filter based on Forge version - platform = {Platform.ARCLIGHT, Platform.MAGMA, Platform.MOHIST}, - version = @Versions(value = {MinecraftVersion.V18_2, MinecraftVersion.V19_4}), - invert = true), - @AConstraint( - platform = Platform.KETTING, - version = @Versions(MinecraftVersion.V20_4), - invert = true), - @AConstraint( - platform = {Platform.MAGMA, Platform.MOHIST}, - version = @Versions(MinecraftVersion.V20_1), - invert = true), - @AConstraint( - platform = Platform.GOLDENFORGE, - version = @Versions(MinecraftVersion.V19_2), - invert = true), - @AConstraint( - version = - @Versions({ - MinecraftVersion.V19, - MinecraftVersion.V19_1, - MinecraftVersion.V19_3, - MinecraftVersion.V20_2 - }), - invert = true) -}) -public final class DisplayTestInit implements PCFInitializer { - public DisplayTestInit() { - // IGNORE_SERVER_ONLY = () -> NetworkConstants.IGNORESERVERONLY; - IGNORE_SERVER_VERSION = IExtensionPoint.DisplayTest.IGNORE_SERVER_VERSION; - } - - @Override - public void onInit() {} -} diff --git a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/DisplayTestReg.java b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/DisplayTestReg.java deleted file mode 100644 index 6e0e5ebc..00000000 --- a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/DisplayTestReg.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.adde0109.pcf.v26_1.forge; - -import static org.adde0109.pcf.v17_1.forge.PCFBootstrap.IGNORE_SERVER_VERSION; - -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.AConstraints; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; - -import net.minecraftforge.fml.ModLoadingContext; - -import org.adde0109.pcf.PCFInitializer; - -@AConstraints({ - @AConstraint(platform = Platform.FORGE, version = @Versions(min = MinecraftVersion.V18_2)), - @AConstraint( // TODO: Filter based on Forge version - platform = {Platform.ARCLIGHT, Platform.MAGMA, Platform.MOHIST}, - version = @Versions(value = {MinecraftVersion.V18_2, MinecraftVersion.V19_4}), - invert = true), - @AConstraint( - platform = Platform.KETTING, - version = @Versions(MinecraftVersion.V20_4), - invert = true), - @AConstraint( - platform = {Platform.MAGMA, Platform.MOHIST}, - version = @Versions(MinecraftVersion.V20_1), - invert = true), - @AConstraint( - platform = Platform.GOLDENFORGE, - version = @Versions(MinecraftVersion.V19_2), - invert = true), - @AConstraint( - version = - @Versions({ - MinecraftVersion.V19, - MinecraftVersion.V19_1, - MinecraftVersion.V19_3, - MinecraftVersion.V20_2 - }), - invert = true) -}) -public final class DisplayTestReg implements PCFInitializer { - @SuppressWarnings("removal") - @Override - public void onInit() { - ModLoadingContext.get().registerDisplayTest(IGNORE_SERVER_VERSION); - } -} diff --git a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/RegisterConfig.java b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/RegisterConfig.java index 52d3e8b5..474ccd9b 100644 --- a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/RegisterConfig.java +++ b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/RegisterConfig.java @@ -10,7 +10,6 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v16_5.forge.Config; @AConstraint(platform = Platform.FORGE, version = @Versions(min = MinecraftVersion.V17)) public final class RegisterConfig implements PCFInitializer { diff --git a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/ReloadConfigInit.java b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/ReloadConfigInit.java index 2d40124c..8ff1981c 100644 --- a/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/ReloadConfigInit.java +++ b/deobsf/v26_1/src/forge/java/org/adde0109/pcf/v26_1/forge/ReloadConfigInit.java @@ -13,13 +13,12 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v16_5.forge.Config; @AConstraint(platform = Platform.FORGE, version = @Versions(min = MinecraftVersion.V21_6)) public final class ReloadConfigInit implements PCFInitializer { @Override public void onInit() { - BusGroup modBusGroup = + final BusGroup modBusGroup = MetaAPI.instance() .meta() .mod(PCF.MOD_ID) @@ -27,6 +26,6 @@ public void onInit() { .map(FMLModContainer::getModBusGroup) .orElseThrow(); ModConfigEvent.Reloading.getBus(modBusGroup) - .addListener((ModConfigEvent.Reloading event) -> Config.reload()); + .addListener((ModConfigEvent.Reloading _) -> Config.reload()); } } diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ConnectionMixin.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ConnectionMixin.java index 72148431..42c8e95c 100644 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ConnectionMixin.java +++ b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ConnectionMixin.java @@ -4,9 +4,11 @@ import dev.neuralnexus.taterapi.meta.anno.AConstraint; import net.minecraft.network.Connection; -import net.minecraft.network.protocol.Packet; +import net.minecraft.network.PacketListener; import org.adde0109.pcf.forwarding.modern.ConnectionBridge; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -18,21 +20,21 @@ public abstract class ConnectionMixin implements ConnectionBridge { // spotless:off @Shadow private SocketAddress address; - @Shadow public abstract void shadow$send(Packet packet); + @Shadow public abstract PacketListener shadow$getPacketListener(); // spotless:on @Override - public InetSocketAddress bridge$address() { + public @NonNull InetSocketAddress bridge$address() { return (InetSocketAddress) this.address; } @Override - public void bridge$address(InetSocketAddress address) { + public void bridge$address(final @NonNull InetSocketAddress address) { this.address = address; } @Override - public void bridge$send(Object packet) { - this.shadow$send((Packet) packet); + public @Nullable Object bridge$getPacketListener() { + return this.shadow$getPacketListener(); } } diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java index a64798e1..77b9dc98 100644 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java +++ b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java @@ -34,7 +34,7 @@ @Mixin(targets = "net.minecraft.server.network.ServerLoginPacketListenerImpl") public abstract class ServerLoginPacketListenerImplHelloMixin implements ServerLoginPacketListenerBridge { - @AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V18_2)) + @AConstraint(mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V18_2)) @Inject(method = "m_5990_", cancellable = true, at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, ordinal = 1, target = "Lnet/minecraft/server/network/ServerLoginPacketListenerImpl;f_10019_:Lnet/minecraft/server/network/ServerLoginPacketListenerImpl$State;")) private void onHandleHello_17(final @NonNull CallbackInfo ci) { diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplMixin.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplMixin.java index ef05f048..f1592689 100644 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplMixin.java +++ b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplMixin.java @@ -25,16 +25,11 @@ public abstract class ServerLoginPacketListenerImplMixin implements ServerLoginPacketListenerBridge { // spotless:off - @Shadow @Final Connection connection; - @Shadow @Final static Logger LOGGER; - - @AConstraint(version = @Versions(min = MinecraftVersion.V21)) - @Shadow public abstract void shadow$onDisconnect(net.minecraft.network.DisconnectionDetails details); - - @Shadow abstract void shadow$startClientVerification(GameProfile profile); - - @Shadow - private GameProfile authenticatedProfile; + @Shadow @Final private Connection connection; + @Shadow @Final private static Logger LOGGER; + @Shadow public abstract void shadow$disconnect(Component details); + @Shadow protected abstract void shadow$startClientVerification(GameProfile profile); + @Shadow private GameProfile authenticatedProfile; @Unique private int pcf$velocityLoginMessageId = -1; // spotless:on @@ -53,11 +48,9 @@ public abstract class ServerLoginPacketListenerImplMixin return (ConnectionBridge) this.connection; } - @AConstraint(version = @Versions(min = MinecraftVersion.V21)) @Override public void bridge$disconnect(final @NonNull Object reason) { - this.shadow$onDisconnect( - new net.minecraft.network.DisconnectionDetails((Component) reason)); + this.shadow$disconnect((Component) reason); } @Override diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java deleted file mode 100644 index 2a1abd1f..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.adde0109.pcf.mixin.v26_1.forwarding.modern; - -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import net.minecraft.server.network.ServerLoginPacketListenerImpl; - -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@AConstraint(mappings = Mappings.MOJANG, version = @Versions(min = MinecraftVersion.V20_2)) -@Mixin(ServerLoginPacketListenerImpl.class) -public abstract class ServerLoginPacketListenerImplQueryMixin - implements ServerLoginPacketListenerBridge { - @Inject(method = "handleCustomQueryPacket", at = @At("HEAD"), cancellable = true) - private void onHandleCustomQueryPacket( - final @NonNull ServerboundCustomQueryAnswerPacket packet, - final @NonNull CallbackInfo ci) { - handleCustomQueryPacket(this, packet.transactionId(), packet, ci); - } -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerboundCustomQueryAnswerPacketMixin.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerboundCustomQueryAnswerPacketMixin.java deleted file mode 100644 index 5316c883..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/mixin/v26_1/forwarding/modern/ServerboundCustomQueryAnswerPacketMixin.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.adde0109.pcf.mixin.v26_1.forwarding.modern; - -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readNullablePayload; - -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.TRANSACTION_IDS; - -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import io.netty.buffer.ByteBuf; - -import net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import net.minecraft.network.protocol.login.custom.CustomQueryAnswerPayload; - -import org.adde0109.pcf.v20_2.neoforge.Compatibility; -import org.adde0109.pcf.v26_1.forwarding.network.MCQueryAnswerPayload; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Coerce; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -/** - * Adapted - * from Paper - */ -@AConstraint(version = @Versions(min = MinecraftVersion.V20_2)) -@Mixin(ServerboundCustomQueryAnswerPacket.class) -public class ServerboundCustomQueryAnswerPacketMixin { - @SuppressWarnings("UnresolvedMixinReference") - @Inject( - method = {"readPayload", "m_293399_"}, - require = 0, - at = @At("HEAD"), - cancellable = true) - private static void onReadPayload( - final int transactionId, - final @Coerce @NonNull ByteBuf buf, - final @NonNull CallbackInfoReturnable cir) { - if (TRANSACTION_IDS.contains(transactionId)) { - final ByteBuf buffer = readNullablePayload(buf); - cir.setReturnValue(buffer == null ? null : new MCQueryAnswerPayload(buffer)); - Compatibility.neoForgeReturnSimpleQueryPayload(buffer, transactionId, cir); - cir.cancel(); - } - } -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/AdapterRegistryInit.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/AdapterRegistryInit.java deleted file mode 100644 index ef5a59ca..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/AdapterRegistryInit.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.adde0109.pcf.v26_1; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.network.NetworkRegistry; - -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.forwarding.modern.ModernForwarding; -import org.adde0109.pcf.v20_2.neoforge.Compatibility; -import org.adde0109.pcf.v26_1.forwarding.network.CCustomQueryPacketAdapter; -import org.adde0109.pcf.v26_1.forwarding.network.SCustomQueryAnswerPacketAdapter; - -@AConstraint(mappings = Mappings.MOJANG, version = @Versions(min = MinecraftVersion.V20_2)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - if (Compatibility.NEOFORGE_V20_2.result()) { - ModernForwarding.preProcessor = Compatibility::neoForgeReadSimpleQueryPayload; - } else if (Compatibility.FFAPI_V21_1.result()) { - ModernForwarding.preProcessor = Compatibility::applyFFAPIFix; - } - } - - @Override - public void onInit() {} -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/CrossStitchInit.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/CrossStitchInit.java index 91b2ef78..2d2c7d8a 100644 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/CrossStitchInit.java +++ b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/CrossStitchInit.java @@ -18,7 +18,10 @@ @AConstraint(mappings = Mappings.MOJANG, version = @Versions(min = MinecraftVersion.V21_11)) public final class CrossStitchInit implements PCFInitializer { - public CrossStitchInit() { + @Override + public void onInit() { + if (!PCF.instance().crossStitch().enabled()) return; + CrossStitch.COMMAND_ARGUMENT_IDENTIFIER = (type) -> BuiltInRegistries.COMMAND_ARGUMENT_TYPE @@ -44,7 +47,4 @@ public CrossStitchInit() { } }; } - - @Override - public void onInit() {} } diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/CCustomQueryPacketAdapter.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/CCustomQueryPacketAdapter.java deleted file mode 100644 index fae2b091..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/CCustomQueryPacketAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.adde0109.pcf.v26_1.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.meta.Constraint; -import dev.neuralnexus.taterapi.meta.MinecraftVersions; -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import io.netty.buffer.Unpooled; - -import net.minecraft.network.FriendlyByteBuf; - -import org.adde0109.pcf.v20_2.neoforge.forwarding.network.MCQueryPayload_RL; - -public final class CCustomQueryPacketAdapter - implements ReversibleCodec< - net.minecraft.network.protocol.login.ClientboundCustomQueryPacket, - ClientboundCustomQueryPacket> { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode( - final net.minecraft.network.protocol.login.ClientboundCustomQueryPacket object) { - final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); - object.payload().write(buf); - return Result.success( - new ClientboundCustomQueryPacket( - object.transactionId(), - CustomQueryPayload.codec(object.payload().id().toString()) - .decode(buf.slice()))); - } - - @Override - public Result decode( - final ClientboundCustomQueryPacket object) { - final net.minecraft.network.protocol.login.custom.CustomQueryPayload payload; - if (Constraint.lessThan(MinecraftVersions.V21_11).result()) { - payload = - new MCQueryPayload_RL( - identifier(object.payload().id()), object.payload().data()); - } else { - payload = - new MCQueryPayload(identifier(object.payload().id()), object.payload().data()); - } - return Result.success( - new net.minecraft.network.protocol.login.ClientboundCustomQueryPacket( - object.transactionId(), payload)); - } -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/MCQueryAnswerPayload.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/MCQueryAnswerPayload.java deleted file mode 100644 index 45ac75d0..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/MCQueryAnswerPayload.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.adde0109.pcf.v26_1.forwarding.network; - -import io.netty.buffer.ByteBuf; - -import net.minecraft.network.FriendlyByteBuf; - -import org.jspecify.annotations.NonNull; - -public record MCQueryAnswerPayload(@NonNull ByteBuf data) - implements net.minecraft.network.protocol.login.custom.CustomQueryAnswerPayload, - QueryAnswerPayloadSearge { - @Override - public void write(final @NonNull FriendlyByteBuf buf) { - buf.writeBytes(this.data.slice()); - } -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/MCQueryPayload.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/MCQueryPayload.java deleted file mode 100644 index 07ba2b00..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/MCQueryPayload.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.adde0109.pcf.v26_1.forwarding.network; - -import io.netty.buffer.ByteBuf; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.custom.CustomQueryPayload; -import net.minecraft.resources.Identifier; - -import org.jspecify.annotations.NonNull; - -public record MCQueryPayload(@NonNull Identifier id, @NonNull ByteBuf data) - implements CustomQueryPayload { - @Override - public void write(final @NonNull FriendlyByteBuf buf) { - buf.writeBytes(this.data.slice()); - } -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/QueryAnswerPayloadSearge.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/QueryAnswerPayloadSearge.java deleted file mode 100644 index 7b01b5bc..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/QueryAnswerPayloadSearge.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.adde0109.pcf.v26_1.forwarding.network; - -import net.minecraft.network.FriendlyByteBuf; - -import org.jspecify.annotations.NonNull; - -/** Dummy interface so QueryAnswerPayload can work in Searge-mapped environments. */ -public sealed interface QueryAnswerPayloadSearge permits MCQueryAnswerPayload { - void write(final @NonNull FriendlyByteBuf buf); - - @SuppressWarnings("unused") - default void m_295630_(final @NonNull FriendlyByteBuf buf) { - this.write(buf); - } -} diff --git a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/SCustomQueryAnswerPacketAdapter.java b/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/SCustomQueryAnswerPacketAdapter.java deleted file mode 100644 index 0f2fcfa1..00000000 --- a/deobsf/v26_1/src/main/java/org/adde0109/pcf/v26_1/forwarding/network/SCustomQueryAnswerPacketAdapter.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.adde0109.pcf.v26_1.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import io.netty.buffer.Unpooled; - -import net.minecraft.network.FriendlyByteBuf; - -public final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec< - net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket, - ServerboundCustomQueryAnswerPacket> { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @Override - public Result encode( - final net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket object) { - final int transactionId = object.transactionId(); - if (object.payload() == null) { - return Result.success(new ServerboundCustomQueryAnswerPacket(transactionId)); - } - final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); - object.payload().write(buf); - return Result.success( - new ServerboundCustomQueryAnswerPacket( - transactionId, - CustomQueryAnswerPayload.codec(transactionId).decode(buf.slice()))); - } - - @Override - public Result decode( - final ServerboundCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success( - new net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket( - object.transactionId(), null)); - } - return Result.success( - new net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket( - object.transactionId(), new MCQueryAnswerPayload(object.payload().data()))); - } -} diff --git a/deobsf/v26_1/src/main/resources/pcf.mixins.v26_1.json b/deobsf/v26_1/src/main/resources/pcf.mixins.v26_1.json index 7c7cffdb..b59a9619 100644 --- a/deobsf/v26_1/src/main/resources/pcf.mixins.v26_1.json +++ b/deobsf/v26_1/src/main/resources/pcf.mixins.v26_1.json @@ -11,10 +11,8 @@ "v26_1.crossstich.ArgumentNodeStubMixin", "v26_1.crossstich.ArgumentTypeInfoMixin", "v26_1.forwarding.modern.ConnectionMixin", - "v26_1.forwarding.modern.ServerboundCustomQueryAnswerPacketMixin", "v26_1.forwarding.modern.ServerLoginPacketListenerImplHelloHybridMixin", "v26_1.forwarding.modern.ServerLoginPacketListenerImplHelloMixin", - "v26_1.forwarding.modern.ServerLoginPacketListenerImplMixin", - "v26_1.forwarding.modern.ServerLoginPacketListenerImplQueryMixin" + "v26_1.forwarding.modern.ServerLoginPacketListenerImplMixin" ] } diff --git a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/Config.java b/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/Config.java similarity index 99% rename from modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/Config.java rename to deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/Config.java index 2d384441..1037e581 100644 --- a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/Config.java +++ b/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/Config.java @@ -1,4 +1,4 @@ -package org.adde0109.pcf.v20_2.neoforge; +package org.adde0109.pcf.v26_1.neoforge; import static org.adde0109.pcf.PCF.CONFIG_FILE_NAME; diff --git a/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/RegisterConfig.java b/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/RegisterConfig.java index e038ea1d..4b81badb 100644 --- a/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/RegisterConfig.java +++ b/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/RegisterConfig.java @@ -12,13 +12,12 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v20_2.neoforge.Config; @AConstraint(platform = Platform.NEOFORGE, version = @Versions(min = MinecraftVersion.V21)) public final class RegisterConfig implements PCFInitializer { @Override public void onInit() { - ModContainer container = + final ModContainer container = MetaAPI.instance() .meta() .mod(PCF.MOD_ID) diff --git a/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/ReloadConfigInit.java b/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/ReloadConfigInit.java index cddf28a8..0a58e694 100644 --- a/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/ReloadConfigInit.java +++ b/deobsf/v26_1/src/neoforge/java/org/adde0109/pcf/v26_1/neoforge/ReloadConfigInit.java @@ -13,19 +13,18 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v20_2.neoforge.Config; @AConstraint(platform = Platform.NEOFORGE, version = @Versions(min = MinecraftVersion.V20_2)) public final class ReloadConfigInit implements PCFInitializer { @Override public void onInit() { - IEventBus eventBus = + final IEventBus eventBus = MetaAPI.instance() .meta() .mod(PCF.MOD_ID) .map(Wrapped::unwrap) .map(ModContainer::getEventBus) .orElseThrow(); - eventBus.addListener((ModConfigEvent.Reloading event) -> Config.reload()); + eventBus.addListener((ModConfigEvent.Reloading _) -> Config.reload()); } } diff --git a/docs/Compatibility.md b/docs/Compatibility.md index 8f7e3d31..a09fabf7 100644 --- a/docs/Compatibility.md +++ b/docs/Compatibility.md @@ -8,24 +8,24 @@ ## Modern Forwarding and CrossStitch Command Wrapping -| MC Version | Forge | NeoForge | Modern Forwarding | CrossStitch | Notes | -|------------|-------|----------|-------------------|-------------|--------------------------------------------------------------------------------------------| -| 26.1.x | ✅ | ✅ | ✅ | ✅ | | -| 1.21.x | ✅ | ✅ | ✅ | ✅ | | -| 1.20.x | ✅ | ✅ | ✅ | ✅ | NeoForge 1.20.2 is incompatible with Ambassador | -| 1.19.x | ✅ | N/A | ✅ | ✅ | | -| 1.18.x | ✅ | N/A | ✅ | ✅ | | -| 1.17.x | ✅ | N/A | ✅ | ✅ | | -| 1.16.x | ✅ | N/A | ✅ | ✅ | Requires [MixinBootstrap](https://modrinth.com/mod/mixinbootstrap) on 1.16 - 1.16.1 | -| 1.15.x | ✅ | N/A | ✅ | ✅ | Requires [MixinBootstrap](https://modrinth.com/mod/mixinbootstrap) on 1.15 - 1.15.1 | -| 1.14.x | ✅ | N/A | ✅ | ✅ | Requires [MixinBootstrap](https://modrinth.com/mod/mixinbootstrap) | -| 1.13.x | ✅ | N/A | ✅ | ✅ | Requires [ModernMixins](https://modrinth.com/mod/modernmixins) on 1.13 - 1.13.2 | -| 1.12.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | -| 1.11.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | -| 1.10.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | -| 1.9.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | -| 1.8.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | -| 1.7.x | ✅ | N/A | ✅ | N/A | Requires [UniMixins](https://modrinth.com/mod/unimixins) and a modified Velocity proxy | +| MC Version | Forge | NeoForge | Modern Forwarding | CrossStitch | Notes | +|------------|-------|----------|-------------------|-------------|---------------------------------------------------------------------------------------------------------------------------------------| +| 26.1.x | ✅ | ✅ | ✅ | ✅ | | +| 1.21.x | ✅ | ✅ | ✅ | ✅ | | +| 1.20.x | ✅ | ✅ | ✅ | ✅ | NeoForge 1.20.2 is incompatible with Ambassador, and client cannot read the LoginQueryPacket when connecting directly (non-issue) | +| 1.19.x | ✅ | N/A | ✅ | ✅ | | +| 1.18.x | ✅ | N/A | ✅ | ✅ | | +| 1.17.x | ✅ | N/A | ✅ | ✅ | | +| 1.16.x | ✅ | N/A | ✅ | ✅ | Requires [MixinBootstrap](https://modrinth.com/mod/mixinbootstrap) on 1.16 - 1.16.1 | +| 1.15.x | ✅ | N/A | ✅ | ✅ | Requires [MixinBootstrap](https://modrinth.com/mod/mixinbootstrap) on 1.15 - 1.15.1 | +| 1.14.x | ✅ | N/A | ✅ | ✅ | Requires [MixinBootstrap](https://modrinth.com/mod/mixinbootstrap) | +| 1.13.x | ✅ | N/A | ✅ | ✅ | Requires [ModernMixins](https://modrinth.com/mod/modernmixins) on 1.13 - 1.13.2 | +| 1.12.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | +| 1.11.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | +| 1.10.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | +| 1.9.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | +| 1.8.x | ✅ | N/A | ✅ | N/A | Requires [MixinBooter](https://modrinth.com/mod/mixinbooter) and a modified Velocity proxy | +| 1.7.x | ✅ | N/A | ✅ | N/A | Requires [UniMixins](https://modrinth.com/mod/unimixins) and a modified Velocity proxy | ## SpongeForge and SpongeNeo Compatibility @@ -84,7 +84,7 @@ Try adding [BeQuietNegotiator]() t | Arclight | 1.17.1 | Forge | ✅ | ✅ | | | Arclight | 1.18.2 | Forge | ✅ | ✅ | | | Catserver | 1.18.2 | Forge | ? | ? | Wouldn't launch, even without PCF | -| Magma | 1.18.2 | Forge | ❌ | ✅ | Causes PCF's modern forwarding to fail due to the custom query response being null. Magma's built-in modern forwarding works. | +| Magma | 1.18.2 | Forge | ✅ | ✅ | | | Magma Maintained | 1.18.2 | Forge | ✅ | ✅ | | | Mohist | 1.18.2 | Forge | ✅ | ✅ | | | Arclight | 1.19.2 | Forge | ✅ | ✅ | Arclight chat handling incompatibility requires a reconnect. Resolved by setting `advanced.modernForwardingVersion = "MODERN_DEFAULT"` in PCF's config. | @@ -96,7 +96,7 @@ Try adding [BeQuietNegotiator]() t | Mohist | 1.19.4 | Forge | ✅ | ✅ | | | Arclight | 1.20.1 | Forge | ✅ | ✅ | | | Ketting | 1.20.1 | Forge | ✅ | ✅ | | -| Magma | 1.20.1 | Forge | ❌ | ? | May be the same issue as 1.18.2, except here Magma's built-in modern forwarding doesn't work. | +| Magma | 1.20.1 | Forge | ❌ | ? | "Bad VarInt decoded" when attempting to connect via Velocity | | Magma Maintained | 1.20.1 | Forge | ✅ | ✅ | | | Mohist | 1.20.1 | Forge | ✅ | ✅ | | | Arclight | 1.20.2 | Forge | ✅ | ✅ | | @@ -109,4 +109,4 @@ Try adding [BeQuietNegotiator]() t | Arclight | 1.21.1 | NeoForge | ✅ | ✅ | | | Magma Neo | 1.21.1 | NeoForge | ✅ | ✅ | | | TenetNeo | 1.21.1 | NeoForge | ? | ? | Wouldn't start, even without PCF. | -| Youer | 1.21.1 | NeoForge | ? | ? | Youer automatically removes PCF, leaving Youer without any way to wrap modded command args. | +| Youer | 1.21.1 | NeoForge | ? | ? | Youer automatically removes PCF unless disabled in the config | diff --git a/gradle.properties b/gradle.properties index efee4e20..1510d618 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ mod_id=pcf mod_name=ProxyCompatibleForge description=Bring modern forwarding to Neo/Forge servers, requires the Ambassador plugin on Velocity for 1.13-1.20.1, should work standalone on 1.20.2+ group=org.adde0109.pcf -version=1.2.4 +version=1.2.5 license=LGPL-2.1 authors=adde0109,JT122406,p0t4t0sandwich java_version=25 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 81b15d9e..0757bac7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,13 +4,13 @@ jvmdowngrader = "1.3.6" netty = "4.1.128.Final" shadow = "9.4.1" spotless = "8.4.0" -taterlib-lite = "0.2.1" +taterlib-lite = "0.3.0" unimined = "1.3.16-SNAPSHOT" [libraries] annotations = { group = "org.jetbrains", name = "annotations", version = "26.0.2" } asm-tree = { group = "org.ow2.asm", name = "asm-tree", version = "6.2" } -entrypoint-spoof = { group = "dev.neuralnexus", name = "entrypoint-spoof", version = "0.1.29" } +entrypoint-spoof = { group = "dev.neuralnexus", name = "entrypoint-spoof", version = "0.1.30" } guava = { group = "com.google.guava", name = "guava", version = "33.3.1-jre" } jspecify = { group = "org.jspecify", name = "jspecify", version = "1.0.0" } mixin = { group = "org.spongepowered", name = "mixin", version = "0.8.5-SNAPSHOT" } @@ -18,10 +18,12 @@ mojang-authlib = { group = "com.mojang", name = "authlib", version = "7.0.61" } mojang-brigadier = { group = "com.mojang", name = "brigadier", version = "1.0.18" } netty-buffer = { group = "io.netty", name = "netty-buffer", version.ref = "netty" } netty-codec = { group = "io.netty", name = "netty-codec", version.ref = "netty" } +netty-unix-common = { group = "io.netty", name = "netty-transport-native-unix-common", version.ref = "netty" } taterlib-lite-base = { group = "dev.neuralnexus.taterlib.lite", name = "base", version.ref = "taterlib-lite" } taterlib-lite-core = { group = "dev.neuralnexus.taterlib.lite", name = "core", version.ref = "taterlib-lite" } taterlib-lite-metadata = { group = "dev.neuralnexus.taterlib.lite", name = "metadata", version.ref = "taterlib-lite" } taterlib-lite-muxins = { group = "dev.neuralnexus.taterlib.lite", name = "muxins", version.ref = "taterlib-lite" } +taterlib-lite-network = { group = "dev.neuralnexus.taterlib.lite", name = "network", version.ref = "taterlib-lite" } [plugins] blossom = { id = "net.kyori.blossom", version.ref = "blossom" } diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ConnectionMixin.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ConnectionMixin.java index a4204c84..1e73dd28 100644 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ConnectionMixin.java +++ b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ConnectionMixin.java @@ -5,10 +5,12 @@ import dev.neuralnexus.taterapi.meta.anno.Versions; import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; +import net.minecraft.network.INetHandler; import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; import org.adde0109.pcf.forwarding.modern.ConnectionBridge; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -16,30 +18,27 @@ import java.net.SocketAddress; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V12_2)) @Mixin(NetworkManager.class) public abstract class ConnectionMixin implements ConnectionBridge { // spotless:off @Shadow private SocketAddress socketAddress; - - @AConstraint(version = @Versions(min = MinecraftVersion.V8, max = MinecraftVersion.V12_2)) - @Shadow public abstract void shadow$sendPacket(Packet packet); + @Shadow public abstract INetHandler shadow$getNetHandler(); // spotless:on @Override - public InetSocketAddress bridge$address() { + public @NonNull InetSocketAddress bridge$address() { return (InetSocketAddress) this.socketAddress; } @Override - public void bridge$address(InetSocketAddress address) { + public void bridge$address(final @NonNull InetSocketAddress address) { this.socketAddress = address; } - @AConstraint(version = @Versions(min = MinecraftVersion.V8, max = MinecraftVersion.V12_2)) @Override - public void bridge$send(Object packet) { - this.shadow$sendPacket((Packet) packet); + public @Nullable Object bridge$getPacketListener() { + return this.shadow$getNetHandler(); } } diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/EnumConnectionStateMixin.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/EnumConnectionStateMixin.java deleted file mode 100644 index 0b1470f1..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/EnumConnectionStateMixin.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.adde0109.pcf.mixin.v12_2.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Constraint; -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.MinecraftVersions; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.EnumConnectionState; -import net.minecraft.network.EnumPacketDirection; -import net.minecraft.network.Packet; - -import org.adde0109.pcf.v12_2.forge.forwarding.network.C2SCustomQueryAnswerPacket; -import org.adde0109.pcf.v12_2.forge.forwarding.network.S2CCustomQueryPacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V8, max = MinecraftVersion.V12_2)) -@Mixin(EnumConnectionState.class) -public abstract class EnumConnectionStateMixin { - // spotless:off - @Shadow protected abstract EnumConnectionState shadow$registerPacket(EnumPacketDirection direction, Class> packetClass); - // spotless:on - - @Unique private Class> pcf$SCheckClass = null; - @Unique private Class> pcf$CCheckClass = null; - - @SuppressWarnings("unchecked") - @Inject(method = "registerPacket", at = @At(value = "RETURN")) - private void onRegister( - EnumPacketDirection direction, - Class> packetClass, - CallbackInfoReturnable cir) { - try { - if (this.pcf$SCheckClass == null || this.pcf$CCheckClass == null) { - if (Constraint.noLessThan(MinecraftVersions.V9).result()) { - this.pcf$SCheckClass = - (Class>) - Class.forName( - "net.minecraft.network.login.server.SPacketEnableCompression") - .asSubclass(Packet.class); - this.pcf$CCheckClass = - (Class>) - Class.forName( - "net.minecraft.network.login.client.CPacketEncryptionResponse") - .asSubclass(Packet.class); - } else { - this.pcf$SCheckClass = - (Class>) - Class.forName( - "net.minecraft.network.login.server.S03PacketEnableCompression") - .asSubclass(Packet.class); - this.pcf$CCheckClass = - (Class>) - Class.forName( - "net.minecraft.network.login.client.C01PacketEncryptionResponse") - .asSubclass(Packet.class); - } - } - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - - if (packetClass == this.pcf$SCheckClass) { - this.shadow$registerPacket(EnumPacketDirection.CLIENTBOUND, S2CCustomQueryPacket.class); - } else if (packetClass == this.pcf$CCheckClass) { - this.shadow$registerPacket( - EnumPacketDirection.SERVERBOUND, C2SCustomQueryAnswerPacket.class); - } - } -} diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java index 078a796c..232dbb0a 100644 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java +++ b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplHelloMixin.java @@ -18,7 +18,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V12_2)) @Mixin(NetHandlerLoginServer.class) public abstract class ServerLoginPacketListenerImplHelloMixin diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java index 164e5580..a407f474 100644 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java +++ b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java @@ -21,7 +21,7 @@ import org.spongepowered.asm.mixin.Unique; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V12_2)) @Mixin(NetHandlerLoginServer.class) public abstract class ServerLoginPacketListenerImplMixin @@ -60,18 +60,18 @@ public abstract class ServerLoginPacketListenerImplMixin } @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V9, max = MinecraftVersion.V12_2)) @Mixin(NetHandlerLoginServer.class) public abstract static class SLPLIMixin_12 implements ServerLoginPacketListenerBridge { // spotless:off @Shadow @Final private static Logger LOGGER; - @Shadow public abstract void shadow$onDisconnect(ITextComponent reason); + @Shadow public abstract void shadow$disconnect(ITextComponent reason); // spotless:on @Override public void bridge$disconnect(final @NonNull Object reason) { - this.shadow$onDisconnect((ITextComponent) reason); + this.shadow$disconnect((ITextComponent) reason); } @Override diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java deleted file mode 100644 index 2ca23122..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/mixin/v12_2/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.adde0109.pcf.mixin.v12_2.forge.forwarding.modern; - -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.server.network.NetHandlerLoginServer; - -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.adde0109.pcf.v12_2.forge.forwarding.network.C2SCustomQueryAnswerPacket; -import org.adde0109.pcf.v12_2.forge.forwarding.network.ServerLoginQueryListener; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V8, max = MinecraftVersion.V12_2)) -@Implements(@Interface(iface = ServerLoginQueryListener.class, prefix = "pcf$")) -@Mixin(NetHandlerLoginServer.class) -public abstract class ServerLoginPacketListenerImplQueryMixin - implements ServerLoginPacketListenerBridge { - public void pcf$handleCustomQueryPacket(final @NonNull C2SCustomQueryAnswerPacket packet) { - handleCustomQueryPacket(this, packet.transactionId(), packet); - } -} diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/AdapterRegistryInit.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/AdapterRegistryInit.java deleted file mode 100644 index 332760a9..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/AdapterRegistryInit.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.adde0109.pcf.v12_2.forge; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; -import dev.neuralnexus.taterapi.network.NetworkRegistry; -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v12_2.forge.forwarding.network.C2SCustomQueryAnswerPacket; -import org.adde0109.pcf.v12_2.forge.forwarding.network.S2CCustomQueryPacket; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - platform = Platform.FORGE, - version = @Versions(min = MinecraftVersion.V8, max = MinecraftVersion.V12_2)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - } - - @Override - public void onInit() {} - - public static final class CCustomQueryPacketAdapter - implements ReversibleCodec { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode(S2CCustomQueryPacket object) { - return Result.success( - new ClientboundCustomQueryPacket(object.transactionId(), object.payload())); - } - - @Override - public Result decode(ClientboundCustomQueryPacket object) { - return Result.success(new S2CCustomQueryPacket(object)); - } - } - - public static final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec< - C2SCustomQueryAnswerPacket, ServerboundCustomQueryAnswerPacket> { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @Override - public Result encode( - C2SCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success( - new ServerboundCustomQueryAnswerPacket(object.transactionId())); - } - return Result.success( - new ServerboundCustomQueryAnswerPacket( - object.transactionId(), object.payload())); - } - - @Override - public Result decode( - ServerboundCustomQueryAnswerPacket object) { - return Result.success(new C2SCustomQueryAnswerPacket(object)); - } - } -} diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/C2SCustomQueryAnswerPacket.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/C2SCustomQueryAnswerPacket.java deleted file mode 100644 index fbc73556..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/C2SCustomQueryAnswerPacket.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.adde0109.pcf.v12_2.forge.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; - -import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.INetHandlerLoginServer; - -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; - -import java.io.IOException; - -@SuppressWarnings({"RedundantThrows", "unused"}) -public final class C2SCustomQueryAnswerPacket implements Packet { - private ServerboundCustomQueryAnswerPacket packet; - - public C2SCustomQueryAnswerPacket() {} - - public C2SCustomQueryAnswerPacket(final @NonNull ServerboundCustomQueryAnswerPacket packet) { - this.packet = packet; - } - - @Override - public void readPacketData(final @NonNull PacketBuffer buf) throws IOException { - this.packet = ServerboundCustomQueryAnswerPacket.STREAM_CODEC.decode(buf); - } - - @Override - public void writePacketData(final @NonNull PacketBuffer buf) throws IOException { - ServerboundCustomQueryAnswerPacket.STREAM_CODEC.encode(buf, this.packet); - } - - @Override - public void processPacket(final @NonNull INetHandlerLoginServer handler) { - ((ServerLoginQueryListener) handler).handleCustomQueryPacket(this); - } - - public int transactionId() { - return this.packet.transactionId(); - } - - public @Nullable CustomQueryAnswerPayload payload() { - return this.packet.payload(); - } -} diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/ClientLoginQueryListener.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/ClientLoginQueryListener.java deleted file mode 100644 index 29bd9ce4..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/ClientLoginQueryListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.adde0109.pcf.v12_2.forge.forwarding.network; - -import net.minecraft.network.INetHandler; - -public interface ClientLoginQueryListener extends INetHandler { - void handleCustomQuery(S2CCustomQueryPacket packet); -} diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/S2CCustomQueryPacket.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/S2CCustomQueryPacket.java deleted file mode 100644 index 5a88fdd6..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/S2CCustomQueryPacket.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.adde0109.pcf.v12_2.forge.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; - -import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.INetHandlerLoginClient; -import net.minecraft.util.ResourceLocation; - -import org.jspecify.annotations.NonNull; - -import java.io.IOException; - -@SuppressWarnings({"RedundantThrows", "unused"}) -public final class S2CCustomQueryPacket implements Packet { - private ClientboundCustomQueryPacket packet; - - public S2CCustomQueryPacket() {} - - public S2CCustomQueryPacket(final @NonNull ClientboundCustomQueryPacket packet) { - this.packet = packet; - } - - @Override - public void readPacketData(@NonNull PacketBuffer buf) throws IOException { - this.packet = ClientboundCustomQueryPacket.STREAM_CODEC.decode(buf); - } - - @Override - public void writePacketData(@NonNull PacketBuffer buf) throws IOException { - ClientboundCustomQueryPacket.STREAM_CODEC.encode(buf, this.packet); - } - - @Override - public void processPacket(@NonNull INetHandlerLoginClient handler) { - ((ClientLoginQueryListener) handler).handleCustomQuery(this); - } - - public int transactionId() { - return this.packet.transactionId(); - } - - public @NonNull ResourceLocation id() { - return identifier(this.packet.payload().id()); - } - - public @NonNull CustomQueryPayload payload() { - return this.packet.payload(); - } -} diff --git a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/ServerLoginQueryListener.java b/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/ServerLoginQueryListener.java deleted file mode 100644 index 4540c34f..00000000 --- a/legacy/v12_2/src/forge/java/org/adde0109/pcf/v12_2/forge/forwarding/network/ServerLoginQueryListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.adde0109.pcf.v12_2.forge.forwarding.network; - -import net.minecraft.network.INetHandler; - -public interface ServerLoginQueryListener extends INetHandler { - void handleCustomQueryPacket(C2SCustomQueryAnswerPacket packet); -} diff --git a/legacy/v12_2/src/forge/resources/pcf.mixins.v12_2.forge.json b/legacy/v12_2/src/forge/resources/pcf.mixins.v12_2.forge.json index 26506a89..d6446391 100644 --- a/legacy/v12_2/src/forge/resources/pcf.mixins.v12_2.forge.json +++ b/legacy/v12_2/src/forge/resources/pcf.mixins.v12_2.forge.json @@ -9,10 +9,8 @@ "package": "org.adde0109.pcf.mixin", "server": [ "v12_2.forge.forwarding.modern.ConnectionMixin", - "v12_2.forge.forwarding.modern.EnumConnectionStateMixin", "v12_2.forge.forwarding.modern.ServerLoginPacketListenerImplHelloMixin", "v12_2.forge.forwarding.modern.ServerLoginPacketListenerImplMixin", - "v12_2.forge.forwarding.modern.ServerLoginPacketListenerImplMixin$SLPLIMixin_12", - "v12_2.forge.forwarding.modern.ServerLoginPacketListenerImplQueryMixin" + "v12_2.forge.forwarding.modern.ServerLoginPacketListenerImplMixin$SLPLIMixin_12" ] } diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ConnectionMixin.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ConnectionMixin.java deleted file mode 100644 index 3ce528cd..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ConnectionMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.adde0109.pcf.mixin.v7_10.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import io.netty.util.concurrent.GenericFutureListener; - -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; - -import org.adde0109.pcf.forwarding.modern.ConnectionBridge; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V7_10)) -@Mixin(NetworkManager.class) -public abstract class ConnectionMixin implements ConnectionBridge { - // spotless:off - @Shadow public abstract void shadow$scheduleOutboundPacket(Packet packet, GenericFutureListener... futureListeners); - // spotless:on - - @Override - public void bridge$send(Object packet) { - this.shadow$scheduleOutboundPacket((Packet) packet); - } -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/EnumConnectionStateMixin.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/EnumConnectionStateMixin.java deleted file mode 100644 index 1e9ce329..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/EnumConnectionStateMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.adde0109.pcf.mixin.v7_10.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.EnumConnectionState; -import net.minecraft.network.Packet; -import net.minecraft.network.login.client.C01PacketEncryptionResponse; -import net.minecraft.network.login.server.S02PacketLoginSuccess; - -import org.adde0109.pcf.v7_10.forge.forwarding.network.C2SCustomQueryAnswerPacket; -import org.adde0109.pcf.v7_10.forge.forwarding.network.S2CCustomQueryPacket; -import org.adde0109.pcf.v7_10.forge.forwarding.network.S2CDummyPacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V7_10)) -@Mixin(EnumConnectionState.class) -public abstract class EnumConnectionStateMixin { - // spotless:off - @Shadow protected abstract EnumConnectionState shadow$func_150751_a(int id, Class packetClass); - @Shadow protected abstract EnumConnectionState shadow$func_150756_b(int id, Class packetClass); - - @Inject(method = {"func_150751_a"}, at = @At(value = "RETURN")) - private void onRegisterC2S(int id, Class packetClass, CallbackInfoReturnable cir) { - if (packetClass == C01PacketEncryptionResponse.class) { - this.shadow$func_150751_a(0x2, C2SCustomQueryAnswerPacket.class); - } - } - - @Inject(method = {"func_150756_b"}, at = @At(value = "RETURN")) - private void onRegisterS2C(int id, Class packetClass, CallbackInfoReturnable cir) { - if (packetClass == S02PacketLoginSuccess.class) { - this.shadow$func_150756_b(0x3, S2CDummyPacket.class); - this.shadow$func_150756_b(0x4, S2CCustomQueryPacket.class); - } - } - // spotless:on -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/MessageSerializerMixin.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/MessageSerializerMixin.java new file mode 100644 index 00000000..0b2597e4 --- /dev/null +++ b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/MessageSerializerMixin.java @@ -0,0 +1,26 @@ +package org.adde0109.pcf.mixin.v7_10.forge.forwarding.modern; + +import dev.neuralnexus.taterapi.meta.Mappings; +import dev.neuralnexus.taterapi.meta.anno.AConstraint; +import dev.neuralnexus.taterapi.meta.anno.Versions; +import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; + +import io.netty.handler.codec.MessageToByteEncoder; + +import net.minecraft.network.Packet; +import net.minecraft.util.MessageSerializer; + +import org.spongepowered.asm.mixin.Mixin; + +@SuppressWarnings("rawtypes") +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V7_10)) +@Mixin(MessageSerializer.class) +public abstract class MessageSerializerMixin extends MessageToByteEncoder { + @SuppressWarnings("RedundantThrows") + @Override + public boolean acceptOutboundMessage(Object msg) throws Exception { + return msg instanceof Packet; + } +} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java index 7b700d90..536c7612 100644 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java +++ b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java @@ -16,19 +16,19 @@ import org.spongepowered.asm.mixin.Shadow; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V8_9)) @Mixin(NetHandlerLoginServer.class) public abstract class ServerLoginPacketListenerImplMixin implements ServerLoginPacketListenerBridge { // spotless:off @Shadow @Final private static Logger logger; - @Shadow public abstract void shadow$onDisconnect(IChatComponent reason); + @Shadow public abstract void shadow$closeConnection(String reason); // spotless:on @Override public void bridge$disconnect(final @NonNull Object reason) { - this.shadow$onDisconnect((IChatComponent) reason); + this.shadow$closeConnection(((IChatComponent) reason).getFormattedText()); } @Override diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java deleted file mode 100644 index 3d81097c..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/mixin/v7_10/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.adde0109.pcf.mixin.v7_10.forge.forwarding.modern; - -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.server.network.NetHandlerLoginServer; - -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.adde0109.pcf.v7_10.forge.forwarding.network.C2SCustomQueryAnswerPacket; -import org.adde0109.pcf.v7_10.forge.forwarding.network.ServerLoginQueryListener; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V7_10)) -@Implements(@Interface(iface = ServerLoginQueryListener.class, prefix = "pcf$")) -@Mixin(NetHandlerLoginServer.class) -public abstract class ServerLoginPacketListenerImplQueryMixin - implements ServerLoginPacketListenerBridge { - public void pcf$handleCustomQueryPacket(final @NonNull C2SCustomQueryAnswerPacket packet) { - handleCustomQueryPacket(this, packet.transactionId(), packet); - } -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/AdapterRegistryInit.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/AdapterRegistryInit.java deleted file mode 100644 index b6c78908..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/AdapterRegistryInit.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.adde0109.pcf.v7_10.forge; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; -import dev.neuralnexus.taterapi.network.NetworkRegistry; -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v7_10.forge.forwarding.network.C2SCustomQueryAnswerPacket; -import org.adde0109.pcf.v7_10.forge.forwarding.network.S2CCustomQueryPacket; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - platform = Platform.FORGE, - version = @Versions(min = MinecraftVersion.V7, max = MinecraftVersion.V7_10)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - } - - @Override - public void onInit() {} - - public static final class CCustomQueryPacketAdapter - implements ReversibleCodec { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode(S2CCustomQueryPacket object) { - return Result.success( - new ClientboundCustomQueryPacket(object.transactionId(), object.payload())); - } - - @Override - public Result decode(ClientboundCustomQueryPacket object) { - return Result.success(new S2CCustomQueryPacket(object)); - } - } - - public static final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec< - C2SCustomQueryAnswerPacket, ServerboundCustomQueryAnswerPacket> { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @Override - public Result encode( - C2SCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success( - new ServerboundCustomQueryAnswerPacket(object.transactionId())); - } - return Result.success( - new ServerboundCustomQueryAnswerPacket( - object.transactionId(), object.payload())); - } - - @Override - public Result decode( - ServerboundCustomQueryAnswerPacket object) { - return Result.success(new C2SCustomQueryAnswerPacket(object)); - } - } -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/C2SCustomQueryAnswerPacket.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/C2SCustomQueryAnswerPacket.java deleted file mode 100644 index 99bf9fc0..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/C2SCustomQueryAnswerPacket.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.adde0109.pcf.v7_10.forge.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; - -import net.minecraft.network.INetHandler; -import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; - -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; - -@SuppressWarnings("unused") -public final class C2SCustomQueryAnswerPacket extends Packet { - private ServerboundCustomQueryAnswerPacket packet; - - public C2SCustomQueryAnswerPacket() {} - - public C2SCustomQueryAnswerPacket(final @NonNull ServerboundCustomQueryAnswerPacket packet) { - this.packet = packet; - } - - @Override - public void readPacketData(final @NonNull PacketBuffer buf) { - this.packet = ServerboundCustomQueryAnswerPacket.STREAM_CODEC.decode(buf); - } - - @Override - public void writePacketData(final @NonNull PacketBuffer buf) { - ServerboundCustomQueryAnswerPacket.STREAM_CODEC.encode(buf, this.packet); - } - - @Override - public void processPacket(final @NonNull INetHandler handler) { - ((ServerLoginQueryListener) handler).handleCustomQueryPacket(this); - } - - public int transactionId() { - return this.packet.transactionId(); - } - - public @Nullable CustomQueryAnswerPayload payload() { - return this.packet.payload(); - } -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/ClientLoginQueryListener.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/ClientLoginQueryListener.java deleted file mode 100644 index 12cc2a40..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/ClientLoginQueryListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.adde0109.pcf.v7_10.forge.forwarding.network; - -import net.minecraft.network.INetHandler; - -public interface ClientLoginQueryListener extends INetHandler { - void handleCustomQuery(S2CCustomQueryPacket packet); -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/S2CCustomQueryPacket.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/S2CCustomQueryPacket.java deleted file mode 100644 index 4d32e64d..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/S2CCustomQueryPacket.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.adde0109.pcf.v7_10.forge.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; - -import net.minecraft.network.INetHandler; -import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.ResourceLocation; - -import org.jspecify.annotations.NonNull; - -@SuppressWarnings("unused") -public final class S2CCustomQueryPacket extends Packet { - private ClientboundCustomQueryPacket packet; - - public S2CCustomQueryPacket() {} - - public S2CCustomQueryPacket(final @NonNull ClientboundCustomQueryPacket packet) { - this.packet = packet; - } - - @Override - public void readPacketData(@NonNull PacketBuffer buf) { - this.packet = ClientboundCustomQueryPacket.STREAM_CODEC.decode(buf); - } - - @Override - public void writePacketData(@NonNull PacketBuffer buf) { - ClientboundCustomQueryPacket.STREAM_CODEC.encode(buf, this.packet); - } - - @Override - public void processPacket(@NonNull INetHandler handler) { - ((ClientLoginQueryListener) handler).handleCustomQuery(this); - } - - public int transactionId() { - return this.packet.transactionId(); - } - - public @NonNull ResourceLocation id() { - return identifier(this.packet.payload().id()); - } - - public @NonNull CustomQueryPayload payload() { - return this.packet.payload(); - } -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/S2CDummyPacket.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/S2CDummyPacket.java deleted file mode 100644 index 1387b939..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/S2CDummyPacket.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.adde0109.pcf.v7_10.forge.forwarding.network; - -import net.minecraft.network.INetHandler; -import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; - -@SuppressWarnings("unused") -public final class S2CDummyPacket extends Packet { - public S2CDummyPacket() {} - - @Override - public void readPacketData(PacketBuffer buf) {} - - @Override - public void writePacketData(PacketBuffer buffer) {} - - @Override - public void processPacket(INetHandler handler) {} -} diff --git a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/ServerLoginQueryListener.java b/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/ServerLoginQueryListener.java deleted file mode 100644 index 163573d1..00000000 --- a/legacy/v7_10/src/forge/java/org/adde0109/pcf/v7_10/forge/forwarding/network/ServerLoginQueryListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.adde0109.pcf.v7_10.forge.forwarding.network; - -import net.minecraft.network.INetHandler; - -public interface ServerLoginQueryListener extends INetHandler { - void handleCustomQueryPacket(C2SCustomQueryAnswerPacket packet); -} diff --git a/legacy/v7_10/src/forge/resources/pcf.mixins.v7_10.forge.json b/legacy/v7_10/src/forge/resources/pcf.mixins.v7_10.forge.json index f7e7cc91..8d99e8c9 100644 --- a/legacy/v7_10/src/forge/resources/pcf.mixins.v7_10.forge.json +++ b/legacy/v7_10/src/forge/resources/pcf.mixins.v7_10.forge.json @@ -8,9 +8,7 @@ "plugin": "org.adde0109.pcf.mixin.plugin.PCFMixinPlugin", "package": "org.adde0109.pcf.mixin", "server": [ - "v7_10.forge.forwarding.modern.ConnectionMixin", - "v7_10.forge.forwarding.modern.EnumConnectionStateMixin", - "v7_10.forge.forwarding.modern.ServerLoginPacketListenerImplMixin", - "v7_10.forge.forwarding.modern.ServerLoginPacketListenerImplQueryMixin" + "v7_10.forge.forwarding.modern.MessageSerializerMixin", + "v7_10.forge.forwarding.modern.ServerLoginPacketListenerImplMixin" ] } diff --git a/modern/v13_2/build.gradle.kts b/modern/v13_2/build.gradle.kts index 372f9798..c1417aa7 100644 --- a/modern/v13_2/build.gradle.kts +++ b/modern/v13_2/build.gradle.kts @@ -6,6 +6,7 @@ val forgeCompileOnly: Configuration by configurations.getting { unimined.minecraft(forge) { version(minecraftVersion) + side("server") mappings { searge() mcp(mcpChannel, mcpVersion) diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/crossstitch/CommandsPacketMixin.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/crossstitch/CommandsPacketMixin.java index 9989add4..1bf8703c 100644 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/crossstitch/CommandsPacketMixin.java +++ b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/crossstitch/CommandsPacketMixin.java @@ -25,7 +25,7 @@ * href="https://github.com/VelocityPowered/CrossStitch/blob/fe3f3be49c52dc9c1b6b7cd3cafefb953adf4486/src/main/java/com/velocitypowered/crossstitch/mixin/command/CommandTreeSerializationMixin.java">CrossStitch */ @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V13_2)) @Mixin(SPacketCommandList.class) public abstract class CommandsPacketMixin { diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ClientboundCustomQueryPacketAccessor.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ClientboundCustomQueryPacketAccessor.java deleted file mode 100644 index 6483aa47..00000000 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ClientboundCustomQueryPacketAccessor.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.adde0109.pcf.mixin.v13_2.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.server.SPacketCustomPayloadLogin; -import net.minecraft.util.ResourceLocation; - -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -// TODO: Create some way of replacing a mixin's target, then merge with v16_5 -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V13_2)) -@Mixin(SPacketCustomPayloadLogin.class) -public interface ClientboundCustomQueryPacketAccessor { - @Accessor("transaction") - int pcf$getTransactionId(); - - @Accessor("transaction") - void pcf$setTransactionId(final int transactionId); - - @Accessor("channel") - @NonNull ResourceLocation pcf$getIdentifier(); - - @Accessor("channel") - void pcf$setIdentifier(final @NonNull ResourceLocation identifier); - - @Accessor("payload") - @NonNull PacketBuffer pcf$getData(); - - @Accessor("payload") - void pcf$setData(final @NonNull PacketBuffer data); -} diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ConnectionMixin.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ConnectionMixin.java deleted file mode 100644 index 2d716e57..00000000 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ConnectionMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.adde0109.pcf.mixin.v13_2.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; - -import org.adde0109.pcf.forwarding.modern.ConnectionBridge; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.net.InetSocketAddress; -import java.net.SocketAddress; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V13_2)) -@Mixin(NetworkManager.class) -public abstract class ConnectionMixin implements ConnectionBridge { - // spotless:off - @Shadow private SocketAddress socketAddress; - - // TODO: Find a way to swap just this method and merge with v16_5 - @Shadow public abstract void shadow$sendPacket(Packet packet); - // spotless:on - - @Override - public InetSocketAddress bridge$address() { - return (InetSocketAddress) this.socketAddress; - } - - @Override - public void bridge$address(InetSocketAddress address) { - this.socketAddress = address; - } - - @Override - public void bridge$send(Object packet) { - this.shadow$sendPacket((Packet) packet); - } -} diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java index 83bd5414..4638354b 100644 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java +++ b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java @@ -1,6 +1,5 @@ package org.adde0109.pcf.mixin.v13_2.forge.forwarding.modern; -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleHello; import com.mojang.authlib.GameProfile; @@ -12,7 +11,6 @@ import net.minecraft.network.NetHandlerLoginServer; import net.minecraft.network.NetworkManager; -import net.minecraft.network.login.client.CPacketCustomPayloadLogin; import net.minecraft.util.text.ITextComponent; import org.adde0109.pcf.forwarding.modern.ConnectionBridge; @@ -30,7 +28,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V13_2)) @Mixin(NetHandlerLoginServer.class) public abstract class ServerLoginPacketListenerImplMixin @@ -52,16 +50,6 @@ private void onHandleHello(final @NonNull CallbackInfo ci) { handleHello(this, ci); } - @Inject(method = "processCustomPayloadLogin", at = @At("HEAD"), cancellable = true) - private void onHandleCustomQueryPacket( - final @NonNull CPacketCustomPayloadLogin packet, final @NonNull CallbackInfo ci) { - handleCustomQueryPacket( - this, - ((ServerboundCustomQueryPacketAccessor) packet).pcf$getTransactionId(), - packet, - ci); - } - @Override public int bridge$velocityLoginMessageId() { return this.pcf$velocityLoginMessageId; diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerboundCustomQueryPacketAccessor.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerboundCustomQueryPacketAccessor.java deleted file mode 100644 index 147e7a10..00000000 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/mixin/v13_2/forge/forwarding/modern/ServerboundCustomQueryPacketAccessor.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.adde0109.pcf.mixin.v13_2.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.client.CPacketCustomPayloadLogin; - -import org.jspecify.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -// TODO: Create some way of replacing a mixin's target, then merge with v16_5 -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V13_2)) -@Mixin(CPacketCustomPayloadLogin.class) -public interface ServerboundCustomQueryPacketAccessor { - @Accessor("transaction") - int pcf$getTransactionId(); - - @Accessor("payload") - @Nullable PacketBuffer pcf$getData(); -} diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/AdapterRegistryInit.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/AdapterRegistryInit.java deleted file mode 100644 index fb773924..00000000 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/AdapterRegistryInit.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.adde0109.pcf.v13_2.forge; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; -import dev.neuralnexus.taterapi.network.NetworkRegistry; - -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v13_2.forge.forwarding.network.CCustomQueryPacketAdapter; -import org.adde0109.pcf.v13_2.forge.forwarding.network.SCustomQueryAnswerPacketAdapter; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - platform = Platform.FORGE, - version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V13_2)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - } - - @Override - public void onInit() {} -} diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/forwarding/network/CCustomQueryPacketAdapter.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/forwarding/network/CCustomQueryPacketAdapter.java deleted file mode 100644 index a66de0da..00000000 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/forwarding/network/CCustomQueryPacketAdapter.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.adde0109.pcf.v13_2.forge.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.server.SPacketCustomPayloadLogin; - -import org.adde0109.pcf.mixin.v13_2.forge.forwarding.modern.ClientboundCustomQueryPacketAccessor; - -public final class CCustomQueryPacketAdapter - implements ReversibleCodec { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode(SPacketCustomPayloadLogin object) { - return Result.success( - new ClientboundCustomQueryPacket( - ((ClientboundCustomQueryPacketAccessor) object).pcf$getTransactionId(), - CustomQueryPayload.codec( - ((ClientboundCustomQueryPacketAccessor) object) - .pcf$getIdentifier() - .toString()) - .decode( - ((ClientboundCustomQueryPacketAccessor) object) - .pcf$getData() - .slice()))); - } - - @SuppressWarnings("DataFlowIssue") - @Override - public Result decode(ClientboundCustomQueryPacket object) { - SPacketCustomPayloadLogin mcObject = new SPacketCustomPayloadLogin(); - ((ClientboundCustomQueryPacketAccessor) mcObject) - .pcf$setTransactionId(object.transactionId()); - ((ClientboundCustomQueryPacketAccessor) mcObject) - .pcf$setIdentifier(identifier(object.payload().id())); - ((ClientboundCustomQueryPacketAccessor) mcObject) - .pcf$setData(new PacketBuffer(object.payload().data().slice())); - return Result.success(mcObject); - } -} diff --git a/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java b/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java deleted file mode 100644 index 786e3640..00000000 --- a/modern/v13_2/src/forge/java/org/adde0109/pcf/v13_2/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.adde0109.pcf.v13_2.forge.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.client.CPacketCustomPayloadLogin; - -import org.adde0109.pcf.mixin.v13_2.forge.forwarding.modern.ServerboundCustomQueryPacketAccessor; - -public final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @SuppressWarnings("DataFlowIssue") - @Override - public Result encode( - final CPacketCustomPayloadLogin object) { - final int transactionId = - ((ServerboundCustomQueryPacketAccessor) object).pcf$getTransactionId(); - if (((ServerboundCustomQueryPacketAccessor) object).pcf$getData() == null) { - return Result.success(new ServerboundCustomQueryAnswerPacket(transactionId)); - } - return Result.success( - new ServerboundCustomQueryAnswerPacket( - transactionId, - CustomQueryAnswerPayload.codec(transactionId) - .decode( - ((ServerboundCustomQueryPacketAccessor) object) - .pcf$getData() - .slice()))); - } - - @Override - public Result decode( - final ServerboundCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success(new CPacketCustomPayloadLogin(object.transactionId(), null)); - } - return Result.success( - new CPacketCustomPayloadLogin( - object.transactionId(), new PacketBuffer(object.payload().data().slice()))); - } -} diff --git a/modern/v13_2/src/forge/resources/pcf.mixins.v13_2.forge.json b/modern/v13_2/src/forge/resources/pcf.mixins.v13_2.forge.json index 59bcd8b5..dbf496cb 100644 --- a/modern/v13_2/src/forge/resources/pcf.mixins.v13_2.forge.json +++ b/modern/v13_2/src/forge/resources/pcf.mixins.v13_2.forge.json @@ -9,9 +9,6 @@ "package": "org.adde0109.pcf.mixin", "server": [ "v13_2.forge.crossstitch.CommandsPacketMixin", - "v13_2.forge.forwarding.modern.ClientboundCustomQueryPacketAccessor", - "v13_2.forge.forwarding.modern.ConnectionMixin", - "v13_2.forge.forwarding.modern.ServerboundCustomQueryPacketAccessor", "v13_2.forge.forwarding.modern.ServerLoginPacketListenerImplMixin" ] } diff --git a/modern/v14_4/build.gradle.kts b/modern/v14_4/build.gradle.kts index 84183600..e6a48960 100644 --- a/modern/v14_4/build.gradle.kts +++ b/modern/v14_4/build.gradle.kts @@ -6,6 +6,7 @@ val forgeCompileOnly: Configuration by configurations.getting { unimined.minecraft(forge) { version(minecraftVersion) + side("server") mappings { parchment(parchmentMinecraft, parchmentVersion) mojmap() @@ -20,8 +21,7 @@ unimined.minecraft(forge) { dependencies { forgeCompileOnly(libs.mixin) - evaluationDependsOn(":modern:v16_5") - forgeCompileOnly(srcSetAsDep(":modern:v16_5", "forge")) + forgeCompileOnly(srcSetAsDep(":deobsf:v26_1", "forge")) forgeCompileOnly(project(":common")) } diff --git a/modern/v14_4/src/forge/java/org/adde0109/pcf/mixin/v14_4/forge/crossstitch/CommandsPacketMixin.java b/modern/v14_4/src/forge/java/org/adde0109/pcf/mixin/v14_4/forge/crossstitch/CommandsPacketMixin.java index bab113fc..cf570f47 100644 --- a/modern/v14_4/src/forge/java/org/adde0109/pcf/mixin/v14_4/forge/crossstitch/CommandsPacketMixin.java +++ b/modern/v14_4/src/forge/java/org/adde0109/pcf/mixin/v14_4/forge/crossstitch/CommandsPacketMixin.java @@ -24,7 +24,7 @@ * href="https://github.com/VelocityPowered/CrossStitch/blob/fe3f3be49c52dc9c1b6b7cd3cafefb953adf4486/src/main/java/com/velocitypowered/crossstitch/mixin/command/CommandTreeSerializationMixin.java">CrossStitch */ @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V14, max = MinecraftVersion.V16_4)) @Mixin(ClientboundCommandsPacket.class) public abstract class CommandsPacketMixin { diff --git a/modern/v14_4/src/forge/java/org/adde0109/pcf/v14_4/forge/ReloadConfigInit.java b/modern/v14_4/src/forge/java/org/adde0109/pcf/v14_4/forge/ReloadConfigInit.java index 9d5422fd..f525324f 100644 --- a/modern/v14_4/src/forge/java/org/adde0109/pcf/v14_4/forge/ReloadConfigInit.java +++ b/modern/v14_4/src/forge/java/org/adde0109/pcf/v14_4/forge/ReloadConfigInit.java @@ -13,7 +13,7 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v16_5.forge.Config; +import org.adde0109.pcf.v26_1.forge.Config; @AConstraint( platform = Platform.FORGE, @@ -21,13 +21,13 @@ public final class ReloadConfigInit implements PCFInitializer { @Override public void onInit() { - IEventBus eventBus = + final IEventBus eventBus = MetaAPI.instance() .meta() .mod(PCF.MOD_ID) .map(Wrapped::unwrap) .map(FMLModContainer::getEventBus) .orElseThrow(); - eventBus.addListener((ModConfig.ConfigReloading event) -> Config.reload()); + eventBus.addListener((ModConfig.ConfigReloading _) -> Config.reload()); } } diff --git a/modern/v16_5/build.gradle.kts b/modern/v16_5/build.gradle.kts index d08baa30..c8598dba 100644 --- a/modern/v16_5/build.gradle.kts +++ b/modern/v16_5/build.gradle.kts @@ -6,6 +6,7 @@ val forgeCompileOnly: Configuration by configurations.getting { unimined.minecraft(forge) { version(minecraftVersion) + side("server") mappings { parchment(parchmentMinecraft, parchmentVersion) mojmap() @@ -19,6 +20,7 @@ unimined.minecraft(forge) { } dependencies { + forgeCompileOnly(srcSetAsDep(":deobsf:v26_1", "forge")) forgeCompileOnly(project(":common")) } diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesAccessor.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesAccessor.java index b0c02d24..337df9c7 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesAccessor.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesAccessor.java @@ -17,7 +17,7 @@ import java.util.Map; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V16_5)) @Mixin(ArgumentTypes.class) public interface ArgumentTypesAccessor { diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesEntryMixin.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesEntryMixin.java index 36c56dec..a62767a3 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesEntryMixin.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/ArgumentTypesEntryMixin.java @@ -22,7 +22,7 @@ import org.spongepowered.asm.mixin.Shadow; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V16_5)) @Mixin(ArgumentTypes.Entry.class) public class ArgumentTypesEntryMixin> diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/CommandsPacketMixin.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/CommandsPacketMixin.java index 06e679f8..34faf97a 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/CommandsPacketMixin.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/crossstitch/CommandsPacketMixin.java @@ -23,7 +23,7 @@ * Adapted from CrossStitch */ -@AConstraint(mappings = Mappings.LEGACY_SEARGE, version = @Versions(MinecraftVersion.V16_5)) +@AConstraint(mappings = Mappings.SEARGE, version = @Versions(MinecraftVersion.V16_5)) @Mixin(ClientboundCommandsPacket.class) public abstract class CommandsPacketMixin { // spotless:off diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ClientboundCustomQueryPacketAccessor.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ClientboundCustomQueryPacketAccessor.java deleted file mode 100644 index 3a575821..00000000 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ClientboundCustomQueryPacketAccessor.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.adde0109.pcf.mixin.v16_5.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.ClientboundCustomQueryPacket; -import net.minecraft.resources.ResourceLocation; - -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@AConstraint(mappings = Mappings.LEGACY_SEARGE, version = @Versions(min = MinecraftVersion.V14)) -@Mixin(ClientboundCustomQueryPacket.class) -public interface ClientboundCustomQueryPacketAccessor { - @Accessor("transactionId") - int pcf$getTransactionId(); - - @Accessor("transactionId") - void pcf$setTransactionId(final int transactionId); - - @Accessor("identifier") - @NonNull ResourceLocation pcf$getIdentifier(); - - @Accessor("identifier") - void pcf$setIdentifier(final @NonNull ResourceLocation identifier); - - @Accessor("data") - @NonNull FriendlyByteBuf pcf$getData(); - - @Accessor("data") - void pcf$setData(final @NonNull FriendlyByteBuf data); -} diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ConnectionMixin.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ConnectionMixin.java index c260f36b..f4263bc3 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ConnectionMixin.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ConnectionMixin.java @@ -6,35 +6,39 @@ import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; import net.minecraft.network.Connection; -import net.minecraft.network.protocol.Packet; +import net.minecraft.network.PacketListener; import org.adde0109.pcf.forwarding.modern.ConnectionBridge; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.net.InetSocketAddress; import java.net.SocketAddress; -@AConstraint(mappings = Mappings.LEGACY_SEARGE, version = @Versions(min = MinecraftVersion.V14)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V16_5)) @Mixin(Connection.class) public abstract class ConnectionMixin implements ConnectionBridge { // spotless:off @Shadow private SocketAddress address; - @Shadow public abstract void shadow$send(Packet packet); + @Shadow public abstract PacketListener shadow$getPacketListener(); // spotless:on @Override - public InetSocketAddress bridge$address() { + public @NonNull InetSocketAddress bridge$address() { return (InetSocketAddress) this.address; } @Override - public void bridge$address(InetSocketAddress address) { + public void bridge$address(final @NonNull InetSocketAddress address) { this.address = address; } @Override - public void bridge$send(Object packet) { - this.shadow$send((Packet) packet); + public @Nullable Object bridge$getPacketListener() { + return this.shadow$getPacketListener(); } } diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java index d759b359..1f94b4c1 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java @@ -1,6 +1,5 @@ package org.adde0109.pcf.mixin.v16_5.forge.forwarding.modern; -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleHello; import com.mojang.authlib.GameProfile; @@ -13,7 +12,6 @@ import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.login.ServerboundCustomQueryPacket; import net.minecraft.server.network.ServerLoginPacketListenerImpl; import org.adde0109.pcf.forwarding.modern.ConnectionBridge; @@ -31,7 +29,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@AConstraint(mappings = Mappings.LEGACY_SEARGE, version = @Versions(min = MinecraftVersion.V14)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V14, max = MinecraftVersion.V16_5)) @Mixin(ServerLoginPacketListenerImpl.class) public abstract class ServerLoginPacketListenerImplMixin implements ServerLoginPacketListenerBridge { @@ -40,7 +40,7 @@ public abstract class ServerLoginPacketListenerImplMixin @Shadow @Nullable private GameProfile gameProfile; @Shadow private ServerLoginPacketListenerImpl.State state; @Shadow @Final private static Logger LOGGER; - @Shadow public abstract void shadow$onDisconnect(Component reason); + @Shadow public abstract void shadow$disconnect(Component reason); @Unique private int pcf$velocityLoginMessageId = -1; // spotless:on @@ -67,16 +67,6 @@ private void onHandleHelloHybrid(final @NonNull CallbackInfo ci) { handleHello(this, ci); } - @Inject(method = "handleCustomQueryPacket", at = @At("HEAD"), cancellable = true) - private void onHandleCustomQueryPacket( - final @NonNull ServerboundCustomQueryPacket packet, final @NonNull CallbackInfo ci) { - handleCustomQueryPacket( - this, - ((ServerboundCustomQueryPacketAccessor) packet).pcf$getTransactionId(), - packet, - ci); - } - @Override public int bridge$velocityLoginMessageId() { return this.pcf$velocityLoginMessageId; @@ -94,7 +84,7 @@ private void onHandleCustomQueryPacket( @Override public void bridge$disconnect(final @NonNull Object reason) { - this.shadow$onDisconnect((Component) reason); + this.shadow$disconnect((Component) reason); } @Override diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerboundCustomQueryPacketAccessor.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerboundCustomQueryPacketAccessor.java deleted file mode 100644 index dd21dedd..00000000 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/mixin/v16_5/forge/forwarding/modern/ServerboundCustomQueryPacketAccessor.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.adde0109.pcf.mixin.v16_5.forge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.ServerboundCustomQueryPacket; - -import org.jspecify.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@AConstraint(mappings = Mappings.LEGACY_SEARGE, version = @Versions(min = MinecraftVersion.V14)) -@Mixin(ServerboundCustomQueryPacket.class) -public interface ServerboundCustomQueryPacketAccessor { - @Accessor("transactionId") - int pcf$getTransactionId(); - - @Accessor("data") - @Nullable FriendlyByteBuf pcf$getData(); -} diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/AdapterRegistryInit.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/AdapterRegistryInit.java deleted file mode 100644 index 1af93a29..00000000 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/AdapterRegistryInit.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.adde0109.pcf.v16_5.forge; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; -import dev.neuralnexus.taterapi.network.NetworkRegistry; - -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v16_5.forge.forwarding.network.CCustomQueryPacketAdapter; -import org.adde0109.pcf.v16_5.forge.forwarding.network.SCustomQueryAnswerPacketAdapter; - -@AConstraint( - mappings = Mappings.LEGACY_SEARGE, - platform = Platform.FORGE, - version = @Versions(min = MinecraftVersion.V14, max = MinecraftVersion.V16_5)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - } - - @Override - public void onInit() {} -} diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Initializer.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Initializer.java index 549336ff..ba10ef33 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Initializer.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/Initializer.java @@ -18,14 +18,24 @@ import org.adde0109.pcf.PCFInitializer; import org.adde0109.pcf.crossstitch.CrossStitch; import org.adde0109.pcf.mixin.v16_5.forge.crossstitch.ArgumentTypesAccessor; +import org.adde0109.pcf.v26_1.forge.Config; import org.apache.commons.lang3.tuple.Pair; @AConstraint( - mappings = Mappings.LEGACY_SEARGE, + mappings = Mappings.SEARGE, platform = Platform.FORGE, version = @Versions(min = MinecraftVersion.V13, max = MinecraftVersion.V16_5)) public final class Initializer implements PCFInitializer { - public Initializer() { + @Override + public void onInit() { + this.displayTest(); + this.registerConfig(); + this.crossStitch(); + } + + public void crossStitch() { + if (!PCF.instance().crossStitch().enabled()) return; + CrossStitch.GET_ARGUMENT_TYPE_ENTRY = (argumentType) -> ArgumentTypesAccessor.pcf$get((ArgumentType) argumentType); @@ -39,13 +49,8 @@ public Initializer() { }; } - @Override - public void onInit() { - this.displayTest(); - this.registerConfig(); - } - private void displayTest() { + //noinspection unused ModLoadingContext.get() .registerExtensionPoint( ExtensionPoint.DISPLAYTEST, diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/ReloadConfigInit.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/ReloadConfigInit.java index 46cf295d..c12183e7 100644 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/ReloadConfigInit.java +++ b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/ReloadConfigInit.java @@ -20,13 +20,14 @@ public final class ReloadConfigInit implements PCFInitializer { @Override public void onInit() { - IEventBus eventBus = + final IEventBus eventBus = MetaAPI.instance() .meta() .mod(PCF.MOD_ID) .map(Wrapped::unwrap) - .orElseThrow() - .getEventBus(); - eventBus.addListener((ModConfig.Reloading event) -> Config.reload()); + .map(FMLModContainer::getEventBus) + .orElseThrow(); + eventBus.addListener( + (ModConfig.Reloading _) -> org.adde0109.pcf.v26_1.forge.Config.reload()); } } diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/forwarding/network/CCustomQueryPacketAdapter.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/forwarding/network/CCustomQueryPacketAdapter.java deleted file mode 100644 index 121f572c..00000000 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/forwarding/network/CCustomQueryPacketAdapter.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.adde0109.pcf.v16_5.forge.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import net.minecraft.network.FriendlyByteBuf; - -import org.adde0109.pcf.mixin.v16_5.forge.forwarding.modern.ClientboundCustomQueryPacketAccessor; - -public final class CCustomQueryPacketAdapter - implements ReversibleCodec< - net.minecraft.network.protocol.login.ClientboundCustomQueryPacket, - ClientboundCustomQueryPacket> { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode( - net.minecraft.network.protocol.login.ClientboundCustomQueryPacket object) { - return Result.success( - new ClientboundCustomQueryPacket( - ((ClientboundCustomQueryPacketAccessor) object).pcf$getTransactionId(), - CustomQueryPayload.codec( - ((ClientboundCustomQueryPacketAccessor) object) - .pcf$getIdentifier() - .toString()) - .decode( - ((ClientboundCustomQueryPacketAccessor) object) - .pcf$getData() - .slice()))); - } - - @SuppressWarnings("DataFlowIssue") - @Override - public Result decode( - ClientboundCustomQueryPacket object) { - net.minecraft.network.protocol.login.ClientboundCustomQueryPacket mcObject = - new net.minecraft.network.protocol.login.ClientboundCustomQueryPacket(); - ((ClientboundCustomQueryPacketAccessor) mcObject) - .pcf$setTransactionId(object.transactionId()); - ((ClientboundCustomQueryPacketAccessor) mcObject) - .pcf$setIdentifier(identifier(object.payload().id())); - ((ClientboundCustomQueryPacketAccessor) mcObject) - .pcf$setData(new FriendlyByteBuf(object.payload().data().slice())); - return Result.success(mcObject); - } -} diff --git a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java b/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java deleted file mode 100644 index 57b19014..00000000 --- a/modern/v16_5/src/forge/java/org/adde0109/pcf/v16_5/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.adde0109.pcf.v16_5.forge.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.ServerboundCustomQueryPacket; - -import org.adde0109.pcf.mixin.v16_5.forge.forwarding.modern.ServerboundCustomQueryPacketAccessor; - -public final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec< - ServerboundCustomQueryPacket, ServerboundCustomQueryAnswerPacket> { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @SuppressWarnings("DataFlowIssue") - @Override - public Result encode( - final ServerboundCustomQueryPacket object) { - final int transactionId = - ((ServerboundCustomQueryPacketAccessor) object).pcf$getTransactionId(); - if (((ServerboundCustomQueryPacketAccessor) object).pcf$getData() == null) { - return Result.success(new ServerboundCustomQueryAnswerPacket(transactionId)); - } - return Result.success( - new ServerboundCustomQueryAnswerPacket( - transactionId, - CustomQueryAnswerPayload.codec(transactionId) - .decode( - ((ServerboundCustomQueryPacketAccessor) object) - .pcf$getData() - .slice()))); - } - - @Override - public Result decode( - final ServerboundCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success(new ServerboundCustomQueryPacket(object.transactionId(), null)); - } - return Result.success( - new ServerboundCustomQueryPacket( - object.transactionId(), - new FriendlyByteBuf(object.payload().data().slice()))); - } -} diff --git a/modern/v16_5/src/forge/resources/pcf.mixins.v16_5.forge.json b/modern/v16_5/src/forge/resources/pcf.mixins.v16_5.forge.json index 81692c3d..8250d302 100644 --- a/modern/v16_5/src/forge/resources/pcf.mixins.v16_5.forge.json +++ b/modern/v16_5/src/forge/resources/pcf.mixins.v16_5.forge.json @@ -11,9 +11,7 @@ "v16_5.forge.crossstitch.ArgumentTypesAccessor", "v16_5.forge.crossstitch.ArgumentTypesEntryMixin", "v16_5.forge.crossstitch.CommandsPacketMixin", - "v16_5.forge.forwarding.modern.ClientboundCustomQueryPacketAccessor", "v16_5.forge.forwarding.modern.ConnectionMixin", - "v16_5.forge.forwarding.modern.ServerboundCustomQueryPacketAccessor", "v16_5.forge.forwarding.modern.ServerLoginPacketListenerImplMixin" ] } diff --git a/modern/v17_1/build.gradle.kts b/modern/v17_1/build.gradle.kts index 255f9e7b..7d23d220 100644 --- a/modern/v17_1/build.gradle.kts +++ b/modern/v17_1/build.gradle.kts @@ -6,6 +6,7 @@ val forgeCompileOnly: Configuration by configurations.getting { unimined.minecraft(forge) { version(minecraftVersion) + side("server") mappings { parchment(parchmentMinecraft, parchmentVersion) mojmap() @@ -19,7 +20,7 @@ unimined.minecraft(forge) { } dependencies { - forgeCompileOnly(srcSetAsDep(":modern:v16_5", "forge")) + forgeCompileOnly(srcSetAsDep(":deobsf:v26_1", "forge")) forgeCompileOnly(project(":common")) } diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesAccessor.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesAccessor.java index 0d923e73..f6f6d973 100644 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesAccessor.java +++ b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesAccessor.java @@ -16,7 +16,9 @@ import java.util.Map; -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V18_2)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V18_2)) @Mixin(ArgumentTypes.class) public interface ArgumentTypesAccessor { @Invoker("get") diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesEntryMixin.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesEntryMixin.java index feb62820..916e14ea 100644 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesEntryMixin.java +++ b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/ArgumentTypesEntryMixin.java @@ -21,7 +21,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V18_2)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V18_2)) @Mixin(ArgumentTypes.Entry.class) public class ArgumentTypesEntryMixin> implements EntryBridge, SerializerBridge { diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/CommandsPacketMixin.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/CommandsPacketMixin.java index 5825ceca..c723d65c 100644 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/CommandsPacketMixin.java +++ b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/crossstitch/CommandsPacketMixin.java @@ -23,7 +23,9 @@ * Adapted from CrossStitch */ -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V18_2)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V18_2)) @Mixin(ClientboundCommandsPacket.class) public class CommandsPacketMixin { // spotless:off diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/forwarding/modern/ServerLoginPacketListenerImplLoggerMixin.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/forwarding/modern/ServerLoginPacketListenerImplLoggerMixin.java index 97980fd3..77ca441c 100644 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/forwarding/modern/ServerLoginPacketListenerImplLoggerMixin.java +++ b/modern/v17_1/src/forge/java/org/adde0109/pcf/mixin/v17_1/forge/forwarding/modern/ServerLoginPacketListenerImplLoggerMixin.java @@ -14,7 +14,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V18_1)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V18_1)) @Mixin(ServerLoginPacketListenerImpl.class) public abstract class ServerLoginPacketListenerImplLoggerMixin implements ServerLoginPacketListenerBridge { diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/CrossStitchInit.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/CrossStitchInit.java index 694f712a..a86eb725 100644 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/CrossStitchInit.java +++ b/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/CrossStitchInit.java @@ -14,10 +14,14 @@ import org.adde0109.pcf.crossstitch.CrossStitch; import org.adde0109.pcf.mixin.v17_1.forge.crossstitch.ArgumentTypesAccessor; -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V18_2)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V18_2)) public final class CrossStitchInit implements PCFInitializer { @Override public void onInit() { + if (!PCF.instance().crossStitch().enabled()) return; + CrossStitch.GET_ARGUMENT_TYPE_ENTRY = (argumentType) -> ArgumentTypesAccessor.pcf$get((ArgumentType) argumentType); diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/DisplayTestInit.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/DisplayTestInit.java deleted file mode 100644 index d5392d93..00000000 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/DisplayTestInit.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.adde0109.pcf.v17_1.forge; - -import static org.adde0109.pcf.v17_1.forge.PCFBootstrap.IGNORE_SERVER_ONLY; - -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.AConstraints; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; - -import net.minecraftforge.fmllegacy.network.FMLNetworkConstants; - -import org.adde0109.pcf.PCFInitializer; - -@AConstraints( - or = { - @AConstraint( // TODO: Filter based on Forge version - platform = {Platform.ARCLIGHT, Platform.MAGMA, Platform.MOHIST}, - version = @Versions(value = {MinecraftVersion.V18_2, MinecraftVersion.V19_4})), - @AConstraint(platform = Platform.KETTING, version = @Versions(MinecraftVersion.V20_4)), - @AConstraint( - platform = {Platform.MAGMA, Platform.MOHIST}, - version = @Versions(MinecraftVersion.V20_1)), - @AConstraint( - platform = Platform.GOLDENFORGE, - version = @Versions(MinecraftVersion.V19_2)), - @AConstraint( - platform = Platform.FORGE, - version = - @Versions( - value = { - MinecraftVersion.V19, - MinecraftVersion.V19_1, - MinecraftVersion.V19_3, - MinecraftVersion.V20_2 - }, - min = MinecraftVersion.V17, - max = MinecraftVersion.V18_1)) - }) -public final class DisplayTestInit implements PCFInitializer { - public DisplayTestInit() { - IGNORE_SERVER_ONLY = () -> FMLNetworkConstants.IGNORESERVERONLY; - } - - @Override - public void onInit() {} -} diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/DisplayTestReg.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/DisplayTestReg.java deleted file mode 100644 index 46c7dd68..00000000 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/DisplayTestReg.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.adde0109.pcf.v17_1.forge; - -import static org.adde0109.pcf.v17_1.forge.PCFBootstrap.IGNORE_SERVER_VERSION; - -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.AConstraints; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; - -import net.minecraftforge.fml.IExtensionPoint; -import net.minecraftforge.fml.ModLoadingContext; - -import org.adde0109.pcf.PCFInitializer; - -@AConstraints( - or = { - @AConstraint( // TODO: Filter based on Forge version - platform = {Platform.ARCLIGHT, Platform.MAGMA, Platform.MOHIST}, - version = @Versions(value = {MinecraftVersion.V18_2, MinecraftVersion.V19_4})), - @AConstraint(platform = Platform.KETTING, version = @Versions(MinecraftVersion.V20_4)), - @AConstraint( - platform = {Platform.MAGMA, Platform.MOHIST}, - version = @Versions(MinecraftVersion.V20_1)), - @AConstraint( - platform = Platform.GOLDENFORGE, - version = @Versions(MinecraftVersion.V19_2)), - @AConstraint( - platform = Platform.FORGE, - version = - @Versions( - value = { - MinecraftVersion.V19, - MinecraftVersion.V19_1, - MinecraftVersion.V19_3, - MinecraftVersion.V20_2 - }, - min = MinecraftVersion.V17, - max = MinecraftVersion.V18_1)) - }) -public final class DisplayTestReg implements PCFInitializer { - @Override - public void onInit() { - ModLoadingContext.get() - .registerExtensionPoint(IExtensionPoint.DisplayTest.class, IGNORE_SERVER_VERSION); - } -} diff --git a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/PCFBootstrap.java b/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/PCFBootstrap.java deleted file mode 100644 index 281a2502..00000000 --- a/modern/v17_1/src/forge/java/org/adde0109/pcf/v17_1/forge/PCFBootstrap.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.adde0109.pcf.v17_1.forge; - -import net.minecraftforge.fml.IExtensionPoint; - -import org.jspecify.annotations.NonNull; - -import java.util.function.BiPredicate; -import java.util.function.Supplier; - -public final class PCFBootstrap { - public static Supplier<@NonNull String> IGNORE_SERVER_ONLY = - () -> { - throw new IllegalStateException("DisplayTest value Not initialized"); - }; - - public static final BiPredicate<@NonNull String, Boolean> REMOTE_VERSION_TEST = - (remoteVersion, isFromServer) -> true; - - public static Supplier IGNORE_SERVER_VERSION = - () -> new IExtensionPoint.DisplayTest(IGNORE_SERVER_ONLY, REMOTE_VERSION_TEST); -} diff --git a/modern/v19_2/build.gradle.kts b/modern/v19_2/build.gradle.kts index 348c2a5a..29b3269a 100644 --- a/modern/v19_2/build.gradle.kts +++ b/modern/v19_2/build.gradle.kts @@ -6,6 +6,7 @@ val forgeCompileOnly: Configuration by configurations.getting { unimined.minecraft(forge) { version(minecraftVersion) + side("server") mappings { parchment(parchmentMinecraft, parchmentVersion) mojmap() @@ -19,10 +20,6 @@ unimined.minecraft(forge) { } dependencies { - evaluationDependsOn(":modern:v20_4") - forgeCompileOnly(srcSetAsDep(":modern:v16_5", "forge")) - forgeCompileOnly(srcSetAsDep(":modern:v17_1", "forge")) - forgeCompileOnly(srcSetAsDep(":modern:v20_4", "forge")) forgeCompileOnly(project(":common")) } diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV1Mixin.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV1Mixin.java index 993f39d9..088db0f2 100644 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV1Mixin.java +++ b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV1Mixin.java @@ -1,14 +1,15 @@ package org.adde0109.pcf.mixin.v19_2.forge.forwarding.modern; +import static org.adde0109.pcf.v19_2.forge.forwarding.modern.ProfilePublicKeyDataAdapter.INSTANCE; + +import dev.neuralnexus.taterapi.mc.world.entity.player.ProfilePublicKey; import dev.neuralnexus.taterapi.meta.Mappings; import dev.neuralnexus.taterapi.meta.anno.AConstraint; import dev.neuralnexus.taterapi.meta.anno.Versions; import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; import net.minecraft.server.network.ServerLoginPacketListenerImpl; -import net.minecraft.world.entity.player.ProfilePublicKey; -import org.adde0109.pcf.forwarding.modern.ProfilePublicKeyData; import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -21,16 +22,18 @@ public class ServerLoginPacketListenerImplKeyV1Mixin // spotless:off @SuppressWarnings("MixinAnnotationTarget") @Shadow(remap = false) - private ProfilePublicKey f_215255_; // playerProfilePublicKey + private net.minecraft.world.entity.player.ProfilePublicKey f_215255_; // playerProfilePublicKey // spotless:on @Override public void bridge$setPlayerProfilePublicKey( - final @Nullable ProfilePublicKeyData publicKeyData) { + final ProfilePublicKey.@Nullable Data publicKeyData) { if (publicKeyData == null) { this.f_215255_ = null; return; } - this.f_215255_ = new ProfilePublicKey(publicKeyData.toMC()); + this.f_215255_ = + new net.minecraft.world.entity.player.ProfilePublicKey( + INSTANCE.decode(publicKeyData).unwrap()); } } diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV2Mixin.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV2Mixin.java index e81e61fe..24b08bfc 100644 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV2Mixin.java +++ b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplKeyV2Mixin.java @@ -1,5 +1,8 @@ package org.adde0109.pcf.mixin.v19_2.forge.forwarding.modern; +import static org.adde0109.pcf.v19_2.forge.forwarding.modern.ProfilePublicKeyDataAdapter.INSTANCE; + +import dev.neuralnexus.taterapi.mc.world.entity.player.ProfilePublicKey; import dev.neuralnexus.taterapi.meta.Mappings; import dev.neuralnexus.taterapi.meta.MetaAPI; import dev.neuralnexus.taterapi.meta.anno.AConstraint; @@ -9,9 +12,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerLoginPacketListenerImpl; import net.minecraft.util.SignatureValidator; -import net.minecraft.world.entity.player.ProfilePublicKey; -import org.adde0109.pcf.forwarding.modern.ProfilePublicKeyData; import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -26,12 +27,12 @@ public abstract class ServerLoginPacketListenerImplKeyV2Mixin implements ServerLoginPacketListenerBridge.KeyV2 { // spotless:off - @Shadow private ProfilePublicKey.Data profilePublicKeyData; + @Shadow private net.minecraft.world.entity.player.ProfilePublicKey.Data profilePublicKeyData; // ProfilePublicKey.ValidationException Doesn't exist on 1.19.1 @SuppressWarnings("RedundantThrows") - @Shadow private static ProfilePublicKey validatePublicKey( - ProfilePublicKey.Data keyData, + @Shadow private static net.minecraft.world.entity.player.ProfilePublicKey validatePublicKey( + net.minecraft.world.entity.player.ProfilePublicKey.Data keyData, UUID signer, SignatureValidator validator, boolean enforceSecureProfile) @@ -41,29 +42,30 @@ public abstract class ServerLoginPacketListenerImplKeyV2Mixin // spotless:on @Override - public @Nullable ProfilePublicKeyData bridge$profilePublicKeyData() { + public ProfilePublicKey.@Nullable Data bridge$profilePublicKeyData() { if (this.profilePublicKeyData == null) { return null; } - return ProfilePublicKeyData.fromMC(this.profilePublicKeyData); + return INSTANCE.encode(this.profilePublicKeyData).unwrap(); } @Override - public void bridge$setProfilePublicKeyData(final @Nullable ProfilePublicKeyData publicKeyData) { + public void bridge$setProfilePublicKeyData( + final ProfilePublicKey.@Nullable Data publicKeyData) { if (publicKeyData == null) { this.profilePublicKeyData = null; } else { - this.profilePublicKeyData = publicKeyData.toMC(); + this.profilePublicKeyData = INSTANCE.decode(publicKeyData).unwrap(); } } @Override public void bridge$validatePublicKey( - final @Nullable ProfilePublicKeyData keyData, final @Nullable UUID signer) + final ProfilePublicKey.@Nullable Data keyData, final @Nullable UUID signer) throws Exception { MinecraftServer server = (MinecraftServer) MetaAPI.instance().server(); validatePublicKey( - keyData != null ? keyData.toMC() : null, + keyData != null ? INSTANCE.decode(keyData).unwrap() : null, signer != null ? signer : UUID.randomUUID(), server.getServiceSignatureValidator(), server.enforceSecureProfile()); diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java deleted file mode 100644 index f22b9b6c..00000000 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.adde0109.pcf.mixin.v19_2.forge.forwarding.modern; - -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.protocol.login.ServerboundCustomQueryPacket; -import net.minecraft.server.network.ServerLoginPacketListenerImpl; - -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V20_1)) -@Mixin(ServerLoginPacketListenerImpl.class) -public abstract class ServerLoginPacketListenerImplQueryMixin - implements ServerLoginPacketListenerBridge { - @Inject(method = "handleCustomQueryPacket", at = @At("HEAD"), cancellable = true) - private void onHandleCustomQueryPacket( - final @NonNull ServerboundCustomQueryPacket packet, final @NonNull CallbackInfo ci) { - handleCustomQueryPacket(this, packet.getTransactionId(), packet, ci); - } -} diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplStartClientVerificationMixin.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplStartClientVerificationMixin.java index d156dd68..b8aa4ad7 100644 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplStartClientVerificationMixin.java +++ b/modern/v19_2/src/forge/java/org/adde0109/pcf/mixin/v19_2/forge/forwarding/modern/ServerLoginPacketListenerImplStartClientVerificationMixin.java @@ -15,7 +15,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(max = MinecraftVersion.V20_1)) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V20_1)) @Mixin(ServerLoginPacketListenerImpl.class) public abstract class ServerLoginPacketListenerImplStartClientVerificationMixin implements ServerLoginPacketListenerBridge { diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/AdapterRegistryInit.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/AdapterRegistryInit.java deleted file mode 100644 index cb391a46..00000000 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/AdapterRegistryInit.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.adde0109.pcf.v19_2.forge; - -import dev.neuralnexus.taterapi.meta.Constraint; -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.MinecraftVersions; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; -import dev.neuralnexus.taterapi.network.NetworkRegistry; - -import org.adde0109.pcf.PCF; -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v19_2.forge.forwarding.modern.ProfilePublicKeyDataAdapter; -import org.adde0109.pcf.v19_2.forge.forwarding.network.CCustomQueryPacketAdapter; -import org.adde0109.pcf.v19_2.forge.forwarding.network.SCustomQueryAnswerPacketAdapter; - -@AConstraint( - mappings = Mappings.SEARGE, - platform = Platform.FORGE, - version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V20_1)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - if (Constraint.range(MinecraftVersions.V19, MinecraftVersions.V19_2).result()) { - PCF.instance().adapters().register(ProfilePublicKeyDataAdapter.INSTANCE); - } - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - } - - @Override - public void onInit() {} -} diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/CrossStitchInit.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/CrossStitchInit.java index 70371526..f8a5eb40 100644 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/CrossStitchInit.java +++ b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/CrossStitchInit.java @@ -23,6 +23,8 @@ public final class CrossStitchInit implements PCFInitializer { @SuppressWarnings("deprecation") @Override public void onInit() { + if (!PCF.instance().crossStitch().enabled()) return; + CrossStitch.COMMAND_ARGUMENT_IDENTIFIER = (type) -> Registry.COMMAND_ARGUMENT_TYPE diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/modern/ProfilePublicKeyDataAdapter.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/modern/ProfilePublicKeyDataAdapter.java index 9eba6dcb..1147f6c2 100644 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/modern/ProfilePublicKeyDataAdapter.java +++ b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/modern/ProfilePublicKeyDataAdapter.java @@ -1,25 +1,26 @@ package org.adde0109.pcf.v19_2.forge.forwarding.modern; +import dev.neuralnexus.taterapi.mc.world.entity.player.ProfilePublicKey; import dev.neuralnexus.taterapi.serialization.Result; import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; -import net.minecraft.world.entity.player.ProfilePublicKey; - -import org.adde0109.pcf.forwarding.modern.ProfilePublicKeyData; - public final class ProfilePublicKeyDataAdapter - implements ReversibleCodec { + implements ReversibleCodec< + net.minecraft.world.entity.player.ProfilePublicKey.Data, ProfilePublicKey.Data> { public static final ProfilePublicKeyDataAdapter INSTANCE = new ProfilePublicKeyDataAdapter(); @Override - public Result encode(final ProfilePublicKey.Data object) { + public Result encode( + final net.minecraft.world.entity.player.ProfilePublicKey.Data object) { return Result.success( - new ProfilePublicKeyData(object.expiresAt(), object.key(), object.keySignature())); + new ProfilePublicKey.Data(object.expiresAt(), object.key(), object.keySignature())); } @Override - public Result decode(final ProfilePublicKeyData object) { + public Result decode( + final ProfilePublicKey.Data object) { return Result.success( - new ProfilePublicKey.Data(object.expiresAt(), object.key(), object.keySignature())); + new net.minecraft.world.entity.player.ProfilePublicKey.Data( + object.expiresAt(), object.key(), object.keySignature())); } } diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/network/CCustomQueryPacketAdapter.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/network/CCustomQueryPacketAdapter.java deleted file mode 100644 index 276d2233..00000000 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/network/CCustomQueryPacketAdapter.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.adde0109.pcf.v19_2.forge.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import net.minecraft.network.FriendlyByteBuf; - -public final class CCustomQueryPacketAdapter - implements ReversibleCodec< - net.minecraft.network.protocol.login.ClientboundCustomQueryPacket, - ClientboundCustomQueryPacket> { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode( - final net.minecraft.network.protocol.login.ClientboundCustomQueryPacket object) { - return Result.success( - new ClientboundCustomQueryPacket( - object.getTransactionId(), - CustomQueryPayload.codec(object.getIdentifier().toString()) - .decode(object.getData().slice()))); - } - - @Override - public Result decode( - final ClientboundCustomQueryPacket object) { - return Result.success( - new net.minecraft.network.protocol.login.ClientboundCustomQueryPacket( - object.transactionId(), - identifier(object.payload().id()), - new FriendlyByteBuf(object.payload().data().slice()))); - } -} diff --git a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java b/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java deleted file mode 100644 index 28c2302f..00000000 --- a/modern/v19_2/src/forge/java/org/adde0109/pcf/v19_2/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.adde0109.pcf.v19_2.forge.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.ServerboundCustomQueryPacket; - -public final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec< - ServerboundCustomQueryPacket, ServerboundCustomQueryAnswerPacket> { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @Override - public Result encode( - final ServerboundCustomQueryPacket object) { - final int transactionId = object.getTransactionId(); - if (object.getData() == null) { - return Result.success(new ServerboundCustomQueryAnswerPacket(transactionId)); - } - return Result.success( - new ServerboundCustomQueryAnswerPacket( - transactionId, - CustomQueryAnswerPayload.codec(transactionId) - .decode(object.getData().slice()))); - } - - @Override - public Result decode( - final ServerboundCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success(new ServerboundCustomQueryPacket(object.transactionId(), null)); - } - return Result.success( - new ServerboundCustomQueryPacket( - object.transactionId(), - new FriendlyByteBuf(object.payload().data().slice()))); - } -} diff --git a/modern/v19_2/src/forge/resources/pcf.mixins.v19_2.forge.json b/modern/v19_2/src/forge/resources/pcf.mixins.v19_2.forge.json index 2cf2c5f8..69f323bf 100644 --- a/modern/v19_2/src/forge/resources/pcf.mixins.v19_2.forge.json +++ b/modern/v19_2/src/forge/resources/pcf.mixins.v19_2.forge.json @@ -13,7 +13,6 @@ "v19_2.forge.forwarding.modern.ServerLoginPacketListenerImplKeyV1Mixin", "v19_2.forge.forwarding.modern.ServerLoginPacketListenerImplKeyV2Mixin", "v19_2.forge.forwarding.modern.ServerLoginPacketListenerImplStartClientVerificationMixin", - "v19_2.forge.forwarding.modern.ServerLoginPacketListenerImplQueryMixin", "v19_2.forge.forwarding.modern.SignedMessageChainMixin" ] } diff --git a/modern/v20_2/build.gradle.kts b/modern/v20_2/build.gradle.kts index f9cd05c5..9fb371d0 100644 --- a/modern/v20_2/build.gradle.kts +++ b/modern/v20_2/build.gradle.kts @@ -1,11 +1,10 @@ val mainCompileOnly: Configuration by configurations.getting -val modImplementation: Configuration by configurations.creating unimined.minecraft(sourceSets.main.get()) { version(minecraftVersion) + side("server") neoForge { loader(neoforgeVersion) - accessTransformer(aw2at(rootProject.file("common/src/main/resources/accessWidener.aw"))) } mappings { parchment(parchmentMinecraft, parchmentVersion) @@ -14,12 +13,7 @@ unimined.minecraft(sourceSets.main.get()) { } } -repositories { - // Forgified Fabric API - maven("https://maven.su5ed.dev/releases") -} - dependencies { - compileOnly(project(":common")) - modImplementation("org.sinytra.forgified-fabric-api:fabric-networking-api-v1:4.3.0+ab6ec1d119") + mainCompileOnly(project(":common")) + mainCompileOnly(srcSetAsDep(":deobsf:v26_1", "neoforge")) } diff --git a/modern/v20_2/src/main/java/org/adde0109/pcf/mixin/v20_2/neoforge/forwarding/modern/ServerLoginPacketListenerImplDisconnectMixin.java b/modern/v20_2/src/main/java/org/adde0109/pcf/mixin/v20_2/neoforge/forwarding/modern/ServerLoginPacketListenerImplDisconnectMixin.java deleted file mode 100644 index f54f32cd..00000000 --- a/modern/v20_2/src/main/java/org/adde0109/pcf/mixin/v20_2/neoforge/forwarding/modern/ServerLoginPacketListenerImplDisconnectMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.adde0109.pcf.mixin.v20_2.neoforge.forwarding.modern; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.chat.Component; -import net.minecraft.server.network.ServerLoginPacketListenerImpl; - -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@AConstraint( - mappings = Mappings.MOJANG, - version = @Versions(min = MinecraftVersion.V20_2, max = MinecraftVersion.V20_6)) -@Mixin(ServerLoginPacketListenerImpl.class) -public abstract class ServerLoginPacketListenerImplDisconnectMixin - implements ServerLoginPacketListenerBridge { - // spotless:off - @Shadow public abstract void shadow$onDisconnect(Component reason); - // spotless:on - - @Override - public void bridge$disconnect(final @NonNull Object reason) { - this.shadow$onDisconnect((Component) reason); - } -} diff --git a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/Compatibility.java b/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/Compatibility.java deleted file mode 100644 index 4186fdd2..00000000 --- a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/Compatibility.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.adde0109.pcf.v20_2.neoforge; - -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readResourceLocation; -import static dev.neuralnexus.taterapi.network.FriendlyByteBuf.readVarInt; - -import static org.adde0109.pcf.forwarding.modern.VelocityProxy.PLAYER_INFO_CHANNEL; - -import dev.neuralnexus.taterapi.meta.Constraint; -import dev.neuralnexus.taterapi.meta.MinecraftVersions; -import dev.neuralnexus.taterapi.meta.Platforms; - -import io.netty.buffer.ByteBuf; - -import net.fabricmc.fabric.impl.networking.NetworkHandlerExtensions; -import net.fabricmc.fabric.impl.networking.server.ServerLoginNetworkAddon; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.custom.CustomQueryAnswerPayload; -import net.minecraft.resources.ResourceLocation; -import net.neoforged.neoforge.network.custom.payload.SimpleQueryPayload; - -import org.adde0109.pcf.PCF; -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.util.Map; - -public final class Compatibility { - public static final Constraint NEOFORGE_V20_2 = - Constraint.builder() - .platform(Platforms.NEOFORGE) - .version(MinecraftVersions.V20_2) - .build(); - - public static final Constraint FFAPI_V21_1 = - Constraint.builder() - .platform(Platforms.NEOFORGE) - .version(MinecraftVersions.V21_1) - .deps("fabric_networking_api_v1") - .build(); - - /** - * Read the id and ResourceLocation so PCF can continue reading the packet as normal - * - * @param buf The ByteBuf from the packet - */ - public static void neoForgeReadSimpleQueryPayload( - final @NonNull ServerLoginPacketListenerBridge ignored, final @NonNull ByteBuf buf) { - if (NEOFORGE_V20_2.result()) { - readVarInt(buf); - readResourceLocation(buf); - } - } - - /** - * Set the callback returnable to a SimpleQueryPayload to comply with NeoForge 1.20.2's - * modification to ServerboundCustomQueryAnswerPacketMixin#readPayload's return type - * - * @param buf The ByteBuf to send - * @param transactionId The transaction id - * @param cir The mixin's callback returnable - */ - public static void neoForgeReturnSimpleQueryPayload( - final @Nullable ByteBuf buf, - final int transactionId, - final @NonNull CallbackInfoReturnable cir) { - if (NEOFORGE_V20_2.result()) { - cir.setReturnValue( - buf == null - ? null - : SimpleQueryPayload.outbound( - new FriendlyByteBuf(buf), - transactionId, - (ResourceLocation) PLAYER_INFO_CHANNEL)); - } - } - - private static MethodHandle channelsMH; - - /** - * Remove PCF's query id from FFAPI's channels map to prevent infinite login screen - * - * @param slpl an instance of ServerLoginPacketListenerImpl - */ - @SuppressWarnings("unchecked") - public static void applyFFAPIFix( - final @NonNull ServerLoginPacketListenerBridge slpl, final @NonNull ByteBuf ignored) { - if (!FFAPI_V21_1.result()) { - return; - } - // spotless:off - try { - if (channelsMH == null) { - MethodHandles.Lookup slnaLookup = - MethodHandles.privateLookupIn(ServerLoginNetworkAddon.class, MethodHandles.publicLookup()); - channelsMH = - slnaLookup.findGetter(ServerLoginNetworkAddon.class, "channels", Map.class); - } - ServerLoginNetworkAddon addon = (ServerLoginNetworkAddon) - ((NetworkHandlerExtensions) slpl).getAddon(); - Map channels = (Map) channelsMH.invokeExact(addon); - - channels.remove(slpl.bridge$velocityLoginMessageId()); - } catch (IllegalAccessException | NoSuchFieldException | NoSuchMethodException e) { - PCF.logger.warn("Lookup Exception applying FFAPI fix", e); - } catch (Throwable e) { - PCF.logger.warn("Exception applying FFAPI fix", e); - } - // spotless:on - } -} diff --git a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/CrossStitchInit.java b/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/CrossStitchInit.java index 3bbe5fbe..4765e4bd 100644 --- a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/CrossStitchInit.java +++ b/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/CrossStitchInit.java @@ -18,7 +18,10 @@ @AConstraint(mappings = Mappings.MOJANG, version = @Versions(min = MinecraftVersion.V19_3)) public final class CrossStitchInit implements PCFInitializer { - public CrossStitchInit() { + @Override + public void onInit() { + if (!PCF.instance().crossStitch().enabled()) return; + CrossStitch.COMMAND_ARGUMENT_IDENTIFIER = (type) -> BuiltInRegistries.COMMAND_ARGUMENT_TYPE @@ -44,7 +47,4 @@ public CrossStitchInit() { } }; } - - @Override - public void onInit() {} } diff --git a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/RegisterConfig.java b/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/RegisterConfig.java index 2fc21708..4dcd661d 100644 --- a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/RegisterConfig.java +++ b/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/RegisterConfig.java @@ -10,6 +10,7 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; +import org.adde0109.pcf.v26_1.neoforge.Config; @AConstraint( platform = Platform.NEOFORGE, diff --git a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/forwarding/network/MCQueryPayload_RL.java b/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/forwarding/network/MCQueryPayload_RL.java deleted file mode 100644 index 459efa93..00000000 --- a/modern/v20_2/src/main/java/org/adde0109/pcf/v20_2/neoforge/forwarding/network/MCQueryPayload_RL.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.adde0109.pcf.v20_2.neoforge.forwarding.network; - -import io.netty.buffer.ByteBuf; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.custom.CustomQueryPayload; -import net.minecraft.resources.ResourceLocation; - -import org.jspecify.annotations.NonNull; - -public final class MCQueryPayload_RL implements CustomQueryPayload { - private final @NonNull ResourceLocation id; - private final @NonNull ByteBuf data; - - public MCQueryPayload_RL(@NonNull Object id, @NonNull ByteBuf data) { - this.id = (ResourceLocation) id; - this.data = data; - } - - @Override - public @NonNull ResourceLocation id() { - return this.id; - } - - @Override - public void write(final @NonNull FriendlyByteBuf buf) { - buf.writeBytes(this.data.slice()); - } -} diff --git a/modern/v20_2/src/main/resources/META-INF/accesstransformer.cfg b/modern/v20_2/src/main/resources/META-INF/accesstransformer.cfg deleted file mode 100644 index 7e809484..00000000 --- a/modern/v20_2/src/main/resources/META-INF/accesstransformer.cfg +++ /dev/null @@ -1,7 +0,0 @@ -public net.minecraft.server.network.NetHandlerLoginServer$LoginState -public net.minecraft.network.NetHandlerLoginServer$LoginState -public net.minecraft.network.login.ServerLoginNetHandler$State -public net.minecraft.server.network.ServerLoginPacketListenerImpl$State -public net.minecraft.command.arguments.ArgumentTypes$Entry -public net.minecraft.commands.synchronization.ArgumentTypes$Entry -public net.minecraft.network.protocol.game.ClientboundCommandsPacket$ArgumentNodeStub diff --git a/modern/v20_4/build.gradle.kts b/modern/v20_4/build.gradle.kts index 44e4410d..9d40af44 100644 --- a/modern/v20_4/build.gradle.kts +++ b/modern/v20_4/build.gradle.kts @@ -6,6 +6,7 @@ val forgeCompileOnly: Configuration by configurations.getting { unimined.minecraft(forge) { version(minecraftVersion) + side("server") mappings { parchment(parchmentMinecraft, parchmentVersion) mojmap() @@ -19,9 +20,7 @@ unimined.minecraft(forge) { } dependencies { - forgeCompileOnly(srcSetAsDep(":modern:v16_5", "forge")) - forgeCompileOnly(srcSetAsDep(":modern:v17_1", "forge")) - forgeCompileOnly(project(":deobsf:v26_1")) + forgeCompileOnly(srcSetAsDep(":deobsf:v26_1", "forge")) forgeCompileOnly(project(":common")) } diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ConnectionMixin.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ConnectionMixin.java index d68e1f0e..b286edd2 100644 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ConnectionMixin.java +++ b/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ConnectionMixin.java @@ -2,37 +2,43 @@ import dev.neuralnexus.taterapi.meta.Mappings; import dev.neuralnexus.taterapi.meta.anno.AConstraint; +import dev.neuralnexus.taterapi.meta.anno.Versions; +import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; import net.minecraft.network.Connection; -import net.minecraft.network.protocol.Packet; +import net.minecraft.network.PacketListener; import org.adde0109.pcf.forwarding.modern.ConnectionBridge; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import java.net.InetSocketAddress; import java.net.SocketAddress; -@AConstraint(mappings = Mappings.SEARGE) +@AConstraint( + mappings = Mappings.SEARGE, + version = @Versions(min = MinecraftVersion.V17, max = MinecraftVersion.V20_4)) @Mixin(Connection.class) public abstract class ConnectionMixin implements ConnectionBridge { // spotless:off @Shadow private SocketAddress address; - @Shadow public abstract void shadow$send(Packet packet); + @Shadow public abstract PacketListener shadow$getPacketListener(); // spotless:on @Override - public InetSocketAddress bridge$address() { + public @NonNull InetSocketAddress bridge$address() { return (InetSocketAddress) this.address; } @Override - public void bridge$address(InetSocketAddress address) { + public void bridge$address(final @NonNull InetSocketAddress address) { this.address = address; } @Override - public void bridge$send(Object packet) { - this.shadow$send((Packet) packet); + public @Nullable Object bridge$getPacketListener() { + return this.shadow$getPacketListener(); } } diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java index 19a94b49..ceee182b 100644 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java +++ b/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplMixin.java @@ -20,13 +20,13 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; -@AConstraint(mappings = Mappings.SEARGE) +@AConstraint(mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V17)) @Mixin(ServerLoginPacketListenerImpl.class) public abstract class ServerLoginPacketListenerImplMixin implements ServerLoginPacketListenerBridge { // spotless:off @Shadow @Final Connection connection; - @Shadow public abstract void shadow$onDisconnect(Component reason); + @Shadow public abstract void shadow$disconnect(Component reason); @AConstraint(version = @Versions(min = MinecraftVersion.V20_2)) @Shadow abstract void shadow$startClientVerification(GameProfile profile); @@ -54,7 +54,7 @@ public abstract class ServerLoginPacketListenerImplMixin @Override public void bridge$disconnect(final @NonNull Object reason) { - this.shadow$onDisconnect((Component) reason); + this.shadow$disconnect((Component) reason); } @AConstraint(version = @Versions(min = MinecraftVersion.V20_2)) diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java deleted file mode 100644 index eb7aca9d..00000000 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/mixin/v20_4/forge/forwarding/modern/ServerLoginPacketListenerImplQueryMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.adde0109.pcf.mixin.v20_4.forge.forwarding.modern; - -import static org.adde0109.pcf.forwarding.modern.ModernForwarding.handleCustomQueryPacket; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; - -import net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import net.minecraft.server.network.ServerLoginPacketListenerImpl; - -import org.adde0109.pcf.forwarding.modern.ServerLoginPacketListenerBridge; -import org.jspecify.annotations.NonNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@AConstraint(mappings = Mappings.SEARGE, version = @Versions(min = MinecraftVersion.V20_2)) -@Mixin(ServerLoginPacketListenerImpl.class) -public abstract class ServerLoginPacketListenerImplQueryMixin - implements ServerLoginPacketListenerBridge { - @Inject(method = "handleCustomQueryPacket", at = @At("HEAD"), cancellable = true) - private void onHandleCustomQueryPacket( - final @NonNull ServerboundCustomQueryAnswerPacket packet, - final @NonNull CallbackInfo ci) { - handleCustomQueryPacket(this, packet.transactionId(), packet, ci); - } -} diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/AdapterRegistryInit.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/AdapterRegistryInit.java deleted file mode 100644 index 5aef24e0..00000000 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/AdapterRegistryInit.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.adde0109.pcf.v20_4.forge; - -import dev.neuralnexus.taterapi.meta.Mappings; -import dev.neuralnexus.taterapi.meta.anno.AConstraint; -import dev.neuralnexus.taterapi.meta.anno.Versions; -import dev.neuralnexus.taterapi.meta.enums.MinecraftVersion; -import dev.neuralnexus.taterapi.meta.enums.Platform; -import dev.neuralnexus.taterapi.network.NetworkRegistry; - -import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v20_4.forge.forwarding.network.CCustomQueryPacketAdapter; -import org.adde0109.pcf.v20_4.forge.forwarding.network.SCustomQueryAnswerPacketAdapter; - -@AConstraint( - mappings = Mappings.SEARGE, - platform = Platform.FORGE, - version = @Versions(min = MinecraftVersion.V20_2, max = MinecraftVersion.V20_4)) -public final class AdapterRegistryInit implements PCFInitializer { - public AdapterRegistryInit() { - NetworkRegistry.registerAdapter( - CCustomQueryPacketAdapter.INSTANCE, SCustomQueryAnswerPacketAdapter.INSTANCE); - } - - @Override - public void onInit() {} -} diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/CrossStitchInit.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/CrossStitchInit.java index 3a954a71..060f6241 100644 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/CrossStitchInit.java +++ b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/CrossStitchInit.java @@ -21,7 +21,10 @@ version = @Versions(min = MinecraftVersion.V19_3, max = MinecraftVersion.V20_4)) public final class CrossStitchInit implements PCFInitializer { @SuppressWarnings("deprecation") - public CrossStitchInit() { + @Override + public void onInit() { + if (!PCF.instance().crossStitch().enabled()) return; + CrossStitch.COMMAND_ARGUMENT_IDENTIFIER = (type) -> BuiltInRegistries.COMMAND_ARGUMENT_TYPE @@ -47,7 +50,4 @@ public CrossStitchInit() { } }; } - - @Override - public void onInit() {} } diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/ReloadConfigInit.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/ReloadConfigInit.java index 931225db..16259e5c 100644 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/ReloadConfigInit.java +++ b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/ReloadConfigInit.java @@ -13,7 +13,7 @@ import org.adde0109.pcf.PCF; import org.adde0109.pcf.PCFInitializer; -import org.adde0109.pcf.v16_5.forge.Config; +import org.adde0109.pcf.v26_1.forge.Config; @AConstraint( platform = Platform.FORGE, @@ -21,13 +21,13 @@ public final class ReloadConfigInit implements PCFInitializer { @Override public void onInit() { - IEventBus eventBus = + final IEventBus eventBus = MetaAPI.instance() .meta() .mod(PCF.MOD_ID) .map(Wrapped::unwrap) .map(FMLModContainer::getEventBus) .orElseThrow(); - eventBus.addListener((ModConfigEvent.Reloading event) -> Config.reload()); + eventBus.addListener((ModConfigEvent.Reloading _) -> Config.reload()); } } diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/CCustomQueryPacketAdapter.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/CCustomQueryPacketAdapter.java deleted file mode 100644 index 39d544be..00000000 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/CCustomQueryPacketAdapter.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.adde0109.pcf.v20_4.forge.forwarding.network; - -import static dev.neuralnexus.taterapi.resources.Identifier.identifier; - -import dev.neuralnexus.taterapi.network.protocol.login.ClientboundCustomQueryPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import io.netty.buffer.Unpooled; - -import net.minecraft.network.FriendlyByteBuf; - -public final class CCustomQueryPacketAdapter - implements ReversibleCodec< - net.minecraft.network.protocol.login.ClientboundCustomQueryPacket, - ClientboundCustomQueryPacket> { - public static final CCustomQueryPacketAdapter INSTANCE = new CCustomQueryPacketAdapter(); - - @Override - public Result encode( - final net.minecraft.network.protocol.login.ClientboundCustomQueryPacket object) { - final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); - object.payload().write(buf); - return Result.success( - new ClientboundCustomQueryPacket( - object.transactionId(), - CustomQueryPayload.codec(object.payload().id().toString()) - .decode(buf.slice()))); - } - - @Override - public Result decode( - final ClientboundCustomQueryPacket object) { - return Result.success( - new net.minecraft.network.protocol.login.ClientboundCustomQueryPacket( - object.transactionId(), - new MCQueryPayload( - identifier(object.payload().id()), object.payload().data()))); - } -} diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/MCQueryPayload.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/MCQueryPayload.java deleted file mode 100644 index ecf8e62d..00000000 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/MCQueryPayload.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.adde0109.pcf.v20_4.forge.forwarding.network; - -import io.netty.buffer.ByteBuf; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.login.custom.CustomQueryPayload; -import net.minecraft.resources.ResourceLocation; - -public record MCQueryPayload(ResourceLocation id, ByteBuf data) implements CustomQueryPayload { - @Override - public void write(final FriendlyByteBuf buf) { - buf.writeBytes(this.data.slice()); - } -} diff --git a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java b/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java deleted file mode 100644 index 706523c6..00000000 --- a/modern/v20_4/src/forge/java/org/adde0109/pcf/v20_4/forge/forwarding/network/SCustomQueryAnswerPacketAdapter.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.adde0109.pcf.v20_4.forge.forwarding.network; - -import dev.neuralnexus.taterapi.network.protocol.login.ServerboundCustomQueryAnswerPacket; -import dev.neuralnexus.taterapi.network.protocol.login.custom.CustomQueryAnswerPayload; -import dev.neuralnexus.taterapi.serialization.Result; -import dev.neuralnexus.taterapi.serialization.codecs.ReversibleCodec; - -import io.netty.buffer.Unpooled; - -import net.minecraft.network.FriendlyByteBuf; - -import org.adde0109.pcf.v26_1.forwarding.network.MCQueryAnswerPayload; - -public final class SCustomQueryAnswerPacketAdapter - implements ReversibleCodec< - net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket, - ServerboundCustomQueryAnswerPacket> { - public static final SCustomQueryAnswerPacketAdapter INSTANCE = - new SCustomQueryAnswerPacketAdapter(); - - @Override - public Result encode( - final net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket object) { - final int transactionId = object.transactionId(); - if (object.payload() == null) { - return Result.success(new ServerboundCustomQueryAnswerPacket(transactionId)); - } - final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); - object.payload().write(buf); - return Result.success( - new ServerboundCustomQueryAnswerPacket( - transactionId, - CustomQueryAnswerPayload.codec(transactionId).decode(buf.slice()))); - } - - @Override - public Result decode( - final ServerboundCustomQueryAnswerPacket object) { - if (object.payload() == null) { - return Result.success( - new net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket( - object.transactionId(), null)); - } - return Result.success( - new net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket( - object.transactionId(), new MCQueryAnswerPayload(object.payload().data()))); - } -} diff --git a/modern/v20_4/src/forge/resources/pcf.mixins.v20_4.forge.json b/modern/v20_4/src/forge/resources/pcf.mixins.v20_4.forge.json index f09a393f..f444e6e2 100644 --- a/modern/v20_4/src/forge/resources/pcf.mixins.v20_4.forge.json +++ b/modern/v20_4/src/forge/resources/pcf.mixins.v20_4.forge.json @@ -12,7 +12,6 @@ "v20_4.forge.crossstitch.ArgumentTypeInfoMixin", "v20_4.forge.forwarding.modern.ConnectionMixin", "v20_4.forge.forwarding.modern.ServerLoginPacketListenerImplLoggerMixin", - "v20_4.forge.forwarding.modern.ServerLoginPacketListenerImplMixin", - "v20_4.forge.forwarding.modern.ServerLoginPacketListenerImplQueryMixin" + "v20_4.forge.forwarding.modern.ServerLoginPacketListenerImplMixin" ] } diff --git a/settings.gradle.kts b/settings.gradle.kts index 7908be60..7c2fad26 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,6 +13,7 @@ pluginManagement { // Unimined maven("https://maven.wagyourtail.xyz/releases") + maven("https://maven.wagyourtail.xyz/snapshots") } }