From 4e3ea77dbb049a12b6b18f09894a4cbad0844449 Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 27 Dec 2020 21:56:52 +0100 Subject: [PATCH] Fixed custom sounds not playing correctly when used alongside lutes --- .../interaction/weapon/untargeted/Lute.java | 5 ++-- .../untargeted/lute/BruteLuteAttack.java | 27 +++++++++---------- .../untargeted/lute/CircularLuteAttack.java | 27 +++++++++---------- .../untargeted/lute/LuteAttackHandler.java | 3 ++- .../untargeted/lute/SimpleLuteAttack.java | 27 +++++++++---------- .../untargeted/lute/SlashLuteAttack.java | 22 +++++++-------- .../untargeted/lute/WaveLuteAttack.java | 27 +++++++++---------- .../mmoitems/api/util/SoundReader.java | 14 +++++++++- 8 files changed, 75 insertions(+), 77 deletions(-) diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java index f9bc5320..c3dc6e3d 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java @@ -14,7 +14,6 @@ import net.mmogroup.mmolib.api.item.NBTItem; import net.mmogroup.mmolib.version.VersionSound; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -46,7 +45,7 @@ public class Lute extends UntargetedWeapon { Vector weight = new Vector(0, -.003 * getNBTItem().getStat(ItemStats.NOTE_WEIGHT.getId()), 0); LuteAttackEffect effect = LuteAttackEffect.get(getNBTItem()); - Sound sound = new SoundReader(getNBTItem().getString("MMOITEMS_LUTE_ATTACK_SOUND"), VersionSound.BLOCK_NOTE_BLOCK_BELL.toSound()).getSound(); + SoundReader sound = new SoundReader(getNBTItem().getString("MMOITEMS_LUTE_ATTACK_SOUND"), VersionSound.BLOCK_NOTE_BLOCK_BELL.toSound()); if (effect != null) { effect.getAttack().handle(stats, getNBTItem(), attackDamage, range, weight, sound); return; @@ -63,7 +62,7 @@ public class Lute extends UntargetedWeapon { List entities = MMOUtils.getNearbyChunkEntities(loc); loc.getWorld().spawnParticle(Particle.NOTE, loc, 0); - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (int j = 0; j < 3; j++) { loc.add(vec.add(weight)); if (loc.getBlock().getType().isSolid()) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java index 16574d89..9264af41 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class BruteLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -39,8 +37,7 @@ public class BruteLuteAttack implements LuteAttackHandler { } loc.getWorld().spawnParticle(Particle.NOTE, loc, 2, .1, .1, .1, 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java index f8b3b637..416d54ff 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class CircularLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -42,8 +40,7 @@ public class CircularLuteAttack implements LuteAttackHandler { Vector vec = MMOUtils.rotateFunc(new Vector(Math.cos(a), Math.sin(a), 0).multiply(.3), loc); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec), 0); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec.multiply(-1)), 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java index 6fffe0c4..ff5a98ed 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java @@ -2,6 +2,7 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; import java.util.Random; +import net.Indyuce.mmoitems.api.util.SoundReader; import org.bukkit.Sound; import org.bukkit.util.Vector; @@ -9,7 +10,7 @@ import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; import net.mmogroup.mmolib.api.item.NBTItem; public interface LuteAttackHandler { - void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound); + void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound); Random random = new Random(); } diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java index ced9252f..445eeb02 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class SimpleLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -39,8 +37,7 @@ public class SimpleLuteAttack implements LuteAttackHandler { } loc.getWorld().spawnParticle(Particle.NOTE, loc, 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java index aacfdcd2..b551053b 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; public class SlashLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection(); final Location loc = stats.getPlayer().getLocation().add(0, 1.3, 0); double ti = 1; public void run() { - if ((ti += .6) > 5) - cancel(); + if ((ti += .6) > 5) cancel(); - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + ti / 5)); + sound.play(loc, 2, (float) (.5 + ti / range)); for (int k = -30; k < 30; k += 3) if (random.nextBoolean()) { loc.setDirection(vec); diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java index 486e762d..bccfab2b 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class WaveLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -41,8 +39,7 @@ public class WaveLuteAttack implements LuteAttackHandler { Vector vec = MMOUtils.rotateFunc(new Vector(.5, 0, 0), loc); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec.multiply(Math.sin((double) ti / 2))), 0); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec.multiply(-1)), 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java b/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java index c1e884b6..af7cfb1b 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java +++ b/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems.api.util; +import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -25,7 +26,7 @@ public class SoundReader { } this.sound = sound; - this.soundKey = soundKey; + this.soundKey = soundKey.toLowerCase(); } public Sound getSound() { @@ -46,4 +47,15 @@ public class SoundReader { else player.playSound(player.getLocation(), soundKey, vol, pitch); } + + public void play(Location loc) { + play(loc, 1, 1); + } + + public void play(Location loc, float vol, float pitch) { + if(soundKey.isEmpty()) + loc.getWorld().playSound(loc, sound, vol, pitch); + else + loc.getWorld().playSound(loc, soundKey, vol, pitch); + } }