From 0f349461d9eaa3ecda03c8c65b3d4fbb9ec0907c Mon Sep 17 00:00:00 2001 From: s809 <11816467-s809@users.noreply.gitlab.com> Date: Mon, 18 Mar 2024 21:38:08 +0500 Subject: [PATCH] Fix Forge --- .../network/AbstractPluginPacketSender.java | 23 +++++++++-- coreSubProjects | 2 +- .../fabric/FabricPluginPacketSender.java | 28 +++++-------- .../forge/ForgePluginPacketSender.java | 40 +++++++++++++------ .../forge/ForgeServerProxy.java | 6 ++- 5 files changed, 64 insertions(+), 35 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java index 80cf9f764..ab9a5752b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/network/AbstractPluginPacketSender.java @@ -4,19 +4,31 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSende 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; + public abstract class AbstractPluginPacketSender implements IPluginPacketSender { public static final ResourceLocation PLUGIN_CHANNEL_RESOURCE = new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.PLUGIN_CHANNEL_PATH); @Override - public final void sendPluginPacket(@Nullable IServerPlayerWrapper serverPlayer, ByteBuf buffer) + public final void sendPluginPacket(@Nullable IServerPlayerWrapper serverPlayer, Consumer encoder) { + FriendlyByteBuf buffer = new FriendlyByteBuf(ByteBufAllocator.DEFAULT.buffer()); + + if (this.shouldAddForgePacketId()) + { + buffer.writeByte(0); + } + + encoder.accept(buffer); + if (serverPlayer != null) { this.sendPluginPacketServer((ServerPlayer) serverPlayer.getWrappedMcObject(), buffer); @@ -27,7 +39,12 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender } } - protected abstract void sendPluginPacketServer(ServerPlayer serverPlayer, ByteBuf buffer); - protected abstract void sendPluginPacketClient(ByteBuf buffer); + protected boolean shouldAddForgePacketId() + { + return false; + } + + protected abstract void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf buffer); + protected abstract void sendPluginPacketClient(FriendlyByteBuf buffer); } diff --git a/coreSubProjects b/coreSubProjects index e008eb8a1..af2f0e858 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit e008eb8a13390e01d153220dd025c9584c5b562c +Subproject commit af2f0e85824b8774573bd4095e2bea65a8df4747 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 7e4ea15c8..fe1a85a64 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricPluginPacketSender.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricPluginPacketSender.java @@ -1,8 +1,6 @@ package com.seibel.distanthorizons.fabric; import com.seibel.distanthorizons.common.wrappers.network.AbstractPluginPacketSender; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.PooledByteBufAllocator; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.network.FriendlyByteBuf; @@ -11,27 +9,21 @@ import net.minecraft.server.level.ServerPlayer; public class FabricPluginPacketSender extends AbstractPluginPacketSender { @Override - protected void sendPluginPacketClient(ByteBuf buffer) + protected boolean shouldAddForgePacketId() { - FriendlyByteBuf mcBuffer = new FriendlyByteBuf(PooledByteBufAllocator.DEFAULT.buffer()); - - // (Neo)Forge packet ID (Unused, always expected to be 0) - mcBuffer.writeByte(0); - - mcBuffer.writeBytes(buffer); - ClientPlayNetworking.send(PLUGIN_CHANNEL_RESOURCE, mcBuffer); + return true; } @Override - protected void sendPluginPacketServer(ServerPlayer serverPlayer, ByteBuf buffer) + protected void sendPluginPacketClient(FriendlyByteBuf buffer) { - FriendlyByteBuf mcBuffer = new FriendlyByteBuf(buffer); - - // (Neo)Forge packet ID (Unused, always expected to be 0) - mcBuffer.writeByte(0); - - mcBuffer.writeBytes(buffer); - ServerPlayNetworking.send(serverPlayer, PLUGIN_CHANNEL_RESOURCE, mcBuffer); + ClientPlayNetworking.send(PLUGIN_CHANNEL_RESOURCE, buffer); + } + + @Override + protected void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf buffer) + { + ServerPlayNetworking.send(serverPlayer, PLUGIN_CHANNEL_RESOURCE, buffer); } } 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 096cb1580..b12a1c4f8 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgePluginPacketSender.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgePluginPacketSender.java @@ -1,6 +1,8 @@ package com.seibel.distanthorizons.forge; +import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; import com.seibel.distanthorizons.common.wrappers.network.AbstractPluginPacketSender; +import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper; import io.netty.buffer.ByteBuf; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; @@ -9,6 +11,8 @@ import net.minecraftforge.network.PacketDistributor; #if MC_VER >= MC_1_20_2 import net.minecraftforge.network.ChannelBuilder; import net.minecraftforge.network.SimpleChannel; +import org.apache.commons.lang3.ObjectUtils; +import org.checkerframework.checker.nullness.qual.Nullable; #elif MC_VER >= MC_1_18_2 import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; @@ -20,6 +24,7 @@ import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.simple.SimpleChannel; #endif +import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -45,28 +50,39 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender { 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(ByteBuf.class, 0) + PLUGIN_CHANNEL.messageBuilder(FriendlyByteBuf.class, 0) .encoder((buffer, mcBuffer) -> mcBuffer.writeBytes(buffer)) - .decoder(FriendlyByteBuf::asReadOnly) + .decoder(FriendlyByteBuf::new) .consumerNetworkThread((buffer, context) -> { - consumer.accept(context.getSender(), buffer); + if (context.getSender() != null) + { + consumer.accept(ServerPlayerWrapper.getWrapper(context.getSender()), buffer); + } + else + { + consumer.accept(null, buffer); + } context.setPacketHandled(true); }) .add(); #else // < 1.20.2 - PLUGIN_CHANNEL.registerMessage(0, ByteBuf.class, - // encoder + PLUGIN_CHANNEL.registerMessage(0, FriendlyByteBuf.class, (buffer, mcBuffer) -> mcBuffer.writeBytes(buffer), - // decoder - FriendlyByteBuf::asReadOnly, - // message consumer + FriendlyByteBuf::new, (buffer, context) -> { - consumer.accept(context.get().getSender(), buffer); + if (context.get().getSender() != null) + { + consumer.accept(ServerPlayerWrapper.getWrapper(context.get().getSender()), buffer); + } + else + { + consumer.accept(null, buffer); + } context.get().setPacketHandled(true); } ); @@ -74,7 +90,7 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender } @Override - protected void sendPluginPacketClient(ByteBuf buffer) + protected void sendPluginPacketClient(FriendlyByteBuf buffer) { #if MC_VER >= MC_1_20_2 PLUGIN_CHANNEL.send(buffer, PacketDistributor.SERVER.noArg()); @@ -84,7 +100,7 @@ public class ForgePluginPacketSender extends AbstractPluginPacketSender } @Override - protected void sendPluginPacketServer(ServerPlayer serverPlayer, ByteBuf buffer) + protected void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf buffer) { #if MC_VER >= MC_1_20_2 PLUGIN_CHANNEL.send(buffer, PacketDistributor.PLAYER.with(serverPlayer)); diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java index 0e600f3a5..e2a3e2347 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java @@ -6,6 +6,7 @@ import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; 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.wrapperInterfaces.chunk.IChunkWrapper; @@ -59,7 +60,6 @@ public class ForgeServerProxy implements AbstractModInitializer.IEventProxy #endif private final ServerApi serverApi = ServerApi.INSTANCE; - private static final Logger LOGGER = DhLoggerBuilder.getLogger(); private final boolean isDedicated; public static Supplier isGenerationThreadChecker = null; @@ -69,6 +69,10 @@ public class ForgeServerProxy implements AbstractModInitializer.IEventProxy public void registerEvents() { MinecraftForge.EVENT_BUS.register(this); + if (this.isDedicated) + { + ForgePluginPacketSender.setPacketHandler(ServerApi.INSTANCE::pluginMessageReceived); + } }