mirror of
https://github.com/architectury/architectury-api.git
synced 2026-04-01 21:17:45 -05:00
Add support for PacketTransformer and a SplitPacketTransformer (#142)
* Add support for PacketTransformer and a SplitPacketTransformer * Add testmod and make it work * Add experimental, Remove generics, they are pointless
This commit is contained in:
@@ -27,9 +27,9 @@ import dev.architectury.test.debug.client.ClientOverlayMessageSink;
|
||||
import dev.architectury.test.entity.TestEntity;
|
||||
import dev.architectury.test.events.DebugEvents;
|
||||
import dev.architectury.test.gamerule.TestGameRules;
|
||||
import dev.architectury.test.item.TestBlockInteractions;
|
||||
import dev.architectury.test.networking.TestModNet;
|
||||
import dev.architectury.test.particle.TestParticles;
|
||||
import dev.architectury.test.item.TestBlockInteractions;
|
||||
import dev.architectury.test.registry.TestRegistries;
|
||||
import dev.architectury.test.registry.client.TestKeybinds;
|
||||
import dev.architectury.test.tags.TestTags;
|
||||
@@ -62,6 +62,7 @@ public class TestMod {
|
||||
@Environment(EnvType.CLIENT)
|
||||
public static void initializeClient() {
|
||||
TestKeybinds.initialize();
|
||||
TestModNet.initializeClient();
|
||||
EntityRendererRegistry.register(TestEntity.TYPE, context ->
|
||||
new MinecartRenderer<>(context, ModelLayers.MINECART));
|
||||
}
|
||||
|
||||
@@ -19,9 +19,18 @@
|
||||
|
||||
package dev.architectury.test.networking;
|
||||
|
||||
import dev.architectury.event.events.client.ClientPlayerEvent;
|
||||
import dev.architectury.networking.NetworkManager;
|
||||
import dev.architectury.networking.simple.MessageType;
|
||||
import dev.architectury.networking.simple.SimpleNetworkManager;
|
||||
import dev.architectury.networking.transformers.SplitPacketTransformer;
|
||||
import dev.architectury.test.TestMod;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public interface TestModNet {
|
||||
SimpleNetworkManager NET = SimpleNetworkManager.create(TestMod.MOD_ID);
|
||||
@@ -31,7 +40,33 @@ public interface TestModNet {
|
||||
|
||||
// An example Server to Client message
|
||||
MessageType SYNC_DATA = NET.registerS2C("sync_data", SyncDataMessage::new);
|
||||
ResourceLocation BIG_DATA = new ResourceLocation(TestMod.MOD_ID, "big_data");
|
||||
String BIG_STRING = StringUtils.repeat('a', 60000);
|
||||
|
||||
static void initialize() {
|
||||
NetworkManager.registerReceiver(NetworkManager.Side.C2S, BIG_DATA, Collections.singletonList(new SplitPacketTransformer()), (buf, context) -> {
|
||||
String utf = buf.readUtf(Integer.MAX_VALUE / 4);
|
||||
if (utf.equals(BIG_STRING)) {
|
||||
TestMod.SINK.accept("Network Split Packets worked");
|
||||
} else {
|
||||
throw new AssertionError(utf);
|
||||
}
|
||||
utf = buf.readUtf(Integer.MAX_VALUE / 4);
|
||||
if (utf.equals(BIG_STRING)) {
|
||||
TestMod.SINK.accept("Network Split Packets worked");
|
||||
} else {
|
||||
throw new AssertionError(utf);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static void initializeClient() {
|
||||
ClientPlayerEvent.CLIENT_PLAYER_JOIN.register(player -> {
|
||||
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
|
||||
buf.writeUtf(BIG_STRING, Integer.MAX_VALUE / 4);
|
||||
// write twice
|
||||
buf.writeUtf(BIG_STRING, Integer.MAX_VALUE / 4);
|
||||
NetworkManager.sendToServer(BIG_DATA, buf);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user