From 161ab5edc67e0cb73a7f2a496b0b957da04e8fbb Mon Sep 17 00:00:00 2001
From: feildmaster <admin@feildmaster.com>
Date: Tue, 21 Aug 2012 17:23:17 -0500
Subject: [PATCH] Implement API for Sound, and playing the sounds for Worlds
 and Players. Adds BUKKIT-1430, BUKKIT-1226 and BUKKIT-2019

---
 src/main/java/org/bukkit/craftbukkit/CraftWorld.java  | 11 +++++++++++
 .../org/bukkit/craftbukkit/entity/CraftPlayer.java    | 11 +++++++++++
 2 files changed, 22 insertions(+)

diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 0f788626b5..33db5cebd8 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -41,6 +41,7 @@ import org.bukkit.World;
 import org.bukkit.block.Biome;
 import org.bukkit.generator.BlockPopulator;
 import org.bukkit.Difficulty;
+import org.bukkit.Sound;
 import org.bukkit.craftbukkit.block.CraftBlock;
 import org.bukkit.craftbukkit.inventory.CraftItemStack;
 import org.bukkit.plugin.messaging.StandardMessenger;
@@ -1161,4 +1162,14 @@ public class CraftWorld implements World {
     public void setWaterAnimalSpawnLimit(int limit) {
         waterAnimalSpawn = limit;
     }
+
+    public void playSound(Location loc, Sound sound, float volume, float pitch) {
+        if (loc == null || sound == null) return;
+
+        double x = loc.getX();
+        double y = loc.getY();
+        double z = loc.getZ();
+
+        getHandle().makeSound(x, y, z, sound.getSound(), volume, pitch);
+    }
 }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index bb7e50697c..50c6875c80 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -250,6 +250,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
         getHandle().netServerHandler.sendPacket(new Packet54PlayNoteBlock(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), id, instrument.getType(), note.getId()));
     }
 
+    public void playSound(Location loc, Sound sound, float volume, float pitch) {
+        if (loc == null || sound == null || getHandle().netServerHandler == null) return;
+
+        double x = loc.getBlockX() + 0.5;
+        double y = loc.getBlockY() + 0.5;
+        double z = loc.getBlockZ() + 0.5;
+
+        Packet62NamedSoundEffect packet = new Packet62NamedSoundEffect(sound.getSound(), x, y, z, volume, pitch);
+        getHandle().netServerHandler.sendPacket(packet);
+    }
+
     public void playEffect(Location loc, Effect effect, int data) {
         if (getHandle().netServerHandler == null) return;