From 2955c5bcfd1a0214aedbf96db93bf922474b1909 Mon Sep 17 00:00:00 2001 From: DemiPixel Date: Mon, 2 Nov 2015 19:04:09 -0800 Subject: [PATCH] Support sound basics --- src/lib/playerPlugins/commands.js | 20 ++++++++++++++++++++ src/lib/playerPlugins/placeBlock.js | 1 + src/lib/playerPlugins/sound.js | 9 +++++++++ src/lib/serverPlugins/sound.js | 24 ++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 src/lib/playerPlugins/sound.js create mode 100644 src/lib/serverPlugins/sound.js diff --git a/src/lib/playerPlugins/commands.js b/src/lib/playerPlugins/commands.js index 76747af..767d0c9 100644 --- a/src/lib/playerPlugins/commands.js +++ b/src/lib/playerPlugins/commands.js @@ -273,6 +273,26 @@ function inject(serv, player) { } }); + base.add({ + base: 'playsound', + info: 'to play sound for yourself', + usage: '/playsound [volume] [pitch]', + parse(str) { + return str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/); + }, + action(sound) { + if (!sound) { + player.chat('Usage: /playsound [volume] [pitch]'); + return; + } + player.chat('Playing "'+sound[1]+'" (volume: ' + parseFloat((sound[2] || 1.0)) + ', pitch: ' + parseFloat((sound[3] || 1.0)) + ')'); + player.playSound(sound[1], { + volume: parseFloat(sound[2]) || 1.0, + pitch: parseFloat(sound[3]) || 1.0 + }); + } + }) + serv.commands = base; player.handleCommand = (str) => { diff --git a/src/lib/playerPlugins/placeBlock.js b/src/lib/playerPlugins/placeBlock.js index ede0851..1efa2b6 100644 --- a/src/lib/playerPlugins/placeBlock.js +++ b/src/lib/playerPlugins/placeBlock.js @@ -9,6 +9,7 @@ function inject(serv,player) var referencePosition=new vec3(location.x,location.y,location.z); var directionVector=directionToVector[direction]; var placedPosition=referencePosition.plus(directionVector); + serv.playSound('random.click', player.world, placedPosition.clone().add(vec3(0.5, 0.5, 0.5))); if(heldItem.blockId!=323){ player.changeBlock(placedPosition,heldItem.blockId,heldItem.itemDamage); }else if(direction==1){ diff --git a/src/lib/playerPlugins/sound.js b/src/lib/playerPlugins/sound.js new file mode 100644 index 0000000..48a1301 --- /dev/null +++ b/src/lib/playerPlugins/sound.js @@ -0,0 +1,9 @@ +module.exports = inject; + +function inject(serv, player) { + player.playSound = (sound, opt={}) => { + console.log(sound, opt); + opt.whitelist = player; + serv.playSound(sound, player.world, null, opt); + } +} \ No newline at end of file diff --git a/src/lib/serverPlugins/sound.js b/src/lib/serverPlugins/sound.js new file mode 100644 index 0000000..ffc008d --- /dev/null +++ b/src/lib/serverPlugins/sound.js @@ -0,0 +1,24 @@ +module.exports = inject; + +function inject(serv) { + serv.playSound = (sound, world, position, {whitelist,blacklist=[],radius=32*32,volume=1.0,pitch=1.0}={}) => { + var players = (typeof whitelist != 'undefined' ? (typeof whitelist == 'array' ? whitelist : [whitelist]) : serv.getNearby({ + world: world, + position: position.scaled(32).floored(), + radius: radius // 32 blocks, fixed position + })); + players.filter(player => blacklist.indexOf(player) == -1) + .forEach(player => { + var pos = (position || player.entity.position.scaled(1/32)).scaled(8).floored(); + console.log('Data',sound, pos, volume, Math.round(pitch*63)); + player._client.write('named_sound_effect', { + soundName: sound, + x: pos.x, + y: pos.y, + z: pos.z, + volume: volume, + pitch: Math.round(pitch*63) + }); + }); + } +} \ No newline at end of file