LibsDisguises/src/me/libraryaddict/disguise/utilities/DisguiseSound.java

308 lines
12 KiB
Java
Raw Normal View History

package me.libraryaddict.disguise.utilities;
import java.util.HashMap;
import java.util.HashSet;
2016-05-09 17:28:38 +02:00
import org.bukkit.Sound;
2013-11-14 21:10:35 +01:00
/**
* Only living disguises go in here!
*/
2016-05-09 17:28:38 +02:00
public enum DisguiseSound
{
ARROW(null, null, null, null, Sound.ENTITY_ARROW_HIT, Sound.ENTITY_ARROW_SHOOT),
2016-05-09 17:28:38 +02:00
BAT(Sound.ENTITY_BAT_HURT, null, Sound.ENTITY_BAT_DEATH, Sound.ENTITY_BAT_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL,
Sound.ENTITY_BAT_LOOP, Sound.ENTITY_PLAYER_BIG_FALL, Sound.ENTITY_BAT_TAKEOFF),
BLAZE(Sound.ENTITY_BLAZE_HURT, null, Sound.ENTITY_BLAZE_DEATH, Sound.ENTITY_BLAZE_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL,
Sound.ENTITY_PLAYER_BIG_FALL),
CAVE_SPIDER(Sound.ENTITY_SPIDER_AMBIENT, Sound.ENTITY_SPIDER_STEP, Sound.ENTITY_SPIDER_DEATH, Sound.ENTITY_SPIDER_AMBIENT),
2016-05-09 17:28:38 +02:00
CHICKEN(Sound.ENTITY_CHICKEN_HURT, Sound.ENTITY_CHICKEN_STEP, Sound.ENTITY_CHICKEN_HURT, Sound.ENTITY_CHICKEN_AMBIENT,
Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_CHICKEN_EGG, Sound.ENTITY_PLAYER_BIG_FALL),
COW(Sound.ENTITY_COW_HURT, Sound.ENTITY_COW_STEP, Sound.ENTITY_COW_DEATH, Sound.ENTITY_COW_AMBIENT),
2016-05-09 17:28:38 +02:00
CREEPER(Sound.ENTITY_CREEPER_HURT, "step.grass", Sound.ENTITY_CREEPER_DEATH, null),
2016-05-09 17:28:38 +02:00
DONKEY(Sound.ENTITY_DONKEY_HURT, "step.grass", Sound.ENTITY_DONKEY_DEATH, Sound.ENTITY_DONKEY_AMBIENT,
Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_DONKEY_ANGRY, Sound.ENTITY_HORSE_STEP_WOOD,
Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP, Sound.ENTITY_HORSE_ANGRY),
ELDER_GUARDIAN(Sound.ENTITY_ELDER_GUARDIAN_HURT, null, Sound.ENTITY_ELDER_GUARDIAN_DEATH,
Sound.ENTITY_ELDER_GUARDIAN_AMBIENT),
ENDER_DRAGON(Sound.ENTITY_ENDERDRAGON_HURT, null, Sound.ENTITY_ENDERDRAGON_DEATH, Sound.ENTITY_ENDERDRAGON_AMBIENT,
Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_ENDERDRAGON_FLAP, Sound.ENTITY_PLAYER_BIG_FALL),
ENDERMAN(Sound.ENTITY_ENDERMEN_HURT, "step.grass", Sound.ENTITY_ENDERMEN_DEATH, Sound.ENTITY_ENDERMEN_AMBIENT,
Sound.ENTITY_ENDERMEN_SCREAM, Sound.ENTITY_ENDERMEN_TELEPORT, Sound.ENTITY_ENDERMEN_STARE),
ENDERMITE(Sound.ENTITY_SILVERFISH_HURT, Sound.ENTITY_ENDERMITE_STEP, Sound.ENTITY_ENDERMITE_DEATH,
Sound.ENTITY_ENDERMITE_AMBIENT),
GHAST(Sound.ENTITY_GHAST_HURT, null, Sound.ENTITY_GHAST_DEATH, Sound.ENTITY_GHAST_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL,
Sound.ENTITY_GHAST_SHOOT, Sound.ENTITY_PLAYER_BIG_FALL, Sound.ENTITY_GHAST_SCREAM, Sound.ENTITY_GHAST_WARN),
GIANT(Sound.ENTITY_PLAYER_HURT, "step.grass", null, null),
2016-05-09 17:28:38 +02:00
GUARDIAN(Sound.ENTITY_GUARDIAN_HURT, null, Sound.ENTITY_GUARDIAN_DEATH, Sound.ENTITY_ELDER_GUARDIAN_AMBIENT),
2016-05-09 17:28:38 +02:00
HORSE(Sound.ENTITY_HORSE_HURT, "step.grass", Sound.ENTITY_HORSE_DEATH, Sound.ENTITY_HORSE_AMBIENT, Sound.ENTITY_HORSE_GALLOP,
Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_DONKEY_ANGRY, Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR,
Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP, Sound.ENTITY_HORSE_ANGRY),
2016-05-09 17:28:38 +02:00
IRON_GOLEM(Sound.ENTITY_IRONGOLEM_HURT, Sound.ENTITY_IRONGOLEM_STEP, Sound.ENTITY_IRONGOLEM_DEATH,
Sound.ENTITY_IRONGOLEM_ATTACK),
MAGMA_CUBE(Sound.ENTITY_MAGMACUBE_HURT, Sound.ENTITY_MAGMACUBE_JUMP, null, null),
2016-05-09 17:28:38 +02:00
MULE(Sound.ENTITY_MULE_HURT, "step.grass", Sound.ENTITY_MULE_DEATH, Sound.ENTITY_MULE_AMBIENT),
2016-05-09 17:28:38 +02:00
MUSHROOM_COW(Sound.ENTITY_COW_HURT, Sound.ENTITY_COW_STEP, Sound.ENTITY_COW_HURT, Sound.ENTITY_COW_AMBIENT),
2016-05-09 17:28:38 +02:00
OCELOT(Sound.ENTITY_CAT_HURT, "step.grass", Sound.ENTITY_CAT_HURT, Sound.ENTITY_CAT_AMBIENT, Sound.ENTITY_CAT_PURR,
Sound.ENTITY_CAT_PURREOW),
PIG(Sound.ENTITY_PIG_HURT, Sound.ENTITY_PIG_STEP, Sound.ENTITY_PIG_DEATH, Sound.ENTITY_PIG_AMBIENT),
2016-05-09 17:28:38 +02:00
PIG_ZOMBIE(Sound.ENTITY_ZOMBIE_PIG_HURT, null, Sound.ENTITY_ZOMBIE_PIG_DEATH, Sound.ENTITY_ZOMBIE_PIG_AMBIENT,
Sound.ENTITY_ZOMBIE_PIG_ANGRY),
PLAYER(Sound.ENTITY_PLAYER_HURT, "step.grass", Sound.ENTITY_PLAYER_DEATH, null),
2016-05-09 17:28:38 +02:00
RABBIT(Sound.ENTITY_RABBIT_HURT, Sound.ENTITY_RABBIT_JUMP, Sound.ENTITY_RABBIT_DEATH, Sound.ENTITY_RABBIT_AMBIENT),
2016-05-09 17:28:38 +02:00
SHEEP(Sound.ENTITY_SHEEP_HURT, Sound.ENTITY_SHEEP_STEP, null, Sound.ENTITY_SHEEP_AMBIENT, Sound.ENTITY_SHEEP_SHEAR),
2016-05-09 17:28:38 +02:00
SHULKER(Sound.ENTITY_SHULKER_HURT, null, Sound.ENTITY_SHULKER_DEATH, Sound.ENTITY_SHULKER_AMBIENT, Sound.ENTITY_SHULKER_OPEN,
Sound.ENTITY_SHULKER_CLOSE, Sound.ENTITY_SHULKER_HURT_CLOSED, Sound.ENTITY_SHULKER_TELEPORT),
2016-05-09 17:28:38 +02:00
SILVERFISH(Sound.ENTITY_SILVERFISH_HURT, Sound.ENTITY_SILVERFISH_STEP, Sound.ENTITY_SILVERFISH_DEATH,
Sound.ENTITY_SILVERFISH_AMBIENT),
SKELETON(Sound.ENTITY_SKELETON_HURT, Sound.ENTITY_SKELETON_STEP, Sound.ENTITY_SKELETON_DEATH, Sound.ENTITY_SKELETON_AMBIENT),
2016-05-09 17:28:38 +02:00
SKELETON_HORSE(Sound.ENTITY_SKELETON_HORSE_HURT, "step.grass", Sound.ENTITY_SKELETON_HORSE_DEATH,
Sound.ENTITY_SKELETON_HORSE_AMBIENT, Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_DONKEY_ANGRY,
Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP,
Sound.ENTITY_HORSE_ANGRY),
SLIME(Sound.ENTITY_SLIME_HURT, Sound.ENTITY_SLIME_JUMP, Sound.ENTITY_SLIME_DEATH, null),
2016-05-09 17:28:38 +02:00
SNOWMAN(Sound.ENTITY_SNOWMAN_HURT, null, Sound.ENTITY_SNOWMAN_DEATH, Sound.ENTITY_SNOWMAN_AMBIENT,
Sound.ENTITY_SNOWMAN_SHOOT),
SPIDER(Sound.ENTITY_SPIDER_AMBIENT, Sound.ENTITY_SPIDER_STEP, Sound.ENTITY_SPIDER_DEATH, Sound.ENTITY_SPIDER_AMBIENT),
2016-05-09 17:28:38 +02:00
SQUID(Sound.ENTITY_SQUID_HURT, null, Sound.ENTITY_SQUID_DEATH, Sound.ENTITY_SQUID_AMBIENT),
2016-05-09 17:28:38 +02:00
UNDEAD_HORSE(Sound.ENTITY_ZOMBIE_HORSE_HURT, "step.grass", Sound.ENTITY_ZOMBIE_HORSE_DEATH, Sound.ENTITY_ZOMBIE_HORSE_AMBIENT,
Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_DONKEY_ANGRY, Sound.ENTITY_HORSE_STEP_WOOD,
Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP, Sound.ENTITY_HORSE_ANGRY),
VILLAGER(Sound.ENTITY_VILLAGER_HURT, null, Sound.ENTITY_VILLAGER_DEATH, Sound.ENTITY_VILLAGER_AMBIENT,
Sound.ENTITY_VILLAGER_TRADING, Sound.ENTITY_VILLAGER_NO, Sound.ENTITY_VILLAGER_YES),
WITCH(Sound.ENTITY_WITCH_HURT, null, Sound.ENTITY_WITCH_DEATH, Sound.ENTITY_WITCH_AMBIENT),
2016-05-09 17:28:38 +02:00
WITHER(Sound.ENTITY_WITHER_HURT, null, Sound.ENTITY_WITHER_DEATH, Sound.ENTITY_WITHER_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL,
Sound.ENTITY_WITHER_SPAWN, Sound.ENTITY_PLAYER_BIG_FALL, Sound.ENTITY_WITHER_SHOOT),
WITHER_SKELETON(Sound.ENTITY_SKELETON_HURT, Sound.ENTITY_SKELETON_STEP, Sound.ENTITY_SKELETON_DEATH,
Sound.ENTITY_SKELETON_AMBIENT),
WOLF(Sound.ENTITY_WOLF_HURT, Sound.ENTITY_WOLF_STEP, Sound.ENTITY_WOLF_DEATH, Sound.ENTITY_WOLF_AMBIENT,
Sound.ENTITY_WOLF_GROWL, Sound.ENTITY_WOLF_PANT, Sound.ENTITY_WOLF_HOWL, Sound.ENTITY_WOLF_SHAKE,
Sound.ENTITY_WOLF_WHINE),
ZOMBIE(Sound.ENTITY_ZOMBIE_HURT, Sound.ENTITY_ZOMBIE_STEP, Sound.ENTITY_ZOMBIE_DEATH, Sound.ENTITY_ZOMBIE_AMBIENT,
2016-05-09 17:28:38 +02:00
Sound.ENTITY_ZOMBIE_INFECT, Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD,
Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR), ZOMBIE_VILLAGER(Sound.ENTITY_ZOMBIE_VILLAGER_HURT,
Sound.ENTITY_ZOMBIE_VILLAGER_STEP, Sound.ENTITY_ZOMBIE_VILLAGER_DEATH, Sound.ENTITY_ZOMBIE_VILLAGER_AMBIENT,
Sound.ENTITY_ZOMBIE_INFECT, Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD,
Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR);
2013-05-29 02:27:58 +02:00
2016-05-09 17:28:38 +02:00
public enum SoundType
{
CANCEL, DEATH, HURT, IDLE, STEP
2013-05-29 00:52:54 +02:00
}
2016-05-09 17:28:38 +02:00
public static DisguiseSound getType(String name)
{
try
{
return valueOf(name);
2016-05-09 17:28:38 +02:00
}
catch (Exception ex)
{
return null;
}
}
private HashSet<String> cancelSounds = new HashSet<>();
private float damageSoundVolume = 1F;
private HashMap<SoundType, String> disguiseSounds = new HashMap<>();
2013-05-29 00:52:54 +02:00
2016-05-09 17:28:38 +02:00
DisguiseSound(Object hurt, Object step, Object death, Object idle, Object... sounds)
{
addSound(hurt, SoundType.HURT);
addSound(step, SoundType.STEP);
addSound(death, SoundType.DEATH);
addSound(idle, SoundType.IDLE);
2016-05-09 17:28:38 +02:00
for (Object obj : sounds)
{
addSound(obj, SoundType.CANCEL);
}
}
2016-05-09 17:28:38 +02:00
private void addSound(Object sound, SoundType type)
{
String s;
2016-05-09 17:28:38 +02:00
if (sound == null)
{
return;
2016-05-09 17:28:38 +02:00
}
else if (sound instanceof String)
{
s = (String) sound;
2016-05-09 17:28:38 +02:00
}
else if (sound instanceof Sound)
{
s = ReflectionManager.getCraftSound((Sound) sound);
2016-05-09 17:28:38 +02:00
}
else
{
throw new RuntimeException("Was given a unknown object " + sound);
}
2016-05-09 17:28:38 +02:00
switch (type)
{
case HURT:
disguiseSounds.put(SoundType.HURT, s);
break;
case STEP:
disguiseSounds.put(SoundType.STEP, s);
break;
case DEATH:
disguiseSounds.put(SoundType.DEATH, s);
break;
case IDLE:
disguiseSounds.put(SoundType.IDLE, s);
break;
case CANCEL:
cancelSounds.add(s);
}
}
2016-05-09 17:28:38 +02:00
public float getDamageAndIdleSoundVolume()
{
return damageSoundVolume;
}
2016-05-09 17:28:38 +02:00
public String getSound(SoundType type)
{
if (type == null || !disguiseSounds.containsKey(type))
{
return null;
}
2016-05-09 17:28:38 +02:00
return disguiseSounds.get(type);
}
2016-05-09 17:28:38 +02:00
public HashSet<String> getSoundsToCancel()
{
return cancelSounds;
}
/**
2013-05-29 19:17:48 +02:00
* Used to check if this sound name is owned by this disguise sound.
*/
2016-05-09 17:28:38 +02:00
public SoundType getType(String sound, boolean ignoreDamage)
{
if (sound == null)
return SoundType.CANCEL;
if (isCancelSound(sound))
{
return SoundType.CANCEL;
}
2016-05-09 17:28:38 +02:00
2013-07-22 16:06:19 +02:00
if (disguiseSounds.containsKey(SoundType.STEP) && disguiseSounds.get(SoundType.STEP).startsWith("step.")
2016-05-09 17:28:38 +02:00
&& sound.startsWith("step."))
{
return SoundType.STEP;
}
2016-05-09 17:28:38 +02:00
for (SoundType type : SoundType.values())
{
if (!disguiseSounds.containsKey(type) || type == SoundType.DEATH || (ignoreDamage && type == SoundType.HURT))
{
2013-05-29 02:27:58 +02:00
continue;
}
2016-05-09 17:28:38 +02:00
String s = disguiseSounds.get(type);
2016-05-09 17:28:38 +02:00
if (s != null)
{
if (s.equals(sound))
{
return type;
}
2013-05-29 20:20:50 +02:00
}
}
2016-05-09 17:28:38 +02:00
return null;
}
2013-05-29 21:12:08 +02:00
2016-05-09 17:28:38 +02:00
public boolean isCancelSound(String sound)
{
return getSoundsToCancel().contains(sound);
2013-05-29 21:12:08 +02:00
}
2013-07-22 16:18:34 +02:00
2016-05-09 17:28:38 +02:00
public void removeSound(SoundType type, Sound sound)
{
2013-11-18 12:49:04 +01:00
removeSound(type, ReflectionManager.getCraftSound(sound));
2013-07-29 01:19:59 +02:00
}
2016-05-09 17:28:38 +02:00
public void removeSound(SoundType type, String sound)
{
if (type == SoundType.CANCEL)
{
2013-07-29 01:19:59 +02:00
cancelSounds.remove(sound);
2016-05-09 17:28:38 +02:00
}
else
{
2013-07-29 01:19:59 +02:00
disguiseSounds.remove(type);
}
}
2016-05-09 17:28:38 +02:00
public void setDamageAndIdleSoundVolume(float strength)
{
2013-07-22 16:18:34 +02:00
this.damageSoundVolume = strength;
}
2013-07-29 01:19:59 +02:00
2016-05-09 17:28:38 +02:00
public void setSound(SoundType type, Sound sound)
{
2013-11-18 12:49:04 +01:00
setSound(type, ReflectionManager.getCraftSound(sound));
2013-07-29 01:19:59 +02:00
}
2016-05-09 17:28:38 +02:00
public void setSound(SoundType type, String sound)
{
if (type == SoundType.CANCEL)
{
2013-07-29 01:19:59 +02:00
cancelSounds.add(sound);
2016-05-09 17:28:38 +02:00
}
else
{
2013-07-29 01:19:59 +02:00
disguiseSounds.put(type, sound);
}
}
}