From 1b802861e385db01b7bb2f425da70cd9538f537d Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Sat, 7 Jan 2023 12:08:59 -0600 Subject: [PATCH] Begun working on transitions --- .../hmccosmetics/config/WardrobeSettings.java | 22 ++++ .../hmccosmetics/user/CosmeticUser.java | 6 +- .../hmccosmetics/user/Wardrobe.java | 114 ++++++++++-------- .../hmccosmetics/util/MessagesUtil.java | 12 ++ common/src/main/resources/config.yml | 4 + 5 files changed, 106 insertions(+), 52 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/WardrobeSettings.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/WardrobeSettings.java index a53817c0..b6104927 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/WardrobeSettings.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/WardrobeSettings.java @@ -35,6 +35,10 @@ public class WardrobeSettings { private static final String BOSSBAR_PROGRESS_PATH = "progress"; private static final String BOSSBAR_OVERLAY_PATH = "overlay"; private static final String BOSSBAR_COLOR_PATH = "color"; + private static final String TRANSITION_PATH = "transition"; + private static final String TRANSITION_ENABLE_PATH = "enabled"; + private static final String TRANSITION_DELAY_PATH = "delay"; + private static final String TRANSITION_TEXT_PATH = "text"; private static ConfigurationNode configRoot; private static boolean disableOnDamage; @@ -56,6 +60,9 @@ public class WardrobeSettings { private static String bossbarMessage; private static BossBar.Overlay bossbarOverlay; private static BossBar.Color bossbarColor; + private static boolean enabledTransition; + private static String transitionText; + private static int transitionDelay; public static void load(ConfigurationNode source) { configRoot = source; @@ -88,6 +95,10 @@ public class WardrobeSettings { bossbarColor = BossBar.Color.YELLOW; } + ConfigurationNode transitionNode = source.node(TRANSITION_PATH); + enabledTransition = transitionNode.node(TRANSITION_ENABLE_PATH).getBoolean(false); + transitionText = transitionNode.node(TRANSITION_TEXT_PATH).getString(""); + transitionDelay = transitionNode.node(TRANSITION_DELAY_PATH).getInt(1); try { wardrobeLocation = LocationSerializer.INSTANCE.deserialize(Location.class, source.node(STATIC_LOCATION_PATH)); @@ -186,6 +197,17 @@ public class WardrobeSettings { public static BossBar.Color getBossbarColor() { return bossbarColor; } + public static boolean isEnabledTransition() { + return enabledTransition; + } + + public static String getTransitionText() { + return transitionText; + } + + public static int getTransitionDelay() { + return transitionDelay; + } public static void setWardrobeLocation(Location newLocation) { wardrobeLocation = newLocation; diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java index 0cd0b124..5cca2f4e 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -199,8 +199,10 @@ public class CosmeticUser { return; } - wardrobe = new Wardrobe(this); - wardrobe.start(); + if (wardrobe == null) { + wardrobe = new Wardrobe(this); + wardrobe.start(); + } } public Wardrobe getWardrobe() { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/Wardrobe.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/Wardrobe.java index e508f529..187c229e 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/Wardrobe.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/Wardrobe.java @@ -22,6 +22,8 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.List; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; @@ -49,9 +51,6 @@ public class Wardrobe { public void start() { Player player = VIEWER.getPlayer(); - MessagesUtil.sendDebugMessages("start"); - MessagesUtil.sendDebugMessages("NPC ID " + NPC_ID); - MessagesUtil.sendDebugMessages("armorstand id " + ARMORSTAND_ID); this.originalGamemode = player.getGameMode(); if (WardrobeSettings.isReturnLastLocation()) { @@ -60,62 +59,77 @@ public class Wardrobe { this.exitLocation = WardrobeSettings.getLeaveLocation(); } + viewingLocation = WardrobeSettings.getViewerLocation(); + npcLocation = WardrobeSettings.getWardrobeLocation(); + VIEWER.hidePlayer(); List viewer = List.of(player); - // Armorstand - PacketManager.sendEntitySpawnPacket(WardrobeSettings.getViewerLocation(), ARMORSTAND_ID, EntityType.ARMOR_STAND, UUID.randomUUID(), viewer); - PacketManager.sendInvisibilityPacket(ARMORSTAND_ID, viewer); - PacketManager.sendLookPacket(ARMORSTAND_ID, WardrobeSettings.getViewerLocation(), viewer); - // Player - PacketManager.gamemodeChangePacket(player, 3); - PacketManager.sendCameraPacket(ARMORSTAND_ID, viewer); + Runnable run = () -> { + // Armorstand + PacketManager.sendEntitySpawnPacket(viewingLocation, ARMORSTAND_ID, EntityType.ARMOR_STAND, UUID.randomUUID(), viewer); + PacketManager.sendInvisibilityPacket(ARMORSTAND_ID, viewer); + PacketManager.sendLookPacket(ARMORSTAND_ID, viewingLocation, viewer); - // NPC - npcName = "WardrobeNPC-" + NPC_ID; - while (npcName.length() > 16) { - npcName = npcName.substring(16); - } - PacketManager.sendFakePlayerInfoPacket(player, NPC_ID, WARDROBE_UUID, npcName, viewer); + // Player + PacketManager.gamemodeChangePacket(player, 3); + PacketManager.sendCameraPacket(ARMORSTAND_ID, viewer); - // NPC 2 - Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> { - PacketManager.sendFakePlayerSpawnPacket(WardrobeSettings.getWardrobeLocation(), WARDROBE_UUID, NPC_ID, viewer); - MessagesUtil.sendDebugMessages("Spawned Fake Player on " + WardrobeSettings.getWardrobeLocation()); - NMSHandlers.getHandler().hideNPCName(player, npcName); - }, 4); + // NPC + npcName = "WardrobeNPC-" + NPC_ID; + while (npcName.length() > 16) { + npcName = npcName.substring(16); + } + PacketManager.sendFakePlayerInfoPacket(player, NPC_ID, WARDROBE_UUID, npcName, viewer); - // Location - PacketManager.sendLookPacket(NPC_ID, WardrobeSettings.getWardrobeLocation(), viewer); - PacketManager.sendRotationPacket(NPC_ID, WardrobeSettings.getWardrobeLocation(), true, viewer); + // NPC 2 + Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> { + PacketManager.sendFakePlayerSpawnPacket(npcLocation, WARDROBE_UUID, NPC_ID, viewer); + MessagesUtil.sendDebugMessages("Spawned Fake Player on " + npcLocation); + NMSHandlers.getHandler().hideNPCName(player, npcName); + }, 4); - // Misc - if (VIEWER.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { - PacketManager.ridingMountPacket(NPC_ID, VIEWER.getBackpackEntity().getEntityId(), viewer); + // Location + PacketManager.sendLookPacket(NPC_ID, npcLocation, viewer); + PacketManager.sendRotationPacket(NPC_ID, npcLocation, true, viewer); + + // Misc + if (VIEWER.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { + PacketManager.ridingMountPacket(NPC_ID, VIEWER.getBackpackEntity().getEntityId(), viewer); + } + + if (VIEWER.hasCosmeticInSlot(CosmeticSlot.BALLOON)) { + PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), -1, viewer); + PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), NPC_ID, viewer); // This needs a possible fix + //PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getModelId(), NPC_ID, viewer); + + PacketManager.sendTeleportPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), npcLocation.clone().add(Settings.getBalloonOffset()), false, viewer); + PacketManager.sendTeleportPacket(VIEWER.getBalloonEntity().getModelId(), npcLocation.clone().add(Settings.getBalloonOffset()), false, viewer); + } + + if (WardrobeSettings.getEnabledBossbar()) { + float progress = WardrobeSettings.getBossbarProgress(); + Component message = MessagesUtil.processStringNoKey(WardrobeSettings.getBossbarText()); + + bossBar = BossBar.bossBar(message, progress, WardrobeSettings.getBossbarColor(), WardrobeSettings.getBossbarOverlay()); + Audience target = BukkitAudiences.create(HMCCosmeticsPlugin.getInstance()).player(player); + + target.showBossBar(bossBar); + } + + MessagesUtil.sendMessage(player, "opened-wardrobe"); + this.active = true; + update(); + }; + + + if (WardrobeSettings.isEnabledTransition()) { + MessagesUtil.sendTitle(VIEWER.getPlayer(), WardrobeSettings.getTransitionText()); + Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), run, 40); + } else { + run.run(); } - if (VIEWER.hasCosmeticInSlot(CosmeticSlot.BALLOON)) { - PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), -1, viewer); - PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), NPC_ID, viewer); // This needs a possible fix - //PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getModelId(), NPC_ID, viewer); - - PacketManager.sendTeleportPacket(VIEWER.getBalloonEntity().getPufferfishBalloonId(), WardrobeSettings.getWardrobeLocation().add(Settings.getBalloonOffset()), false, viewer); - PacketManager.sendTeleportPacket(VIEWER.getBalloonEntity().getModelId(), WardrobeSettings.getWardrobeLocation().add(Settings.getBalloonOffset()), false, viewer); - } - - if (WardrobeSettings.getEnabledBossbar()) { - float progress = WardrobeSettings.getBossbarProgress(); - Component message = MessagesUtil.processStringNoKey(WardrobeSettings.getBossbarText()); - - bossBar = BossBar.bossBar(message, progress, WardrobeSettings.getBossbarColor(), WardrobeSettings.getBossbarOverlay()); - Audience target = BukkitAudiences.create(HMCCosmeticsPlugin.getInstance()).player(player); - - target.showBossBar(bossBar); - } - - MessagesUtil.sendMessage(player, "opened-wardrobe"); - this.active = true; - update(); } public void end() { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/MessagesUtil.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/MessagesUtil.java index d7e2dc08..b0c96d72 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/MessagesUtil.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/MessagesUtil.java @@ -2,6 +2,7 @@ package com.hibiscusmc.hmccosmetics.util; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.config.Settings; +import com.hibiscusmc.hmccosmetics.config.WardrobeSettings; import com.hibiscusmc.hmccosmetics.hooks.PAPIHook; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.util.misc.Adventure; @@ -10,10 +11,12 @@ import net.kyori.adventure.audience.Audience; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.kyori.adventure.title.Title; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.spongepowered.configurate.ConfigurationNode; +import java.time.Duration; import java.util.HashMap; import java.util.logging.Level; @@ -63,6 +66,15 @@ public class MessagesUtil { target.sendActionBar(finalMessage); } + public static void sendTitle(Player player, String message) { + Audience target = BukkitAudiences.create(HMCCosmeticsPlugin.getInstance()).player(player); + + Title.Times times = Title.Times.times(Duration.ofMillis(3000), Duration.ofMillis(3000), Duration.ofMillis(1000)); + Title title = Title.title(processStringNoKey(player, message), Component.empty(), times); + + target.showTitle(title); + } + public static Component processString(Player player, String key) { return processString(player, key, null); } diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index c09e2f3c..e47377af 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -51,6 +51,10 @@ wardrobe: text: "Left-Click to open the menu!" progress: 100 overlay: PROGRESS + transition: + enabled: true + text: "" + delay: 40 wardrobe-location: world: "World" x: 0