From 6928c8dc281a8717468e69f1e8682750d62fd4c5 Mon Sep 17 00:00:00 2001 From: s809 <11816467-s809@users.noreply.gitlab.com> Date: Tue, 4 Jun 2024 23:33:44 +0500 Subject: [PATCH] Fix compilation for older versions --- .../common/AbstractPluginPacketSender.java | 29 ++++++++- .../common/CommonPacketPayload.java | 34 ++++------- .../fabric/FabricClientProxy.java | 27 +++++++-- .../fabric/FabricPluginPacketSender.java | 19 +++++- .../fabric/FabricServerProxy.java | 25 ++++++-- .../forge/ForgePluginPacketSender.java | 59 +++++++++++-------- gradle.properties | 2 +- .../neoforge/NeoforgePluginPacketSender.java | 2 +- 8 files changed, 133 insertions(+), 64 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java index 0b988ab07..14e49cd4a 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java @@ -1,16 +1,17 @@ package com.seibel.distanthorizons.common; +import com.seibel.distanthorizons.core.network.messages.PluginMessageRegistry; import com.seibel.distanthorizons.core.network.plugin.PluginChannelMessage; +import com.seibel.distanthorizons.core.network.protocol.INetworkObject; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSender; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper; import com.seibel.distanthorizons.coreapi.ModInfo; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; +import java.util.Objects; public abstract class AbstractPluginPacketSender implements IPluginPacketSender { @@ -27,4 +28,26 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender @Override public abstract void sendPluginPacketClient(PluginChannelMessage message); public abstract void sendPluginPacketServer(ServerPlayer serverPlayer, PluginChannelMessage message); + @Nullable + public static PluginChannelMessage decodeMessage(FriendlyByteBuf in) + { + if (in.readShort() != ModInfo.PROTOCOL_VERSION) + { + return null; + } + + PluginChannelMessage message = PluginMessageRegistry.INSTANCE.createMessage(in.readUnsignedShort()); + return INetworkObject.decodeToInstance(message, in); + } + + public static void encodeMessage(FriendlyByteBuf out, PluginChannelMessage message) + { + Objects.requireNonNull(message); + + out.writeShort(ModInfo.PROTOCOL_VERSION); + + out.writeShort(PluginMessageRegistry.INSTANCE.getMessageId(message)); + message.encode(out); + } + } \ No newline at end of file diff --git a/common/src/main/java/com/seibel/distanthorizons/common/CommonPacketPayload.java b/common/src/main/java/com/seibel/distanthorizons/common/CommonPacketPayload.java index 870acf5af..40c9bd2b4 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/CommonPacketPayload.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/CommonPacketPayload.java @@ -1,5 +1,7 @@ package com.seibel.distanthorizons.common; +#if MC_VER >= MC_1_20_6 + import com.seibel.distanthorizons.core.network.messages.PluginMessageRegistry; import com.seibel.distanthorizons.core.network.plugin.PluginChannelMessage; import com.seibel.distanthorizons.core.network.protocol.INetworkObject; @@ -12,7 +14,9 @@ import org.jetbrains.annotations.Nullable; import java.util.Objects; -public class CommonPacketPayload implements CustomPacketPayload +public record CommonPacketPayload( + @Nullable PluginChannelMessage message +) implements CustomPacketPayload { public static final Type TYPE = new Type<>(AbstractPluginPacketSender.WRAPPER_PACKET_RESOURCE); @@ -23,15 +27,6 @@ public class CommonPacketPayload implements CustomPacketPayload return TYPE; } - @Nullable - public PluginChannelMessage message; - - - public CommonPacketPayload(@Nullable PluginChannelMessage message) - { - this.message = message; - } - public static class Codec implements StreamCodec { @@ -39,26 +34,17 @@ public class CommonPacketPayload implements CustomPacketPayload @Override public CommonPacketPayload decode(@NotNull FriendlyByteBuf in) { - if (in.readShort() != ModInfo.PROTOCOL_VERSION) - { - return new CommonPacketPayload(null); - } - - PluginChannelMessage message = PluginMessageRegistry.INSTANCE.createMessage(in.readUnsignedShort()); - return new CommonPacketPayload(INetworkObject.decodeToInstance(message, in)); + return new CommonPacketPayload(AbstractPluginPacketSender.decodeMessage(in)); } @Override public void encode(@NotNull FriendlyByteBuf out, CommonPacketPayload payload) { - Objects.requireNonNull(payload.message); - - out.writeShort(ModInfo.PROTOCOL_VERSION); - - out.writeShort(PluginMessageRegistry.INSTANCE.getMessageId(payload.message)); - payload.message.encode(out); + AbstractPluginPacketSender.encodeMessage(out, payload.message()); } } -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java index f8621891a..e4ec2bb0a 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -20,7 +20,7 @@ package com.seibel.distanthorizons.fabric; import com.seibel.distanthorizons.common.AbstractModInitializer; -import com.seibel.distanthorizons.common.CommonPacketPayload; +import com.seibel.distanthorizons.common.AbstractPluginPacketSender; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; @@ -31,6 +31,7 @@ import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.network.plugin.PluginChannelMessage; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; @@ -44,16 +45,23 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackBlockCallback; import net.fabricmc.fabric.api.event.player.UseBlockCallback; -import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; +#if MC_VER >= MC_1_20_6 +import com.seibel.distanthorizons.common.CommonPacketPayload; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +#endif + #if MC_VER < MC_1_19_4 import java.nio.FloatBuffer; #endif import java.util.HashSet; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.InteractionResult; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.phys.HitResult; @@ -224,16 +232,27 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy // networking event // //==================// + #if MC_VER >= MC_1_20_6 PayloadTypeRegistry.playC2S().register(CommonPacketPayload.TYPE, new CommonPacketPayload.Codec()); PayloadTypeRegistry.playS2C().register(CommonPacketPayload.TYPE, new CommonPacketPayload.Codec()); ClientPlayNetworking.registerGlobalReceiver(CommonPacketPayload.TYPE, (payload, context) -> { - if (payload.message == null) + if (payload.message() == null) { return; } - ClientApi.INSTANCE.pluginMessageReceived(payload.message); + ClientApi.INSTANCE.pluginMessageReceived(payload.message()); }); + #else + ClientPlayNetworking.registerGlobalReceiver(AbstractPluginPacketSender.PLUGIN_CHANNEL_RESOURCE, (client, handler, buffer, packetSender) -> + { + PluginChannelMessage message = AbstractPluginPacketSender.decodeMessage(buffer); + if (message != null) + { + ClientApi.INSTANCE.pluginMessageReceived(message); + } + }); + #endif } public void onKeyInput() diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricPluginPacketSender.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricPluginPacketSender.java index 33be11b32..4d6ca6ca5 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricPluginPacketSender.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricPluginPacketSender.java @@ -1,24 +1,41 @@ package com.seibel.distanthorizons.fabric; import com.seibel.distanthorizons.common.AbstractPluginPacketSender; -import com.seibel.distanthorizons.common.CommonPacketPayload; import com.seibel.distanthorizons.core.network.plugin.PluginChannelMessage; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; +#if MC_VER >= MC_1_20_6 +import com.seibel.distanthorizons.common.CommonPacketPayload; +#endif + public class FabricPluginPacketSender extends AbstractPluginPacketSender { @Override public void sendPluginPacketClient(PluginChannelMessage message) { + #if MC_VER >= MC_1_20_6 ClientPlayNetworking.send(new CommonPacketPayload(message)); + #else + FriendlyByteBuf buffer = PacketByteBufs.create(); + AbstractPluginPacketSender.encodeMessage(buffer, message); + ClientPlayNetworking.send(PLUGIN_CHANNEL_RESOURCE, buffer); + #endif } @Override public void sendPluginPacketServer(ServerPlayer serverPlayer, PluginChannelMessage message) { + #if MC_VER >= MC_1_20_6 ServerPlayNetworking.send(serverPlayer, new CommonPacketPayload(message)); + #else + FriendlyByteBuf buffer = PacketByteBufs.create(); + AbstractPluginPacketSender.encodeMessage(buffer, message); + ServerPlayNetworking.send(serverPlayer, PLUGIN_CHANNEL_RESOURCE, buffer); + #endif } } \ No newline at end of file diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java index d8e1a6479..55e73088b 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java @@ -1,14 +1,16 @@ package com.seibel.distanthorizons.fabric; import com.seibel.distanthorizons.common.AbstractModInitializer; -import com.seibel.distanthorizons.common.CommonPacketPayload; +import com.seibel.distanthorizons.common.AbstractPluginPacketSender; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; +import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.api.internal.ServerApi; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.network.plugin.PluginChannelMessage; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; @@ -16,7 +18,6 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerChunkEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; -import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.client.Minecraft; @@ -26,6 +27,11 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import org.apache.logging.log4j.Logger; +#if MC_VER >= MC_1_20_6 +import com.seibel.distanthorizons.common.CommonPacketPayload; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +#endif + import java.util.function.Supplier; /** @@ -156,16 +162,27 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy if (this.isDedicated) { + #if MC_VER >= MC_1_20_6 PayloadTypeRegistry.playC2S().register(CommonPacketPayload.TYPE, new CommonPacketPayload.Codec()); PayloadTypeRegistry.playS2C().register(CommonPacketPayload.TYPE, new CommonPacketPayload.Codec()); ServerPlayNetworking.registerGlobalReceiver(CommonPacketPayload.TYPE, (payload, context) -> { - if (payload.message == null) + if (payload.message() == null) { return; } - ServerApi.INSTANCE.pluginMessageReceived(ServerPlayerWrapper.getWrapper(context.player()), payload.message); + ServerApi.INSTANCE.pluginMessageReceived(ServerPlayerWrapper.getWrapper(context.player()), payload.message()); }); + #else + ServerPlayNetworking.registerGlobalReceiver(AbstractPluginPacketSender.PLUGIN_CHANNEL_RESOURCE, (server, serverPlayer, handler, buffer, packetSender) -> + { + PluginChannelMessage message = AbstractPluginPacketSender.decodeMessage(buffer); + if (message != null) + { + ClientApi.INSTANCE.pluginMessageReceived(message); + } + }); + #endif } } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgePluginPacketSender.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgePluginPacketSender.java index 2bff648b9..22b2d5c63 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgePluginPacketSender.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgePluginPacketSender.java @@ -1,7 +1,8 @@ package com.seibel.distanthorizons.forge; +import com.seibel.distanthorizons.common.AbstractPluginPacketSender; import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; -import com.seibel.distanthorizons.common.wrappers.network.AbstractPluginPacketSender; +import com.seibel.distanthorizons.core.network.plugin.PluginChannelMessage; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper; import io.netty.buffer.ByteBuf; import net.minecraft.network.FriendlyByteBuf; @@ -46,42 +47,48 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender ); #endif - public static void setPacketHandler(Consumer consumer) + public static void setPacketHandler(Consumer consumer) { setPacketHandler((player, buffer) -> consumer.accept(buffer)); } - public static void setPacketHandler(BiConsumer consumer) + public static void setPacketHandler(BiConsumer consumer) { #if MC_VER >= MC_1_20_2 - PLUGIN_CHANNEL.messageBuilder(FriendlyByteBuf.class, 0) - .encoder((buffer, mcBuffer) -> mcBuffer.writeBytes(buffer)) - .decoder(FriendlyByteBuf::new) - .consumerNetworkThread((buffer, context) -> + PLUGIN_CHANNEL.messageBuilder(PluginChannelMessage.class, 0) + .encoder((message, out) -> AbstractPluginPacketSender.encodeMessage(out, message)) + .decoder(AbstractPluginPacketSender::decodeMessage) + .consumerNetworkThread((message, context) -> { - if (context.getSender() != null) + if (message != null) { - consumer.accept(ServerPlayerWrapper.getWrapper(context.getSender()), buffer); - } - else - { - consumer.accept(null, buffer); + if (context.getSender() != null) + { + consumer.accept(ServerPlayerWrapper.getWrapper(context.getSender()), message); + } + else + { + consumer.accept(null, message); + } } context.setPacketHandled(true); }) .add(); #else // < 1.20.2 - PLUGIN_CHANNEL.registerMessage(0, FriendlyByteBuf.class, - (buffer, mcBuffer) -> mcBuffer.writeBytes(buffer), - FriendlyByteBuf::new, - (buffer, context) -> + PLUGIN_CHANNEL.registerMessage(0, PluginChannelMessage.class, + (message, out) -> AbstractPluginPacketSender.encodeMessage(out, message), + AbstractPluginPacketSender::decodeMessage, + (message, context) -> { - if (context.get().getSender() != null) + if (message != null) { - consumer.accept(ServerPlayerWrapper.getWrapper(context.get().getSender()), buffer); - } - else - { - consumer.accept(null, buffer); + if (context.get().getSender() != null) + { + consumer.accept(ServerPlayerWrapper.getWrapper(context.get().getSender()), message); + } + else + { + consumer.accept(null, message); + } } context.get().setPacketHandled(true); } @@ -90,7 +97,7 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender } @Override - protected void sendPluginPacketClient(FriendlyByteBuf buffer) + public void sendPluginPacketClient(PluginChannelMessage buffer) { #if MC_VER >= MC_1_20_2 PLUGIN_CHANNEL.send(buffer, PacketDistributor.SERVER.noArg()); @@ -100,7 +107,7 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender } @Override - protected void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf buffer) + public void sendPluginPacketServer(ServerPlayer serverPlayer, PluginChannelMessage buffer) { #if MC_VER >= MC_1_20_2 PLUGIN_CHANNEL.send(buffer, PacketDistributor.PLAYER.with(serverPlayer)); @@ -109,4 +116,4 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender #endif } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 1428d48b1..d8e664763 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ versionStr= # This defines what MC version Intellij will use for the preprocessor # and what version is used automatically by build and run commands -mcVer=1.20.6 +mcVer=1.19.4 # Defines the maximum amount of memory Minecraft is allowed when run in a development environment #minecraftMemoryJavaArg="-Xmx4G" \ No newline at end of file diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgePluginPacketSender.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgePluginPacketSender.java index 6d687359e..1ec7672f5 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgePluginPacketSender.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgePluginPacketSender.java @@ -33,7 +33,7 @@ public class NeoforgePluginPacketSender extends AbstractPluginPacketSender .map(player -> player instanceof ServerPlayer ? (ServerPlayer) player : null) .map(ServerPlayerWrapper::getWrapper) .orElse(null); - packetConsumer.accept(serverPlayer, payload.message); + packetConsumer.accept(serverPlayer, payload.message()); }); }