Fix Fabric Networking issues resulting in server crash and undelivered packets
This commit is contained in:
@@ -39,8 +39,6 @@ public interface LibClientHelper {
|
||||
|
||||
Connection getClientConnection();
|
||||
|
||||
void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, @NotNull CraterPacket<?>> factory);
|
||||
|
||||
void registerBlockEntityRenderer(@NotNull BlockEntityType<? extends BlockEntity> blockEntityType, @NotNull BlockEntityRendererProvider blockEntityRendererFactory);
|
||||
|
||||
}
|
||||
|
@@ -33,8 +33,5 @@ public interface LibCommonHelper {
|
||||
|
||||
<T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor);
|
||||
|
||||
/* FABRIC ONLY */
|
||||
void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
|
||||
|
||||
<T> Optional<T> getCapabilityHandler(BlockEntity entity, Direction side, CraterCapabilityHandler capability);
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@ public class CommandMixin {
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/ParseResults;)I",
|
||||
shift = At.Shift.BEFORE
|
||||
), cancellable = true, remap = false
|
||||
), cancellable = true
|
||||
)
|
||||
private void injectCommandEvent(ParseResults<CommandSourceStack> stackParseResults, String command, CallbackInfoReturnable<Integer> cir) {
|
||||
CraterCommandEvent commandEvent = new CraterCommandEvent(stackParseResults, command);
|
||||
|
@@ -82,14 +82,6 @@ public class FabricClientHelper implements LibClientHelper {
|
||||
return Minecraft.getInstance().getConnection().getConnection();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
|
||||
ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
|
||||
CraterPacket<?> packet = factory.apply(buf);
|
||||
client.execute(() -> packet.handle(client.player, client));
|
||||
});
|
||||
}
|
||||
|
||||
public static void registerCreativeItems(CreativeModeTab tab, FabricItemGroupEntries entries) {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,2 @@
|
||||
package com.hypherionmc.craterlib.client;public class FabricNetworkHelper {
|
||||
}
|
@@ -47,14 +47,6 @@ public class FabricCommonHelper implements LibCommonHelper {
|
||||
return server;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
|
||||
ServerPlayNetworking.registerGlobalReceiver(channelName, (MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
|
||||
CraterPacket<?> packet = factory.apply(buf);
|
||||
server.execute(() -> packet.handle(player, server));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openMenu(ServerPlayer player, MenuProvider menu, Consumer<FriendlyByteBuf> initialData) {
|
||||
ExtendedScreenHandlerFactory factory = new ExtendedScreenHandlerFactory() {
|
||||
|
@@ -9,6 +9,7 @@ import com.hypherionmc.craterlib.core.platform.Platform;
|
||||
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.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.Util;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
@@ -44,8 +45,8 @@ public class FabricNetworkHandler implements CraterNetworkHandler {
|
||||
final Function<FriendlyByteBuf, CraterPacket<?>> decoder = buf -> Util.make(supplier.get(), message -> message.read(buf));
|
||||
|
||||
switch (packetDirection) {
|
||||
case TO_CLIENT -> ClientPlatform.CLIENT_HELPER.registerClientReceiver(channelName, decoder);
|
||||
case TO_SERVER -> Platform.COMMON_HELPER.registerServerReceiver(channelName, decoder);
|
||||
case TO_CLIENT -> FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerClientReceiver(channelName, decoder);
|
||||
case TO_SERVER -> FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerServerReceiver(channelName, decoder);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,31 @@
|
||||
package com.hypherionmc.craterlib.network;
|
||||
|
||||
import com.hypherionmc.craterlib.core.network.CraterPacket;
|
||||
import com.hypherionmc.craterlib.network.impl.FabricClientNetworkHelper;
|
||||
import com.hypherionmc.craterlib.network.impl.FabricServerNetworkHelper;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
public interface FabricNetworkHelper {
|
||||
|
||||
/* FABRIC ONLY */
|
||||
void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, @NotNull CraterPacket<?>> factory);
|
||||
void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
|
||||
|
||||
public static FabricNetworkHelper getForDist(EnvType dist) {
|
||||
switch (dist) {
|
||||
case CLIENT -> {
|
||||
return new FabricClientNetworkHelper();
|
||||
}
|
||||
case SERVER -> {
|
||||
return new FabricServerNetworkHelper();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
package com.hypherionmc.craterlib.network.impl;
|
||||
|
||||
import com.hypherionmc.craterlib.core.network.CraterPacket;
|
||||
import com.hypherionmc.craterlib.network.FabricNetworkHelper;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
public class FabricClientNetworkHelper implements FabricNetworkHelper {
|
||||
|
||||
@Override
|
||||
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
|
||||
ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
|
||||
CraterPacket<?> packet = factory.apply(buf);
|
||||
client.execute(() -> packet.handle(client.player, client));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
package com.hypherionmc.craterlib.network.impl;
|
||||
|
||||
import com.hypherionmc.craterlib.core.network.CraterPacket;
|
||||
import com.hypherionmc.craterlib.network.FabricNetworkHelper;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
public class FabricServerNetworkHelper implements FabricNetworkHelper {
|
||||
@Override
|
||||
public void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, @NotNull CraterPacket<?>> factory) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
|
||||
ServerPlayNetworking.registerGlobalReceiver(channelName, (MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
|
||||
CraterPacket<?> packet = factory.apply(buf);
|
||||
server.execute(() -> packet.handle(player, server));
|
||||
});
|
||||
}
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
# Project
|
||||
version_major=0
|
||||
version_minor=0
|
||||
version_patch=7d
|
||||
version_patch=8d
|
||||
group=me.hypherionmc.craterlib
|
||||
|
||||
# Common
|
||||
|
Reference in New Issue
Block a user