From 9b04dd042edf9c1287eb1396149f41a82c5e4e11 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Sun, 27 Oct 2024 21:56:51 +0100 Subject: [PATCH] Adds debug output --- .../blacksmithvisuals/BlacksmithVisuals.java | 9 ++++ .../listener/BlacksmithListener.java | 52 ++++++++++++++++--- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/knarcraft/blacksmithvisuals/BlacksmithVisuals.java b/src/main/java/net/knarcraft/blacksmithvisuals/BlacksmithVisuals.java index b17e1da..09a2821 100644 --- a/src/main/java/net/knarcraft/blacksmithvisuals/BlacksmithVisuals.java +++ b/src/main/java/net/knarcraft/blacksmithvisuals/BlacksmithVisuals.java @@ -62,6 +62,15 @@ public final class BlacksmithVisuals extends JavaPlugin { // Plugin shutdown logic } + /** + * Logs a debug message + * + * @param message

The debug message to log

+ */ + public static void debug(@NotNull String message) { + getInstance().getLogger().log(Level.FINE, message); + } + /** * Reloads the configuration file */ diff --git a/src/main/java/net/knarcraft/blacksmithvisuals/listener/BlacksmithListener.java b/src/main/java/net/knarcraft/blacksmithvisuals/listener/BlacksmithListener.java index 32e5611..6289aab 100644 --- a/src/main/java/net/knarcraft/blacksmithvisuals/listener/BlacksmithListener.java +++ b/src/main/java/net/knarcraft/blacksmithvisuals/listener/BlacksmithListener.java @@ -65,36 +65,43 @@ public class BlacksmithListener implements Listener { @EventHandler public void onDefaultSound(@NotNull NPCSoundEvent event) { + BlacksmithVisuals.debug("Detected onDefaultSound event"); event.setCancelled(true); } @EventHandler public void onReforgeStart(@NotNull BlacksmithReforgeStartEvent event) { + BlacksmithVisuals.debug("Detected onReforgeStart event"); runWorkingAnimation(event, SoundIdentifier.REFORGING_WORKING, this.configurationManager.getBlacksmithAnimationData()); } @EventHandler public void onSalvageStart(@NotNull ScrapperSalvageStartEvent event) { + BlacksmithVisuals.debug("Detected onSalvageStart event"); runWorkingAnimation(event, SoundIdentifier.SALVAGING_WORKING, this.configurationManager.getScrapperAnimationData()); } @EventHandler public void onReforgeSuccess(@NotNull BlacksmithReforgeSucceedEvent event) { + BlacksmithVisuals.debug("Detected onReforgeSuccess event"); SoundHelper.playSound(event.getEntity(), this.configurationManager.getSoundData(SoundIdentifier.REFORGING_SUCCESS)); } @EventHandler public void onSalvageSuccess(@NotNull ScrapperSalvageSucceedEvent event) { + BlacksmithVisuals.debug("Detected onSalvageSuccess event"); SoundHelper.playSound(event.getEntity(), this.configurationManager.getSoundData(SoundIdentifier.SALVAGING_SUCCESS)); } @EventHandler public void onReforgeFail(@NotNull BlacksmithReforgeFailEvent event) { + BlacksmithVisuals.debug("Detected onReforgeFail event"); SoundHelper.playSound(event.getEntity(), this.configurationManager.getSoundData(SoundIdentifier.REFORGING_FAILURE)); } @EventHandler public void onSalvageFail(@NotNull ScrapperSalvageFailEvent event) { + BlacksmithVisuals.debug("Detected onSalvageFail event"); SoundHelper.playSound(event.getEntity(), this.configurationManager.getSoundData(SoundIdentifier.SALVAGING_FAILURE)); } @@ -107,19 +114,25 @@ public class BlacksmithListener implements Listener { */ private void runWorkingAnimation(@NotNull ActionStartEvent event, @NotNull SoundIdentifier soundIdentifier, @NotNull AnimationData animationData) { + BlacksmithVisuals.debug("Preparing to run working animation"); BlacksmithVisuals instance = BlacksmithVisuals.getInstance(); BukkitScheduler scheduler = Bukkit.getScheduler(); NPC npc = event.getNpc(); NPCPosition npcPosition = NPCPosition.getFromMaterial(event.getCraftingStation()); + BlacksmithVisuals.debug("Found NPC position: " + npcPosition); long delay = moveToWorkingPosition(npc, event.getEntity(), npcPosition); + BlacksmithVisuals.debug("Calculated delay to: " + delay); if (npc.hasTrait(LookClose.class)) { + BlacksmithVisuals.debug("Found LookClose trait"); LookClose trait = npc.getTraitNullable(LookClose.class); this.oldLookRanges.put(npc.getUniqueId(), trait.getRange()); trait.setRange(0); + BlacksmithVisuals.debug("Edited LookClose range"); } long finishTime = event.getActionDurationTicks() - (2 * delay); + BlacksmithVisuals.debug("Scheduling work animation and back movement"); scheduler.scheduleSyncDelayedTask(instance, () -> startWorkAnimation(event.getEntity(), this.configurationManager.getSoundData(soundIdentifier), animationData, finishTime - 20, npcPosition), delay); scheduler.scheduleSyncDelayedTask(instance, () -> moveBack(event.getNpc(), event.getEntity()), finishTime); @@ -133,11 +146,13 @@ public class BlacksmithListener implements Listener { */ private void moveBack(@NotNull NPC npc, @NotNull Entity entity) { if (!npc.isSpawned()) { + BlacksmithVisuals.debug("NPC isn't spawned, and thus cannot be moved back"); return; } NPCData npcData = BlacksmithVisuals.getInstance().getNpcDataManager().getData(npc.getUniqueId()); if (npcData == null) { + BlacksmithVisuals.debug("Unable to get NPC data for NPC"); return; } @@ -154,8 +169,10 @@ public class BlacksmithListener implements Listener { if (oldRange != null) { trait.setRange(oldRange); } + BlacksmithVisuals.debug("Restored LookCLose range"); } + BlacksmithVisuals.debug("Scheduling movement back to idle location"); Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () -> entity.teleport(targetLocation), getWalkTime(entity.getLocation(), targetLocation)); npc.getNavigator().setTarget(targetLocation); @@ -171,11 +188,13 @@ public class BlacksmithListener implements Listener { */ private long moveToWorkingPosition(@NotNull NPC npc, @NotNull Entity entity, @Nullable NPCPosition npcPosition) { if (!npc.isSpawned() || npcPosition == null) { + BlacksmithVisuals.debug("The NPC isn't spawned, or its working position doesn't exist"); return 0; } NPCData npcData = BlacksmithVisuals.getInstance().getNpcDataManager().getData(npc.getUniqueId()); if (npcData == null) { + BlacksmithVisuals.debug("NPC sata could not be retrieved"); return 0; } @@ -184,6 +203,7 @@ public class BlacksmithListener implements Listener { targetLocation = npcData.positions().get(NPCPosition.WORKING_REPAIRABLE); } if (targetLocation == null) { + BlacksmithVisuals.debug("Working location not set for WORKING_REPAIRABLE"); return 0; } @@ -196,12 +216,13 @@ public class BlacksmithListener implements Listener { // Move NPC using Citizens path-finding Location current = entity.getLocation().clone(); - npc.teleport(current.setDirection(targetLocation.toVector().subtract(current.toVector())), PlayerTeleportEvent.TeleportCause.PLUGIN); - + BlacksmithVisuals.debug("Preparing rotation and walk to working location"); + npc.teleport(current.clone().setDirection(targetLocation.toVector().subtract(current.clone().toVector())), PlayerTeleportEvent.TeleportCause.PLUGIN); Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () -> npc.getNavigator().setTarget(finalTargetLocation), 2); // Teleport the NPC tp get it in the exact final location long walkTime = getWalkTime(entity.getLocation(), targetLocation); + BlacksmithVisuals.debug("Queuing teleportation to working position"); Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () -> entity.teleport(finalTargetLocation), walkTime); return walkTime; @@ -219,12 +240,15 @@ public class BlacksmithListener implements Listener { private void startWorkAnimation(@NotNull Entity entity, @NotNull SoundData soundData, @NotNull AnimationData animationData, long durationTicks, @Nullable NPCPosition npcPosition) { + BlacksmithVisuals.debug("Starting work animation"); BlacksmithVisuals instance = BlacksmithVisuals.getInstance(); BukkitScheduler scheduler = Bukkit.getScheduler(); + BlacksmithVisuals.debug("Scheduling animation"); int playWorkSound = scheduler.scheduleSyncRepeatingTask(instance, () -> animateNPC(entity, soundData, animationData, npcPosition), 20, animationData.animationDelay()); scheduler.scheduleSyncDelayedTask(instance, () -> scheduler.cancelTask(playWorkSound), durationTicks); + BlacksmithVisuals.debug("Stopped working animation"); } /** @@ -250,21 +274,26 @@ public class BlacksmithListener implements Listener { */ private void animateNPC(@NotNull Entity entity, @NotNull SoundData soundData, @NotNull AnimationData animationData, @Nullable NPCPosition npcPosition) { - if (random.nextInt(100) >= animationData.animationChance()) { - return; - } - - SoundHelper.playSound(entity, soundData); - // Don't play disabled animations if (!animationData.animateOffHand()) { + BlacksmithVisuals.debug("Offhand animation is disabled"); return; } + if (random.nextInt(100) >= animationData.animationChance()) { + BlacksmithVisuals.debug("Animation skipped because of RNG"); + return; + } + + BlacksmithVisuals.debug("Playing work sound"); + SoundHelper.playSound(entity, soundData); + if (soundData.offsetTicks() < 0) { + BlacksmithVisuals.debug("Delaying off-hand animation"); Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () -> animateOffhand(entity), -soundData.offsetTicks()); } else { + BlacksmithVisuals.debug("Animating off-hand"); animateOffhand(entity); } @@ -272,6 +301,7 @@ public class BlacksmithListener implements Listener { npcPosition = NPCPosition.WORKING_REPAIRABLE; } for (int i = 0; i < random.nextInt(5) + 1; i++) { + BlacksmithVisuals.debug("Spawning particle"); spawnSparkParticle(entity, npcPosition); } } @@ -283,6 +313,7 @@ public class BlacksmithListener implements Listener { * @param npcPosition

The npc potion to spawn a particle for

*/ private void spawnSparkParticle(@NotNull Entity entity, @NotNull NPCPosition npcPosition) { + BlacksmithVisuals.debug("Preparing particle spawning"); double randomX = this.random.nextDouble(-1, 1); double randomY = this.random.nextDouble(0.1, 1); double randomZ = this.random.nextDouble(-1, 1); @@ -293,8 +324,10 @@ public class BlacksmithListener implements Listener { particle = Particle.FLAME; } Location spawnLocation = entity.getLocation().clone().getBlock().getRelative(entity.getFacing()).getLocation().add(0.5, 0, 0.5); + BlacksmithVisuals.debug("Calculated particle location to " + spawnLocation); ParticleConfig particleConfig = new ParticleConfig(ParticleMode.SINGLE, particle, 0, 0, 1.1, randomX, randomY, randomZ, 0.1); ParticleHelper.spawnParticle(entity.getWorld(), spawnLocation, particleConfig, 1); + BlacksmithVisuals.debug("Spawned particle"); } /** @@ -303,6 +336,7 @@ public class BlacksmithListener implements Listener { * @param entity

The entity to animate

*/ private void animateOffhand(@NotNull Entity entity) { + BlacksmithVisuals.debug("Preparing off-hand animation"); ProtocolManager manager = ProtocolLibrary.getProtocolManager(); PacketContainer packet = manager.createPacket(PacketType.Play.Server.ANIMATION); packet.getIntegers().write(0, entity.getEntityId()); @@ -310,9 +344,11 @@ public class BlacksmithListener implements Listener { for (Player player : Bukkit.getOnlinePlayers()) { if (player.getWorld().equals(entity.getWorld())) { + BlacksmithVisuals.debug("Sending animation packet to " + player); manager.sendServerPacket(player, packet); } } + BlacksmithVisuals.debug("Finished sending animation packets"); }