diff --git a/src/main/kotlin/net/hareworks/hcu/items/content/components/BlinkComponent.kt b/src/main/kotlin/net/hareworks/hcu/items/content/components/BlinkComponent.kt index c6e6df3..dc32376 100644 --- a/src/main/kotlin/net/hareworks/hcu/items/content/components/BlinkComponent.kt +++ b/src/main/kotlin/net/hareworks/hcu/items/content/components/BlinkComponent.kt @@ -71,12 +71,15 @@ class BlinkComponent(private val plugin: App) : AbstractComponent(plugin, "blink } // Landing feedback + player.playSound(player.location, Sound.ENTITY_BREEZE_LAND, 0.5f, 1.2f) + player.spawnParticle(Particle.DUST, player.location, 5, 0.3, 0.1, 0.3, 0.0, Particle.DustOptions(org.bukkit.Color.PURPLE, 1.0f)) } // Check for cooldown finish if (cooldown.checkFinished(player)) { showReadyMessage(player) - player.playSound(player.location, Sound.BLOCK_NOTE_BLOCK_BELL, 0.5f, 1.5f) + player.playSound(player.location, Sound.BLOCK_NOTE_BLOCK_BELL, 0.5f, 2.0f) + player.playSound(player.location, Sound.BLOCK_BEACON_ACTIVATE, 0.5f, 2.0f) // Allow re-use immediately usedBlink.remove(player.uniqueId) } @@ -124,7 +127,6 @@ class BlinkComponent(private val plugin: App) : AbstractComponent(plugin, "blink private fun handleBlink(player: Player, item: ItemStack) { val tier = getTier(item) ?: Tier.ONE - val currentVelocity = player.velocity // Get movement direction from player's keyboard input val inputDirection = getMovementDirectionFromInput(player) @@ -155,10 +157,19 @@ class BlinkComponent(private val plugin: App) : AbstractComponent(plugin, "blink // Visual Effects spawnBlinkParticles(player, boostDirection, usingLookDirection) - // Sound Effects - player.playSound(player.location, Sound.ENTITY_ENDERMAN_TELEPORT, 0.6f, 1.8f) - player.playSound(player.location, Sound.ENTITY_BREEZE_SHOOT, 0.4f, 1.5f) - player.playSound(player.location, Sound.BLOCK_AMETHYST_BLOCK_CHIME, 0.8f, 1.2f) + // Sound Effects (Play at start location for others) + player.world.playSound(player.location, Sound.ENTITY_GENERIC_EXPLODE, 1.0f, 2.0f) // Pop! high pitch + player.world.playSound(player.location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.2f) + + // Personal feedback sounds (High volume to ensure player hears it even after moving) + // Launch sound / Wind burst + player.playSound(player.location, Sound.ENTITY_BREEZE_WIND_BURST, 10.0f, 1.5f) + // Sharp launch sound + player.playSound(player.location, Sound.ENTITY_FIREWORK_ROCKET_LAUNCH, 10.0f, 1.2f) + // Rushing wind/magic + player.playSound(player.location, Sound.ITEM_TRIDENT_RIPTIDE_1, 10.0f, 2.0f) + // Magic chime + player.playSound(player.location, Sound.BLOCK_AMETHYST_BLOCK_CHIME, 10.0f, 1.5f) // Action Bar message showBlinkMessage(player, usingLookDirection) @@ -228,30 +239,44 @@ class BlinkComponent(private val plugin: App) : AbstractComponent(plugin, "blink val loc = player.location val world = player.world - // Origin burst - purple spiral - for (i in 0 until 16) { - val angle = (i * 22.5) * Math.PI / 180 + // 1. Afterimage (残像) - Smoke cloud in player's place + world.spawnParticle(Particle.CLOUD, loc.clone().add(0.0, 1.0, 0.0), 10, 0.4, 0.8, 0.4, 0.1) + + // 2. Shockwave / Ignition (Ring at feet) + for (i in 0 until 36) { + val angle = Math.toRadians(i * 10.0) + val radius = 0.8 + val x = Math.cos(angle) * radius + val z = Math.sin(angle) * radius + // Soul flame ring + world.spawnParticle(Particle.SOUL_FIRE_FLAME, loc.clone().add(x, 0.1, z), 1, 0.0, 0.0, 0.0, 0.02) + } + + // 3. Origin burst - purple spiral + for (i in 0 until 20) { + val angle = (i * 18.0) * Math.PI / 180 val radius = 0.5 + (i * 0.05) val x = kotlin.math.cos(angle) * radius val z = kotlin.math.sin(angle) * radius - val y = i * 0.08 + val y = i * 0.05 world.spawnParticle(Particle.REVERSE_PORTAL, loc.clone().add(x, y, z), 2, 0.0, 0.0, 0.0, 0.01) + world.spawnParticle(Particle.DRAGON_BREATH, loc.clone().add(x, y, z), 1, 0.0, 0.0, 0.0, 0.01) } - // Directional trail particles + // 4. Directional trail particles (The "Dash" line) val trailDirection = direction.clone().normalize() for (i in 1..8) { val trailPos = loc.clone().add(trailDirection.clone().multiply(i * 0.5)) + world.spawnParticle(Particle.DUST, trailPos.add(0.0, 1.0, 0.0), 3, 0.2, 0.2, 0.2, 0.0, Particle.DustOptions(org.bukkit.Color.PURPLE, 1.0f)) world.spawnParticle(Particle.ENCHANT, trailPos.add(0.0, 1.0, 0.0), 5, 0.1, 0.3, 0.1, 0.5) - world.spawnParticle(Particle.PORTAL, trailPos, 3, 0.1, 0.2, 0.1, 0.3) } - // Central effect - world.spawnParticle(Particle.DRAGON_BREATH, loc.clone().add(0.0, 1.0, 0.0), 10, 0.2, 0.3, 0.2, 0.02) + // 5. Flash at origin + world.spawnParticle(Particle.FLASH, loc.clone().add(0.0, 1.0, 0.0), 1, 0.0, 0.0, 0.0, 0.0) // Look direction indicator if applicable if (usingLook) { - world.spawnParticle(Particle.END_ROD, loc.clone().add(direction.clone().multiply(1.5)).add(0.0, 1.0, 0.0), 5, 0.1, 0.1, 0.1, 0.02) + world.spawnParticle(Particle.END_ROD, loc.clone().add(direction.clone().multiply(1.5)).add(0.0, 1.0, 0.0), 10, 0.1, 0.1, 0.1, 0.05) } } @@ -262,6 +287,7 @@ class BlinkComponent(private val plugin: App) : AbstractComponent(plugin, "blink .append(Component.text("ブリンク!", SECONDARY_COLOR)) .append(Component.text(" [$modeText]", NamedTextColor.GRAY)) .append(Component.text(" ⚡", PRIMARY_COLOR)) + .append(Component.text("加速!", PRIMARY_COLOR)) ) }