diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java b/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java index c7c6e01..8364a7d 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java @@ -2,6 +2,7 @@ package me.lojosho.hibiscuscommons.nms; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.IntList; +import me.lojosho.hibiscuscommons.packets.BundledRidingData; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Location; @@ -104,5 +105,9 @@ public interface NMSPackets { void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List sendTo); + default void sendBundledRidingPacket(BundledRidingData packet, List sendTo) { + + } + Object createMountPacket(int entityId, int[] passengerIds); } diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/BundledRidingData.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/BundledRidingData.java new file mode 100644 index 0000000..19fd395 --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/BundledRidingData.java @@ -0,0 +1,37 @@ +package me.lojosho.hibiscuscommons.packets; + +import me.lojosho.hibiscuscommons.nms.NMSHandlers; +import org.bukkit.entity.Player; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class BundledRidingData { + + private final LinkedHashMap> QUEUED_PACKETS = new LinkedHashMap<>(); + + public BundledRidingData() { + + } + + public void add(int owner, int passenger) { + add(owner, List.of(passenger)); + } + + public void add(int owner, List passengers) { + QUEUED_PACKETS.put(owner, passengers); + } + + public Map> getQueued() { + return QUEUED_PACKETS; + } + + /** + * To be sent all at once to the players specified. + */ + public void send(List sendTo) { + NMSHandlers.getHandler().getPacketHandler().sendBundledRidingPacket(this, sendTo); + } + +} diff --git a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSCommon.java b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSCommon.java index 5d876d7..4aabdc7 100644 --- a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSCommon.java +++ b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSCommon.java @@ -30,4 +30,10 @@ public class NMSCommon { } }); } + + public void sendPacketSync(@NotNull Player player, @NotNull Packet packet) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayerConnection connection = serverPlayer.connection; + connection.send(packet); + } } diff --git a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java index bc540a1..2da963a 100644 --- a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java +++ b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java @@ -282,7 +282,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of(); - for (Player p : sendTo) sendPacket(p, packet); + for (Player p : sendTo) sendPacketSync(p, packet); } @Override diff --git a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSCommon.java b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSCommon.java index f56884e..722e8a5 100644 --- a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSCommon.java +++ b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSCommon.java @@ -30,4 +30,10 @@ public class NMSCommon { } }); } + + public void sendPacketSync(@NotNull Player player, @NotNull Packet packet) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayerConnection connection = serverPlayer.connection; + connection.send(packet); + } } diff --git a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java index 1fd482a..42ec3b0 100644 --- a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java +++ b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java @@ -282,7 +282,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of(); - for (Player p : sendTo) sendPacket(p, packet); + for (Player p : sendTo) sendPacketSync(p, packet); } @Override diff --git a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSCommon.java b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSCommon.java index e5c6251..718fabd 100644 --- a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSCommon.java +++ b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSCommon.java @@ -30,4 +30,10 @@ public class NMSCommon { } }); } + + public void sendPacketSync(@NotNull Player player, @NotNull Packet packet) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayerConnection connection = serverPlayer.connection; + connection.send(packet); + } } diff --git a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java index de40c33..57b65e6 100644 --- a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java +++ b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java @@ -283,7 +283,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of(); - for (Player p : sendTo) sendPacket(p, packet); + for (Player p : sendTo) sendPacketSync(p, packet); } @Override diff --git a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSCommon.java b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSCommon.java index 6243a8a..432c669 100644 --- a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSCommon.java +++ b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSCommon.java @@ -30,4 +30,10 @@ public class NMSCommon { } }); } + + public void sendPacketSync(@NotNull Player player, @NotNull Packet packet) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayerConnection connection = serverPlayer.connection; + connection.send(packet); + } } diff --git a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java index f492de9..fe1ac07 100644 --- a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java +++ b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java @@ -285,7 +285,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of(); - for (Player p : sendTo) sendPacket(p, packet); + for (Player p : sendTo) sendPacketSync(p, packet); } @Override diff --git a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSCommon.java b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSCommon.java index db885dd..1ce5f4d 100644 --- a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSCommon.java +++ b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSCommon.java @@ -30,4 +30,10 @@ public class NMSCommon { } }); } + + public void sendPacketSync(@NotNull Player player, @NotNull Packet packet) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayerConnection connection = serverPlayer.connection; + connection.send(packet); + } } diff --git a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java index c1bcd86..a509b80 100644 --- a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java +++ b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java @@ -285,7 +285,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of(); - for (Player p : sendTo) sendPacket(p, packet); + for (Player p : sendTo) sendPacketSync(p, packet); } @Override diff --git a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSCommon.java b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSCommon.java index de8bf0e..cc81756 100644 --- a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSCommon.java +++ b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSCommon.java @@ -30,4 +30,10 @@ public class NMSCommon { } }); } + + public void sendPacketSync(@NotNull Player player, @NotNull Packet packet) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayerConnection connection = serverPlayer.connection; + connection.send(packet); + } } diff --git a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java index 8bb01ef..83672a6 100644 --- a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java +++ b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java @@ -10,6 +10,7 @@ import com.mojang.serialization.JsonOps; import io.papermc.paper.adventure.PaperAdventure; import it.unimi.dsi.fastutil.ints.IntList; import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin; +import me.lojosho.hibiscuscommons.packets.BundledRidingData; import me.lojosho.hibiscuscommons.util.AdventureUtils; import me.lojosho.hibiscuscommons.util.MessagesUtil; import net.kyori.adventure.text.Component; @@ -282,7 +283,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of(); - for (Player p : sendTo) sendPacket(p, packet); + for (Player p : sendTo) sendPacketSync(p, packet); } @Override @@ -562,4 +563,16 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket)); sendPacket(sendTo, bundlePacket); } + + @Override + public void sendBundledRidingPacket(BundledRidingData packet, List sendTo) { + List packets = new ArrayList<>(); + for (Map.Entry> entry : packet.getQueued().entrySet()) { + packets.add((ClientboundSetPassengersPacket) createMountPacket(entry.getKey(), entry.getValue().stream() + .mapToInt(Integer::intValue) + .toArray())); + } + ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.copyOf(packets)); + sendPacket(sendTo, bundlePacket); + } }