Fix compilation for older versions

This commit is contained in:
s809
2024-06-04 23:33:44 +05:00
parent 7dfe0e4c50
commit 6928c8dc28
8 changed files with 133 additions and 64 deletions
@@ -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);
}
}
@@ -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<CommonPacketPayload> 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<FriendlyByteBuf, CommonPacketPayload>
{
@@ -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());
}
}
}
}
#endif
@@ -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()
@@ -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
}
}
@@ -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
}
}
@@ -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<ByteBuf> consumer)
public static void setPacketHandler(Consumer<PluginChannelMessage> consumer)
{
setPacketHandler((player, buffer) -> consumer.accept(buffer));
}
public static void setPacketHandler(BiConsumer<IServerPlayerWrapper, ByteBuf> consumer)
public static void setPacketHandler(BiConsumer<IServerPlayerWrapper, PluginChannelMessage> 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
}
}
}
+1 -1
View File
@@ -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"
@@ -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());
});
}