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

feat: tomfollery with backpacks, external and regular backpacks appear to work now, but first-person backpacks are still experiencing jank

This commit is contained in:
Logan
2025-09-07 21:35:37 -05:00
parent 732c3de0d8
commit c2b787c97c
2 changed files with 18 additions and 18 deletions

View File

@@ -78,20 +78,10 @@ public class CosmeticBackpackType extends Cosmetic {
if (Settings.isBackpackForceRidingEnabled()) HMCCPacketManager.sendRidingPacket(entity.getEntityId(), firstArmorStandId, entityManager.getViewers());
else HMCCPacketManager.sendRidingPacket(entity.getEntityId(), firstArmorStandId, outsideViewers);
if (!user.isInWardrobe() && isFirstPersonCompadible() && user.getPlayer() != null) {
if (isFirstPersonCompadible() && !user.isInWardrobe() && user.getPlayer() != null) {
List<Player> owner = List.of(user.getPlayer());
ArrayList<Integer> particleCloud = backpackManager.getAreaEffectEntityId();
/*
// Was playing around with an alternative way to handle the backpacks with it all being one long passenger list,
// however, that does not work, it's just a really up there backpack
areaCloud.add(user.getUserBackpackManager().getFirstArmorStandId());
int[] passengers = areaCloud
.stream()
.mapToInt(Integer::intValue)
.toArray();
PacketManager.sendRidingPacket(entity.getEntityId(), passengers, owner);
*/
for (int i = 0; i < particleCloud.size(); i++) {
if (i == 0) {
HMCCPacketManager.sendRidingPacket(entity.getEntityId(), particleCloud.get(i), owner);
@@ -99,7 +89,7 @@ public class CosmeticBackpackType extends Cosmetic {
HMCCPacketManager.sendRidingPacket(particleCloud.get(i - 1), particleCloud.get(i) , owner);
}
}
HMCCPacketManager.sendRidingPacket(particleCloud.get(particleCloud.size() - 1), firstArmorStandId, owner);
HMCCPacketManager.sendRidingPacket(particleCloud.getLast(), firstArmorStandId, owner);
if (!user.isHidden()) {
//if (loc.getPitch() < -70) NMSHandlers.getHandler().equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, new ItemStack(Material.AIR), owner);
//else NMSHandlers.getHandler().equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, firstPersonBackpack, owner);

View File

@@ -5,6 +5,7 @@ import com.hibiscusmc.hmccosmetics.config.Settings;
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic;
import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot;
import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticArmorType;
import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBackpackType;
import com.hibiscusmc.hmccosmetics.gui.Menu;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.user.CosmeticUsers;
@@ -124,28 +125,37 @@ public class CosmeticPacketInterface implements PacketInterface {
@Override
public @NotNull PacketAction writePassengerContent(@NotNull Player player, @NotNull PassengerWrapper wrapper) {
//return PacketAction.NOTHING;
// TODO: Figure out what to do with this, because with it in, it ruins backpacks (they keep getting thrown to random locations).
// Appears to work fine atm?
CosmeticUser viewerUser = CosmeticUsers.getUser(player);
if (viewerUser == null || viewerUser.isInWardrobe()) return PacketAction.NOTHING;
int ownerId = wrapper.getOwner();
List<Integer> originalPassengers = wrapper.getPassengers();
MessagesUtil.sendDebugMessages("Mount Packet Read - EntityID: " + ownerId);
//MessagesUtil.sendDebugMessages("Mount Packet Read - EntityID: " + ownerId);
Optional<CosmeticUser> optionalCosmeticUser = CosmeticUsers.values().stream().filter(user -> user.getPlayer() != null).filter(user -> ownerId == user.getPlayer().getEntityId()).findFirst();
if (optionalCosmeticUser.isEmpty()) return PacketAction.NOTHING;
CosmeticUser user = optionalCosmeticUser.get();
MessagesUtil.sendDebugMessages("Mount Packet Sent - " + user.getUniqueId());
//MessagesUtil.sendDebugMessages("Mount Packet Sent - " + user.getUniqueId());
Cosmetic backpackCosmetic = user.getCosmetic(CosmeticSlot.BACKPACK);
if (backpackCosmetic == null) return PacketAction.NOTHING;
if (!(backpackCosmetic instanceof CosmeticBackpackType cosmeticBackpackType)) return PacketAction.NOTHING;
if (user.getUniqueId().equals(viewerUser.getUniqueId())) {
if (cosmeticBackpackType.isFirstPersonCompadible()) return PacketAction.NOTHING;
}
if (!user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) return PacketAction.NOTHING;
if (user.getUserBackpackManager() == null) return PacketAction.NOTHING;
List<Integer> passengers = new ArrayList<>(user.getUserBackpackManager().getEntityManager().getIds());
passengers.addAll(originalPassengers);
// Prevent duplicates
for (int i : originalPassengers) {
if (passengers.contains(i)) continue;
passengers.add(i);
}
wrapper.setPassengers(passengers);
MessagesUtil.sendDebugMessages("Passenger List: " + passengers + " (origin/destination) " + user.getUniqueId().equals(viewerUser.getUniqueId()));
return PacketAction.CHANGED;
}