Skip to content
This repository was archived by the owner on Mar 9, 2025. It is now read-only.

Commit c4f8a8b

Browse files
committed
- Add access to ClientConfigurationNetworkHandler in context
- Account for configuration channels in NetworkRegistryMixin#preserveSendableChannels ([Sinytra/ForgifiedFabricAPI#171](Sinytra/ForgifiedFabricAPI#171))
1 parent 43ed78c commit c4f8a8b

File tree

4 files changed

+29
-7
lines changed

4 files changed

+29
-7
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ yarn_mappings=1.21.4+build.8
1313
yarn_patch=1.21+build.4
1414

1515
# Dependencies
16-
neoforge_version = 21.4.72-beta
16+
neoforge_version = 21.4.78-beta

src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientConfigurationNetworking.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package net.fabricmc.fabric.api.client.networking.v1;
1818

1919
import java.util.Set;
20+
21+
import net.minecraft.client.network.ClientConfigurationNetworkHandler;
2022
import org.jetbrains.annotations.ApiStatus;
2123
import org.jetbrains.annotations.Nullable;
2224
import net.fabricmc.fabric.api.networking.v1.PacketSender;
@@ -234,6 +236,11 @@ public interface Context {
234236
*/
235237
MinecraftClient client();
236238

239+
/**
240+
* @return The ClientConfigurationNetworkHandler instance
241+
*/
242+
ClientConfigurationNetworkHandler networkHandler();
243+
237244
/**
238245
* @return The packet sender
239246
*/

src/main/java/net/fabricmc/fabric/impl/networking/client/neo/NeoClientConfigurationNetworking.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.fabricmc.fabric.api.networking.v1.PacketSender;
55
import net.fabricmc.fabric.impl.networking.PayloadTypeRegistryImpl;
66
import net.minecraft.client.MinecraftClient;
7+
import net.minecraft.client.network.ClientConfigurationNetworkHandler;
78
import net.minecraft.network.NetworkPhase;
89
import net.minecraft.network.NetworkSide;
910
import net.minecraft.network.packet.CustomPayload;
@@ -84,6 +85,11 @@ public MinecraftClient client() {
8485
return MinecraftClient.getInstance();
8586
}
8687

88+
@Override
89+
public ClientConfigurationNetworkHandler networkHandler() {
90+
return (ClientConfigurationNetworkHandler) configurationPacketListener;
91+
}
92+
8793
@Override
8894
public PacketSender responseSender() {
8995
return new NeoClientPacketSender(context.connection());

src/main/java/net/fabricmc/fabric/mixin/networking/neo/NetworkRegistryMixin.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,24 @@ private static boolean includeFabricChannels(ICommonPacketListener listener, Ide
8383
return original.call(listener, location) || NeoNetworkRegistrar.hasCodecFor(listener.getPhase(), listener.getSide() == NetworkSide.SERVERBOUND ? NetworkSide.CLIENTBOUND : NetworkSide.SERVERBOUND, location);
8484
}
8585

86-
@ModifyVariable(method = "initializeNeoForgeConnection", at = @At(value = "INVOKE", target = "Lnet/neoforged/neoforge/network/registration/NetworkPayloadSetup;from(Ljava/util/Map;)Lnet/neoforged/neoforge/network/registration/NetworkPayloadSetup;"), ordinal = 1)
86+
@ModifyVariable(method = "initializeNeoForgeConnection(Lnet/minecraft/network/listener/ServerConfigurationPacketListener;Ljava/util/Map;)V", at = @At(value = "INVOKE", target = "Lnet/neoforged/neoforge/network/registration/NetworkPayloadSetup;from(Ljava/util/Map;)Lnet/neoforged/neoforge/network/registration/NetworkPayloadSetup;"), ordinal = 1)
8787
private static Map<NetworkPhase, NegotiationResult> preserveSendableChannels(Map<NetworkPhase, NegotiationResult> results, ServerConfigurationPacketListener listener, Map<NetworkPhase, Set<ModdedNetworkQueryComponent>> clientChannels) {
88-
Set<ModdedNetworkQueryComponent> channels = clientChannels.get(NetworkPhase.PLAY);
89-
if (channels != null && !channels.isEmpty()) {
88+
Set<ModdedNetworkQueryComponent> configChannels = clientChannels.get(NetworkPhase.CONFIGURATION);
89+
if (configChannels != null && !configChannels.isEmpty()) {
90+
NegotiationResult negotiation = results.get(NetworkPhase.CONFIGURATION);
91+
List<NegotiatedNetworkComponent> components = new ArrayList<>(negotiation.components());
92+
configChannels.stream()
93+
.filter(c -> components.stream().noneMatch(d -> c.id().equals(d.id())) && PayloadTypeRegistryImpl.CONFIGURATION_S2C.get(c.id()) != null)
94+
.forEach(c -> components.add(new NegotiatedNetworkComponent(c.id(), c.version())));
95+
results.put(NetworkPhase.CONFIGURATION, new NegotiationResult(components, negotiation.success(), negotiation.failureReasons()));
96+
}
97+
Set<ModdedNetworkQueryComponent> playChannels = clientChannels.get(NetworkPhase.PLAY);
98+
if (playChannels != null && !playChannels.isEmpty()) {
9099
NegotiationResult negotiation = results.get(NetworkPhase.PLAY);
91100
List<NegotiatedNetworkComponent> components = new ArrayList<>(negotiation.components());
92-
channels.stream()
93-
.filter(c -> components.stream().noneMatch(d -> c.id().equals(d.id())) && PayloadTypeRegistryImpl.PLAY_S2C.get(c.id()) != null)
94-
.forEach(c -> components.add(new NegotiatedNetworkComponent(c.id(), c.version())));
101+
playChannels.stream()
102+
.filter(c -> components.stream().noneMatch(d -> c.id().equals(d.id())) && PayloadTypeRegistryImpl.PLAY_S2C.get(c.id()) != null)
103+
.forEach(c -> components.add(new NegotiatedNetworkComponent(c.id(), c.version())));
95104
results.put(NetworkPhase.PLAY, new NegotiationResult(components, negotiation.success(), negotiation.failureReasons()));
96105
}
97106
return results;

0 commit comments

Comments
 (0)