9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2025-12-29 11:59:21 +00:00

feat: player teleport when entering wardrobe, allows better support for long distance wardrobes

This commit is contained in:
LoJoSho
2023-12-17 22:41:12 -06:00
parent a136b95451
commit 9b85fd2d8c
4 changed files with 10 additions and 3 deletions

View File

@@ -50,7 +50,7 @@ public class PlayerConnectionListener implements Listener {
public void onPlayerQuit(@NotNull PlayerQuitEvent event) {
CosmeticUser user = CosmeticUsers.getUser(event.getPlayer());
if (user == null) return; // Player never initialized, don't do anything
if (user.isInWardrobe()) user.leaveWardrobe();
if (user.isInWardrobe()) user.leaveWardrobe(true);
if (user.getUserEmoteManager().isPlayingEmote()) {
user.getUserEmoteManager().stopEmote(UserEmoteManager.StopEmoteReason.CONNECTION);
event.getPlayer().setInvisible(false);

View File

@@ -125,6 +125,7 @@ public class PlayerGameListener implements Listener {
}
Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> {
if (user.getEntity() == null) return; // fixes disconnecting when in wardrobe
if (user.hasCosmeticInSlot(CosmeticSlot.BACKPACK) && user.getUserBackpackManager() != null) {
user.respawnBackpack();
}

View File

@@ -332,6 +332,10 @@ public class CosmeticUser {
}
public void leaveWardrobe() {
leaveWardrobe(false);
}
public void leaveWardrobe(boolean disconnecting) {
PlayerWardrobeLeaveEvent event = new PlayerWardrobeLeaveEvent(this);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
@@ -342,7 +346,7 @@ public class CosmeticUser {
getWardrobeManager().setWardrobeStatus(UserWardrobeManager.WardrobeStatus.STOPPING);
if (WardrobeSettings.isEnabledTransition()) {
if (WardrobeSettings.isEnabledTransition() && !disconnecting) {
MessagesUtil.sendTitle(
getPlayer(),
WardrobeSettings.getTransitionText(),

View File

@@ -25,6 +25,7 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
@@ -105,6 +106,7 @@ public class UserWardrobeManager {
PacketManager.sendLookPacket(ARMORSTAND_ID, viewingLocation, viewer);
// Player
user.getPlayer().teleport(viewingLocation, PlayerTeleportEvent.TeleportCause.PLUGIN);
PacketManager.gamemodeChangePacket(player, 3);
PacketManager.sendCameraPacket(ARMORSTAND_ID, viewer);
@@ -239,7 +241,7 @@ public class UserWardrobeManager {
//PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), player.getEntityId(), viewer);
}
player.teleport(Objects.requireNonNullElseGet(exitLocation, () -> player.getWorld().getSpawnLocation()));
player.teleport(Objects.requireNonNullElseGet(exitLocation, () -> player.getWorld().getSpawnLocation()), PlayerTeleportEvent.TeleportCause.PLUGIN);
if (WardrobeSettings.isEquipPumpkin()) {
NMSHandlers.getHandler().equipmentSlotUpdate(user.getPlayer().getEntityId(), EquipmentSlot.HEAD, player.getInventory().getHelmet(), viewer);