9
0
mirror of https://github.com/HibiscusMC/HibiscusCommons.git synced 2025-12-19 15:09:26 +00:00

fix: make mount packet sending sync to prevent problems with the backpack staying on the player

This commit is contained in:
Logan
2025-09-08 14:34:05 -05:00
parent 90f6a2a3f2
commit 3c107b51ca
14 changed files with 97 additions and 6 deletions

View File

@@ -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<Player> sendTo);
default void sendBundledRidingPacket(BundledRidingData packet, List<Player> sendTo) {
}
Object createMountPacket(int entityId, int[] passengerIds);
}

View File

@@ -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<Integer, List<Integer>> QUEUED_PACKETS = new LinkedHashMap<>();
public BundledRidingData() {
}
public void add(int owner, int passenger) {
add(owner, List.of(passenger));
}
public void add(int owner, List<Integer> passengers) {
QUEUED_PACKETS.put(owner, passengers);
}
public Map<Integer, List<Integer>> getQueued() {
return QUEUED_PACKETS;
}
/**
* To be sent all at once to the players specified.
*/
public void send(List<Player> sendTo) {
NMSHandlers.getHandler().getPacketHandler().sendBundledRidingPacket(this, sendTo);
}
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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<Player> sendTo) {
List<ClientboundSetPassengersPacket> packets = new ArrayList<>();
for (Map.Entry<Integer, List<Integer>> 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);
}
}