Fixed custom sounds not playing correctly when used alongside lutes

This commit is contained in:
ASangarin 2020-12-27 21:56:52 +01:00
parent 99e8e7e9a6
commit 4e3ea77dbb
8 changed files with 75 additions and 77 deletions

View File

@ -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<Entity> 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()) {

View File

@ -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<Entity> 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)) {

View File

@ -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<Entity> 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)) {

View File

@ -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();
}

View File

@ -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<Entity> 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)) {

View File

@ -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);

View File

@ -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<Entity> 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)) {

View File

@ -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);
}
}