1717 */
1818package net .raphimc .raknetproviders .cloudburstmc_network ;
1919
20- import com .viaversion .vialoader .netty .VLPipeline ;
2120import io .netty .bootstrap .Bootstrap ;
2221import io .netty .channel .Channel ;
2322import io .netty .channel .ChannelHandlerContext ;
2423import io .netty .channel .ChannelInitializer ;
25- import io .netty .channel .ChannelOption ;
2624import io .netty .channel .socket .DatagramChannel ;
2725import io .netty .handler .codec .MessageToMessageCodec ;
28- import net .raphimc .netminecraft .constants .ConnectionState ;
2926import net .raphimc .netminecraft .util .EventLoops ;
3027import net .raphimc .netminecraft .util .TransportType ;
28+ import net .raphimc .viabedrock .netty .raknet .MessageCodec ;
3129import net .raphimc .viabedrock .protocol .data .ProtocolConstants ;
3230import net .raphimc .viaproxy .ViaProxy ;
3331import net .raphimc .viaproxy .proxy .session .BedrockProxyConnection ;
34- import net .raphimc .viaproxy .proxy .session .ProxyConnection ;
3532import org .cloudburstmc .netty .channel .raknet .RakPriority ;
3633import org .cloudburstmc .netty .channel .raknet .RakReliability ;
3734import org .cloudburstmc .netty .channel .raknet .packet .RakMessage ;
@@ -48,65 +45,55 @@ public CloudburstMcNetworkBedrockProxyConnection(final CloudburstMcNetworkBedroc
4845 }
4946
5047 @ Override
51- public void initialize (TransportType transportType , Bootstrap bootstrap ) {
52- if (this .getC2pConnectionState () == ConnectionState .LOGIN ) {
53- if (!DatagramChannel .class .isAssignableFrom (transportType .udpClientChannelClass ())) {
54- throw new IllegalArgumentException ("Transport type channel must be a DatagramChannel" );
55- }
56- if (transportType == TransportType .KQUEUE ) transportType = TransportType .NIO ; // KQueue doesn't work for Bedrock for some reason
57- final Class <? extends DatagramChannel > channelClass = (Class <? extends DatagramChannel >) transportType .udpClientChannelClass ();
58-
59- bootstrap
60- .group (EventLoops .getClientEventLoop (transportType ))
61- .channelFactory (RakChannelFactory .client (channelClass ))
62- .option (ChannelOption .CONNECT_TIMEOUT_MILLIS , ViaProxy .getConfig ().getConnectTimeout ())
63- .option (RakChannelOption .RAK_PROTOCOL_VERSION , ProtocolConstants .BEDROCK_RAKNET_PROTOCOL_VERSION )
64- .option (RakChannelOption .RAK_COMPATIBILITY_MODE , true )
65- .option (RakChannelOption .RAK_CLIENT_INTERNAL_ADDRESSES , 20 )
66- .option (RakChannelOption .RAK_TIME_BETWEEN_SEND_CONNECTION_ATTEMPTS_MS , 500 )
67- .option (RakChannelOption .RAK_CONNECT_TIMEOUT , (long ) ViaProxy .getConfig ().getConnectTimeout ())
68- .option (RakChannelOption .RAK_SESSION_TIMEOUT , 30_000L )
69- .option (RakChannelOption .RAK_GUID , ThreadLocalRandom .current ().nextLong ())
70- .attr (ProxyConnection .PROXY_CONNECTION_ATTRIBUTE_KEY , this )
71- .handler (new ChannelInitializer <>() {
72-
73- @ Override
74- protected void initChannel (Channel channel ) {
75- channel .pipeline ().addLast (channelInitializer );
48+ public void initializeRakNet (TransportType transportType , Bootstrap bootstrap ) {
49+ if (!DatagramChannel .class .isAssignableFrom (transportType .udpClientChannelClass ())) {
50+ throw new IllegalArgumentException ("Channel type must be a DatagramChannel" );
51+ }
52+ if (transportType == TransportType .KQUEUE ) {
53+ transportType = TransportType .NIO ; // KQueue doesn't work due to requiring the channel to be bound instead of connected
54+ }
55+ final Class <? extends DatagramChannel > channelClass = (Class <? extends DatagramChannel >) transportType .udpClientChannelClass ();
7656
77- channel .pipeline ().addBefore (VLPipeline .VIABEDROCK_RAKNET_MESSAGE_CODEC_NAME , "viabedrock-frame-converter" , new MessageToMessageCodec <org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage , RakMessage >() {
78- @ Override
79- protected void encode (ChannelHandlerContext channelHandlerContext , RakMessage rakMessage , List <Object > list ) {
80- list .add (new org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage (
81- rakMessage .content ().retain (),
82- org .cloudburstmc .upstream .netty .channel .raknet .RakReliability .valueOf (rakMessage .reliability ().name ()),
83- org .cloudburstmc .upstream .netty .channel .raknet .RakPriority .valueOf (rakMessage .priority ().name ()),
84- rakMessage .channel ()
85- ));
86- }
57+ bootstrap
58+ .group (EventLoops .getClientEventLoop (transportType ))
59+ .channelFactory (RakChannelFactory .client (channelClass ))
60+ .option (RakChannelOption .RAK_PROTOCOL_VERSION , ProtocolConstants .BEDROCK_RAKNET_PROTOCOL_VERSION )
61+ .option (RakChannelOption .RAK_COMPATIBILITY_MODE , true )
62+ .option (RakChannelOption .RAK_CLIENT_INTERNAL_ADDRESSES , 20 )
63+ .option (RakChannelOption .RAK_TIME_BETWEEN_SEND_CONNECTION_ATTEMPTS_MS , 500 )
64+ .option (RakChannelOption .RAK_CONNECT_TIMEOUT , (long ) ViaProxy .getConfig ().getConnectTimeout ())
65+ .option (RakChannelOption .RAK_SESSION_TIMEOUT , 30_000L )
66+ .option (RakChannelOption .RAK_GUID , ThreadLocalRandom .current ().nextLong ())
67+ .handler (new ChannelInitializer <>() {
8768
88- @ Override
89- protected void decode (ChannelHandlerContext channelHandlerContext , org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage rakMessage , List <Object > list ) {
90- list .add (new RakMessage (
91- rakMessage .content ().retain (),
92- RakReliability .valueOf (rakMessage .reliability ().name ()),
93- RakPriority .valueOf (rakMessage .priority ().name ()),
94- rakMessage .channel ()
95- ));
96- }
97- });
98- }
69+ @ Override
70+ protected void initChannel (Channel channel ) {
71+ channel .pipeline ().addLast (channelInitializer );
9972
100- });
73+ channel .pipeline ().addBefore (MessageCodec .NAME , "viabedrock-frame-converter" , new MessageToMessageCodec <org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage , RakMessage >() {
74+ @ Override
75+ protected void encode (ChannelHandlerContext channelHandlerContext , RakMessage rakMessage , List <Object > list ) {
76+ list .add (new org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage (
77+ rakMessage .content ().retain (),
78+ org .cloudburstmc .upstream .netty .channel .raknet .RakReliability .valueOf (rakMessage .reliability ().name ()),
79+ org .cloudburstmc .upstream .netty .channel .raknet .RakPriority .valueOf (rakMessage .priority ().name ()),
80+ rakMessage .channel ()
81+ ));
82+ }
10183
102- this .channelFuture = bootstrap .register ().syncUninterruptibly ();
84+ @ Override
85+ protected void decode (ChannelHandlerContext channelHandlerContext , org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage rakMessage , List <Object > list ) {
86+ list .add (new RakMessage (
87+ rakMessage .content ().retain (),
88+ RakReliability .valueOf (rakMessage .reliability ().name ()),
89+ RakPriority .valueOf (rakMessage .priority ().name ()),
90+ rakMessage .channel ()
91+ ));
92+ }
93+ });
94+ }
10395
104- /*if (this.getChannel().config().setOption(RakChannelOption.RAK_IP_DONT_FRAGMENT, true)) {
105- this.getChannel().config().setOption(RakChannelOption.RAK_MTU_SIZES, new Integer[]{1492, 1200, 576});
106- }*/
107- } else {
108- super .initialize (transportType , bootstrap );
109- }
96+ });
11097 }
11198
11299}
0 commit comments