mirror of
https://github.com/danbulant/flying-squid
synced 2026-07-05 11:10:44 +00:00
use Vec3 correctly + move commands in the related plugins
This commit is contained in:
parent
9bcbb991bb
commit
f522dfac97
22 changed files with 321 additions and 315 deletions
|
|
@ -17,4 +17,27 @@ module.exports.player=function(player,serv)
|
||||||
});
|
});
|
||||||
|
|
||||||
player.setBlock = (position,blockType,blockData) => serv.setBlock(player.world,position,blockType,blockData);
|
player.setBlock = (position,blockType,blockData) => serv.setBlock(player.world,position,blockType,blockData);
|
||||||
|
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'setblock',
|
||||||
|
info: 'to put a block',
|
||||||
|
usage: '/setblock <x> <y> <z> <id> <data>',
|
||||||
|
parse(str) {
|
||||||
|
var results = str.match(/^(~|~?-?[0-9]*) (~|~?-?[0-9]*) (~|~?-?[0-9]*) ([0-9]{1,3}) ([0-9]{1,3})/);
|
||||||
|
if(!results) return false;
|
||||||
|
return results;
|
||||||
|
},
|
||||||
|
action(params) {
|
||||||
|
var res = params.map((num, i) => { // parseInt paramaters
|
||||||
|
if (num.indexOf('~') == 0) {
|
||||||
|
return (player.entity.position[['', 'x', 'y', 'z'][i]] >> 5) + parseInt(num.slice(1) || 0);
|
||||||
|
} else {
|
||||||
|
return parseInt(num); // return parseInt>>5 if position, not id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.setBlock(new Vec3(res[1], res[2], res[3]), res[4],res[5]);
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3;
|
||||||
|
|
||||||
module.exports.player=function(player)
|
module.exports.player=function(player)
|
||||||
{
|
{
|
||||||
player._client.on('block_place', async ({location} = {}) => {
|
player._client.on('block_place', async ({location} = {}) => {
|
||||||
var referencePosition=new vec3(location.x,location.y,location.z);
|
var referencePosition=new Vec3(location.x,location.y,location.z);
|
||||||
if (player.entity.crouching) return;
|
if (player.entity.crouching) return;
|
||||||
try {
|
try {
|
||||||
var id = await player.world.getBlockType(referencePosition);
|
var id = await player.world.getBlockType(referencePosition);
|
||||||
var blockAbove = await player.world.getBlockType(referencePosition.clone().add(new vec3(0, 1, 0)));
|
var blockAbove = await player.world.getBlockType(referencePosition.clone().add(new Vec3(0, 1, 0)));
|
||||||
if (id == 54) {
|
if (id == 54) {
|
||||||
if (blockAbove) {
|
if (blockAbove) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,15 @@
|
||||||
var Vec3 = require('vec3');
|
module.exports.player=function(player) {
|
||||||
|
|
||||||
var Command = require('../command');
|
player.commands.add({
|
||||||
|
|
||||||
module.exports.player=function(player, serv) {
|
|
||||||
var base = new Command({});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'help',
|
base: 'help',
|
||||||
info: 'to show all commands',
|
info: 'to show all commands',
|
||||||
usage: '/help [command]',
|
usage: '/help [command]',
|
||||||
action(params) {
|
action(params) {
|
||||||
var c = params[0];
|
var c = params[0];
|
||||||
var hash = base.hash;
|
var hash = player.commands.hash;
|
||||||
|
|
||||||
if(c) {
|
if(c) {
|
||||||
var res = base.find(params[0])[0];
|
var res = player.commands.find(params[0])[0];
|
||||||
|
|
||||||
var help = res.params.help && res.params.help(params);
|
var help = res.params.help && res.params.help(params);
|
||||||
return help ? '' + help : 'Information not found';
|
return help ? '' + help : 'Information not found';
|
||||||
|
|
@ -37,154 +32,7 @@ module.exports.player=function(player, serv) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
base.add({
|
player.commands.add({
|
||||||
base: 'gamemode',
|
|
||||||
aliases: ['gm'],
|
|
||||||
info: 'to change game mode',
|
|
||||||
usage: '/gamemode <0-3>',
|
|
||||||
parse(str) {
|
|
||||||
var results;
|
|
||||||
if(!(results = str.match(/^([0-3])$/)))
|
|
||||||
return false;
|
|
||||||
return parseInt(str);
|
|
||||||
},
|
|
||||||
action(mode) {
|
|
||||||
player.setGameMode(mode);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'setblock',
|
|
||||||
info: 'to put a block',
|
|
||||||
usage: '/setblock <x> <y> <z> <id> <data>',
|
|
||||||
parse(str) {
|
|
||||||
var results = str.match(/^(~|~?-?[0-9]*) (~|~?-?[0-9]*) (~|~?-?[0-9]*) ([0-9]{1,3}) ([0-9]{1,3})/);
|
|
||||||
if(!results) return false;
|
|
||||||
return results;
|
|
||||||
},
|
|
||||||
action(params) {
|
|
||||||
var res = params.map((num, i) => { // parseInt paramaters
|
|
||||||
if (num.indexOf('~') == 0) {
|
|
||||||
return (player.entity.position[['', 'x', 'y', 'z'][i]] >> 5) + parseInt(num.slice(1) || 0);
|
|
||||||
} else {
|
|
||||||
return parseInt(num); // return parseInt>>5 if position, not id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
player.setBlock(new Vec3(res[1], res[2], res[3]), res[4],res[5]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'kick',
|
|
||||||
info: 'to kick a player',
|
|
||||||
usage: '/kick <player> [reason]',
|
|
||||||
parse(str) {
|
|
||||||
if(!str.match(/([a-zA-Z0-9_]+)(?: (.*))?/))
|
|
||||||
return false;
|
|
||||||
var parts = str.split(' ');
|
|
||||||
return {
|
|
||||||
username:parts.shift(),
|
|
||||||
reason:parts.join(' ')
|
|
||||||
};
|
|
||||||
},
|
|
||||||
action({username,reason}) {
|
|
||||||
var kickPlayer = serv.getPlayer(username);
|
|
||||||
if (!kickPlayer) {
|
|
||||||
player.chat(username + " is not on this server!");
|
|
||||||
} else {
|
|
||||||
kickPlayer.kick(reason);
|
|
||||||
kickPlayer.emit("kicked", player, reason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'ban',
|
|
||||||
info: 'to ban a player',
|
|
||||||
usage: '/ban <player> [reason]',
|
|
||||||
parse(str) {
|
|
||||||
if(!str.match(/([a-zA-Z0-9_]+)(?: (.*))?/))
|
|
||||||
return false;
|
|
||||||
var parts = str.split(' ');
|
|
||||||
return {
|
|
||||||
username:parts.shift(),
|
|
||||||
reason:parts.join(' ')
|
|
||||||
};
|
|
||||||
},
|
|
||||||
action({username,reason}) {
|
|
||||||
var banPlayer = serv.getPlayer(username);
|
|
||||||
|
|
||||||
if (!banPlayer) {
|
|
||||||
serv.banUsername(username, reason)
|
|
||||||
.then(() => {
|
|
||||||
serv.emit('banned', player, username, reason);
|
|
||||||
player.chat(username + ' was banned');
|
|
||||||
})
|
|
||||||
.catch(err => player.chat(username + " is not a valid player!"));
|
|
||||||
} else {
|
|
||||||
banPlayer.ban(reason);
|
|
||||||
serv.emit("banned", player, username, reason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'pardon',
|
|
||||||
info: 'to pardon a player',
|
|
||||||
usage: '/pardon <player>',
|
|
||||||
parse(str) {
|
|
||||||
if(!str.match(/([a-zA-Z0-9_]+)/))
|
|
||||||
return false;
|
|
||||||
return str;
|
|
||||||
},
|
|
||||||
action(nick) {
|
|
||||||
serv.pardonUsername(nick)
|
|
||||||
.then(()=> player.chat(nick + " is unbanned"))
|
|
||||||
.catch(err => player.chat(nick + " is not banned"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'time',
|
|
||||||
info: 'to change a time',
|
|
||||||
usage: '/time <add|query|set> <value>',
|
|
||||||
parse(str) {
|
|
||||||
var data = str.match(/^(add|query|set)(?: ([0-9]+|day|night))?/);
|
|
||||||
if(!data) return false;
|
|
||||||
return {
|
|
||||||
action: data[1],
|
|
||||||
value: data[2] == 'day' ? 1000 : (data[2] == 'night' ? 13000 : parseInt(data[2]))
|
|
||||||
};
|
|
||||||
},
|
|
||||||
action({action,value}) {
|
|
||||||
if(action == "query") {
|
|
||||||
player.chat("It is "+serv.time);
|
|
||||||
} else {
|
|
||||||
var newTime;
|
|
||||||
|
|
||||||
if(action == "set") {
|
|
||||||
newTime = value;
|
|
||||||
} else if(action == "add") {
|
|
||||||
newTime = value + serv.time;
|
|
||||||
}
|
|
||||||
|
|
||||||
player.chat("Time was changed from " + serv.time + " to " + newTime);
|
|
||||||
serv.setTime(newTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'day',
|
|
||||||
info: 'to change a time to day',
|
|
||||||
usage: '/day',
|
|
||||||
action(params) {
|
|
||||||
player.handleCommand('time set day');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'ping',
|
base: 'ping',
|
||||||
info: 'to pong!',
|
info: 'to pong!',
|
||||||
usage: '/ping [number]',
|
usage: '/ping [number]',
|
||||||
|
|
@ -198,16 +46,7 @@ module.exports.player=function(player, serv) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
base.add({
|
player.commands.add({
|
||||||
base: 'night',
|
|
||||||
info: 'to change a time to night',
|
|
||||||
usage: '/night',
|
|
||||||
action(params) {
|
|
||||||
player.handleCommand('time set night');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'modpe',
|
base: 'modpe',
|
||||||
info: 'for modpe commands',
|
info: 'for modpe commands',
|
||||||
usage: '/modpe <params>',
|
usage: '/modpe <params>',
|
||||||
|
|
@ -217,7 +56,7 @@ module.exports.player=function(player, serv) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
base.add({
|
player.commands.add({
|
||||||
base: 'version',
|
base: 'version',
|
||||||
info: 'to get version of the server',
|
info: 'to get version of the server',
|
||||||
usage: '/version',
|
usage: '/version',
|
||||||
|
|
@ -226,7 +65,7 @@ module.exports.player=function(player, serv) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
base.add({
|
player.commands.add({
|
||||||
base: 'bug',
|
base: 'bug',
|
||||||
info: 'to bug report',
|
info: 'to bug report',
|
||||||
usage: '/bug',
|
usage: '/bug',
|
||||||
|
|
@ -235,99 +74,9 @@ module.exports.player=function(player, serv) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'changeworld',
|
|
||||||
info: 'to change world',
|
|
||||||
usage: '/changeworld overworld|nether',
|
|
||||||
action(world) {
|
|
||||||
if(world=="nether") player.changeWorld(serv.netherworld, {dimension: -1});
|
|
||||||
if(world=="overworld") player.changeWorld(serv.overworld, {dimension: 0});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'playsound',
|
|
||||||
info: 'to play sound for yourself',
|
|
||||||
usage: '/playsound <sound_name> [volume] [pitch]',
|
|
||||||
parse(str) {
|
|
||||||
var results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
|
|
||||||
if(!results) return false;
|
|
||||||
return {
|
|
||||||
sound_name:results[1],
|
|
||||||
volume:results[2] ? parseFloat(results[2]) : 1.0,
|
|
||||||
pitch:results[3] ? parseFloat(results[3]) : 1.0
|
|
||||||
};
|
|
||||||
},
|
|
||||||
action({sound_name,volume,pitch}) {
|
|
||||||
player.chat('Playing "'+sound_name+'" (volume: ' + volume + ', pitch: ' + pitch + ')');
|
|
||||||
player.playSound(sound_name, {volume: volume,pitch: pitch});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'playsoundforall',
|
|
||||||
info: 'to play sound for everyone',
|
|
||||||
usage: '/playsoundforall <sound_name> [volume] [pitch]',
|
|
||||||
parse(str) {
|
|
||||||
var results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
|
|
||||||
if(!results) return false;
|
|
||||||
return {
|
|
||||||
sound_name:results[1],
|
|
||||||
volume:results[2] ? parseFloat(results[2]) : 1.0,
|
|
||||||
pitch:results[3] ? parseFloat(results[3]) : 1.0
|
|
||||||
};
|
|
||||||
},
|
|
||||||
action({sound_name,volume,pitch}) {
|
|
||||||
player.chat('Playing "'+sound_name+'" (volume: ' + volume + ', pitch: ' + pitch + ')');
|
|
||||||
serv.playSound(sound_name, player.world, player.entity.position.scaled(1/32), {volume: volume,pitch: pitch});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'particle',
|
|
||||||
info: 'emit a particle at a position',
|
|
||||||
usage: '/particle <id> [amount] [<sizeX> <sizeY> <sizeZ>]',
|
|
||||||
parse(str) {
|
|
||||||
var results=str.match(/(\d+)(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?/);
|
|
||||||
if(!results) return false;
|
|
||||||
return {
|
|
||||||
particle:parseInt(results[1]),
|
|
||||||
amount:results[2] ? parseInt(results[2]) : 1,
|
|
||||||
size:results[5] ? new Vec3(parseInt(results[3]), parseInt(results[4]), parseInt(results[5])) : new Vec3(1, 1, 1)
|
|
||||||
};
|
|
||||||
},
|
|
||||||
action({particle,amount,size}) {
|
|
||||||
if (amount >= 100000) {
|
|
||||||
player.chat('You cannot emit more than 100,000 particles!');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
player.chat('Emitting "' + particle + '" (count: ' + amount + ', size: ' + size.toString() + ')');
|
|
||||||
serv.emitParticle(particle, player.world, player.entity.position.scaled(1/32), {count: amount,size: size});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
base.add({
|
|
||||||
base: 'spawn',
|
|
||||||
info: 'Spawn an entity',
|
|
||||||
usage: '/spawn <entity_id>',
|
|
||||||
parse(str) {
|
|
||||||
var results=str.match(/(\d+)/);
|
|
||||||
if (!results) return false;
|
|
||||||
return {
|
|
||||||
id: parseInt(results[1])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
action({id}) {
|
|
||||||
serv.spawnMob(id, player.world, player.entity.position.scaled(1/32), {
|
|
||||||
velocity: Vec3((Math.random() - 0.5) * 10, Math.random()*10 + 10, (Math.random() - 0.5) * 10)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
serv.commands = base;
|
|
||||||
|
|
||||||
player.handleCommand = (str) => {
|
player.handleCommand = (str) => {
|
||||||
var res = base.use(str);
|
var res = player.commands.use(str);
|
||||||
if(res) player.chat('' + res);
|
if(res) player.chat('' + res);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,4 +17,54 @@ module.exports.server=function(serv) {
|
||||||
serv.setTime((serv.time + 20) % 24000); // Vanilla only does it every second
|
serv.setTime((serv.time + 20) % 24000); // Vanilla only does it every second
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.player=function(player,serv){
|
||||||
|
player.commands.add({
|
||||||
|
base: 'night',
|
||||||
|
info: 'to change a time to night',
|
||||||
|
usage: '/night',
|
||||||
|
action(params) {
|
||||||
|
player.handleCommand('time set night');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'time',
|
||||||
|
info: 'to change a time',
|
||||||
|
usage: '/time <add|query|set> <value>',
|
||||||
|
parse(str) {
|
||||||
|
var data = str.match(/^(add|query|set)(?: ([0-9]+|day|night))?/);
|
||||||
|
if(!data) return false;
|
||||||
|
return {
|
||||||
|
action: data[1],
|
||||||
|
value: data[2] == 'day' ? 1000 : (data[2] == 'night' ? 13000 : parseInt(data[2]))
|
||||||
|
};
|
||||||
|
},
|
||||||
|
action({action,value}) {
|
||||||
|
if(action == "query") {
|
||||||
|
player.chat("It is "+serv.time);
|
||||||
|
} else {
|
||||||
|
var newTime;
|
||||||
|
|
||||||
|
if(action == "set") {
|
||||||
|
newTime = value;
|
||||||
|
} else if(action == "add") {
|
||||||
|
newTime = value + serv.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.chat("Time was changed from " + serv.time + " to " + newTime);
|
||||||
|
serv.setTime(newTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'day',
|
||||||
|
info: 'to change a time to day',
|
||||||
|
usage: '/day',
|
||||||
|
action(params) {
|
||||||
|
player.handleCommand('time set day');
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
var Vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
|
|
||||||
module.exports.player=function(player,serv)
|
module.exports.player=function(player,serv)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ var Entity=require("prismarine-entity");
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
var EventEmitter = require('events').EventEmitter;
|
var EventEmitter = require('events').EventEmitter;
|
||||||
util.inherits(Entity, EventEmitter);
|
util.inherits(Entity, EventEmitter);
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3;
|
||||||
|
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var requireIndex = require('requireindex');
|
var requireIndex = require('requireindex');
|
||||||
|
|
@ -26,16 +26,16 @@ module.exports.server=function(serv,options) {
|
||||||
return entity;
|
return entity;
|
||||||
};
|
};
|
||||||
|
|
||||||
serv.spawnObject = (type, world, position, {pitch=0,yaw=0,velocity=vec3(0,0,0),data=1,itemId,itemDamage=0}={}) => {
|
serv.spawnObject = (type, world, position, {pitch=0,yaw=0,velocity=new Vec3(0,0,0),data=1,itemId,itemDamage=0}={}) => {
|
||||||
var object = serv.initEntity('object', type, world, position.scaled(32).floored());
|
var object = serv.initEntity('object', type, world, position.scaled(32).floored());
|
||||||
object.data = data;
|
object.data = data;
|
||||||
object.velocity = velocity.scaled(32).floored();
|
object.velocity = velocity.scaled(32).floored();
|
||||||
object.pitch = pitch;
|
object.pitch = pitch;
|
||||||
object.yaw = yaw;
|
object.yaw = yaw;
|
||||||
object.gravity = vec3(0, -20*32, 0);
|
object.gravity = new Vec3(0, -20*32, 0);
|
||||||
object.terminalvelocity = vec3(27*32, 27*32, 27*32);
|
object.terminalvelocity = new Vec3(27*32, 27*32, 27*32);
|
||||||
object.friction = vec3(10*32, 0, 10*32).floored();
|
object.friction = (new Vec3(10*32, 0, 10*32)).floored();
|
||||||
object.size = vec3(0.25*32, 0.25*32, 0.25*32); // Hardcoded, will be dependent on type!
|
object.size = new Vec3(0.25*32, 0.25*32, 0.25*32); // Hardcoded, will be dependent on type!
|
||||||
object.deathTime = 60*1000; // 60 seconds
|
object.deathTime = 60*1000; // 60 seconds
|
||||||
object.itemId = itemId;
|
object.itemId = itemId;
|
||||||
object.itemDamage = itemDamage;
|
object.itemDamage = itemDamage;
|
||||||
|
|
@ -43,16 +43,16 @@ module.exports.server=function(serv,options) {
|
||||||
object.updateAndSpawn();
|
object.updateAndSpawn();
|
||||||
};
|
};
|
||||||
|
|
||||||
serv.spawnMob = (type, world, position, {pitch=0,yaw=0,headPitch=0,velocity=vec3(0,0,0),metadata=[]}={}) => {
|
serv.spawnMob = (type, world, position, {pitch=0,yaw=0,headPitch=0,velocity=new Vec3(0,0,0),metadata=[]}={}) => {
|
||||||
var mob = serv.initEntity('mob', type, world, position.scaled(32).floored());
|
var mob = serv.initEntity('mob', type, world, position.scaled(32).floored());
|
||||||
mob.velocity = velocity.scaled(32).floored();
|
mob.velocity = velocity.scaled(32).floored();
|
||||||
mob.pitch = pitch;
|
mob.pitch = pitch;
|
||||||
mob.headPitch = headPitch;
|
mob.headPitch = headPitch;
|
||||||
mob.yaw = yaw;
|
mob.yaw = yaw;
|
||||||
mob.gravity = vec3(0, -20*32, 0);
|
mob.gravity = new Vec3(0, -20*32, 0);
|
||||||
mob.terminalvelocity = vec3(27*32, 27*32, 27*32);
|
mob.terminalvelocity = new Vec3(27*32, 27*32, 27*32);
|
||||||
mob.friction = vec3(10*32, 0, 10*32);
|
mob.friction = new Vec3(10*32, 0, 10*32);
|
||||||
mob.size = vec3(0.75, 1.75, 0.75);
|
mob.size = new Vec3(0.75, 1.75, 0.75);
|
||||||
mob.metadata = metadata;
|
mob.metadata = metadata;
|
||||||
|
|
||||||
mob.updateAndSpawn();
|
mob.updateAndSpawn();
|
||||||
|
|
@ -69,6 +69,26 @@ module.exports.server=function(serv,options) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.exports.player=function(player,serv){
|
||||||
|
player.commands.add({
|
||||||
|
base: 'spawn',
|
||||||
|
info: 'Spawn an entity',
|
||||||
|
usage: '/spawn <entity_id>',
|
||||||
|
parse(str) {
|
||||||
|
var results=str.match(/(\d+)/);
|
||||||
|
if (!results) return false;
|
||||||
|
return {
|
||||||
|
id: parseInt(results[1])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
action({id}) {
|
||||||
|
serv.spawnMob(id, player.world, player.entity.position.scaled(1/32), {
|
||||||
|
velocity: Vec3((Math.random() - 0.5) * 10, Math.random()*10 + 10, (Math.random() - 0.5) * 10)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.exports.entity=function(entity,serv){
|
module.exports.entity=function(entity,serv){
|
||||||
|
|
||||||
entity.initEntity=(type, entityType, world, position)=>{
|
entity.initEntity=(type, entityType, world, position)=>{
|
||||||
|
|
@ -103,7 +123,7 @@ module.exports.entity=function(entity,serv){
|
||||||
catch(err){
|
catch(err){
|
||||||
setTimeout(() => {throw err;},0)
|
setTimeout(() => {throw err;},0)
|
||||||
}
|
}
|
||||||
if (!oldPosAndOnGround.oldPos.equals(vec3(0,0,0)))
|
if (!oldPosAndOnGround.oldPos.equals(new Vec3(0,0,0)))
|
||||||
if (entity.type == 'mob') entity.sendPosition(oldPosAndOnGround);
|
if (entity.type == 'mob') entity.sendPosition(oldPosAndOnGround);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
var Entity=require("prismarine-entity");
|
var Entity=require("prismarine-entity");
|
||||||
var Vec3=require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
|
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var requireIndex = require('requireindex');
|
var requireIndex = require('requireindex');
|
||||||
var plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
|
var plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
|
||||||
var Player=require("../player");
|
var Player=require("../player");
|
||||||
|
var Command = require('../command');
|
||||||
|
|
||||||
module.exports.server=function(serv,options)
|
module.exports.server=function(serv,options)
|
||||||
{
|
{
|
||||||
|
|
@ -14,6 +15,7 @@ module.exports.server=function(serv,options)
|
||||||
serv._server.on('login', async (client) => {
|
serv._server.on('login', async (client) => {
|
||||||
var player=new Player();
|
var player=new Player();
|
||||||
player._client=client;
|
player._client=client;
|
||||||
|
player.commands = new Command({});
|
||||||
Object.keys(plugins)
|
Object.keys(plugins)
|
||||||
.filter(pluginName => plugins[pluginName].player!=undefined)
|
.filter(pluginName => plugins[pluginName].player!=undefined)
|
||||||
.forEach(pluginName => plugins[pluginName].player(player, serv, options));
|
.forEach(pluginName => plugins[pluginName].player(player, serv, options));
|
||||||
|
|
@ -32,7 +34,7 @@ module.exports.player=function(player,serv)
|
||||||
{
|
{
|
||||||
function addPlayer()
|
function addPlayer()
|
||||||
{
|
{
|
||||||
player.entity=serv.initEntity('player', null, serv.overworld, Vec3(0,0,0));
|
player.entity=serv.initEntity('player', null, serv.overworld, new Vec3(0,0,0));
|
||||||
player.entity.type = 'player';
|
player.entity.type = 'player';
|
||||||
player.entity.player=player;
|
player.entity.player=player;
|
||||||
player.entity.health = 20;
|
player.entity.health = 20;
|
||||||
|
|
|
||||||
|
|
@ -64,4 +64,76 @@ module.exports.player=function(player,serv)
|
||||||
};
|
};
|
||||||
|
|
||||||
player.pardon = () => serv.pardon(player._client.uuid);
|
player.pardon = () => serv.pardon(player._client.uuid);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'kick',
|
||||||
|
info: 'to kick a player',
|
||||||
|
usage: '/kick <player> [reason]',
|
||||||
|
parse(str) {
|
||||||
|
if(!str.match(/([a-zA-Z0-9_]+)(?: (.*))?/))
|
||||||
|
return false;
|
||||||
|
var parts = str.split(' ');
|
||||||
|
return {
|
||||||
|
username:parts.shift(),
|
||||||
|
reason:parts.join(' ')
|
||||||
|
};
|
||||||
|
},
|
||||||
|
action({username,reason}) {
|
||||||
|
var kickPlayer = serv.getPlayer(username);
|
||||||
|
if (!kickPlayer) {
|
||||||
|
player.chat(username + " is not on this server!");
|
||||||
|
} else {
|
||||||
|
kickPlayer.kick(reason);
|
||||||
|
kickPlayer.emit("kicked", player, reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'ban',
|
||||||
|
info: 'to ban a player',
|
||||||
|
usage: '/ban <player> [reason]',
|
||||||
|
parse(str) {
|
||||||
|
if(!str.match(/([a-zA-Z0-9_]+)(?: (.*))?/))
|
||||||
|
return false;
|
||||||
|
var parts = str.split(' ');
|
||||||
|
return {
|
||||||
|
username:parts.shift(),
|
||||||
|
reason:parts.join(' ')
|
||||||
|
};
|
||||||
|
},
|
||||||
|
action({username,reason}) {
|
||||||
|
var banPlayer = serv.getPlayer(username);
|
||||||
|
|
||||||
|
if (!banPlayer) {
|
||||||
|
serv.banUsername(username, reason)
|
||||||
|
.then(() => {
|
||||||
|
serv.emit('banned', player, username, reason);
|
||||||
|
player.chat(username + ' was banned');
|
||||||
|
})
|
||||||
|
.catch(err => player.chat(username + " is not a valid player!"));
|
||||||
|
} else {
|
||||||
|
banPlayer.ban(reason);
|
||||||
|
serv.emit("banned", player, username, reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'pardon',
|
||||||
|
info: 'to pardon a player',
|
||||||
|
usage: '/pardon <player>',
|
||||||
|
parse(str) {
|
||||||
|
if(!str.match(/([a-zA-Z0-9_]+)/))
|
||||||
|
return false;
|
||||||
|
return str;
|
||||||
|
},
|
||||||
|
action(nick) {
|
||||||
|
serv.pardonUsername(nick)
|
||||||
|
.then(()=> player.chat(nick + " is unbanned"))
|
||||||
|
.catch(err => player.chat(nick + " is not banned"));
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
var dir = require("node-dir");
|
var dir = require("node-dir");
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
|
|
||||||
|
|
@ -50,11 +50,11 @@ function modpeApi() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTile(x, y, z, id, damage) {
|
function setTile(x, y, z, id, damage) {
|
||||||
server.setBlock(server.overworld,new vec3(x, y, z), id, damage);
|
server.setBlock(server.overworld,new Vec3(x, y, z), id, damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTile(x, y, z) {
|
function getTile(x, y, z) {
|
||||||
return server._worldSync.getBlockType(new vec3(x, y, z));
|
return server._worldSync.getBlockType(new Vec3(x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
function preventDefault() {
|
function preventDefault() {
|
||||||
|
|
@ -158,7 +158,7 @@ module.exports.server=function(serv,settings)
|
||||||
newLevel();
|
newLevel();
|
||||||
|
|
||||||
player._client.on("block_dig", function (packet) {
|
player._client.on("block_dig", function (packet) {
|
||||||
var pos = new vec3(packet.location);
|
var pos = new Vec3(packet.location);
|
||||||
if (packet.status == 0 && player.gameMode != 1)
|
if (packet.status == 0 && player.gameMode != 1)
|
||||||
startDestroyBlock(pos.x, pos.y, pos.z, 0);
|
startDestroyBlock(pos.x, pos.y, pos.z, 0);
|
||||||
else if (packet.status == 2)
|
else if (packet.status == 2)
|
||||||
|
|
@ -177,7 +177,7 @@ module.exports.server=function(serv,settings)
|
||||||
if (packet.location.y < 0) return;
|
if (packet.location.y < 0) return;
|
||||||
useItem(packet.location.x, packet.location.y, packet.location.z,
|
useItem(packet.location.x, packet.location.y, packet.location.z,
|
||||||
packet.heldItem.blockId,
|
packet.heldItem.blockId,
|
||||||
serv._worldSync.getBlockType(new vec3(packet.location.x, packet.location.y, packet.location.z)));
|
serv._worldSync.getBlockType(new Vec3(packet.location.x, packet.location.y, packet.location.z)));
|
||||||
});
|
});
|
||||||
|
|
||||||
player.on('modpe', function (command) {
|
player.on('modpe', function (command) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
|
|
||||||
module.exports.server=function(serv) {
|
module.exports.server=function(serv) {
|
||||||
serv.emitParticle = (particle, world, position, {whitelist,blacklist=[],radius=32*32,longDistance,size,count}={}) => {
|
serv.emitParticle = (particle, world, position, {whitelist,blacklist=[],radius=32*32,longDistance,size,count}={}) => {
|
||||||
|
|
@ -7,7 +7,7 @@ module.exports.server=function(serv) {
|
||||||
position: position.scaled(32).floored(),
|
position: position.scaled(32).floored(),
|
||||||
radius: radius // 32 blocks, fixed position
|
radius: radius // 32 blocks, fixed position
|
||||||
}));
|
}));
|
||||||
if (!size) size = vec3(1.0, 1.0, 1.0);
|
if (!size) size = new Vec3(1.0, 1.0, 1.0);
|
||||||
players.filter(player => blacklist.indexOf(player) == -1)
|
players.filter(player => blacklist.indexOf(player) == -1)
|
||||||
.forEach(player => {
|
.forEach(player => {
|
||||||
player._client.write('world_particles', {
|
player._client.write('world_particles', {
|
||||||
|
|
@ -25,4 +25,29 @@ module.exports.server=function(serv) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.player=function(player,serv){
|
||||||
|
player.commands.add({
|
||||||
|
base: 'particle',
|
||||||
|
info: 'emit a particle at a position',
|
||||||
|
usage: '/particle <id> [amount] [<sizeX> <sizeY> <sizeZ>]',
|
||||||
|
parse(str) {
|
||||||
|
var results=str.match(/(\d+)(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?/);
|
||||||
|
if(!results) return false;
|
||||||
|
return {
|
||||||
|
particle:parseInt(results[1]),
|
||||||
|
amount:results[2] ? parseInt(results[2]) : 1,
|
||||||
|
size:results[5] ? new Vec3(parseInt(results[3]), parseInt(results[4]), parseInt(results[5])) : new Vec3(1, 1, 1)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
action({particle,amount,size}) {
|
||||||
|
if (amount >= 100000) {
|
||||||
|
player.chat('You cannot emit more than 100,000 particles!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.chat('Emitting "' + particle + '" (count: ' + amount + ', size: ' + size.toString() + ')');
|
||||||
|
serv.emitParticle(particle, player.world, player.entity.position.scaled(1/32), {count: amount,size: size});
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var blocks=require("minecraft-data")(require("../version")).blocks;
|
var blocks=require("minecraft-data")(require("../version")).blocks;
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
|
|
||||||
module.exports.entity=function(entity){
|
module.exports.entity=function(entity){
|
||||||
entity.calculatePhysics = async (delta) => {
|
entity.calculatePhysics = async (delta) => {
|
||||||
|
|
@ -10,7 +10,7 @@ module.exports.entity=function(entity){
|
||||||
}
|
}
|
||||||
|
|
||||||
var vSign = getSign(entity.velocity);
|
var vSign = getSign(entity.velocity);
|
||||||
var sizeSigned = vec3(vSign.x * entity.size.x, vSign.y * entity.size.y, vSign.z * entity.size.z);
|
var sizeSigned = new Vec3(vSign.x * entity.size.x, vSign.y * entity.size.y, vSign.z * entity.size.z);
|
||||||
|
|
||||||
var xVec = entity.position.offset(entity.velocity.x*delta + sizeSigned.x/2, 0, 0).scaled(1/32).floored();
|
var xVec = entity.position.offset(entity.velocity.x*delta + sizeSigned.x/2, 0, 0).scaled(1/32).floored();
|
||||||
var yVec = entity.position.offset(0, entity.velocity.y*delta + sizeSigned.y/2, 0).scaled(1/32).floored();
|
var yVec = entity.position.offset(0, entity.velocity.y*delta + sizeSigned.y/2, 0).scaled(1/32).floored();
|
||||||
|
|
@ -34,7 +34,7 @@ module.exports.entity=function(entity){
|
||||||
entity.position.y += getMoveAmount('y', yBlock, entity, delta, sizeSigned.y);
|
entity.position.y += getMoveAmount('y', yBlock, entity, delta, sizeSigned.y);
|
||||||
entity.position.z += getMoveAmount('z', zBlock, entity, delta, sizeSigned.z);
|
entity.position.z += getMoveAmount('z', zBlock, entity, delta, sizeSigned.z);
|
||||||
|
|
||||||
//serv.emitParticle(30, serv.overworld, entity.position.scaled(1/32), { size: vec3(0, 0, 0) });
|
//serv.emitParticle(30, serv.overworld, entity.position.scaled(1/32), { size: new Vec3(0, 0, 0) });
|
||||||
return { oldPos: oldPos, onGround: yBlock}
|
return { oldPos: oldPos, onGround: yBlock}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -49,7 +49,7 @@ module.exports.entity=function(entity){
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSign(vec) {
|
function getSign(vec) {
|
||||||
return vec3(Math.sign(vec.x), Math.sign(vec.y), Math.sign(vec.z));
|
return new Vec3(Math.sign(vec.x), Math.sign(vec.y), Math.sign(vec.z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var blocks=require("minecraft-data")(require("../version")).blocks;
|
var blocks=require("minecraft-data")(require("../version")).blocks;
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
|
|
||||||
var materialToSound = {
|
var materialToSound = {
|
||||||
undefined: 'stone',
|
undefined: 'stone',
|
||||||
|
|
@ -15,13 +15,13 @@ module.exports.player=function(player,serv)
|
||||||
{
|
{
|
||||||
player._client.on("block_place",({direction,heldItem,location} = {}) => {
|
player._client.on("block_place",({direction,heldItem,location} = {}) => {
|
||||||
if(direction==-1 || heldItem.blockId==-1) return;
|
if(direction==-1 || heldItem.blockId==-1) return;
|
||||||
var referencePosition=new vec3(location.x,location.y,location.z);
|
var referencePosition=new Vec3(location.x,location.y,location.z);
|
||||||
var directionVector=directionToVector[direction];
|
var directionVector=directionToVector[direction];
|
||||||
var placedPosition=referencePosition.plus(directionVector);
|
var placedPosition=referencePosition.plus(directionVector);
|
||||||
player.world.getBlockType(referencePosition).then((id) => {
|
player.world.getBlockType(referencePosition).then((id) => {
|
||||||
if([25].indexOf(id) != -1) return;
|
if([25].indexOf(id) != -1) return;
|
||||||
var sound = 'dig.' + (materialToSound[blocks[heldItem.blockId].material] || 'stone');
|
var sound = 'dig.' + (materialToSound[blocks[heldItem.blockId].material] || 'stone');
|
||||||
serv.playSound(sound, player.world, placedPosition.clone().add(vec3(0.5, 0.5, 0.5)), {
|
serv.playSound(sound, player.world, placedPosition.clone().add(new Vec3(0.5, 0.5, 0.5)), {
|
||||||
pitch: 0.8
|
pitch: 0.8
|
||||||
});
|
});
|
||||||
if(heldItem.blockId!=323){
|
if(heldItem.blockId!=323){
|
||||||
|
|
@ -41,4 +41,4 @@ module.exports.player=function(player,serv)
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
var directionToVector=[new vec3(0,-1,0),new vec3(0,1,0),new vec3(0,0,-1),new vec3(0,0,1),new vec3(-1,0,0),new vec3(1,0,0)];
|
var directionToVector=[new Vec3(0,-1,0),new Vec3(0,1,0),new Vec3(0,0,-1),new Vec3(0,0,1),new Vec3(-1,0,0),new Vec3(1,0,0)];
|
||||||
|
|
|
||||||
|
|
@ -11,4 +11,22 @@ module.exports.server=function(serv)
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.player=function(player){
|
||||||
|
player.commands.add({
|
||||||
|
base: 'gamemode',
|
||||||
|
aliases: ['gm'],
|
||||||
|
info: 'to change game mode',
|
||||||
|
usage: '/gamemode <0-3>',
|
||||||
|
parse(str) {
|
||||||
|
var results;
|
||||||
|
if(!(results = str.match(/^([0-3])$/)))
|
||||||
|
return false;
|
||||||
|
return parseInt(str);
|
||||||
|
},
|
||||||
|
action(mode) {
|
||||||
|
player.setGameMode(mode);
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
var vec3=require("vec3");
|
var Vec3 = require("vec3").Vec3;
|
||||||
|
|
||||||
|
|
||||||
function randomInt (low, high) {
|
function randomInt (low, high) {
|
||||||
|
|
@ -9,7 +9,7 @@ module.exports.server=function(serv,settings)
|
||||||
{
|
{
|
||||||
serv.gameMode=settings.gameMode;
|
serv.gameMode=settings.gameMode;
|
||||||
|
|
||||||
serv.getSpawnPoint = () => new vec3(randomInt(5,20),81,randomInt(5,20));
|
serv.getSpawnPoint = () => new Vec3(randomInt(5,20),81,randomInt(5,20));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
var vec3 = require('vec3');
|
var Vec3 = require('vec3').Vec3;
|
||||||
|
|
||||||
|
|
||||||
module.exports.server=function(serv) {
|
module.exports.server=function(serv) {
|
||||||
serv.playSound = (sound, world, position, {whitelist,blacklist=[],radius=32*32,volume=1.0,pitch=1.0}={}) => {
|
serv.playSound = (sound, world, position, {whitelist,blacklist=[],radius=32*32,volume=1.0,pitch=1.0}={}) => {
|
||||||
|
|
@ -23,9 +22,9 @@ module.exports.server=function(serv) {
|
||||||
};
|
};
|
||||||
|
|
||||||
serv.playNoteBlock = (world, position, pitch) => {
|
serv.playNoteBlock = (world, position, pitch) => {
|
||||||
serv.emitParticle(23, world, position.clone().add(vec3(0.5, 1.5, 0.5)), {
|
serv.emitParticle(23, world, position.clone().add(new Vec3(0.5, 1.5, 0.5)), {
|
||||||
count: 1,
|
count: 1,
|
||||||
size: vec3(0, 0, 0)
|
size: new Vec3(0, 0, 0)
|
||||||
});
|
});
|
||||||
serv.playSound('note.harp', world, position, { pitch: serv.getNote(pitch) });
|
serv.playSound('note.harp', world, position, { pitch: serv.getNote(pitch) });
|
||||||
};
|
};
|
||||||
|
|
@ -41,7 +40,7 @@ module.exports.player=function(player,serv) {
|
||||||
|
|
||||||
player._client.on('block_place', ({location}={}) => {
|
player._client.on('block_place', ({location}={}) => {
|
||||||
if (player.entity.crouching) return;
|
if (player.entity.crouching) return;
|
||||||
var pos=new vec3(location.x,location.y,location.z);
|
var pos=new Vec3(location.x,location.y,location.z);
|
||||||
player.world.getBlockType(pos).then((id) => {
|
player.world.getBlockType(pos).then((id) => {
|
||||||
if (id != 25) return;
|
if (id != 25) return;
|
||||||
if (!player.world.blockEntityData[pos.toString()]) player.world.blockEntityData[pos.toString()] = {};
|
if (!player.world.blockEntityData[pos.toString()]) player.world.blockEntityData[pos.toString()] = {};
|
||||||
|
|
@ -55,7 +54,7 @@ module.exports.player=function(player,serv) {
|
||||||
|
|
||||||
player._client.on('block_dig', ({location,status} = {}) => {
|
player._client.on('block_dig', ({location,status} = {}) => {
|
||||||
if (status != 0 || player.gameMode == 1) return;
|
if (status != 0 || player.gameMode == 1) return;
|
||||||
var pos=new vec3(location.x,location.y,location.z);
|
var pos=new Vec3(location.x,location.y,location.z);
|
||||||
player.world.getBlockType(pos).then((id) => {
|
player.world.getBlockType(pos).then((id) => {
|
||||||
if (id != 25) return;
|
if (id != 25) return;
|
||||||
if (!player.world.blockEntityData[pos.toString()]) player.world.blockEntityData[pos.toString()] = {};
|
if (!player.world.blockEntityData[pos.toString()]) player.world.blockEntityData[pos.toString()] = {};
|
||||||
|
|
@ -64,4 +63,43 @@ module.exports.player=function(player,serv) {
|
||||||
serv.playNoteBlock(player.world, pos, data.note);
|
serv.playNoteBlock(player.world, pos, data.note);
|
||||||
}).catch((err)=> setTimeout(() => {throw err;},0));
|
}).catch((err)=> setTimeout(() => {throw err;},0));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'playsound',
|
||||||
|
info: 'to play sound for yourself',
|
||||||
|
usage: '/playsound <sound_name> [volume] [pitch]',
|
||||||
|
parse(str) {
|
||||||
|
var results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
|
||||||
|
if(!results) return false;
|
||||||
|
return {
|
||||||
|
sound_name:results[1],
|
||||||
|
volume:results[2] ? parseFloat(results[2]) : 1.0,
|
||||||
|
pitch:results[3] ? parseFloat(results[3]) : 1.0
|
||||||
|
};
|
||||||
|
},
|
||||||
|
action({sound_name,volume,pitch}) {
|
||||||
|
player.chat('Playing "'+sound_name+'" (volume: ' + volume + ', pitch: ' + pitch + ')');
|
||||||
|
player.playSound(sound_name, {volume: volume,pitch: pitch});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'playsoundforall',
|
||||||
|
info: 'to play sound for everyone',
|
||||||
|
usage: '/playsoundforall <sound_name> [volume] [pitch]',
|
||||||
|
parse(str) {
|
||||||
|
var results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
|
||||||
|
if(!results) return false;
|
||||||
|
return {
|
||||||
|
sound_name:results[1],
|
||||||
|
volume:results[2] ? parseFloat(results[2]) : 1.0,
|
||||||
|
pitch:results[3] ? parseFloat(results[3]) : 1.0
|
||||||
|
};
|
||||||
|
},
|
||||||
|
action({sound_name,volume,pitch}) {
|
||||||
|
player.chat('Playing "'+sound_name+'" (volume: ' + volume + ', pitch: ' + pitch + ')');
|
||||||
|
serv.playSound(sound_name, player.world, player.entity.position.scaled(1/32), {volume: volume,pitch: pitch});
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
var vec3 = require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
|
|
||||||
vec3.Vec3.prototype.toFixedPosition=function() {
|
Vec3.prototype.toFixedPosition=function() {
|
||||||
return this.scaled(32).floored();
|
return this.scaled(32).floored();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -36,15 +36,15 @@ module.exports.player=function(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
player._client.on('position', ({x,y,z,onGround} = {}) =>
|
player._client.on('position', ({x,y,z,onGround} = {}) =>
|
||||||
sendRelativePositionChange((new vec3(x, y, z)).toFixedPosition(), onGround));
|
sendRelativePositionChange((new Vec3(x, y, z)).toFixedPosition(), onGround));
|
||||||
|
|
||||||
player._client.on('position_look', ({x,y,z,onGround,yaw,pitch} = {}) => {
|
player._client.on('position_look', ({x,y,z,onGround,yaw,pitch} = {}) => {
|
||||||
sendRelativePositionChange((new vec3(x, y, z)).toFixedPosition(), onGround);
|
sendRelativePositionChange((new Vec3(x, y, z)).toFixedPosition(), onGround);
|
||||||
sendLook(yaw,pitch,onGround);
|
sendLook(yaw,pitch,onGround);
|
||||||
});
|
});
|
||||||
|
|
||||||
function sendRelativePositionChange(newPosition, onGround) {
|
function sendRelativePositionChange(newPosition, onGround) {
|
||||||
if (player.entity.position.distanceTo(new vec3(0, 0, 0)) != 0) {
|
if (player.entity.position.distanceTo(new Vec3(0, 0, 0)) != 0) {
|
||||||
var diff = newPosition.minus(player.entity.position);
|
var diff = newPosition.minus(player.entity.position);
|
||||||
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
|
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
|
||||||
{
|
{
|
||||||
|
|
@ -58,7 +58,7 @@ module.exports.player=function(player)
|
||||||
onGround: onGround
|
onGround: onGround
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (diff.distanceTo(new vec3(0, 0, 0)) != 0) {
|
else if (diff.distanceTo(new Vec3(0, 0, 0)) != 0) {
|
||||||
player._writeOthersNearby('rel_entity_move', {
|
player._writeOthersNearby('rel_entity_move', {
|
||||||
entityId: player.entity.id,
|
entityId: player.entity.id,
|
||||||
dX: diff.x,
|
dX: diff.x,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
var vec3=require("vec3");
|
var Vec3 = require("vec3").Vec3
|
||||||
var spiralloop = require('spiralloop');
|
var spiralloop = require('spiralloop');
|
||||||
|
|
||||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||||
var World = require('prismarine-world');
|
var World = require('prismarine-world');
|
||||||
var Vec3 = require('vec3');
|
|
||||||
var WorldSync = require("prismarine-world-sync");
|
var WorldSync = require("prismarine-world-sync");
|
||||||
|
|
||||||
var generations={
|
var generations={
|
||||||
|
|
@ -52,7 +51,7 @@ module.exports.server=function(serv,{regionFolder,generation={"name":"diamond_sq
|
||||||
//serv.pregenWorld(serv.netherworld).then(() => serv.log('Pre-Generated Nether'));
|
//serv.pregenWorld(serv.netherworld).then(() => serv.log('Pre-Generated Nether'));
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.player=function(player) {
|
module.exports.player=function(player,serv) {
|
||||||
|
|
||||||
player.spawnEntity = entity => {
|
player.spawnEntity = entity => {
|
||||||
player._client.write(entity.spawnPacketName, entity.getSpawnPacket());
|
player._client.write(entity.spawnPacketName, entity.getSpawnPacket());
|
||||||
|
|
@ -167,4 +166,14 @@ module.exports.player=function(player) {
|
||||||
player.sendRestMap();
|
player.sendRestMap();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'changeworld',
|
||||||
|
info: 'to change world',
|
||||||
|
usage: '/changeworld overworld|nether',
|
||||||
|
action(world) {
|
||||||
|
if(world=="nether") player.changeWorld(serv.netherworld, {dimension: -1});
|
||||||
|
if(world=="overworld") player.changeWorld(serv.overworld, {dimension: 0});
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||||
var Vec3 = require('vec3');
|
var Vec3 = require('vec3').Vec3;
|
||||||
var blocks=require("minecraft-data")(require("../version")).blocks;
|
var blocks=require("minecraft-data")(require("../version")).blocks;
|
||||||
|
|
||||||
function generation() {
|
function generation() {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||||
var Vec3 = require('vec3');
|
var Vec3 = require('vec3').Vec3;
|
||||||
var rand = require('random-seed');
|
var rand = require('random-seed');
|
||||||
|
|
||||||
class DiamondSquare {
|
class DiamondSquare {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||||
var Vec3 = require('vec3');
|
var Vec3 = require('vec3').Vec3;
|
||||||
|
|
||||||
function generation() {
|
function generation() {
|
||||||
function generateSimpleChunk(chunkX, chunkZ) {
|
function generateSimpleChunk(chunkX, chunkZ) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||||
var Vec3 = require('vec3');
|
var Vec3 = require('vec3').Vec3;
|
||||||
var rand = require('random-seed');
|
var rand = require('random-seed');
|
||||||
|
|
||||||
function generation({seed,level=50}={}) {
|
function generation({seed,level=50}={}) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||||
var Vec3 = require('vec3');
|
var Vec3 = require('vec3').Vec3;
|
||||||
|
|
||||||
function generation({opt='default',bottom_id=7,middle_id=1,top_id=2,middle_thickness=3,debug=false}={}) {
|
function generation({opt='default',bottom_id=7,middle_id=1,top_id=2,middle_thickness=3,debug=false}={}) {
|
||||||
function generateChunk(chunkX,chunkZ) {
|
function generateChunk(chunkX,chunkZ) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue