Skip to content

Commit dcc06fa

Browse files
committed
Support for Fabric 1.20.5, drop support for all prior versions
1 parent b2d7521 commit dcc06fa

File tree

10 files changed

+145
-24
lines changed

10 files changed

+145
-24
lines changed

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

networking-fabric/build.gradle.kts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id("fabric-loom") version "1.5-SNAPSHOT"
2+
id("fabric-loom") version "1.6-SNAPSHOT"
33
id("com.github.johnrengelman.shadow") version "8.1.1"
44
}
55

@@ -18,7 +18,21 @@ dependencies {
1818
modImplementation("net.fabricmc.fabric-api:fabric-api:${property("fabric_version")}")
1919
}
2020

21+
java {
22+
toolchain {
23+
languageVersion.set(JavaLanguageVersion.of(21))
24+
}
25+
26+
withJavadocJar()
27+
withSourcesJar()
28+
}
29+
2130
tasks {
31+
withType<JavaCompile> {
32+
options.release = 21
33+
options.encoding = Charsets.UTF_8.name()
34+
}
35+
2236
processResources {
2337
inputs.property("version", project.version)
2438
filesMatching("fabric.mod.json") {
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
minecraft_version=1.18
2-
fabric_version=0.46.6+1.18
3-
loader_version=0.15.6
1+
minecraft_version=1.20.5
2+
fabric_version=0.97.8+1.20.5
3+
loader_version=0.15.11

networking-fabric/src/main/java/wtf/choco/network/fabric/FabricChannelRegistrar.java

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.google.common.base.Preconditions;
44

55
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
6+
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
67
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
8+
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
79
import net.minecraft.resources.ResourceLocation;
810
import net.minecraft.server.MinecraftServer;
911
import net.minecraft.server.level.ServerPlayer;
@@ -71,21 +73,23 @@ public FabricChannelRegistrar(@NotNull MessageProtocol<S, C> protocol, @NotNull
7173

7274
@Override
7375
public void registerClientboundMessageHandler(@NotNull NamespacedKey channel, @NotNull MessageRegistry<C> registry) {
76+
var payloadType = registerClientboundPayload(channel);
77+
7478
if (!registerClientboundReceiver) {
7579
return;
7680
}
7781

7882
ResourceLocation channelKey = new ResourceLocation(channel.namespace(), channel.key());
79-
ClientPlayNetworking.registerGlobalReceiver(channelKey, (client, handler, buf, responseSender) -> {
80-
MessageByteBuffer buffer = new MessageByteBuffer(protocol, buf.nioBuffer());
83+
ClientPlayNetworking.registerGlobalReceiver(payloadType, (payload, context) -> {
84+
MessageByteBuffer buffer = new MessageByteBuffer(protocol, payload.data());
8185

8286
try {
8387
int messageId = buffer.readVarInt();
8488
Message<C> message = registry.createMessage(messageId, buffer);
8589

8690
// Ignore any unknown messages
8791
if (message == null) {
88-
this.onUnknownClientboundMessage(channelKey, buf.array(), messageId);
92+
this.onUnknownClientboundMessage(channelKey, payload.data(), messageId);
8993
return;
9094
}
9195

@@ -94,37 +98,41 @@ public void registerClientboundMessageHandler(@NotNull NamespacedKey channel, @N
9498
message.handle(listener);
9599
}
96100
} catch (Exception e) {
97-
this.onClientboundMessageReadException(channelKey, buf.array(), e);
101+
this.onClientboundMessageReadException(channelKey, payload.data(), e);
98102
}
99103
});
100104
}
101105

102106
@Override
103107
public void registerServerboundMessageHandler(@NotNull NamespacedKey channel, @NotNull MessageRegistry<S> registry) {
108+
var payloadType = registerServerboundPayload(channel);
109+
104110
if (!registerServerboundReceiver) {
105111
return;
106112
}
107113

108114
ResourceLocation channelKey = new ResourceLocation(channel.namespace(), channel.key());
109-
ServerPlayNetworking.registerGlobalReceiver(channelKey, (server, player, handler, buf, responseSender) -> {
110-
MessageByteBuffer buffer = new MessageByteBuffer(protocol, buf.nioBuffer());
115+
ServerPlayNetworking.registerGlobalReceiver(payloadType, (payload, context) -> {
116+
MessageByteBuffer buffer = new MessageByteBuffer(protocol, payload.data());
117+
118+
ServerPlayer player = context.player();
111119

112120
try {
113121
int messageId = buffer.readVarInt();
114122
Message<S> message = registry.createMessage(messageId, buffer);
115123

116124
// Ignore any unknown messages
117125
if (message == null) {
118-
this.onUnknownServerboundMessage(server, player, channelKey, buf.array(), messageId);
126+
this.onUnknownServerboundMessage(player.server, player, channelKey, payload.data(), messageId);
119127
return;
120128
}
121129

122-
S listener = onSuccessfulServerboundMessage(server, player, channelKey, message);
130+
S listener = onSuccessfulServerboundMessage(player.server, player, channelKey, message);
123131
if (listener != null) {
124132
message.handle(listener);
125133
}
126134
} catch (Exception e) {
127-
this.onServerboundMessageReadException(server, player, channelKey, buf.array(), e);
135+
this.onServerboundMessageReadException(player.server, player, channelKey, payload.data(), e);
128136
}
129137
});
130138
}
@@ -303,4 +311,24 @@ protected S onSuccessfulServerboundMessage(@NotNull MinecraftServer server, @Not
303311
return null;
304312
}
305313

314+
private CustomPacketPayload.Type<RawDataPayload> initTypeIfNecessary(NamespacedKey channel) {
315+
CustomPacketPayload.Type<RawDataPayload> type = RawDataPayload.getType();
316+
if (type == null) {
317+
RawDataPayload.setType(type = CustomPacketPayload.createType(channel.toString()));
318+
}
319+
return type;
320+
}
321+
322+
protected CustomPacketPayload.Type<RawDataPayload> registerClientboundPayload(NamespacedKey channel) {
323+
var payloadType = initTypeIfNecessary(channel);
324+
PayloadTypeRegistry.playS2C().register(payloadType, RawDataPayload.CODEC);
325+
return payloadType;
326+
}
327+
328+
protected CustomPacketPayload.Type<RawDataPayload> registerServerboundPayload(NamespacedKey channel) {
329+
var payloadType = initTypeIfNecessary(channel);
330+
PayloadTypeRegistry.playC2S().register(payloadType, RawDataPayload.CODEC);
331+
return payloadType;
332+
}
333+
306334
}

networking-fabric/src/main/java/wtf/choco/network/fabric/FabricClientChannelRegistrar.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ public FabricClientChannelRegistrar(MessageProtocol<S, C> protocol, Logger logge
3838

3939
// Overriding and finalizing serverbound methods
4040
@Override
41-
public final void registerServerboundMessageHandler(@NotNull NamespacedKey channel, @NotNull MessageRegistry<S> registry) { }
41+
public final void registerServerboundMessageHandler(@NotNull NamespacedKey channel, @NotNull MessageRegistry<S> registry) {
42+
this.registerServerboundPayload(channel);
43+
}
4244

4345
@Override
4446
protected final void onUnknownServerboundMessage(@NotNull MinecraftServer server, @NotNull ServerPlayer sender, @NotNull ResourceLocation channel, byte @NotNull [] data, int messageId) { }
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package wtf.choco.network.fabric;
2+
3+
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
4+
import net.minecraft.network.FriendlyByteBuf;
5+
6+
import org.jetbrains.annotations.NotNull;
7+
8+
import wtf.choco.network.data.NamespacedKey;
9+
import wtf.choco.network.receiver.MessageReceiver;
10+
11+
public interface FabricMessageReceiver extends MessageReceiver {
12+
13+
public void sendMessage(@NotNull RawDataPayload payload);
14+
15+
/**
16+
* {@inheritDoc}
17+
*
18+
* @deprecated you don't need to implement this for Fabric types. Implement
19+
* {@link #sendMessage(RawDataPayload)} instead
20+
*/
21+
@Deprecated
22+
@Override
23+
default void sendMessage(@NotNull NamespacedKey channel, byte @NotNull [] message) {
24+
FriendlyByteBuf byteBuf = PacketByteBufs.create();
25+
byteBuf.writeBytes(message);
26+
this.sendMessage(new RawDataPayload(byteBuf.array()));
27+
}
28+
29+
}

networking-fabric/src/main/java/wtf/choco/network/fabric/FabricProtocolConfiguration.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
44
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
55
import net.minecraft.network.FriendlyByteBuf;
6-
import net.minecraft.resources.ResourceLocation;
76
import net.minecraft.server.MinecraftServer;
87
import net.minecraft.server.level.ServerPlayer;
98
import net.minecraft.world.entity.player.Player;
@@ -13,7 +12,6 @@
1312

1413
import wtf.choco.network.MessageProtocol;
1514
import wtf.choco.network.ProtocolConfiguration;
16-
import wtf.choco.network.data.NamespacedKey;
1715

1816
/**
1917
* A {@link ProtocolConfiguration} implementation for Fabric-based clients and servers
@@ -77,7 +75,7 @@ protected void configureServer(@NotNull MessageProtocol<?, ?> protocol) {
7775
return;
7876
}
7977

80-
this.sendMessageToServerPlayer(serverPlayer, channel, message);
78+
this.sendMessageToServerPlayer(serverPlayer, message);
8179
});
8280

8381
protocol.registerProxiedReceiver(Level.class, (receiver, channel, message) -> {
@@ -86,19 +84,19 @@ protected void configureServer(@NotNull MessageProtocol<?, ?> protocol) {
8684
return;
8785
}
8886

89-
this.sendMessageToServerPlayer(serverPlayer, channel, message);
87+
this.sendMessageToServerPlayer(serverPlayer, message);
9088
});
9189
});
9290

9391
protocol.registerProxiedReceiver(MinecraftServer.class, (receiver, channel, message) -> {
94-
receiver.getPlayerList().getPlayers().forEach(player -> sendMessageToServerPlayer(player, channel, message));
92+
receiver.getPlayerList().getPlayers().forEach(player -> sendMessageToServerPlayer(player, message));
9593
});
9694
}
9795

98-
private void sendMessageToServerPlayer(ServerPlayer player, NamespacedKey channel, byte[] message) {
96+
private void sendMessageToServerPlayer(ServerPlayer player, byte[] message) {
9997
FriendlyByteBuf byteBuf = PacketByteBufs.create();
10098
byteBuf.writeBytes(message);
101-
ServerPlayNetworking.send(player, new ResourceLocation(channel.namespace(), channel.key()), byteBuf);
99+
ServerPlayNetworking.send(player, new RawDataPayload(byteBuf.array()));
102100
}
103101

104102
}

networking-fabric/src/main/java/wtf/choco/network/fabric/FabricServerChannelRegistrar.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ public FabricServerChannelRegistrar(MessageProtocol<S, C> protocol, Logger logge
3838

3939
// Overriding and finalizing clientbound methods
4040
@Override
41-
public final void registerClientboundMessageHandler(@NotNull NamespacedKey channel, @NotNull MessageRegistry<C> registry) { }
41+
public final void registerClientboundMessageHandler(@NotNull NamespacedKey channel, @NotNull MessageRegistry<C> registry) {
42+
this.registerClientboundPayload(channel);
43+
}
4244

4345
@Override
4446
protected final void onUnknownClientboundMessage(@NotNull ResourceLocation channel, byte @NotNull [] data, int messageId) { }
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package wtf.choco.network.fabric;
2+
3+
import net.minecraft.network.FriendlyByteBuf;
4+
import net.minecraft.network.codec.StreamCodec;
5+
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
6+
7+
import org.jetbrains.annotations.ApiStatus;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
public final class RawDataPayload implements CustomPacketPayload {
11+
12+
public static final StreamCodec<FriendlyByteBuf, RawDataPayload> CODEC = StreamCodec.ofMember(
13+
(payload, buffer) -> buffer.writeBytes(payload.data()),
14+
buffer -> {
15+
byte[] bytes = new byte[buffer.readableBytes()];
16+
buffer.readBytes(bytes);
17+
return new RawDataPayload(bytes);
18+
}
19+
);
20+
21+
private static CustomPacketPayload.Type<RawDataPayload> type;
22+
23+
@ApiStatus.Internal
24+
static void setType(@NotNull CustomPacketPayload.Type<RawDataPayload> type) {
25+
RawDataPayload.type = type;
26+
}
27+
28+
@ApiStatus.Internal
29+
static CustomPacketPayload.Type<RawDataPayload> getType() {
30+
return type;
31+
}
32+
33+
private final byte[] data;
34+
35+
public RawDataPayload(byte[] data) {
36+
this.data = data;
37+
}
38+
39+
public byte[] data() {
40+
return data;
41+
}
42+
43+
@Override
44+
public Type<? extends CustomPacketPayload> type() {
45+
return type;
46+
}
47+
48+
}

networking-fabric/src/main/resources/fabric.mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
"depends": {
1212
"fabricloader": ">=${loader_version}",
13-
"fabric-api": "*",
13+
"fabric-api": ">=0.97",
1414
"minecraft": ">=${minecraft_version}",
1515
"java": ">=17"
1616
}

0 commit comments

Comments
 (0)