diff --git a/src/com/massivecraft/massivecore/MassiveCore.java b/src/com/massivecraft/massivecore/MassiveCore.java index 0dab413d..889621b5 100644 --- a/src/com/massivecraft/massivecore/MassiveCore.java +++ b/src/com/massivecraft/massivecore/MassiveCore.java @@ -7,6 +7,7 @@ import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.Sound; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; @@ -25,6 +26,7 @@ import com.massivecraft.massivecore.adapter.ModdedEnumTypeAdapter; import com.massivecraft.massivecore.adapter.MsonAdapter; import com.massivecraft.massivecore.adapter.MsonEventAdapter; import com.massivecraft.massivecore.adapter.PlayerInventoryAdapter; +import com.massivecraft.massivecore.adapter.SoundAdapter; import com.massivecraft.massivecore.adapter.UUIDAdapter; import com.massivecraft.massivecore.collections.BackstringEnumSet; import com.massivecraft.massivecore.collections.MassiveList; @@ -118,6 +120,7 @@ public class MassiveCore extends MassivePlugin .registerTypeAdapter(JsonPrimitive.class, JsonElementAdapter.get()) .registerTypeAdapter(JsonArray.class, JsonElementAdapter.get()) .registerTypeAdapter(JsonObject.class, JsonElementAdapter.get()) + .registerTypeAdapter(Sound.class, SoundAdapter.get()) .registerTypeAdapter(UUID.class, UUIDAdapter.get()) .registerTypeAdapter(ItemStack.class, ItemStackAdapter.get()) .registerTypeAdapter(Inventory.class, InventoryAdapter.get()) diff --git a/src/com/massivecraft/massivecore/SoundEffect.java b/src/com/massivecraft/massivecore/SoundEffect.java index d24716ec..2aa804d4 100644 --- a/src/com/massivecraft/massivecore/SoundEffect.java +++ b/src/com/massivecraft/massivecore/SoundEffect.java @@ -5,9 +5,13 @@ import java.util.Collection; import org.bukkit.Location; import org.bukkit.Sound; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; -public final class SoundEffect implements Cloneable, Serializable +import com.massivecraft.massivecore.command.type.enumeration.TypeSound; +import com.massivecraft.massivecore.util.MUtil; + +public final class SoundEffect implements Serializable { private static final transient long serialVersionUID = 1L; @@ -15,8 +19,12 @@ public final class SoundEffect implements Cloneable, Serializable // FIELDS: RAW // -------------------------------------------- // - private final Sound sound; - public Sound getSound() { return this.sound; } + private final String soundId; + public String getSoundId() { return this.soundId; } + public Sound getSound() + { + return TypeSound.valueOf(this.getSoundId()); + } private final float volume; public float getVolume() { return this.volume; } @@ -28,17 +36,17 @@ public final class SoundEffect implements Cloneable, Serializable // FIELDS: WITH // -------------------------------------------- // - public SoundEffect withSound(Sound sound) { return new SoundEffect(sound, volume, pitch); } - public SoundEffect withVolume(float volume) { return new SoundEffect(sound, volume, pitch); } - public SoundEffect withPitch(float pitch) { return new SoundEffect(sound, volume, pitch); } + public SoundEffect withSound(Sound sound) { return new SoundEffect(soundId, volume, pitch); } + public SoundEffect withVolume(float volume) { return new SoundEffect(soundId, volume, pitch); } + public SoundEffect withPitch(float pitch) { return new SoundEffect(soundId, volume, pitch); } // -------------------------------------------- // // CONSTUCT // -------------------------------------------- // - private SoundEffect(Sound sound, float volume, float pitch) + private SoundEffect(String soundId, float volume, float pitch) { - this.sound = sound; + this.soundId = soundId; this.volume = volume; this.pitch = pitch; } @@ -53,9 +61,14 @@ public final class SoundEffect implements Cloneable, Serializable // VALUE OF // -------------------------------------------- // + public static SoundEffect valueOf(String soundId, float volume, float pitch) + { + return new SoundEffect(soundId, volume, pitch); + } + public static SoundEffect valueOf(Sound sound, float volume, float pitch) { - return new SoundEffect(sound, volume, pitch); + return valueOf(TypeSound.get().getId(sound), volume, pitch); } // -------------------------------------------- // @@ -67,14 +80,16 @@ public final class SoundEffect implements Cloneable, Serializable location.getWorld().playSound(location, this.getSound(), this.getVolume(), this.getPitch()); } - public void run(Player player, Location location) + public void run(HumanEntity human, Location location) { + if (MUtil.isntPlayer(human)) return; + Player player = (Player)human; player.playSound(location, this.getSound(), this.getVolume(), this.getPitch()); } - public void run(Player player) + public void run(HumanEntity human) { - this.run(player, player.getEyeLocation()); + this.run(human, human.getEyeLocation()); } // -------------------------------------------- // @@ -89,32 +104,22 @@ public final class SoundEffect implements Cloneable, Serializable } } - public static void runAll(Collection soundEffects, Player player, Location location) + public static void runAll(Collection soundEffects, HumanEntity human, Location location) { for (SoundEffect soundEffect : soundEffects) { - soundEffect.run(player, location); + soundEffect.run(human, location); } } - public static void runAll(Collection soundEffects, Player player) + public static void runAll(Collection soundEffects, HumanEntity human) { for (SoundEffect soundEffect : soundEffects) { - soundEffect.run(player); + soundEffect.run(human); } } - // -------------------------------------------- // - // CLONE - // -------------------------------------------- // - - @Override - public SoundEffect clone() - { - return this; - } - // -------------------------------------------- // // EQUALS & HASHCODE // -------------------------------------------- // @@ -125,11 +130,11 @@ public final class SoundEffect implements Cloneable, Serializable final int prime = 31; int result = 1; result = prime * result + Float.floatToIntBits(pitch); - result = prime * result + ((sound == null) ? 0 : sound.hashCode()); + result = prime * result + ((soundId == null) ? 0 : soundId.hashCode()); result = prime * result + Float.floatToIntBits(volume); return result; } - + @Override public boolean equals(Object obj) { @@ -138,7 +143,11 @@ public final class SoundEffect implements Cloneable, Serializable if (!(obj instanceof SoundEffect)) return false; SoundEffect other = (SoundEffect) obj; if (Float.floatToIntBits(pitch) != Float.floatToIntBits(other.pitch)) return false; - if (sound != other.sound) return false; + if (soundId == null) + { + if (other.soundId != null) return false; + } + else if (!soundId.equals(other.soundId)) return false; if (Float.floatToIntBits(volume) != Float.floatToIntBits(other.volume)) return false; return true; } diff --git a/src/com/massivecraft/massivecore/adapter/SoundAdapter.java b/src/com/massivecraft/massivecore/adapter/SoundAdapter.java new file mode 100644 index 00000000..d4c72235 --- /dev/null +++ b/src/com/massivecraft/massivecore/adapter/SoundAdapter.java @@ -0,0 +1,45 @@ +package com.massivecraft.massivecore.adapter; + +import java.lang.reflect.Type; + +import org.bukkit.Sound; + +import com.massivecraft.massivecore.xlib.gson.JsonDeserializationContext; +import com.massivecraft.massivecore.xlib.gson.JsonDeserializer; +import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonNull; +import com.massivecraft.massivecore.xlib.gson.JsonParseException; +import com.massivecraft.massivecore.xlib.gson.JsonPrimitive; +import com.massivecraft.massivecore.xlib.gson.JsonSerializationContext; +import com.massivecraft.massivecore.xlib.gson.JsonSerializer; + +public class SoundAdapter implements JsonDeserializer, JsonSerializer +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static SoundAdapter i = new SoundAdapter(); + public static SoundAdapter get() { return i; } + public SoundAdapter() {} + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public JsonElement serialize(Sound src, Type typeOfSrc, JsonSerializationContext context) + { + if (src == null) return JsonNull.INSTANCE; + return new JsonPrimitive(src.name()); + } + + @Override + public Sound deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException + { + if (json == null) return null; + if (json.equals(JsonNull.INSTANCE)) return null; + return Sound.valueOf(json.getAsString()); + } + +} diff --git a/src/com/massivecraft/massivecore/chestgui/ChestGui.java b/src/com/massivecraft/massivecore/chestgui/ChestGui.java index 547950ff..01ed4108 100644 --- a/src/com/massivecraft/massivecore/chestgui/ChestGui.java +++ b/src/com/massivecraft/massivecore/chestgui/ChestGui.java @@ -2,14 +2,11 @@ package com.massivecraft.massivecore.chestgui; import java.util.Map; -import org.bukkit.Sound; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import com.massivecraft.massivecore.SoundEffect; import com.massivecraft.massivecore.collections.MassiveMap; -import com.massivecraft.massivecore.util.MUtil; public class ChestGui { @@ -46,28 +43,9 @@ public class ChestGui // FIELDS: SOUND // -------------------------------------------- // - protected Sound sound = Sound.CLICK; - public Sound getSound() { return this.sound; } - - protected float volume = 1.0f; - public float getVolume() { return this.volume; } - public ChestGui setVolume(float volume) { this.volume = volume; return this; } - - protected float pitch = 1.0f; - public float getPitch() { return this.pitch; } - public ChestGui setPitch(float pitch) { this.pitch = pitch; return this; } - - public void playSound(Player player) - { - player.playSound(player.getEyeLocation(), this.getSound(), this.getVolume(), this.getPitch()); - } - - public void playSound(HumanEntity human) - { - if (MUtil.isntPlayer(human)) return; - Player player = (Player)human; - this.playSound(player); - } + protected SoundEffect soundEffect = SoundEffect.valueOf("CLICK", 1.0f, 1.0f); + public SoundEffect getSoundEffect() { return this.soundEffect; } + public ChestGui setSoundEffect(SoundEffect soundEffect) { this.soundEffect = soundEffect; return this; } // -------------------------------------------- // // CONSTRUCT diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeSound.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeSound.java index b808eedc..83fe7ac9 100644 --- a/src/com/massivecraft/massivecore/command/type/enumeration/TypeSound.java +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeSound.java @@ -1,11 +1,270 @@ package com.massivecraft.massivecore.command.type.enumeration; +import java.util.Map; +import java.util.Set; + import org.bukkit.Sound; +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.collections.MassiveMap; +import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.util.Txt; public class TypeSound extends TypeEnum { + // -------------------------------------------- // + // DATA + // -------------------------------------------- // + // https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/diff/src/main/java/org/bukkit/Sound.java?until=7898a2a2d2d81308e73e9ed37725f53d7ad37bfc&at=refs%2Fheads%2Fmaster + + // Maps every sound in Minecraft 1.8 to the new sound in Minecraft 1.9 + public static Map FROM_18_TO_19 = new MassiveMap( + "AMBIENCE_CAVE", "AMBIENT_CAVE", + "AMBIENCE_RAIN", "WEATHER_RAIN", + "AMBIENCE_THUNDER", "ENTITY_LIGHTNING_THUNDER", + "ANVIL_BREAK", "BLOCK_ANVIL_BREAK", + "ANVIL_LAND", "BLOCK_ANVIL_LAND", + "ANVIL_USE", "BLOCK_ANVIL_USE", + "ARROW_HIT", "ENTITY_ARROW_HIT", + "BURP", "ENTITY_PLAYER_BURP", + "CHEST_CLOSE", "BLOCK_CHEST_CLOSE", + "CHEST_OPEN", "BLOCK_CHEST_OPEN", + "CLICK", "UI_BUTTON_CLICK", + "DOOR_CLOSE", "BLOCK_WOODEN_DOOR_CLOSE", + "DOOR_OPEN", "BLOCK_WOODEN_DOOR_OPEN", + "DRINK", "ENTITY_GENERIC_DRINK", + "EAT", "ENTITY_GENERIC_EAT", + "EXPLODE", "ENTITY_GENERIC_EXPLODE", + "FALL_BIG", "ENTITY_GENERIC_BIG_FALL", + "FALL_SMALL", "ENTITY_GENERIC_SMALL_FALL", + + "FIRE", "BLOCK_FIRE_AMBIENT", + "FIRE_IGNITE", "ITEM_FLINTANDSTEEL_USE", + "FIZZ", "ENTITY_GENERIC_EXTINGUISH_FIRE", + "FUSE", "ENTITY_TNT_PRIMED", + + "GLASS", "BLOCK_GLASS_BREAK", + "HURT_FLESH", "ENTITY_GENERIC_HURT", + "ITEM_BREAK", "ENTITY_ITEM_BREAK", + "ITEM_PICKUP", "ENTITY_ITEM_PICKUP", + "LAVA", "BLOCK_LAVA_AMBIENT", + "LAVA_POP", "BLOCK_LAVA_POP", + "LEVEL_UP", "ENTITY_PLAYER_LEVELUP", + "MINECART_BASE", "ENTITY_MINECART_RIDING", + "MINECART_INSIDE", "ENTITY_MINECART_INSIDE", + + "NOTE_BASS", "BLOCK_NOTE_BASS", // NOTE: Duplicate since 1 less sound in 1.9. + "NOTE_PIANO", "BLOCK_NOTE_HARP", + "NOTE_BASS_DRUM", "BLOCK_NOTE_BASEDRUM", + "NOTE_STICKS", "BLOCK_NOTE_HAT", + "NOTE_BASS_GUITAR", "BLOCK_NOTE_BASS", // NOTE: Duplicate since 1 less sound in 1.9. + "NOTE_SNARE_DRUM", "BLOCK_NOTE_SNARE", + "NOTE_PLING", "BLOCK_NOTE_PLING", + + "ORB_PICKUP", "ENTITY_EXPERIENCE_ORB_PICKUP", + "PISTON_EXTEND", "BLOCK_PISTON_EXTEND", + "PISTON_RETRACT", "BLOCK_PISTON_CONTRACT", + "PORTAL", "BLOCK_PORTAL_AMBIENT", + "PORTAL_TRAVEL", "BLOCK_PORTAL_TRAVEL", + "PORTAL_TRIGGER", "BLOCK_PORTAL_TRIGGER", + "SHOOT_ARROW", "ENTITY_ARROW_SHOOT", + "SPLASH", "ENTITY_GENERIC_SPLASH", // TODO: I'm not sure about this one. + "SPLASH2", "ENTITY_BOBBER_SPLASH", // TODO: I'm not sure about this one. + "STEP_GRASS", "BLOCK_GRASS_STEP", + "STEP_GRAVEL", "BLOCK_GRAVEL_STEP", + "STEP_LADDER", "BLOCK_LADDER_STEP", + "STEP_SAND", "BLOCK_SAND_STEP", + "STEP_SNOW", "BLOCK_SNOW_STEP", + "STEP_STONE", "BLOCK_STONE_STEP", + "STEP_WOOD", "BLOCK_WOOD_STEP", + "STEP_WOOL", "BLOCK_CLOTH_STEP", + "SWIM", "ENTITY_GENERIC_SWIM", + "WATER", "BLOCK_WATER_AMBIENT", + "WOOD_CLICK", "BLOCK_WOOD_BUTTON_CLICK_ON", + + // Mob sounds + "BAT_DEATH", "ENTITY_BAT_DEATH", + "BAT_HURT", "ENTITY_BAT_HURT", + "BAT_IDLE", "ENTITY_BAT_AMBIENT", + "BAT_LOOP", "ENTITY_BAT_LOOP", + "BAT_TAKEOFF", "ENTITY_BAT_TAKEOFF", + + "BLAZE_BREATH", "ENTITY_BLAZE_AMBIENT", + "BLAZE_DEATH", "ENTITY_BLAZE_DEATH", + "BLAZE_HIT", "ENTITY_BLAZE_HURT", + + "CAT_HISS", "ENTITY_CAT_HISS", + "CAT_HIT", "ENTITY_CAT_HURT", + "CAT_MEOW", "ENTITY_CAT_AMBIENT", + "CAT_PURR", "ENTITY_CAT_PURR", + "CAT_PURREOW", "ENTITY_CAT_PURREOW", + + "CHICKEN_IDLE", "ENTITY_CHICKEN_AMBIENT", + "CHICKEN_HURT", "ENTITY_CHICKEN_HURT", + "CHICKEN_EGG_POP", "ENTITY_CHICKEN_EGG", + "CHICKEN_WALK", "ENTITY_CHICKEN_STEP", + + "COW_IDLE", "ENTITY_COW_AMBIENT", + "COW_HURT", "ENTITY_COW_HURT", + "COW_WALK", "ENTITY_COW_STEP", + + "CREEPER_HISS", "ENTITY_CREEPER_PRIMED", + "CREEPER_DEATH", "ENTITY_CREEPER_DEATH", + + "ENDERDRAGON_DEATH", "ENTITY_ENDERDRAGON_DEATH", + "ENDERDRAGON_GROWL", "ENTITY_ENDERDRAGON_GROWL", + "ENDERDRAGON_HIT", "ENTITY_ENDERDRAGON_HURT", + "ENDERDRAGON_WINGS", "ENTITY_ENDERDRAGON_FLAP", + + "ENDERMAN_DEATH", "ENTITY_ENDERMEN_DEATH", + "ENDERMAN_HIT", "ENTITY_ENDERMEN_HURT", + "ENDERMAN_IDLE", "ENTITY_ENDERMEN_AMBIENT", + "ENDERMAN_TELEPORT", "ENTITY_ENDERMEN_TELEPORT", + "ENDERMAN_SCREAM", "ENTITY_ENDERMEN_SCREAM", + "ENDERMAN_STARE", "ENTITY_ENDERMEN_STARE", + + // Really unsure about all of these + "GHAST_SCREAM", "ENTITY_GHAST_AMBIENT", + "GHAST_SCREAM2", "ENTITY_GHAST_SCREAM", + "GHAST_CHARGE", "ENTITY_GHAST_WARN", + "GHAST_DEATH", "ENTITY_GHAST_DEATH", + "GHAST_FIREBALL", "ENTITY_GHAST_SHOOT", + "GHAST_MOAN", "ENTITY_GHAST_HURT", + + "IRONGOLEM_DEATH", "ENTITY_IRONGOLEM_DEATH", + "IRONGOLEM_HIT", "ENTITY_IRONGOLEM_HURT", + "IRONGOLEM_THROW", "ENTITY_IRONGOLEM_ATTACK", + "IRONGOLEM_WALK", "ENTITY_IRONGOLEM_STEP", + + "MAGMACUBE_WALK", "ENTITY_MAGMACUBE_SQUISH", // TODO: This is a wild guess. + "MAGMACUBE_WALK2", "ENTITY_MAGMACUBE_HURT", // TODO: This is a wild guess. + "MAGMACUBE_JUMP", "ENTITY_MAGMACUBE_JUMP", + + "PIG_IDLE", "ENTITY_PIG_AMBIENT", + "PIG_DEATH", "ENTITY_PIG_DEATH", + "PIG_WALK", "ENTITY_PIG_STEP", + + "SHEEP_IDLE", "ENTITY_SHEEP_AMBIENT", + "SHEEP_SHEAR", "ENTITY_SHEEP_SHEAR", + "SHEEP_WALK", "ENTITY_SHEEP_STEP", + + "SILVERFISH_HIT", "ENTITY_SILVERFISH_HURT", + "SILVERFISH_KILL", "ENTITY_SILVERFISH_DEATH", + "SILVERFISH_IDLE", "ENTITY_SILVERFISH_AMBIENT", + "SILVERFISH_WALK", "ENTITY_SILVERFISH_STEP", + + "SKELETON_IDLE", "ENTITY_SKELETON_AMBIENT", + "SKELETON_DEATH", "ENTITY_SKELETON_DEATH", + "SKELETON_HURT", "ENTITY_SKELETON_HURT", + "SKELETON_WALK", "ENTITY_SKELETON_STEP", + + "SLIME_ATTACK", "ENTITY_SLIME_ATTACK", + "SLIME_WALK", "ENTITY_SLIME_SQUISH", + "SLIME_WALK2", "ENTITY_SLIME_JUMP", + + "SPIDER_IDLE", "ENTITY_SPIDER_AMBIENT", + "SPIDER_DEATH", "ENTITY_SPIDER_DEATH", + "SPIDER_WALK", "ENTITY_SPIDER_STEP", + + "WITHER_DEATH", "ENTITY_WITHER_DEATH", + "WITHER_HURT", "ENTITY_WITHER_HURT", + "WITHER_IDLE", "ENTITY_WITHER_AMBIENT", + "WITHER_SHOOT", "ENTITY_WITHER_SHOOT", + "WITHER_SPAWN", "ENTITY_WITHER_SPAWN", + + "WOLF_BARK", "ENTITY_WOLF_AMBIENT", + "WOLF_DEATH", "ENTITY_WOLF_DEATH", + "WOLF_GROWL", "ENTITY_WOLF_GROWL", + "WOLF_HOWL", "ENTITY_WOLF_HOWL", + "WOLF_HURT", "ENTITY_WOLF_HURT", + "WOLF_PANT", "ENTITY_WOLF_PANT", + "WOLF_SHAKE", "ENTITY_WOLF_SHAKE", + "WOLF_WALK", "ENTITY_WOLF_STEP", + "WOLF_WHINE", "ENTITY_WOLF_WHINE", + + "ZOMBIE_METAL", "ENTITY_ZOMBIE_ATTACK_IRON_DOOR", + "ZOMBIE_WOOD", "ENTITY_ZOMBIE_ATTACK_DOOR_WOOD", + "ZOMBIE_WOODBREAK", "ENTITY_ZOMBIE_BREAK_DOOR_WOOD", + "ZOMBIE_IDLE", "ENTITY_ZOMBIE_AMBIENT", + "ZOMBIE_DEATH", "ENTITY_ZOMBIE_DEATH", + "ZOMBIE_HURT", "ENTITY_ZOMBIE_HURT", + "ZOMBIE_INFECT", "ENTITY_ZOMBIE_INFECT", + "ZOMBIE_UNFECT", "ENTITY_ZOMBIE_VILLAGER_CONVERTED", // TODO: I'm not sure about this one. + "ZOMBIE_REMEDY", "ENTITY_ZOMBIE_VILLAGER_CURE", // TODO: I'm not sure about this one. + "ZOMBIE_WALK", "ENTITY_ZOMBIE_STEP", + + "ZOMBIE_PIG_IDLE", "ENTITY_ZOMBIE_PIG_AMBIENT", + "ZOMBIE_PIG_ANGRY", "ENTITY_ZOMBIE_PIG_ANGRY", + "ZOMBIE_PIG_DEATH", "ENTITY_ZOMBIE_PIG_DEATH", + "ZOMBIE_PIG_HURT", "ENTITY_ZOMBIE_PIG_HURT", + + // Dig Sounds + "DIG_WOOL", "BLOCK_CLOTH_BREAK", + "DIG_GRASS", "BLOCK_GRASS_BREAK", + "DIG_GRAVEL", "BLOCK_GRAVEL_BREAK", + "DIG_SAND", "BLOCK_SAND_BREAK", + "DIG_SNOW", "BLOCK_SNOW_BREAK", + "DIG_STONE", "BLOCK_STONE_BREAK", + "DIG_WOOD", "BLOCK_WOOD_BREAK", + + // Fireworks + "FIREWORK_BLAST", "ENTITY_FIREWORK_BLAST", + "FIREWORK_BLAST2", "ENTITY_FIREWORK_BLAST_FAR", + "FIREWORK_LARGE_BLAST", "ENTITY_FIREWORK_LARGE_BLAST", + "FIREWORK_LARGE_BLAST2", "ENTITY_FIREWORK_LARGE_BLAST_FAR", + "FIREWORK_TWINKLE", "ENTITY_FIREWORK_TWINKLE", + "FIREWORK_TWINKLE2", "ENTITY_FIREWORK_TWINKLE_FAR", + "FIREWORK_LAUNCH", "ENTITY_FIREWORK_LAUNCH", + "SUCCESSFUL_HIT", "ENTITY_FIREWORK_SHOOT", + + // Horses + "HORSE_ANGRY", "ENTITY_HORSE_ANGRY", + "HORSE_ARMOR", "ENTITY_HORSE_ARMOR", + "HORSE_BREATHE", "ENTITY_HORSE_BREATHE", + "HORSE_DEATH", "ENTITY_HORSE_DEATH", + "HORSE_GALLOP", "ENTITY_HORSE_GALLOP", + "HORSE_HIT", "ENTITY_HORSE_HURT", + "HORSE_IDLE", "ENTITY_HORSE_AMBIENT", + "HORSE_JUMP", "ENTITY_HORSE_JUMP", + "HORSE_LAND", "ENTITY_HORSE_LAND", + "HORSE_SADDLE", "ENTITY_HORSE_SADDLE", + "HORSE_SOFT", "ENTITY_HORSE_STEP", + "HORSE_WOOD", "ENTITY_HORSE_STEP_WOOD", + + "DONKEY_ANGRY", "ENTITY_DONKEY_ANGRY", + "DONKEY_DEATH", "ENTITY_DONKEY_DEATH", + "DONKEY_HIT", "ENTITY_DONKEY_HURT", + "DONKEY_IDLE", "ENTITY_DONKEY_AMBIENT", + + "HORSE_SKELETON_DEATH", "ENTITY_SKELETON_HORSE_DEATH", + "HORSE_SKELETON_HIT", "ENTITY_SKELETON_HORSE_HURT", + "HORSE_SKELETON_IDLE", "ENTITY_SKELETON_HORSE_AMBIENT", + + "HORSE_ZOMBIE_DEATH", "ENTITY_ZOMBIE_HORSE_DEATH", + "HORSE_ZOMBIE_HIT", "ENTITY_ZOMBIE_HORSE_HURT", + "HORSE_ZOMBIE_IDLE", "ENTITY_ZOMBIE_HORSE_AMBIENT", + + // Villager + "VILLAGER_DEATH", "ENTITY_VILLAGER_DEATH", + "VILLAGER_HAGGLE", "ENTITY_VILLAGER_TRADING", + "VILLAGER_HIT", "ENTITY_VILLAGER_HURT", + "VILLAGER_IDLE", "ENTITY_VILLAGER_AMBIENT", + "VILLAGER_NO", "ENTITY_VILLAGER_NO", + "VILLAGER_YES", "ENTITY_VILLAGER_YES" + ); + + public static Map> FROM_19_TO_18 = MUtil.reverseIndex(FROM_18_TO_19); + + // -------------------------------------------- // + // VALUE OF + // -------------------------------------------- // + + public static Sound valueOf(String string) + { + string = get().prepareOptionKey(string); + return get().getOptions().get(string); + } + // -------------------------------------------- // // INSTANCE & CONSTRUCT // -------------------------------------------- // @@ -19,5 +278,45 @@ public class TypeSound extends TypeEnum Txt.parse("https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/Sound.java") ); } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Set getNamesInner(Sound value) + { + // Create + Set ret = new MassiveSet<>(); + + // Fill + for (String id : this.getIdsInner(value)) + { + ret.add(Txt.getNicedEnumString(id)); + } + + // Return + return ret; + } + + @Override + public Set getIdsInner(Sound value) + { + // Create + Set ret = new MassiveSet(); + + // Fill + String current = value.name(); + ret.add(current); + + String from18to19 = FROM_18_TO_19.get(current); + if (from18to19 != null) ret.add(from18to19); + + Set from19to18 = FROM_19_TO_18.get(current); + if (from19to18 != null) ret.addAll(from19to18); + + // Return + return ret; + } } diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java index 6fe99f7f..7ad60255 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java @@ -55,7 +55,7 @@ public class EngineMassiveCoreChestGui extends Engine if (action == null) return; // ... then play the sound ... - gui.playSound(event.getWhoClicked()); + gui.getSoundEffect().run(event.getWhoClicked()); // ... close the GUI ... event.getView().close(); diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java index a48ac500..854874a2 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java @@ -13,6 +13,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.ItemMeta; import com.massivecraft.massivecore.Engine; @@ -69,7 +70,26 @@ public class EngineMassiveCoreVariable extends Engine if (sender == null) return null; if (!(sender instanceof HumanEntity)) return null; HumanEntity human = (HumanEntity)sender; - ItemStack item = human.getItemInHand(); + + PlayerInventory inventory = human.getInventory(); + String ret; + + ret = getBookText(inventory.getItemInHand()); + if (ret != null) return ret; + + // TODO: Handle 1.9 API without breaking 1.8 support + + // ret = getBookText(inventory.getItemInMainHand()); + // if (ret != null) return ret; + + // ret = getBookText(inventory.getItemInOffHand()); + // if (ret != null) return ret; + + return null; + } + + public static String getBookText(ItemStack item) + { if (item == null) return null; if (!item.hasItemMeta()) return null; ItemMeta itemMeta = item.getItemMeta();