1515 * You should have received a copy of the GNU General Public License
1616 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1717 */
18- package net .raphimc .raknetproviders .kastle_network ;
18+ package net .raphimc .raknetproviders .cloudburst_network ;
1919
2020import com .viaversion .vialoader .netty .VLPipeline ;
21- import dev .kastle .netty .channel .raknet .RakChannelFactory ;
22- import dev .kastle .netty .channel .raknet .RakPriority ;
23- import dev .kastle .netty .channel .raknet .RakReliability ;
24- import dev .kastle .netty .channel .raknet .config .RakChannelOption ;
25- import dev .kastle .netty .channel .raknet .packet .RakMessage ;
2621import io .netty .bootstrap .Bootstrap ;
27- import io .netty .buffer . ByteBuf ;
28- import io .netty .buffer . ByteBufUtil ;
29- import io .netty .buffer . Unpooled ;
30- import io .netty .channel .* ;
22+ import io .netty .channel . Channel ;
23+ import io .netty .channel . ChannelHandlerContext ;
24+ import io .netty .channel . ChannelInitializer ;
25+ import io .netty .channel .ChannelOption ;
3126import io .netty .channel .socket .DatagramChannel ;
3227import io .netty .handler .codec .MessageToMessageCodec ;
33- import net .lenni0451 .reflect .stream .RStream ;
3428import net .raphimc .netminecraft .constants .ConnectionState ;
3529import net .raphimc .netminecraft .util .EventLoops ;
3630import net .raphimc .netminecraft .util .TransportType ;
3731import net .raphimc .viabedrock .protocol .data .ProtocolConstants ;
38- import net .raphimc .viabedrock .protocol .data .enums .bedrock .generated .MinecraftPacketIds ;
39- import net .raphimc .viabedrock .protocol .types .BedrockTypes ;
4032import net .raphimc .viaproxy .ViaProxy ;
4133import net .raphimc .viaproxy .proxy .session .BedrockProxyConnection ;
4234import net .raphimc .viaproxy .proxy .session .ProxyConnection ;
35+ import org .cloudburstmc .upstream .netty .channel .raknet .RakChannelFactory ;
36+ import org .cloudburstmc .upstream .netty .channel .raknet .RakPriority ;
37+ import org .cloudburstmc .upstream .netty .channel .raknet .RakReliability ;
38+ import org .cloudburstmc .upstream .netty .channel .raknet .config .RakChannelOption ;
39+ import org .cloudburstmc .upstream .netty .channel .raknet .packet .RakMessage ;
4340
44- import java .util .ArrayList ;
4541import java .util .List ;
4642import java .util .concurrent .ThreadLocalRandom ;
4743
48- public class KastleNetworkBedrockProxyConnection extends BedrockProxyConnection {
44+ public class CloudburstNetworkBedrockProxyConnection extends BedrockProxyConnection {
4945
50- public KastleNetworkBedrockProxyConnection (final KastleNetworkBedrockProxyConnection bedrockProxyConnection ) {
46+ public CloudburstNetworkBedrockProxyConnection (final CloudburstNetworkBedrockProxyConnection bedrockProxyConnection ) {
5147 super (bedrockProxyConnection .channelInitializer , bedrockProxyConnection .getC2P ());
5248 }
5349
@@ -60,15 +56,11 @@ public void initialize(TransportType transportType, Bootstrap bootstrap) {
6056 if (transportType == TransportType .KQUEUE ) transportType = TransportType .NIO ; // KQueue doesn't work for Bedrock for some reason
6157 final Class <? extends DatagramChannel > channelClass = (Class <? extends DatagramChannel >) transportType .udpClientChannelClass ();
6258
63- // Reflection to prevent inlining
64- final int bedrockProtocolVersion = RStream .of (ProtocolConstants .class ).fields ().by ("BEDROCK_PROTOCOL_VERSION" ).get ();
65-
6659 bootstrap
6760 .group (EventLoops .getClientEventLoop (transportType ))
6861 .channelFactory (RakChannelFactory .client (channelClass ))
6962 .option (ChannelOption .CONNECT_TIMEOUT_MILLIS , ViaProxy .getConfig ().getConnectTimeout ())
7063 .option (RakChannelOption .RAK_PROTOCOL_VERSION , ProtocolConstants .BEDROCK_RAKNET_PROTOCOL_VERSION )
71- .option (RakChannelOption .RAK_CLIENT_BEDROCK_PROTOCOL_VERSION , bedrockProtocolVersion )
7264 .option (RakChannelOption .RAK_COMPATIBILITY_MODE , true )
7365 .option (RakChannelOption .RAK_CLIENT_INTERNAL_ADDRESSES , 20 )
7466 .option (RakChannelOption .RAK_TIME_BETWEEN_SEND_CONNECTION_ATTEMPTS_MS , 500 )
@@ -103,48 +95,6 @@ protected void decode(ChannelHandlerContext channelHandlerContext, RakMessage ra
10395 ));
10496 }
10597 });
106- channel .pipeline ().addBefore (VLPipeline .VIABEDROCK_PACKET_ENCAPSULATION_HANDLER_NAME , "viaproxy-raknetproviders-packet-buffer" , new ChannelDuplexHandler () {
107-
108- private boolean sentRequestNetworkSettings = false ;
109- private final List <byte []> bufferedPackets = new ArrayList <>();
110-
111- @ Override
112- public void channelRead (ChannelHandlerContext ctx , Object msg ) throws Exception {
113- if (msg instanceof ByteBuf byteBuf && !this .sentRequestNetworkSettings ) {
114- final byte [] data = ByteBufUtil .getBytes (byteBuf );
115- byteBuf .release ();
116- this .bufferedPackets .add (data );
117- if (this .bufferedPackets .size () > 1000 ) {
118- throw new IllegalStateException ("Too many packets buffered" );
119- }
120- } else {
121- super .channelRead (ctx , msg );
122- }
123- }
124-
125- @ Override
126- public void write (ChannelHandlerContext ctx , Object msg , ChannelPromise promise ) throws Exception {
127- if (msg instanceof ByteBuf byteBuf ) {
128- byteBuf .markReaderIndex ();
129- final int packetId = BedrockTypes .UNSIGNED_VAR_INT .readPrimitive (byteBuf ) & 1023 ;
130- byteBuf .resetReaderIndex ();
131-
132- if (packetId == MinecraftPacketIds .RequestNetworkSettings .getValue ()) {
133- this .sentRequestNetworkSettings = true ;
134- byteBuf .release ();
135- for (byte [] bufferedPacket : this .bufferedPackets ) {
136- ctx .fireChannelRead (Unpooled .wrappedBuffer (bufferedPacket ));
137- }
138- ctx .pipeline ().remove (this );
139- } else {
140- super .write (ctx , msg , promise );
141- }
142- } else {
143- super .write (ctx , msg , promise );
144- }
145- }
146-
147- });
14898 }
14999
150100 });
0 commit comments