Skip to content

Commit 7434671

Browse files
committed
Moved Kas-tle/Network into ViaProxy and Cloudburst/Network into this plugin
1 parent 5bdfe75 commit 7434671

File tree

4 files changed

+39
-73
lines changed

4 files changed

+39
-73
lines changed

build.gradle

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ configurations {
1010
}
1111

1212
repositories {
13+
maven {
14+
name = "OpenCollab Releases"
15+
url = "https://repo.opencollab.dev/maven-releases"
16+
17+
content {
18+
includeGroupByRegex "org\\.cloudburstmc(\\..+)?"
19+
}
20+
}
21+
maven {
22+
name = "OpenCollab Snapshots"
23+
url = "https://repo.opencollab.dev/maven-snapshots"
24+
25+
content {
26+
includeGroupByRegex "org\\.cloudburstmc(\\..+)?"
27+
}
28+
}
1329
maven {
1430
name = "Jitpack"
1531
url = "https://jitpack.io"
@@ -33,15 +49,15 @@ dependencies {
3349
exclude group: "org.apache.logging.log4j"
3450
exclude group: "io.netty"
3551
}
36-
repackagedIncludeInJar("dev.kastle.netty:netty-transport-raknet:1.3.0") {
52+
repackagedIncludeInJar("org.cloudburstmc.netty:netty-transport-raknet:1.0.0.CR3-20251031.125212-22") {
3753
transitive = false
3854
}
3955
}
4056

4157
dependencyRepackager {
4258
configuration = configurations.repackagedIncludeInJar
4359
relocations = [
44-
"org.cloudburstmc.netty": "dev.kastle.netty"
60+
"org.cloudburstmc.netty": "org.cloudburstmc.upstream.netty"
4561
]
4662
removeEmptyDirs = true
4763
}

src/main/java/net/raphimc/raknetproviders/RakNetBackend.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public enum RakNetBackend {
2121

2222
SANDERTV_GO_RAKNET("[Go] Sandertv/go-raknet"), // https://github.com/Sandertv/go-raknet
2323
EXTREMEHEAT_FB_RAKNET("[C++] extremeheat/fb-raknet"), // https://github.com/extremeheat/fb-raknet
24-
CLOUDBURSTMC_NETWORK("[Java] CloudburstMC/Network (default)"), // https://github.com/CloudburstMC/Network
25-
KASTLE_NETWORK("[Java] Kas-tle/Network (best)"), // https://github.com/Kas-tle/Network
24+
CLOUDBURSTMC_NETWORK("[Java] CloudburstMC/Network"), // https://github.com/CloudburstMC/Network
25+
KASTLE_NETWORK("[Java] Kas-tle/Network (default)"), // https://github.com/Kas-tle/NetworkCompatible
2626
RELATIVITYMC_NETTY_RAKNET("[Java] RelativityMC/netty-raknet"), // https://github.com/RelativityMC/netty-raknet
2727
WHIRVIS_JRAKNET("[Java] whirvis/JRakNet (bad)"), // https://github.com/telecran-telecrit/JRakNet
2828
B23R0_RUST_RAKNET("[Rust] b23r0/rust-raknet"), // https://github.com/b23r0/rust-raknet

src/main/java/net/raphimc/raknetproviders/RakNetProviders.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import net.lenni0451.reflect.stream.RStream;
2424
import net.raphimc.raknetproviders.b23r0_rust_raknet.B23R0RustRakNet;
2525
import net.raphimc.raknetproviders.b23r0_rust_raknet.B23R0RustRakNetBedrockProxyConnection;
26+
import net.raphimc.raknetproviders.cloudburst_network.CloudburstNetworkBedrockProxyConnection;
2627
import net.raphimc.raknetproviders.extremeheat_fb_raknet.ExtremeheatFbRakNet;
2728
import net.raphimc.raknetproviders.extremeheat_fb_raknet.ExtremeheatFbRakNetBedrockProxyConnection;
28-
import net.raphimc.raknetproviders.kastle_network.KastleNetworkBedrockProxyConnection;
2929
import net.raphimc.raknetproviders.relativitymc_netty_raknet.RelativityMcNettyRakNetBedrockProxyConnection;
3030
import net.raphimc.raknetproviders.sandertv_go_raknet.SanderTvGoRakNet;
3131
import net.raphimc.raknetproviders.sandertv_go_raknet.SanderTvGoRakNetBedrockProxyConnection;
@@ -108,14 +108,14 @@ public void onProxySessionCreation(final ProxySessionCreationEvent event) {
108108
if (ExtremeheatFbRakNet.isLoaded()) {
109109
event.setProxySession(new ExtremeheatFbRakNetBedrockProxyConnection(Objects.cast(bedrockProxyConnection, ExtremeheatFbRakNetBedrockProxyConnection.class)));
110110
} else {
111-
Logger.LOGGER.warn("EXTREMEHEAT_FB_RAKNET is not supported on this system, falling back to CLOUDBURST_NETWORK");
111+
Logger.LOGGER.warn("EXTREMEHEAT_FB_RAKNET is not supported on this system, falling back to KASTLE_NETWORK");
112112
}
113113
}
114-
case CLOUDBURSTMC_NETWORK -> {
114+
case KASTLE_NETWORK -> {
115115
// default implementation
116116
}
117-
case KASTLE_NETWORK -> {
118-
event.setProxySession(new KastleNetworkBedrockProxyConnection(Objects.cast(bedrockProxyConnection, KastleNetworkBedrockProxyConnection.class)));
117+
case CLOUDBURSTMC_NETWORK -> {
118+
event.setProxySession(new CloudburstNetworkBedrockProxyConnection(Objects.cast(bedrockProxyConnection, CloudburstNetworkBedrockProxyConnection.class)));
119119
}
120120
case RELATIVITYMC_NETTY_RAKNET -> {
121121
event.setProxySession(new RelativityMcNettyRakNetBedrockProxyConnection(Objects.cast(bedrockProxyConnection, RelativityMcNettyRakNetBedrockProxyConnection.class)));
@@ -127,14 +127,14 @@ public void onProxySessionCreation(final ProxySessionCreationEvent event) {
127127
if (SanderTvGoRakNet.isLoaded()) {
128128
event.setProxySession(new SanderTvGoRakNetBedrockProxyConnection(Objects.cast(bedrockProxyConnection, SanderTvGoRakNetBedrockProxyConnection.class)));
129129
} else {
130-
Logger.LOGGER.warn("SANDERTV_GO_RAKNET is not supported on this system, falling back to CLOUDBURST_NETWORK");
130+
Logger.LOGGER.warn("SANDERTV_GO_RAKNET is not supported on this system, falling back to KASTLE_NETWORK");
131131
}
132132
}
133133
case B23R0_RUST_RAKNET -> {
134134
if (B23R0RustRakNet.isLoaded()) {
135135
event.setProxySession(new B23R0RustRakNetBedrockProxyConnection(Objects.cast(bedrockProxyConnection, B23R0RustRakNetBedrockProxyConnection.class)));
136136
} else {
137-
Logger.LOGGER.warn("B23R0_RUST_RAKNET is not supported on this system, falling back to CLOUDBURST_NETWORK");
137+
Logger.LOGGER.warn("B23R0_RUST_RAKNET is not supported on this system, falling back to KASTLE_NETWORK");
138138
}
139139
}
140140
}

src/main/java/net/raphimc/raknetproviders/kastle_network/KastleNetworkBedrockProxyConnection.java renamed to src/main/java/net/raphimc/raknetproviders/cloudburst_network/CloudburstNetworkBedrockProxyConnection.java

Lines changed: 12 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,39 +15,35 @@
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

2020
import 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;
2621
import 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;
3126
import io.netty.channel.socket.DatagramChannel;
3227
import io.netty.handler.codec.MessageToMessageCodec;
33-
import net.lenni0451.reflect.stream.RStream;
3428
import net.raphimc.netminecraft.constants.ConnectionState;
3529
import net.raphimc.netminecraft.util.EventLoops;
3630
import net.raphimc.netminecraft.util.TransportType;
3731
import 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;
4032
import net.raphimc.viaproxy.ViaProxy;
4133
import net.raphimc.viaproxy.proxy.session.BedrockProxyConnection;
4234
import 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;
4541
import java.util.List;
4642
import 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

Comments
 (0)