Skip to content

Commit 38bbd76

Browse files
authored
Fixed creation of packet bundles (#2383)
1 parent 2931af5 commit 38bbd76

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/main/java/com/comphenix/protocol/injector/packet/PacketRegistry.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,9 @@ public static Optional<Class<?>> tryGetPacketClass(PacketType type) {
363363
// Try the lookup first (may be null, so check contains)
364364
Optional<Class<?>> res = REGISTER.typeToClass.get(type);
365365
if (res != null) {
366+
if(res.isPresent() && MinecraftReflection.isBundleDelimiter(res.get())) {
367+
return MinecraftReflection.getPackedBundlePacketClass();
368+
}
366369
return res;
367370
}
368371

@@ -375,6 +378,9 @@ public static Optional<Class<?>> tryGetPacketClass(PacketType type) {
375378

376379
// cache it for next time
377380
associate(type, clazz);
381+
if(clazz != null && MinecraftReflection.isBundleDelimiter(clazz)) {
382+
clazz = MinecraftReflection.getPackedBundlePacketClass().orElseThrow(() -> new IllegalStateException("Packet bundle class not found."));
383+
}
378384
return Optional.ofNullable(clazz);
379385
}
380386

src/test/java/com/comphenix/protocol/PacketTypeTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.comphenix.protocol.PacketType.Sender;
2323
import com.comphenix.protocol.events.PacketContainer;
2424
import com.comphenix.protocol.injector.packet.PacketRegistry;
25+
import com.comphenix.protocol.utility.MinecraftReflection;
2526
import com.comphenix.protocol.utility.MinecraftReflectionTestUtil;
2627
import java.lang.reflect.Field;
2728
import java.util.ArrayList;
@@ -31,6 +32,9 @@
3132
import java.util.Map.Entry;
3233
import java.util.Set;
3334
import java.util.TreeMap;
35+
36+
import com.comphenix.protocol.wrappers.BukkitConverters;
37+
import com.comphenix.protocol.wrappers.WrappedChatComponent;
3438
import net.minecraft.network.EnumProtocol;
3539
import net.minecraft.network.protocol.EnumProtocolDirection;
3640
import net.minecraft.network.protocol.login.PacketLoginInStart;
@@ -357,4 +361,17 @@ public void testPacketCreation() {
357361
}
358362
assertFalse(fail, "Packet type(s) failed to instantiate");
359363
}
364+
365+
@Test
366+
public void testPacketBundleWriting() {
367+
PacketContainer bundlePacket = new PacketContainer(PacketType.Play.Server.BUNDLE);
368+
assertEquals(MinecraftReflection.getPackedBundlePacketClass().orElseThrow(() -> new IllegalStateException("Packet Bundle class is not present")), bundlePacket.getHandle().getClass());
369+
List<PacketContainer> bundle = new ArrayList<>();
370+
371+
PacketContainer chatMessage = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
372+
chatMessage.getStrings().write(0, WrappedChatComponent.fromText("Test").getJson());
373+
chatMessage.getBooleans().write(0, false);
374+
bundle.add(chatMessage);
375+
bundlePacket.getPacketBundles().write(0, bundle);
376+
}
360377
}

0 commit comments

Comments
 (0)