Lots of stuff.

This commit is contained in:
DemiPixel 2015-11-05 17:41:16 -08:00
parent 2955c5bcfd
commit 446dfa64d0
8 changed files with 141 additions and 17 deletions

View file

@ -291,6 +291,52 @@ function inject(serv, player) {
pitch: parseFloat(sound[3]) || 1.0
});
}
});
base.add({
base: 'playsoundforall',
info: 'to play sound for everyone',
usage: '/playsoundforall <sound_name> [volume] [pitch]',
parse(str) {
return str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
},
action(sound) {
if (!sound) {
player.chat('Usage: /playsoundforall <sound_name> [volume] [pitch]');
return;
}
player.chat('Playing "'+sound[1]+'" (volume: ' + parseFloat((sound[2] || 1.0)) + ', pitch: ' + parseFloat((sound[3] || 1.0)) + ')');
serv.playSound(sound[1], player.world, player.entity.position.scaled(1/32), {
volume: parseFloat(sound[2]) || 1.0,
pitch: parseFloat(sound[3]) || 1.0
});
}
})
base.add({
base: 'particle',
info: 'emit a particle at a position',
usage: '/particle <id> [amount] [<sizeX> <sizeY> <sizeZ>]',
parse(str) {
return str.match(/(\d+)(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?/);
},
action(data) {
if (!data) {
player.chat('Usage: /particle <id> [amount] [<sizeX> <sizeY> <sizeZ>]')
return;
}
var particle = parseInt(data[1]);
var amount = data[2] || 1;
if (amount >= 100000) {
chat('You cannot emit more than 100,000 particles!')
}
var size = data[5] ? Vec3(parseInt(data[3]), parseInt(data[4]), parseInt(data[5])) : Vec3(1, 1, 1);
player.chat('Emitting "' + data[1] + '" (count: ' + amount + ', size: ' + size.x + ',' + size.y + ',' + size.z + ')');
serv.emitParticle(particle, player.world, player.entity.position.scaled(1/32), {
count: amount,
size: size
});
}
})
serv.commands = base;

View file

@ -13,6 +13,7 @@ function inject(serv,player)
player.entity.player=player;
player.entity.health = 20;
player.entity.food = 20;
player.entity.crouching = false; // Needs added in prismarine-entity later
player.playerViewDistance = 150;
player.view=8;
player.world=serv.overworld;

View file

@ -9,20 +9,23 @@ 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){
player.setBlock(placedPosition, 63, 0);
player._client.write('open_sign_entity', {
location:placedPosition
});
}else{
player.setBlock(placedPosition, 68, 0);
player._client.write('open_sign_entity', {
location:placedPosition
});
}
player.world.getBlockType(referencePosition).then((id) => {
if([25].indexOf(id) != -1) return;
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){
player.setBlock(placedPosition, 63, 0);
player._client.write('open_sign_entity', {
location:placedPosition
});
}else{
player.setBlock(placedPosition, 68, 0);
player._client.write('open_sign_entity', {
location:placedPosition
});
}
}).catch((err)=> setTimeout(() => {throw err;},0));
});
}

View file

@ -17,6 +17,7 @@ function inject(serv, player)
var attackedPlayer = serv.entities[entityId].player;
if(attackedPlayer.gameMode!=0) return;
attackedPlayer.updateHealth(attackedPlayer.entity.health - 1);
serv.playSound('game.player.hurt', player.world, attackedPlayer.entity.position.scaled(1/32));
if(attackedPlayer.entity.health==0)
attackedPlayer._writeOthers('entity_status',{

View file

@ -1,9 +1,36 @@
var vec3 = require('vec3');
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);
}
player._client.on('block_place', ({location}={}) => {
if (player.entity.crouching) return;
var pos=new vec3(location.x,location.y,location.z);
player.world.getBlockType(pos).then((id) => {
if (id != 25) return;
if (!player.world.blockEntityData[pos.toString()]) player.world.blockEntityData[pos.toString()] = {};
var data = player.world.blockEntityData[pos.toString()];
if (typeof data.note == 'undefined') data.note = -1;
data.note++;
data.note %= 25;
serv.playNoteBlock(player.world, pos, data.note);
}).catch((err)=> setTimeout(() => {throw err;},0));
});
player._client.on('block_dig', ({location,status} = {}) => {
if (status != 0 || player.gameMode == 1) return;
var pos=new vec3(location.x,location.y,location.z);
player.world.getBlockType(pos).then((id) => {
if (id != 25) return;
if (!player.world.blockEntityData[pos.toString()]) player.world.blockEntityData[pos.toString()] = {};
var data = player.world.blockEntityData[pos.toString()];
if (typeof data.note == 'undefined') data.note = 0;
serv.playNoteBlock(player.world, pos, data.note);
}).catch((err)=> setTimeout(() => {throw err;},0));
});
}

View file

@ -0,0 +1,30 @@
var vec3 = require("vec3");
module.exports = inject;
function inject(serv) {
serv.emitParticle = (particle, world, position, {whitelist,blacklist=[],radius=32*32,longDistance,size,count}={}) => {
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
}));
if (!size) size = vec3(1.0, 1.0, 1.0);
players.filter(player => blacklist.indexOf(player) == -1)
.forEach(player => {
player._client.write('world_particles', {
particleId: particle,
longDistance: longDistance || true,
x: position.x,
y: position.y,
z: position.z,
offsetX: size.x,
offsetY: size.y,
offsetZ: size.z,
particleData: 1.0,
particles: count || 1,
data: []
});
});
}
}

View file

@ -1,3 +1,5 @@
var vec3 = require('vec3');
module.exports = inject;
function inject(serv) {
@ -10,7 +12,6 @@ function inject(serv) {
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,
@ -21,4 +22,14 @@ function inject(serv) {
});
});
}
serv.playNoteBlock = (world, position, pitch) => {
serv.emitParticle(23, world, position.clone().add(vec3(0.5, 1.5, 0.5)), {
count: 1,
size: vec3(0, 0, 0)
});
serv.playSound('note.harp', world, position, { pitch: serv.getNote(pitch) });
}
serv.getNote = note => 0.5 * Math.pow(Math.pow(2, 1/12), note);
}

View file

@ -22,7 +22,12 @@ function inject(serv,{regionFolder,generation={"name":"diamond_square","options"
serv._worldSync=new WorldSync(serv.overworld);
serv.pregenWorld = (world, size=10) => {
// WILL BE REMOVED WHEN ACTUALLY IMPLEMENTED
serv.overworld.blockEntityData = {};
serv.netherworld.blockEntityData = {};
//////////////
serv.pregenWorld = (world, size=3) => {
var promises = [];
for (var x = -size; x < size; x++) {
for (var z = -size; z < size; z++) {