mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-16 13:01:12 +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.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)
|
||||
{
|
||||
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;
|
||||
try {
|
||||
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 (blockAbove) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1,20 +1,15 @@
|
|||
var Vec3 = require('vec3');
|
||||
module.exports.player=function(player) {
|
||||
|
||||
var Command = require('../command');
|
||||
|
||||
module.exports.player=function(player, serv) {
|
||||
var base = new Command({});
|
||||
|
||||
base.add({
|
||||
player.commands.add({
|
||||
base: 'help',
|
||||
info: 'to show all commands',
|
||||
usage: '/help [command]',
|
||||
action(params) {
|
||||
var c = params[0];
|
||||
var hash = base.hash;
|
||||
var hash = player.commands.hash;
|
||||
|
||||
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);
|
||||
return help ? '' + help : 'Information not found';
|
||||
|
|
@ -37,154 +32,7 @@ module.exports.player=function(player, serv) {
|
|||
}
|
||||
});
|
||||
|
||||
base.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({
|
||||
player.commands.add({
|
||||
base: 'ping',
|
||||
info: 'to pong!',
|
||||
usage: '/ping [number]',
|
||||
|
|
@ -198,16 +46,7 @@ module.exports.player=function(player, serv) {
|
|||
}
|
||||
});
|
||||
|
||||
base.add({
|
||||
base: 'night',
|
||||
info: 'to change a time to night',
|
||||
usage: '/night',
|
||||
action(params) {
|
||||
player.handleCommand('time set night');
|
||||
}
|
||||
});
|
||||
|
||||
base.add({
|
||||
player.commands.add({
|
||||
base: 'modpe',
|
||||
info: 'for modpe commands',
|
||||
usage: '/modpe <params>',
|
||||
|
|
@ -217,7 +56,7 @@ module.exports.player=function(player, serv) {
|
|||
}
|
||||
});
|
||||
|
||||
base.add({
|
||||
player.commands.add({
|
||||
base: 'version',
|
||||
info: 'to get version of the server',
|
||||
usage: '/version',
|
||||
|
|
@ -226,7 +65,7 @@ module.exports.player=function(player, serv) {
|
|||
}
|
||||
});
|
||||
|
||||
base.add({
|
||||
player.commands.add({
|
||||
base: 'bug',
|
||||
info: 'to bug report',
|
||||
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) => {
|
||||
var res = base.use(str);
|
||||
var res = player.commands.use(str);
|
||||
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
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ var Entity=require("prismarine-entity");
|
|||
var util = require('util');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
util.inherits(Entity, EventEmitter);
|
||||
var vec3 = require("vec3");
|
||||
var Vec3 = require("vec3").Vec3;
|
||||
|
||||
var path = require('path');
|
||||
var requireIndex = require('requireindex');
|
||||
|
|
@ -26,16 +26,16 @@ module.exports.server=function(serv,options) {
|
|||
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());
|
||||
object.data = data;
|
||||
object.velocity = velocity.scaled(32).floored();
|
||||
object.pitch = pitch;
|
||||
object.yaw = yaw;
|
||||
object.gravity = vec3(0, -20*32, 0);
|
||||
object.terminalvelocity = vec3(27*32, 27*32, 27*32);
|
||||
object.friction = 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.gravity = new Vec3(0, -20*32, 0);
|
||||
object.terminalvelocity = new Vec3(27*32, 27*32, 27*32);
|
||||
object.friction = (new Vec3(10*32, 0, 10*32)).floored();
|
||||
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.itemId = itemId;
|
||||
object.itemDamage = itemDamage;
|
||||
|
|
@ -43,16 +43,16 @@ module.exports.server=function(serv,options) {
|
|||
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());
|
||||
mob.velocity = velocity.scaled(32).floored();
|
||||
mob.pitch = pitch;
|
||||
mob.headPitch = headPitch;
|
||||
mob.yaw = yaw;
|
||||
mob.gravity = vec3(0, -20*32, 0);
|
||||
mob.terminalvelocity = vec3(27*32, 27*32, 27*32);
|
||||
mob.friction = vec3(10*32, 0, 10*32);
|
||||
mob.size = vec3(0.75, 1.75, 0.75);
|
||||
mob.gravity = new Vec3(0, -20*32, 0);
|
||||
mob.terminalvelocity = new Vec3(27*32, 27*32, 27*32);
|
||||
mob.friction = new Vec3(10*32, 0, 10*32);
|
||||
mob.size = new Vec3(0.75, 1.75, 0.75);
|
||||
mob.metadata = metadata;
|
||||
|
||||
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){
|
||||
|
||||
entity.initEntity=(type, entityType, world, position)=>{
|
||||
|
|
@ -103,7 +123,7 @@ module.exports.entity=function(entity,serv){
|
|||
catch(err){
|
||||
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);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
var Entity=require("prismarine-entity");
|
||||
var Vec3=require("vec3");
|
||||
var Vec3 = require("vec3").Vec3
|
||||
|
||||
var path = require('path');
|
||||
var requireIndex = require('requireindex');
|
||||
var plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
|
||||
var Player=require("../player");
|
||||
var Command = require('../command');
|
||||
|
||||
module.exports.server=function(serv,options)
|
||||
{
|
||||
|
|
@ -14,6 +15,7 @@ module.exports.server=function(serv,options)
|
|||
serv._server.on('login', async (client) => {
|
||||
var player=new Player();
|
||||
player._client=client;
|
||||
player.commands = new Command({});
|
||||
Object.keys(plugins)
|
||||
.filter(pluginName => plugins[pluginName].player!=undefined)
|
||||
.forEach(pluginName => plugins[pluginName].player(player, serv, options));
|
||||
|
|
@ -32,7 +34,7 @@ module.exports.player=function(player,serv)
|
|||
{
|
||||
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.player=player;
|
||||
player.entity.health = 20;
|
||||
|
|
|
|||
|
|
@ -64,4 +64,76 @@ module.exports.player=function(player,serv)
|
|||
};
|
||||
|
||||
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 fs = require("fs");
|
||||
|
||||
|
|
@ -50,11 +50,11 @@ function modpeApi() {
|
|||
}
|
||||
|
||||
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) {
|
||||
return server._worldSync.getBlockType(new vec3(x, y, z));
|
||||
return server._worldSync.getBlockType(new Vec3(x, y, z));
|
||||
}
|
||||
|
||||
function preventDefault() {
|
||||
|
|
@ -158,7 +158,7 @@ module.exports.server=function(serv,settings)
|
|||
newLevel();
|
||||
|
||||
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)
|
||||
startDestroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
else if (packet.status == 2)
|
||||
|
|
@ -177,7 +177,7 @@ module.exports.server=function(serv,settings)
|
|||
if (packet.location.y < 0) return;
|
||||
useItem(packet.location.x, packet.location.y, packet.location.z,
|
||||
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) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
var vec3 = require("vec3");
|
||||
var Vec3 = require("vec3").Vec3
|
||||
|
||||
module.exports.server=function(serv) {
|
||||
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(),
|
||||
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)
|
||||
.forEach(player => {
|
||||
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 vec3 = require("vec3");
|
||||
var Vec3 = require("vec3").Vec3
|
||||
|
||||
module.exports.entity=function(entity){
|
||||
entity.calculatePhysics = async (delta) => {
|
||||
|
|
@ -10,7 +10,7 @@ module.exports.entity=function(entity){
|
|||
}
|
||||
|
||||
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 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.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}
|
||||
};
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ module.exports.entity=function(entity){
|
|||
}
|
||||
|
||||
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 vec3 = require("vec3");
|
||||
var Vec3 = require("vec3").Vec3
|
||||
|
||||
var materialToSound = {
|
||||
undefined: 'stone',
|
||||
|
|
@ -15,13 +15,13 @@ module.exports.player=function(player,serv)
|
|||
{
|
||||
player._client.on("block_place",({direction,heldItem,location} = {}) => {
|
||||
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 placedPosition=referencePosition.plus(directionVector);
|
||||
player.world.getBlockType(referencePosition).then((id) => {
|
||||
if([25].indexOf(id) != -1) return;
|
||||
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
|
||||
});
|
||||
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;
|
||||
};
|
||||
};
|
||||
|
||||
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) {
|
||||
|
|
@ -9,7 +9,7 @@ module.exports.server=function(serv,settings)
|
|||
{
|
||||
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) {
|
||||
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.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,
|
||||
size: vec3(0, 0, 0)
|
||||
size: new Vec3(0, 0, 0)
|
||||
});
|
||||
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}={}) => {
|
||||
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) => {
|
||||
if (id != 25) return;
|
||||
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} = {}) => {
|
||||
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) => {
|
||||
if (id != 25) return;
|
||||
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);
|
||||
}).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();
|
||||
};
|
||||
|
||||
|
|
@ -36,15 +36,15 @@ module.exports.player=function(player)
|
|||
}
|
||||
|
||||
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} = {}) => {
|
||||
sendRelativePositionChange((new vec3(x, y, z)).toFixedPosition(), onGround);
|
||||
sendRelativePositionChange((new Vec3(x, y, z)).toFixedPosition(), onGround);
|
||||
sendLook(yaw,pitch,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);
|
||||
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
|
||||
{
|
||||
|
|
@ -58,7 +58,7 @@ module.exports.player=function(player)
|
|||
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', {
|
||||
entityId: player.entity.id,
|
||||
dX: diff.x,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
var vec3=require("vec3");
|
||||
var Vec3 = require("vec3").Vec3
|
||||
var spiralloop = require('spiralloop');
|
||||
|
||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||
var World = require('prismarine-world');
|
||||
var Vec3 = require('vec3');
|
||||
var WorldSync = require("prismarine-world-sync");
|
||||
|
||||
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'));
|
||||
};
|
||||
|
||||
module.exports.player=function(player) {
|
||||
module.exports.player=function(player,serv) {
|
||||
|
||||
player.spawnEntity = entity => {
|
||||
player._client.write(entity.spawnPacketName, entity.getSpawnPacket());
|
||||
|
|
@ -167,4 +166,14 @@ module.exports.player=function(player) {
|
|||
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 Vec3 = require('vec3');
|
||||
var Vec3 = require('vec3').Vec3;
|
||||
var blocks=require("minecraft-data")(require("../version")).blocks;
|
||||
|
||||
function generation() {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||
var Vec3 = require('vec3');
|
||||
var Vec3 = require('vec3').Vec3;
|
||||
var rand = require('random-seed');
|
||||
|
||||
class DiamondSquare {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||
var Vec3 = require('vec3');
|
||||
var Vec3 = require('vec3').Vec3;
|
||||
|
||||
function generation() {
|
||||
function generateSimpleChunk(chunkX, chunkZ) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||
var Vec3 = require('vec3');
|
||||
var Vec3 = require('vec3').Vec3;
|
||||
var rand = require('random-seed');
|
||||
|
||||
function generation({seed,level=50}={}) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
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 generateChunk(chunkX,chunkZ) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue