Skip to content

Commit 0bbe050

Browse files
committed
build: 1.21.11-pre5
1 parent 8c77a3c commit 0bbe050

12 files changed

Lines changed: 142 additions & 20 deletions

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id 'fabric-loom' version '1.11-SNAPSHOT' apply false
2+
id 'fabric-loom' version '1.13-SNAPSHOT' apply false
33
id 'com.gradleup.shadow' version '9.2.1' apply false
44
id 'dev.yumi.gradle.licenser' version '2.1.1' apply false
55
id 'com.modrinth.minotaur' version '2.+' apply false

fabric/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ loom {
5858
ideConfigGenerated(true)
5959
}
6060
}
61+
mixin {
62+
useLegacyMixinAp = true
63+
}
6164
}
6265

6366
jar {

fabric/src/main/java/com/ishland/raknetify/fabric/common/connection/RakNetClientConnectionUtil.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,36 @@ public static ClientConnection connect(InetSocketAddress address, boolean useEpo
5252
}
5353
}
5454

55-
public static ChannelFuture connect(InetSocketAddress address, boolean useEpoll, boolean largeMTU, ClientConnection connection) {
55+
public static ClientConnection connect(InetSocketAddress address, Object backend, boolean largeMTU, Operation<ClientConnection> original) {
56+
System.out.println("aaa");
57+
try {
58+
ThreadLocalUtil.setInitializingRaknet(true);
59+
ThreadLocalUtil.setInitializingRaknetLargeMTU(largeMTU);
60+
return original.call(address, backend, null);
61+
} finally {
62+
ThreadLocalUtil.setInitializingRaknet(false);
63+
ThreadLocalUtil.setInitializingRaknetLargeMTU(false);
64+
}
65+
}
66+
67+
public static ChannelFuture connect(InetSocketAddress address, boolean useEpoll, boolean largeMTU, Operation<ChannelFuture> original, ClientConnection connection) {
68+
System.out.println("aaaa");
69+
try {
70+
ThreadLocalUtil.setInitializingRaknet(true);
71+
ThreadLocalUtil.setInitializingRaknetLargeMTU(largeMTU);
72+
return original.call(address, useEpoll, connection);
73+
} finally {
74+
ThreadLocalUtil.setInitializingRaknet(false);
75+
ThreadLocalUtil.setInitializingRaknetLargeMTU(false);
76+
}
77+
}
78+
79+
public static ChannelFuture connect(InetSocketAddress address, Object backend, boolean largeMTU, Operation<ChannelFuture> original, ClientConnection connection) {
5680
System.out.println("aaaa");
5781
try {
5882
ThreadLocalUtil.setInitializingRaknet(true);
5983
ThreadLocalUtil.setInitializingRaknetLargeMTU(largeMTU);
60-
return ClientConnection.connect(address, useEpoll, connection);
84+
return original.call(address, backend, connection);
6185
} finally {
6286
ThreadLocalUtil.setInitializingRaknet(false);
6387
ThreadLocalUtil.setInitializingRaknetLargeMTU(false);

fabric/src/main/java/com/ishland/raknetify/fabric/common/connection/RakNetFabricConnectionUtil.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@
3434
import io.netty.channel.ChannelHandler;
3535
import io.netty.channel.ChannelHandlerContext;
3636
import io.netty.channel.ChannelPipeline;
37+
import io.netty.channel.epoll.EpollDatagramChannel;
38+
import io.netty.channel.epoll.EpollSocketChannel;
39+
import io.netty.channel.kqueue.KQueueDatagramChannel;
40+
import io.netty.channel.kqueue.KQueueSocketChannel;
41+
import io.netty.channel.socket.DatagramChannel;
42+
import io.netty.channel.socket.SocketChannel;
43+
import io.netty.channel.socket.nio.NioDatagramChannel;
44+
import io.netty.channel.socket.nio.NioSocketChannel;
3745
import network.ycc.raknet.RakNet;
3846

3947
public class RakNetFabricConnectionUtil {
@@ -79,4 +87,16 @@ static void onPipelineReorder(ChannelPipeline pipeline) {
7987
}
8088
}
8189

90+
public static DatagramChannel fromSocketChannel(Class<? extends SocketChannel> clazz) {
91+
if (clazz == NioSocketChannel.class) {
92+
return new NioDatagramChannel();
93+
} else if (clazz == EpollSocketChannel.class) {
94+
return new EpollDatagramChannel();
95+
} else if (clazz == KQueueSocketChannel.class) {
96+
return new KQueueDatagramChannel();
97+
} else {
98+
throw new UnsupportedOperationException(clazz.getName());
99+
}
100+
}
101+
82102
}

fabric/src/main/java/com/ishland/raknetify/fabric/mixin/RaknetifyFabricMixinPlugin.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public class RaknetifyFabricMixinPlugin implements IMixinConfigPlugin {
4545
public static final boolean AFTER_1_21_4;
4646
public static final boolean AFTER_1_21_5;
4747
public static final boolean AFTER_1_21_8;
48+
public static final boolean AFTER_1_21_10;
4849

4950
static {
5051
try {
@@ -55,6 +56,7 @@ public class RaknetifyFabricMixinPlugin implements IMixinConfigPlugin {
5556
AFTER_1_21_4 = VersionPredicate.parse(">1.21.4").test(FabricLoader.getInstance().getModContainer("minecraft").get().getMetadata().getVersion());
5657
AFTER_1_21_5 = VersionPredicate.parse(">1.21.5").test(FabricLoader.getInstance().getModContainer("minecraft").get().getMetadata().getVersion());
5758
AFTER_1_21_8 = VersionPredicate.parse(">1.21.8").test(FabricLoader.getInstance().getModContainer("minecraft").get().getMetadata().getVersion());
59+
AFTER_1_21_10 = VersionPredicate.parse(">1.21.10").test(FabricLoader.getInstance().getModContainer("minecraft").get().getMetadata().getVersion());
5860
} catch (VersionParsingException e) {
5961
throw new RuntimeException(e);
6062
}
@@ -79,7 +81,9 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
7981
if (mixinClassName.equals("com.ishland.raknetify.fabric.mixin.client.MixinMultiplayerServerListPinger1_20_2"))
8082
return AFTER_1_20_1 && !AFTER_1_20_4;
8183
if (mixinClassName.equals("com.ishland.raknetify.fabric.mixin.client.MixinMultiplayerServerListPinger1_20_5"))
82-
return AFTER_1_20_4;
84+
return AFTER_1_20_4 && !AFTER_1_21_10;
85+
if (mixinClassName.equals("com.ishland.raknetify.fabric.mixin.client.MixinMultiplayerServerListPinger1_21_11"))
86+
return AFTER_1_21_10;
8387
if (mixinClassName.equals("com.ishland.raknetify.fabric.mixin.client.hud.MixinDebugHud1_21_8"))
8488
return !AFTER_1_21_8;
8589
return true;

fabric/src/main/java/com/ishland/raknetify/fabric/mixin/client/MixinConnectionScreen1.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,16 @@
3131
import io.netty.channel.ChannelFuture;
3232
import net.minecraft.client.network.ServerAddress;
3333
import net.minecraft.network.ClientConnection;
34+
import net.minecraft.network.NetworkingBackend;
3435
import org.spongepowered.asm.mixin.Dynamic;
3536
import org.spongepowered.asm.mixin.Final;
3637
import org.spongepowered.asm.mixin.Mixin;
3738
import org.spongepowered.asm.mixin.Mutable;
3839
import org.spongepowered.asm.mixin.Shadow;
3940
import org.spongepowered.asm.mixin.Unique;
4041
import org.spongepowered.asm.mixin.injection.At;
42+
import org.spongepowered.asm.mixin.injection.Coerce;
4143
import org.spongepowered.asm.mixin.injection.Inject;
42-
import org.spongepowered.asm.mixin.injection.Redirect;
4344
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
4445

4546
import java.net.InetSocketAddress;
@@ -74,9 +75,15 @@ private ClientConnection connectRaknet(InetSocketAddress address, boolean useEpo
7475
return this.isRaknet ? RakNetClientConnectionUtil.connect(address, useEpoll, this.raknetLargeMTU, original, false) : original.call(address, useEpoll);
7576
}
7677

77-
@WrapOperation(method = "run()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;"), require = 0)
78+
@Dynamic
79+
@WrapOperation(method = "run()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;method_52271(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;"), require = 0)
7880
private ChannelFuture connectRaknet(InetSocketAddress address, boolean useEpoll, ClientConnection connection, Operation<ChannelFuture> original) {
79-
return this.isRaknet ? RakNetClientConnectionUtil.connect(address, useEpoll, this.raknetLargeMTU, connection) : original.call(address, useEpoll, connection);
81+
return this.isRaknet ? RakNetClientConnectionUtil.connect(address, useEpoll, this.raknetLargeMTU, original, connection) : original.call(address, useEpoll, connection);
82+
}
83+
84+
@WrapOperation(method = "run()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;Lnet/minecraft/network/NetworkingBackend;Lnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;"), require = 0)
85+
private ChannelFuture connectRaknet(InetSocketAddress address, @Coerce Object backend, ClientConnection connection, Operation<ChannelFuture> original) {
86+
return this.isRaknet ? RakNetClientConnectionUtil.connect(address, backend, this.raknetLargeMTU, original, connection) : original.call(address, backend, connection);
8087
}
8188

8289
}

fabric/src/main/java/com/ishland/raknetify/fabric/mixin/client/MixinMultiplayerServerListPinger1.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import net.minecraft.client.network.ServerAddress;
3232
import net.minecraft.client.network.ServerInfo;
3333
import net.minecraft.network.ClientConnection;
34+
import net.minecraft.network.NetworkingBackend;
3435
import net.minecraft.network.listener.ClientQueryPacketListener;
3536
import network.ycc.raknet.RakNet;
3637
import org.spongepowered.asm.mixin.Dynamic;
@@ -64,12 +65,18 @@ private void setPingImmediately(CallbackInfo ci) {
6465
}
6566

6667
@Dynamic
67-
@WrapWithCondition(method = {"method_10839(Lnet/minecraft/class_2561;)V", "onDisconnected"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/MultiplayerServerListPinger;ping(Ljava/net/InetSocketAddress;Lnet/minecraft/client/network/ServerAddress;Lnet/minecraft/client/network/ServerInfo;)V"), require = 0)
68+
@WrapWithCondition(method = {"method_10839(Lnet/minecraft/class_2561;)V", "onDisconnected"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/MultiplayerServerListPinger;method_3001(Ljava/net/InetSocketAddress;Lnet/minecraft/client/network/ServerAddress;Lnet/minecraft/client/network/ServerInfo;)V"), require = 0)
6869
private boolean noPingRaknet(MultiplayerServerListPinger instance, InetSocketAddress socketAddress, ServerAddress address, ServerInfo serverInfo) {
6970
final Channel channel = ((IClientConnection) field_3774).getChannel();
7071
return !(channel.config() instanceof RakNet.Config);
7172
}
7273

74+
@WrapWithCondition(method = "onDisconnected", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/MultiplayerServerListPinger;ping(Ljava/net/InetSocketAddress;Lnet/minecraft/client/network/ServerAddress;Lnet/minecraft/client/network/ServerInfo;Lnet/minecraft/network/NetworkingBackend;)V"), require = 0)
75+
private boolean noPingRaknet(MultiplayerServerListPinger instance, InetSocketAddress socketAddress, ServerAddress address, ServerInfo serverInfo, NetworkingBackend backend) {
76+
final Channel channel = ((IClientConnection) field_3774).getChannel();
77+
return !(channel.config() instanceof RakNet.Config);
78+
}
79+
7380
@Dynamic
7481
@WrapWithCondition(method = "method_10839(Lnet/minecraft/class_2561;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/MultiplayerServerListPinger;method_3001(Ljava/net/InetSocketAddress;Lnet/minecraft/client/network/ServerInfo;)V"), require = 0)
7582
private boolean noPingRaknet(MultiplayerServerListPinger instance, InetSocketAddress address, ServerInfo info) {

fabric/src/main/java/com/ishland/raknetify/fabric/mixin/client/MixinMultiplayerServerListPinger1_20_5.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
@Mixin(MultiplayerServerListPinger.class)
4444
public class MixinMultiplayerServerListPinger1_20_5 {
4545

46-
@WrapOperation(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)Lnet/minecraft/network/ClientConnection;"))
46+
@Dynamic
47+
@WrapOperation(method = {"add", "method_3003"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;method_10753(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)Lnet/minecraft/network/ClientConnection;"))
4748
private ClientConnection redirectConnect(InetSocketAddress address, boolean useEpoll, MultiValueDebugSampleLogImpl log, Operation<ClientConnection> original, ServerInfo entry, Runnable runnable) {
4849
final PrefixUtil.Info info = PrefixUtil.getInfo(entry.address);
4950
return info.useRakNet() ? RakNetClientConnectionUtil.connect(address, useEpoll, info.largeMTU(), original, true) : original.call(address, useEpoll, null);
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* This file is a part of the Raknetify project, licensed under MIT.
3+
*
4+
* Copyright (c) 2022-2025 ishland
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*/
24+
25+
package com.ishland.raknetify.fabric.mixin.client;
26+
27+
import com.ishland.raknetify.common.util.PrefixUtil;
28+
import com.ishland.raknetify.fabric.common.connection.RakNetClientConnectionUtil;
29+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
30+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
31+
import net.minecraft.client.network.MultiplayerServerListPinger;
32+
import net.minecraft.client.network.ServerInfo;
33+
import net.minecraft.network.ClientConnection;
34+
import net.minecraft.network.NetworkingBackend;
35+
import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl;
36+
import org.spongepowered.asm.mixin.Mixin;
37+
import org.spongepowered.asm.mixin.injection.At;
38+
39+
import java.net.InetSocketAddress;
40+
41+
@Mixin(MultiplayerServerListPinger.class)
42+
public class MixinMultiplayerServerListPinger1_21_11 {
43+
44+
@WrapOperation(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;Lnet/minecraft/network/NetworkingBackend;Lnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)Lnet/minecraft/network/ClientConnection;"))
45+
private ClientConnection redirectConnect(InetSocketAddress address, NetworkingBackend backend, MultiValueDebugSampleLogImpl packetSizeLog, Operation<ClientConnection> original, ServerInfo entry) {
46+
final PrefixUtil.Info info = PrefixUtil.getInfo(entry.address);
47+
return info.useRakNet() ? RakNetClientConnectionUtil.connect(address, backend, info.largeMTU(), original) : original.call(address, backend, null);
48+
}
49+
50+
}

0 commit comments

Comments
 (0)