Merge pull request #173 from mhsjlw/no_more_var

use const and let instead of var
This commit is contained in:
Romain Beaumont 2015-12-17 19:00:36 +01:00
commit 7ac0117860
44 changed files with 454 additions and 460 deletions

View file

@ -1,7 +1,7 @@
var mc = require('minecraft-protocol');
var EventEmitter = require('events').EventEmitter;
var path = require('path');
var requireIndex = require('requireindex');
const mc = require('minecraft-protocol');
const EventEmitter = require('events').EventEmitter;
const path = require('path');
const requireIndex = require('requireindex');
require('emit-then').register();
if (process.env.NODE_ENV === 'dev'){
require('longjohn');
@ -20,7 +20,7 @@ module.exports = {
function createMCServer(options) {
options = options || {};
var mcServer = new MCServer();
const mcServer = new MCServer();
mcServer.connect(options);
return mcServer;
}
@ -32,7 +32,7 @@ class MCServer extends EventEmitter {
}
connect(options) {
var plugins = requireIndex(path.join(__dirname, 'lib', 'plugins'));
const plugins = requireIndex(path.join(__dirname, 'lib', 'plugins'));
this._server = mc.createServer(options);
Object.keys(plugins)
.filter(pluginName => plugins[pluginName].server!=undefined)

View file

@ -1,10 +1,10 @@
module.exports = (obj) => {
return async (eventName, data, func, cancelFunc) => {
var hiddenCancelled = false;
var cancelled = false;
var cancelCount = 0;
var defaultCancel = true;
var cancel = (dC=true, hidden=false) => { // Hidden shouldn't be used often but it's not hard to implement so meh
let hiddenCancelled = false;
let cancelled = false;
let cancelCount = 0;
let defaultCancel = true;
const cancel = (dC=true, hidden=false) => { // Hidden shouldn't be used often but it's not hard to implement so meh
if (hidden) hiddenCancelled = true;
else {
cancelled = true;
@ -13,7 +13,7 @@ module.exports = (obj) => {
defaultCancel = dC;
};
var resp;
let resp;
await obj.emitThen(eventName + '_cancel', data, cancel).catch((err)=> setTimeout(() => {throw err;},0));
await obj.emitThen(eventName, data, cancelled, cancelCount).catch((err)=> setTimeout(() => {throw err;},0));

View file

@ -11,21 +11,21 @@ class Command {
}
find(command) {
var parts=command.split(" ");
var c=parts.shift();
var pars=parts.join(" ");
const parts=command.split(" ");
const c=parts.shift();
const pars=parts.join(" ");
if(this.hash[c])
return [this.hash[c], pars];
return undefined;
}
async use(command, op=true) {
var res = this.find(command);
let res = this.find(command);
if(res) {
var [com,pars]=res;
let [com,pars]=res;
if (com.params.op && !op) return 'You do not have permission to use this command';
var parse = com.params.parse;
const parse = com.params.parse;
if(parse) {
if(typeof parse == 'function') {
pars = parse(pars);
@ -46,15 +46,15 @@ class Command {
}
updateHistory() {
var all = '(.+?)';
const all = '(.+?)';
var list = [this.base];
const list = [this.base];
if(this.params.aliases && this.params.aliases.length) {
this.params.aliases.forEach(al => list.unshift(this.parentBase + al));
}
list.forEach((command) => {
var parentBase = this.parent ? (this.parent.path || '') : '';
const parentBase = this.parent ? (this.parent.path || '') : '';
this.path = parentBase + this.space() + (command || all);
if(this.path == all && !this.parent) this.path = '';
@ -68,7 +68,7 @@ class Command {
}
space(end) {
var first = !(this.parent && this.parent.parent);
const first = !(this.parent && this.parent.parent);
return this.params.merged || (!end && first) ? '' : ' ';
}

View file

@ -1,18 +1,18 @@
module.exports={distanceToXpLevel,getXpLevel,getXpRequired,getBaseXpFromLevel};
function distanceToXpLevel(xp, toLevel) {
var level = getXpLevel(xp);
const level = getXpLevel(xp);
if (!toLevel) toLevel = level+1;
var levelBaseXp = getBaseXpFromLevel(level);
var requiredXp = getXpRequired(level, toLevel);
const levelBaseXp = getBaseXpFromLevel(level);
const requiredXp = getXpRequired(level, toLevel);
return (xp - levelBaseXp) / requiredXp;
}
function getXpLevel(xp) {
// I have to use quadratic equation to reverse the equation from getBaseXpFromLevel(). Ugh.
var a;
var b;
var c;
let a;
let b;
let c;
if (xp < 352) { // 352 == Experience at level 16
a = 1;
b = 6;

View file

@ -1,4 +1,4 @@
var Behavior = require("flying-squid").Behavior;
const Behavior = require("flying-squid").Behavior;
module.exports.server = function(serv) {
serv.behavior = new Behavior(serv);

View file

@ -1,4 +1,4 @@
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
module.exports.player=function(player,serv)
{
@ -34,12 +34,12 @@ module.exports.player=function(player,serv)
usage: '/setblock <x> <y> <z> <id> [data]',
op: true,
parse(str) {
var results = str.match(/^(~|~?-?[0-9]+) (~|~?-?[0-9]+) (~|~?-?[0-9]+) ([0-9]{1,3})(?: ([0-9]{1,3}))?/);
const 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.slice(1, 4);
let res = params.slice(1, 4);
res = res.map((val, i) => serv.posFromString(val, player.position[['x','y','z'][i]] / 32))
player.setBlock(new Vec3(res[0], res[1], res[2]).floored(), params[4], params[5] || 0);
}

View file

@ -46,17 +46,17 @@ module.exports.server=function(serv)
serv.parseClassic = (message) => {
if (typeof message == 'object') return message;
var messageList = [];
var text = '';
var nextChanged = false;
var color = 'white';
var bold = false;
var italic = false;
var underlined = false;
var strikethrough = false;
var random = false;
var colors = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f', 'k','l','m','n','o','r','&']
var convertColor = ['black', 'dark_blue','dark_green','dark_cyan','dark_red','dark_purple','gold',
const messageList = [];
let text = '';
let nextChanged = false;
let color = 'white';
let bold = false;
let italic = false;
let underlined = false;
let strikethrough = false;
let random = false;
const colors = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f', 'k','l','m','n','o','r','&']
const convertColor = ['black', 'dark_blue','dark_green','dark_cyan','dark_red','dark_purple','gold',
'gray', 'dark_gray', 'blue', 'green', 'aqua', 'red', 'light_purple', 'yellow', 'white',
'random', 'bold', 'strikethrough', 'underlined', 'italic', 'reset', '&'];
@ -75,9 +75,9 @@ module.exports.server=function(serv)
}
while (message != '') {
var currChar = message[0];
const currChar = message[0];
if (nextChanged) {
var newColor = convertColor[colors.indexOf(currChar)];
const newColor = convertColor[colors.indexOf(currChar)];
if (newColor) {
if (newColor == 'bold') bold = true;
else if (newColor == 'strikethrough') strikethrough = true;
@ -133,7 +133,7 @@ module.exports.player=function(player,serv)
whitelist: serv.players,
blacklist: []
}, ({message, prefix, text, whitelist, blacklist}) => {
var obj = serv.parseClassic(prefix);
const obj = serv.parseClassic(prefix);
if (!obj.extra) obj.extra = [];
obj.extra.push(serv.parseClassic(text));
serv.broadcast(obj, {
@ -150,7 +150,7 @@ module.exports.player=function(player,serv)
};
player.emptyChat = (count=1) => {
for (var i = 0; i < count; i++) {
for (let i = 0; i < count; i++) {
player.chat('');
}
}

View file

@ -1,12 +1,12 @@
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
module.exports.player=function(player)
{
player.on('placeBlock_cancel', async (opt, cancel) => {
if (player.crouching) return;
try {
var id = await player.world.getBlockType(opt.reference);
var blockAbove = await player.world.getBlockType(opt.reference.plus(new Vec3(0, 1, 0)));
const id = await player.world.getBlockType(opt.reference);
const blockAbove = await player.world.getBlockType(opt.reference.plus(new Vec3(0, 1, 0)));
if (id == 54) {
opt.playSound = false;
if (blockAbove) {

View file

@ -1,5 +1,4 @@
var Vec3 = require("vec3").Vec3;
var UserError = require('flying-squid').UserError;
const UserError = require('flying-squid').UserError;
module.exports.player=function(player, serv) {
@ -8,45 +7,44 @@ module.exports.player=function(player, serv) {
info: 'to show all commands',
usage: '/help [command]',
parse(str) {
var params = str.split(' ');
var page = parseInt(params[params.length-1]);
var search = '';
const params = str.split(' ');
const page = parseInt(params[params.length-1]);
if (page) {
params.pop();
}
search = params.join(' ');
const search = params.join(' ');
return { search: search, page: (page && page - 1) || 0 };
},
action({search, page}) {
if (page < 0) return 'Page # must be >= 1';
var hash = player.commands.uniqueHash;
const hash = player.commands.uniqueHash;
var PAGE_LENGTH = 7;
const PAGE_LENGTH = 7;
var found = Object.keys(hash).filter(h => (h + ' ').indexOf((search && search + ' ') || '') == 0);
let found = Object.keys(hash).filter(h => (h + ' ').indexOf((search && search + ' ') || '') == 0);
if (found.length == 0) { // None found
return 'Could not find any matches';
} else if (found.length == 1) { // Single command found, giev info on command
var cmd = hash[found[0]];
var usage = (cmd.params && cmd.params.usage) || cmd.base;
var info = (cmd.params && cmd.params.info) || 'No info';
const cmd = hash[found[0]];
const usage = (cmd.params && cmd.params.usage) || cmd.base;
const info = (cmd.params && cmd.params.info) || 'No info';
player.chat(usage + ': ' + info);
} else { // Multiple commands found, give list with pages
var totalPages = Math.ceil((found.length-1) / PAGE_LENGTH);
const totalPages = Math.ceil((found.length-1) / PAGE_LENGTH);
if (page >= totalPages) return 'There are only' + totalPages + ' help pages';
found = found.sort();
if (found.indexOf('search') != -1) {
var baseCmd = hash[search];
const baseCmd = hash[search];
player.chat(baseCmd.base + ' -' + ((baseCmd.params && baseCmd.params.info && ' ' + baseCmd.params.info) || '=-=-=-=-=-=-=-=-'));
} else {
player.chat('Help -=-=-=-=-=-=-=-=-');
}
for (var i = PAGE_LENGTH*page; i < Math.min(PAGE_LENGTH*(page + 1), found.length); i++) {
for (let i = PAGE_LENGTH*page; i < Math.min(PAGE_LENGTH*(page + 1), found.length); i++) {
if (found[i] === search) continue;
var cmd = hash[found[i]];
var usage = (cmd.params && cmd.params.usage) || cmd.base;
var info = (cmd.params && cmd.params.info) || 'No info';
const cmd = hash[found[i]];
const usage = (cmd.params && cmd.params.usage) || cmd.base;
const info = (cmd.params && cmd.params.info) || 'No info';
player.chat(usage + ': ' + info);
}
player.chat('--=[Page ' + (page + 1) + ' of ' + totalPages + ']=--')
@ -59,9 +57,9 @@ module.exports.player=function(player, serv) {
info: 'to pong!',
usage: '/ping [number]',
action(params) {
var num = params[0] * 1 + 1;
const num = params[0] * 1 + 1;
var str = 'pong';
let str = 'pong';
if(!isNaN(num)) str += ' [' + num + ']';
player.chat(str + '!');
@ -105,7 +103,7 @@ module.exports.player=function(player, serv) {
return str || false;
},
action(sel) {
var arr = serv.selectorString(sel, player.position.scaled(1/32), player.world);
const arr = serv.selectorString(sel, player.position.scaled(1/32), player.world);
player.chat(JSON.stringify(arr.map(a => a.id)));
}
});
@ -113,7 +111,7 @@ module.exports.player=function(player, serv) {
player.handleCommand = async (str) => {
try {
var res = await player.commands.use(str, player.op);
const res = await player.commands.use(str, player.op);
if (res) player.chat(serv.color.red + res);
}
catch(err) {
@ -130,7 +128,7 @@ module.exports.entity = function(entity, serv) {
module.exports.server = function(serv) {
function shuffleArray(array) {
var currentIndex = array.length, temporaryValue, randomIndex ;
let currentIndex = array.length, temporaryValue, randomIndex ;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
@ -148,39 +146,39 @@ module.exports.server = function(serv) {
return array;
}
var notudf = i => typeof i != 'undefined';
const notudf = i => typeof i != 'undefined';
serv.selector = (type, opt) => {
if (['all', 'random', 'near', 'entity'].indexOf(type) == -1)
throw new UserError('serv.selector(): type must be either [all, random, near, or entity]');
var count = typeof opt.count != 'undefined' ?
const count = typeof opt.count != 'undefined' ?
count :
(type == 'all' || type == 'entity' ?serv.entities.length : 1);
var pos = opt.pos;
var sample;
const pos = opt.pos;
let sample;
if (type == 'all') sample = serv.players;
else if (type == 'random' || type == 'near') sample = serv.players.filter(p => p.health != 0);
else if (type == 'entity') sample = Object.keys(serv.entities).map(k => serv.entities[k]);
var checkOption = (val, compare) => {
const checkOption = (val, compare) => {
if (!val) return true;
var not = val[0] == '!';
var v = val;
const not = val[0] == '!';
let v = val;
if (not) v = v.slice(1, v.length);
if (not && compare == v) return false;
if (!not && compare != v) return false;
return true;
}
};
var scores = {
const scores = {
max: [],
min: []
};
Object.keys(opt).forEach(o => {
if (o.indexOf('score_') != 0) return;
var score = o.replace('score_', '');
const score = o.replace('score_', '');
if (score.indexOf('_min') == score.length - 1) {
scores.min.push({
score: score.replace('_min' ,''),
@ -210,7 +208,7 @@ module.exports.server = function(serv) {
if (!checkOption(opt.name, s.username)) return false;
if (!checkOption(opt.type, s.name)) return false;
var fail = false;
let fail = false;
scores.max.forEach(m => {
if (fail) return;
if (!notudf(s.scores[m.score])) fail = true;
@ -237,29 +235,29 @@ module.exports.server = function(serv) {
serv.selectorString = (str, pos, world, allowUser=true) => {
pos = pos.clone();
var player = serv.getPlayer(str);
const player = serv.getPlayer(str);
if (!player && str[0] != '@') return [];
else if (player) return allowUser ? [player] : [];
var match = str.match(/^@([a,r,p,e])(?:\[([^\]]+)\])?$/);
const match = str.match(/^@([a,r,p,e])(?:\[([^\]]+)\])?$/);
if (match == null) throw new UserError('Invalid selector format');
var typeConversion = {
const typeConversion = {
a: 'all',
r: 'random',
p: 'near',
e: 'entity'
};
var type = typeConversion[match[1]];
var opt = match[2] ? match[2].split(',') : [];
var optPair = [];
var err;
const type = typeConversion[match[1]];
const opt = match[2] ? match[2].split(',') : [];
const optPair = [];
let err;
opt.forEach(o => {
var match = o.match(/^([^=]+)=([^=]+)$/);
const match = o.match(/^([^=]+)=([^=]+)$/);
if (match == null) err = new UserError('Invalid selector option format: "' + o + '"');
else optPair.push({key: match[1], val: match[2]});
});
if (err) throw err;
var optConversion = {
const optConversion = {
type: 'type',
r: 'radius',
rm: 'minRadius',
@ -274,9 +272,9 @@ module.exports.server = function(serv) {
ry: 'pitch',
rym: 'minPitch'
};
var convertInt = ['r', 'rm', 'm', 'c', 'l', 'lm', 'rx', 'rxm', 'ry', 'rym'];
const convertInt = ['r', 'rm', 'm', 'c', 'l', 'lm', 'rx', 'rxm', 'ry', 'rym'];
var data = {
const data = {
pos: pos,
world: world,
scores: [],

View file

@ -41,7 +41,7 @@ module.exports.player=function(player,serv){
usage: '/time <add|query|set> <value>',
op: true,
parse(str) {
var data = str.match(/^(add|query|set)(?: ([0-9]+|day|night))?/);
const data = str.match(/^(add|query|set)(?: ([0-9]+|day|night))?/);
if(!data) return false;
return {
action: data[1],
@ -52,7 +52,7 @@ module.exports.player=function(player,serv){
if(action == "query") {
player.chat("It is "+serv.time);
} else {
var newTime;
let newTime;
if(action == "set") {
newTime = value;

View file

@ -1,4 +1,4 @@
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
module.exports.player=function(player,serv)
{
@ -8,13 +8,13 @@ module.exports.player=function(player,serv)
}
player._client.on("block_dig",async ({location,status,face}) => {
var pos=new Vec3(location.x,location.y,location.z);
let pos=new Vec3(location.x,location.y,location.z);
var directionVector=directionToVector[face];
var facedPos=pos.plus(directionVector);
const directionVector=directionToVector[face];
const facedPos=pos.plus(directionVector);
try {
let facedBlock = await player.world.getBlock(facedPos);
const facedBlock = await player.world.getBlock(facedPos);
let block;
if(facedBlock.name=="fire")
{
@ -55,12 +55,12 @@ module.exports.player=function(player,serv)
return currentlyDugBlock.digTime();
}
var currentlyDugBlock;
var startDiggingTime;
var animationInterval;
var expectedDiggingTime;
var lastDestroyState;
var currentAnimationId;
let currentlyDugBlock;
let startDiggingTime;
let animationInterval;
let expectedDiggingTime;
let lastDestroyState;
let currentAnimationId;
function startDigging(location)
{
serv.entityMaxId++;
@ -72,8 +72,8 @@ module.exports.player=function(player,serv)
animationInterval=setInterval(updateAnimation,100);
function updateAnimation()
{
var currentDiggingTime=new Date()-startDiggingTime;
var newDestroyState=Math.floor(9*currentDiggingTime/expectedDiggingTime);
const currentDiggingTime=new Date()-startDiggingTime;
let newDestroyState=Math.floor(9*currentDiggingTime/expectedDiggingTime);
newDestroyState=newDestroyState>9 ? 9 : newDestroyState;
if(newDestroyState!=lastDestroyState)
{
@ -108,8 +108,8 @@ module.exports.player=function(player,serv)
async function completeDigging(location)
{
clearInterval(animationInterval);
var diggingTime=new Date()-startDiggingTime;
var stop = false;
const diggingTime=new Date()-startDiggingTime;
let stop = false;
if(expectedDiggingTime-diggingTime<100) {
stop = player.behavior('forceCancelDig', {
stop: true,
@ -175,4 +175,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)];
const 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)];

View file

@ -1,15 +1,15 @@
module.exports.entity = function(entity, serv) {
entity.effects = {};
for (var i = 1; i <= 23; i++) { // 23 in 1.8, 27 in 1.9
for (let i = 1; i <= 23; i++) { // 23 in 1.8, 27 in 1.9
entity.effects[i] = null; // Just so we know it's a real potion and not undefined/not existant
}
entity.sendEffect = (effectId, {amplifier=0,duration=30*20,particles=true,whitelist,blacklist=[]}={}) => {
if (!whitelist) whitelist = serv.getNearby(entity);
if (entity.type == 'player' && [1].indexOf(effectId) != -1) entity.sendAbilities();
var sendTo = whitelist.filter(p => blacklist.indexOf(p) == -1);
var data = {
const sendTo = whitelist.filter(p => blacklist.indexOf(p) == -1);
const data = {
entityId: entity.id,
effectId: effectId,
amplifier: amplifier,
@ -21,7 +21,7 @@ module.exports.entity = function(entity, serv) {
entity.sendRemoveEffect = (effectId, {whitelist,blacklist=[]}={}) => {
if (!whitelist) whitelist = serv.getNearby(entity);
var sendTo = whitelist.filter(p => blacklist.indexOf(p) == -1);
const sendTo = whitelist.filter(p => blacklist.indexOf(p) == -1);
serv._writeArray('remove_entity_effect', {
entityId: entity.id,
effectId: effectId
@ -29,7 +29,7 @@ module.exports.entity = function(entity, serv) {
};
entity.addEffect = (effectId, opt={}) => {
var amp = typeof opt.amplifier == 'undefined' ? 0 : opt.amplifier;
const amp = typeof opt.amplifier == 'undefined' ? 0 : opt.amplifier;
if (!entity.effects[effectId] || opt.override || amp < entity.effects[effectId].amplifier) {
entity.effects[effectId] = {
amplifier: opt.amplifier || 0,
@ -40,7 +40,7 @@ module.exports.entity = function(entity, serv) {
entity.sendEffect(effectId, opt);
return true;
} else return false;
}
};
entity.removeEffect = (effectId, opt) => {
entity.effects[effectId] = null;
@ -49,7 +49,7 @@ module.exports.entity = function(entity, serv) {
serv.on('tick', () => {
Object.keys(entity.effects).forEach(effectId => {
var e = entity.effects[effectId];
const e = entity.effects[effectId];
if (e && e.end <= Date.now()) entity.removeEffect(effectId);
});
});
@ -64,14 +64,14 @@ module.exports.player = function(player, serv) {
return str.match(/(.+?) (\d+)(?: (\d+))?(?: (\d+))?(?: (true|false))?|.*? clear/) || false;
},
action(params) {
var targets = player.selectorString(params[1]);
const targets = player.selectorString(params[1]);
if (params[2] == 'clear') {
targets.forEach(e => Object.keys(e.effects).forEach(effectId => {
if (e.effects[effectId] != null) e.removeEffect(effectId);
}));
} else {
targets.forEach(e => {
var effId = parseInt(params[2]);
const effId = parseInt(params[2]);
if (e.effects[effId]) {
e.removeEffect(effId);
}
@ -82,10 +82,10 @@ module.exports.player = function(player, serv) {
});
});
}
var chatSelect = (targets.length == 1 ? (targets[0].type == 'player' ? targets[0].username : 'entity') : 'entities');
const chatSelect = (targets.length == 1 ? (targets[0].type == 'player' ? targets[0].username : 'entity') : 'entities');
if (params[2] == 'clear') player.chat('Remove all effects from ' + chatSelect + '.' );
else player.chat('Gave ' + chatSelect + ' effect ' + params[2] + '(' + (params[4] || 0) + ') for ' +
(parseInt(params[3]) || 30) + ' seconds');
}
});
}
};

View file

@ -1,15 +1,13 @@
var Vec3 = require("vec3").Vec3;
module.exports.server=function(serv,options) {
serv.on('tick', function(delta) {
Promise.all(
Object.keys(serv.entities).map(async (id) => {
var entity = serv.entities[id];
const entity = serv.entities[id];
if (entity.deathTime && Date.now() - entity.bornTime >= entity.deathTime) {
entity.destroy();
return;
} else if (entity.pickupTime && Date.now() - entity.bornTime >= entity.pickupTime) {
var players = serv.getNearby({
const players = serv.getNearby({
world: entity.world,
position: entity.position,
radius: 1.5*32 // Seems good for now
@ -19,7 +17,7 @@ module.exports.server=function(serv,options) {
}
}
if (!entity.velocity || !entity.size) return;
var posAndOnGround = await entity.calculatePhysics(delta);
const posAndOnGround = await entity.calculatePhysics(delta);
if (entity.type == 'mob') entity.sendPosition(posAndOnGround.position, posAndOnGround.onGround);
})
).catch((err)=> setTimeout(() => {throw err;},0));

View file

@ -1,4 +1,4 @@
var {distanceToXpLevel,getXpLevel,getBaseXpFromLevel}=require("flying-squid").experience;
const {distanceToXpLevel,getXpLevel,getBaseXpFromLevel}=require("flying-squid").experience;
module.exports.player = function(player) {
player.xp = 0;
@ -39,18 +39,18 @@ module.exports.player = function(player) {
return str.match(/(-?\d+)(L)? ?([a-zA-Z0-9_]+)?/) || false;
},
action(args) {
var isLevel = !!args[2];
var amt = parseInt(args[1]);
var user = args[3] ? serv.getPlayer(args[3]) : player;
const isLevel = !!args[2];
const amt = parseInt(args[1]);
const user = args[3] ? serv.getPlayer(args[3]) : player;
if (!user) return args[3] + ' is not on this server!';
if (!isLevel) {
user.setXp(user.xp + amt);
player.chat('Gave ' + user.username + ' ' + amt + ' xp');
} else {
var currLevel = getXpLevel(player.xp);
var baseCurrLevel = getBaseXpFromLevel(currLevel);
var extraXp = player.xp - baseCurrLevel;
const currLevel = getXpLevel(player.xp);
const baseCurrLevel = getBaseXpFromLevel(currLevel);
const extraXp = player.xp - baseCurrLevel;
user.setXp(getBaseXpFromLevel(currLevel + amt) + extraXp);
player.chat('Gave ' + user.username + ' ' + amt + ' levels');
}

View file

@ -39,7 +39,7 @@ module.exports.server = function(serv, settings) {
});
serv.on('asap', () => {
for (var p in serv.plugins) {
for (let p in serv.plugins) {
serv.log('[PLUGINS] Loaded "' + serv.plugins[p].name + '"');
}
});
@ -49,7 +49,7 @@ module.exports.server = function(serv, settings) {
module.exports.player = function(player, serv) {
Object.keys(serv.plugins).forEach(p => {
var plugin = serv.plugins[p];
const plugin = serv.plugins[p];
if (plugin.player) plugin.player.call(plugin, player, serv);
});
};
@ -67,7 +67,7 @@ module.exports.entity = function(entity, serv) {
};
Object.keys(serv.plugins).forEach(p => {
var plugin = serv.plugins[p];
const plugin = serv.plugins[p];
if (plugin.entity) plugin.entity.call(plugin, entity, serv);
});
};

View file

@ -1,6 +1,6 @@
var version = require("flying-squid").version;
var windows = require("prismarine-windows")(version).windows;
var Item = require("prismarine-item")(version);
const version = require("flying-squid").version;
const windows = require("prismarine-windows")(version).windows;
const Item = require("prismarine-item")(version);
module.exports.player = function(player,serv)
{
@ -138,14 +138,14 @@ module.exports.player = function(player,serv)
player.inventory.updateSlot(slot, undefined);
return;
}
var newItem = Item.fromNotch(item);
const newItem = Item.fromNotch(item);
player.inventory.updateSlot(slot, newItem);
});
player.inventory.on("windowUpdate", function(slot,oldItem,newItem){
var equipments={
const equipments={
5:4,
6:3,
7:2,
@ -173,8 +173,8 @@ module.exports.player = function(player,serv)
player.collect = (collectEntity) => {
// Add it to a stack already in the player's inventory if possible
for(var itemKey=0;itemKey<player.inventory.slots.length;itemKey++) {
var item = player.inventory.slots[itemKey];
for(let itemKey=0;itemKey<player.inventory.slots.length;itemKey++) {
const item = player.inventory.slots[itemKey];
if(item == undefined) continue;
if(item.type == collectEntity.itemId){
item.count += 1;
@ -190,7 +190,7 @@ module.exports.player = function(player,serv)
}
// If we couldn't add it to a already existing stack, put it in a new stack if the inventory has room
var emptySlot = player.inventory.firstEmptyInventorySlot();
const emptySlot = player.inventory.firstEmptyInventorySlot();
if(emptySlot != null){
collectEntity._writeOthersNearby('collect', {
collectedEntityId: collectEntity.id,
@ -198,7 +198,7 @@ module.exports.player = function(player,serv)
});
player.playSoundAtSelf('random.pop');
var newItem = new Item(collectEntity.itemId, 1, collectEntity.damage);
const newItem = new Item(collectEntity.itemId, 1, collectEntity.damage);
player.inventory.updateSlot(emptySlot, newItem);
collectEntity.destroy()
}

View file

@ -1,8 +1,8 @@
var fs = require('fs');
var timeStarted = Math.floor(new Date() / 1000).toString();
var path = require('path');
var mkdirp = require('mkdirp');
var moment=require("moment");
const fs = require('fs');
const timeStarted = Math.floor(new Date() / 1000).toString();
const path = require('path');
const mkdirp = require('mkdirp');
const moment=require("moment");
module.exports.server=function(serv,settings)
{
@ -16,7 +16,7 @@ module.exports.server=function(serv,settings)
serv.on("seed", (seed) => serv.log("seed: "+seed));
var logFile=path.join("logs",timeStarted + ".log");
const logFile=path.join("logs",timeStarted + ".log");
serv.log = message => {
message=moment().format('MMMM Do YYYY, HH:mm:ss')+" "+message;

View file

@ -1,10 +1,9 @@
var Entity=require("prismarine-entity");
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
var path = require('path');
var requireIndex = require('requireindex');
var plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
var Command = require('flying-squid').Command;
const path = require('path');
const requireIndex = require('requireindex');
const plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
const Command = require('flying-squid').Command;
module.exports.server=function(serv,options)
{
@ -14,7 +13,7 @@ module.exports.server=function(serv,options)
serv._server.on('login', async (client) => {
if(client.socket.listeners('end').length==0) return; // TODO: should be fixed properly in nmp instead
try {
var player = serv.initEntity('player', null, serv.overworld, new Vec3(0,0,0));
const player = serv.initEntity('player', null, serv.overworld, new Vec3(0,0,0));
player._client=client;
player.profileProperties=player._client.profile ? player._client.profile.properties : [];
@ -129,10 +128,10 @@ module.exports.player=function(player,serv)
}
player.waitPlayerLogin = () => {
var events=["flying","look"];
const events=["flying","look"];
return new Promise(function(resolve){
var listener=()=> {
const listener=()=> {
events.map(event => player._client.removeListener(event,listener));
resolve();
};

View file

@ -1,4 +1,4 @@
var once = require('event-promise');
const once = require('event-promise');
module.exports.server=function(serv)
{
@ -30,7 +30,7 @@ module.exports.player=function(player,serv)
player.nearbyPlayers().forEach(otherPlayer => otherPlayer.despawnEntities([player]));
delete serv.entities[player.id];
player.emit('disconnected');
var index = serv.players.indexOf(player);
const index = serv.players.indexOf(player);
if (index > -1) {
serv.players.splice(index, 1);
}

View file

@ -1,6 +1,6 @@
var moment=require("moment");
var rp=require("request-promise");
var nodeUuid=require('node-uuid');
const moment=require("moment");
const rp=require("request-promise");
const nodeUuid=require('node-uuid');
module.exports.server=function(serv)
{
@ -15,13 +15,11 @@ module.exports.server=function(serv)
serv.bannedIPs[IP] = {
time: +moment(),
reason: reason || "Your IP is banned!"
}
for(var uuid in serv.players){
if(serv.players[uuid]._client.socket.remoteAddress == IP){
serv.players[uuid].kick(serv.bannedIPs[serv.players[uuid]._client.socket.remoteAddress].reason)
}
}
}
};
Object.keys(serv.players)
.filter(uuid => serv.players[uuid]._client.socket.remoteAddress == IP)
.forEach(uuid => serv.players[uuid].kick(serv.bannedIPs[serv.players[uuid]._client.socket.remoteAddress].reason));
};
function uuidInParts(plainUUID)
{
@ -71,7 +69,7 @@ module.exports.player=function(player,serv)
player.ban = reason => {
reason = reason || "You were banned!";
player.kick(reason);
var uuid=player._client.uuid;
const uuid=player._client.uuid;
serv.ban(uuid, reason);
};
player.banIP = reason => {
@ -92,14 +90,14 @@ module.exports.player=function(player,serv)
parse(str) {
if(!str.match(/([a-zA-Z0-9_]+)(?: (.*))?/))
return false;
var parts = str.split(' ');
const parts = str.split(' ');
return {
username:parts.shift(),
reason:parts.join(' ')
};
},
action({username,reason}) {
var kickPlayer = serv.getPlayer(username);
const kickPlayer = serv.getPlayer(username);
if (!kickPlayer) {
player.chat(username + " is not on this server!");
} else {
@ -117,14 +115,14 @@ module.exports.player=function(player,serv)
parse(str) {
if(!str.match(/([a-zA-Z0-9_]+)(?: (.*))?/))
return false;
var parts = str.split(' ');
const parts = str.split(' ');
return {
username:parts.shift(),
reason:parts.join(' ')
};
},
action({username,reason}) {
var banPlayer = serv.getPlayer(username);
const banPlayer = serv.getPlayer(username);
if (!banPlayer) {
serv.banUsername(username, reason)
@ -146,7 +144,7 @@ module.exports.player=function(player,serv)
usage: '/ban-ip <ip> [reason]',
op: true,
parse(str){
var argv = str.split(' ');
const argv = str.split(' ');
if(argv.length < 1) return;
return {
@ -166,7 +164,7 @@ module.exports.player=function(player,serv)
usage: '/pardon-ip <ip>',
op: true,
action(IP) {
var result=serv.pardonIP(IP);
const result=serv.pardonIP(IP);
player.chat(result ? IP + " was IP pardonned" : IP+" is not banned");
}
});
@ -198,7 +196,7 @@ module.exports.player=function(player,serv)
return str;
},
action(username) {
var user = serv.getPlayer(username);
const user = serv.getPlayer(username);
if (!user) return 'That player is not on the server.'
user.op = true;
player.chat(username + ' is opped');
@ -215,7 +213,7 @@ module.exports.player=function(player,serv)
return str;
},
action(username) {
var user = serv.getPlayer(username);
const user = serv.getPlayer(username);
if (!user) return 'That player is not on the server.'
user.op = false;
player.chat(username + ' is deopped');

View file

@ -1,20 +1,20 @@
var Vec3 = require("vec3").Vec3;
var dir = require("node-dir");
var fs = require("fs");
const Vec3 = require("vec3").Vec3;
const dir = require("node-dir");
const fs = require("fs");
function requireFromString(src, filename) {
var Module = module.constructor;
var m = new Module();
let Module = module.constructor;
let m = new Module();
m._compile(src, filename);
return m.exports;
}
function modpeApi() {
var Vec3 = null;
var vec3 = null;
let Vec3 = null;
let vec3 = null;
var server = null;
var player = null;
let server = null;
let player = null;
module.exports.startDestroyBlock = startDestroyBlock;
module.exports.destroyBlock = destroyBlock;
@ -75,12 +75,12 @@ function modpeApi() {
return player.heldItem.blockId;
}
var Player = {
let Player = {
getCarriedItem: function () {
return player.heldItem.blockId;
}
};
var Entity = {
let Entity = {
getPitch: function () {
return 1;
}
@ -88,7 +88,7 @@ function modpeApi() {
return 1;
}
};
var Level = {
let Level = {
getGameMode: function () {
return player.gameMode;
}
@ -99,18 +99,18 @@ function modpeApi() {
}
function convert(code) {
var api = modpeApi.toString()
let api = modpeApi.toString()
.split("\n");
api[0] = "";
api[api.length - 1] = "";
var finapi = api.join("\n");
let finapi = api.join("\n");
code = finapi + code;
return code;
}
module.exports.server=function(serv,settings)
{
var verboseMPE=false;
let verboseMPE=false;
function log(msg){
if(verboseMPE) serv.log("[MPE]: "+msg);
}
@ -119,10 +119,10 @@ module.exports.server=function(serv,settings)
return;
}
log("Modpe injection start...");
var modPePluginsDir = __dirname+"/../../../modpePlugins";
let modPePluginsDir = __dirname+"/../../../modpePlugins";
log("Place your scripts in " + modPePluginsDir);
var modCount = 0;
var mods = [];
let modCount = 0;
let mods = [];
dir.readFiles(modPePluginsDir, {
match: /.js/
, exclude: /^\./
@ -130,7 +130,7 @@ module.exports.server=function(serv,settings)
if (err) throw err;
log("Converting " + fname);
content = convert(content);
var modname = fname.split("/")[fname.split("/")
let modname = fname.split("/")[fname.split("/")
.length - 1].split(".")[0];
log("Loading mod " + modname);
mods.push(requireFromString(content));
@ -153,7 +153,7 @@ module.exports.server=function(serv,settings)
newLevel();
player._client.on("block_dig", function (packet) {
var pos = new Vec3(packet.location.x,packet.location.y,packet.location.z);
let pos = new Vec3(packet.location.x,packet.location.y,packet.location.z);
if (packet.status == 0 && player.gameMode != 1)
startDestroyBlock(pos.x, pos.y, pos.z, 0);
else if (packet.status == 2)

View file

@ -1,8 +1,8 @@
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
module.exports.server=function(serv) {
serv.emitParticle = (particle, world, position, {whitelist,blacklist=[],radius=32*32,longDistance=true,size=new Vec3(1, 1, 1),count=1}={}) => {
var players = (typeof whitelist != 'undefined' ? (whitelist instanceof Array ? whitelist : [whitelist]) : serv.getNearby({
const players = (typeof whitelist != 'undefined' ? (whitelist instanceof Array ? whitelist : [whitelist]) : serv.getNearby({
world: world,
position: position.scaled(32).floored(),
radius: radius // 32 blocks, fixed position
@ -31,7 +31,7 @@ module.exports.player=function(player,serv){
usage: '/particle <id> [amount] [<sizeX> <sizeY> <sizeZ>]',
op: true,
parse(str) {
var results=str.match(/(\d+)(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?/);
const results=str.match(/(\d+)(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?(?: (\d+))?/);
if(!results) return false;
return {
particle:parseInt(results[1]),

View file

@ -1,5 +1,5 @@
var blocks=require("minecraft-data")(require("flying-squid").version).blocks;
var Vec3 = require("vec3").Vec3;
const blocks=require("minecraft-data")(require("flying-squid").version).blocks;
const Vec3 = require("vec3").Vec3;
module.exports.entity=function(entity){
entity.calculatePhysics = async (delta) => {
@ -9,17 +9,17 @@ module.exports.entity=function(entity){
addGravity(entity, 'z', delta);
}
var vSign = getSign(entity.velocity);
var sizeSigned = new Vec3(vSign.x * entity.size.x, vSign.y * entity.size.y, vSign.z * entity.size.z);
const vSign = getSign(entity.velocity);
const 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();
var zVec = entity.position.offset(0, 0, entity.velocity.z*delta + sizeSigned.z/2).scaled(1/32).floored();
const xVec = entity.position.offset(entity.velocity.x*delta + sizeSigned.x/2, 0, 0).scaled(1/32).floored();
const yVec = entity.position.offset(0, entity.velocity.y*delta + sizeSigned.y/2, 0).scaled(1/32).floored();
const zVec = entity.position.offset(0, 0, entity.velocity.z*delta + sizeSigned.z/2).scaled(1/32).floored();
// Get block for each (x/y/z)Vec, check to avoid duplicate getBlockTypes
var xBlock = blocks[await entity.world.getBlockType(xVec)].boundingBox == 'block';
var yBlock = yVec.equals(xVec) ? xBlock : blocks[await entity.world.getBlockType(yVec)].boundingBox == 'block';
var zBlock = zVec.equals(yVec) ? yBlock : (zVec.equals(xVec) ? xBlock : blocks[await entity.world.getBlockType(zVec)].boundingBox == 'block');
const xBlock = blocks[await entity.world.getBlockType(xVec)].boundingBox == 'block';
const yBlock = yVec.equals(xVec) ? xBlock : blocks[await entity.world.getBlockType(yVec)].boundingBox == 'block';
const zBlock = zVec.equals(yVec) ? yBlock : (zVec.equals(xVec) ? xBlock : blocks[await entity.world.getBlockType(zVec)].boundingBox == 'block');
if (xBlock || yBlock || zBlock) {
@ -27,7 +27,7 @@ module.exports.entity=function(entity){
entity.velocity.z = getFriction(entity.velocity.z, entity.friction.z, delta);
}
var newPos = entity.position.clone();
const newPos = entity.position.clone();
newPos.x += getMoveAmount('x', xBlock, entity, delta, sizeSigned.x);
newPos.y += getMoveAmount('y', yBlock, entity, delta, sizeSigned.y);
@ -38,9 +38,9 @@ module.exports.entity=function(entity){
};
entity.sendVelocity = (vel, maxVel) => {
var velocity = vel.scaled(32).floored(); // Make fixed point
var maxVelocity = maxVel.scaled(32).floored();
var scaledVelocity = velocity.scaled(8000/32/20).floored(); // from fixed-position/second to unit => 1/8000 blocks per tick
const velocity = vel.scaled(32).floored(); // Make fixed point
const maxVelocity = maxVel.scaled(32).floored();
const scaledVelocity = velocity.scaled(8000/32/20).floored(); // from fixed-position/second to unit => 1/8000 blocks per tick
entity._writeNearby('entity_velocity', {
entityId: entity.id,
velocityX: scaledVelocity.x,
@ -88,7 +88,7 @@ module.exports.entity=function(entity){
}
function addVelocityWithMax(current, newVel, max) {
var x, y, z;
let x, y, z;
if (current.x > max.x || current.x < -max.x) x = current.x;
else x = Math.max(-max.x, Math.min(max.x, current.x + newVel.x));
if (current.y > max.y || current.y < -max.y) y = current.y;
@ -109,9 +109,9 @@ module.exports.player = function(player, serv) {
return str.match(/(.+?) (\d+) (\d+) (\d+)/) || false;
},
action(params) {
var selector = player.selectorString(params[1]);
var vec = new Vec3(parseInt(params[2]), parseInt(params[3]), parseInt(params[4]));
const selector = player.selectorString(params[1]);
const vec = new Vec3(parseInt(params[2]), parseInt(params[3]), parseInt(params[4]));
selector.forEach(e => e.sendVelocity(vec, vec.scaled(5)));
}
});
}
};

View file

@ -1,7 +1,7 @@
var blocks=require("minecraft-data")(require("flying-squid").version).blocks;
var Vec3 = require("vec3").Vec3;
const blocks=require("minecraft-data")(require("flying-squid").version).blocks;
const Vec3 = require("vec3").Vec3;
var materialToSound = {
const materialToSound = {
undefined: 'stone',
'rock': 'stone',
'dirt': 'grass',
@ -15,9 +15,9 @@ module.exports.player=function(player,serv)
{
player._client.on("block_place",({direction,heldItem,location} = {}) => {
if(direction==-1 || heldItem.blockId==-1 || !blocks[heldItem.blockId]) return;
var referencePosition=new Vec3(location.x,location.y,location.z);
var directionVector=directionToVector[direction];
var placedPosition=referencePosition.plus(directionVector);
const referencePosition=new Vec3(location.x,location.y,location.z);
const directionVector=directionToVector[direction];
const placedPosition=referencePosition.plus(directionVector);
player.behavior('placeBlock', {
direction: directionVector,
heldItem: heldItem,
@ -47,11 +47,11 @@ module.exports.player=function(player,serv)
});
}
}, async () => {
var id = await player.world.getBlockType(placedPosition);
var damage = await player.world.getBlockData(placedPosition);
const id = await player.world.getBlockType(placedPosition);
const damage = await player.world.getBlockData(placedPosition);
player.sendBlock(placedPosition, id, damage);
});
});
};
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)];
const 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)];

View file

@ -6,9 +6,9 @@ module.exports.server=function(serv)
serv.entities={};
serv.getPlayer = username => {
for (var p in serv.players) {
if (serv.players[p].username == username) return serv.players[p]
}
const found=serv.players.filter(pl => pl.username == username);
if(found.length>0)
return found[0];
return null;
};
};
@ -21,7 +21,7 @@ module.exports.player=function(player){
usage: '/gamemode <0-3>',
op: true,
parse(str) {
var results;
let results;
if(!(results = str.match(/^([0-3])$/)))
return false;
return parseInt(str);

View file

@ -1,15 +1,15 @@
var {detectFrame,generatePortal,addPortalToWorld}=require("flying-squid").portal_detector;
var Vec3 = require("vec3").Vec3;
var UserError=require("flying-squid").UserError;
const {detectFrame,generatePortal,addPortalToWorld}=require("flying-squid").portal_detector;
const Vec3 = require("vec3").Vec3;
const UserError=require("flying-squid").UserError;
module.exports.player=function(player,serv) {
player.use_flint_and_steel=async (referencePosition,direction,position) => {
let block=await player.world.getBlock(referencePosition);
if(block.name=="obsidian")
{
var frames=await detectFrame(player.world,referencePosition,direction);
const frames=await detectFrame(player.world,referencePosition,direction);
if(frames.length!=0) {
var air = frames[0].air;
const air = frames[0].air;
air.forEach(pos => player.setBlock(pos, 90, (frames[0].bottom[0].x - frames[0].bottom[1].x) != 0 ? 1 : 2));
player.world.portals.push(frames[0]);
return;
@ -52,7 +52,7 @@ module.exports.player=function(player,serv) {
usage: '/portal <bottomLeft:<x> <y> <z>> <direction:x|z> <width> <height>',
op: true,
parse(str) {
var pars=str.split(' ');
const pars=str.split(' ');
if(pars.length!=6)
return false;
let [x,y,z,direction,width,height]=pars;
@ -64,7 +64,7 @@ module.exports.player=function(player,serv) {
return {bottomLeft,direction,width,height};
},
async action({bottomLeft,direction,width,height}) {
var portal=generatePortal(bottomLeft,direction,width,height);
const portal=generatePortal(bottomLeft,direction,width,height);
await addPortalToWorld(player.world,portal,[],[],async (pos,type) => {
await serv.setBlock(player.world,pos,type,0);
});

View file

@ -1,5 +1,5 @@
var Vec3 = require("vec3").Vec3;
var UserError = require('flying-squid').UserError;
const Vec3 = require("vec3").Vec3;
const UserError = require('flying-squid').UserError;
module.exports.player=function(player,serv)
{
@ -15,7 +15,7 @@ module.exports.player=function(player,serv)
function attackEntity(entityId)
{
var attackedEntity = serv.entities[entityId];
const attackedEntity = serv.entities[entityId];
if(!attackedEntity || (attackedEntity.gameMode != 0 && attackedEntity.type == 'player')) return;
player.behavior('attack', {
@ -27,7 +27,7 @@ module.exports.player=function(player,serv)
player._client.on("use_entity", ({mouse,target} = {}) => {
if(!serv.entities[target])
{
var dragon;
let dragon;
for(dragon=target-1;dragon>=target-7 && !serv.entities[dragon];dragon--){}
if(serv.entities[dragon] && serv.entities[dragon].entityType==63)
target=dragon;
@ -45,7 +45,7 @@ module.exports.player=function(player,serv)
return str || false;
},
action(sel) {
var arr = player.selectorString(sel);
let arr = player.selectorString(sel);
if (arr.length==0) throw new UserError('Could not find player');
arr.map(entity => entity.takeDamage({damage:20}));

View file

@ -1,4 +1,4 @@
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
function randomInt (low, high) {
@ -11,12 +11,12 @@ module.exports.server=function(serv,settings)
async function findSpawnZone(world,initialPoint)
{
var point=initialPoint;
let point=initialPoint;
while((await (world.getBlockType(point)))==0)
point=point.offset(0,-1,0);
while(true)
{
var p=await world.getBlockType(point);
const p=await world.getBlockType(point);
if(p!=8 && p!=9)
break;
point=point.offset(1,0,0);

View file

@ -1,15 +1,15 @@
var Vec3 = require('vec3').Vec3;
const 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}={}) => {
var players = (typeof whitelist != 'undefined' ? (typeof whitelist instanceof Array ? whitelist : [whitelist]) : serv.getNearby({
const players = (typeof whitelist != 'undefined' ? (typeof whitelist instanceof 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.position.scaled(1/32)).scaled(8).floored();
const pos = (position || player.position.scaled(1/32)).scaled(8).floored();
player._client.write('named_sound_effect', {
soundName: sound,
x: pos.x,
@ -42,11 +42,11 @@ module.exports.player=function(player,serv) {
player.on('placeBlock_cancel', async ({reference}, cancel) => {
if (player.crouching) return;
var id = await player.world.getBlockType(reference);
const id = await player.world.getBlockType(reference);
if (id != 25) return;
cancel(false);
if (!player.world.blockEntityData[reference.toString()]) player.world.blockEntityData[reference.toString()] = {};
var data = player.world.blockEntityData[reference.toString()];
const data = player.world.blockEntityData[reference.toString()];
if (typeof data.note == 'undefined') data.note = -1;
data.note++;
data.note %= 25;
@ -54,11 +54,11 @@ module.exports.player=function(player,serv) {
});
player.on('dig_cancel', async ({position}, cancel) => {
var id = await player.world.getBlockType(position);
const id = await player.world.getBlockType(position);
if (id != 25) return;
cancel(false);
if (!player.world.blockEntityData[position.toString()]) player.world.blockEntityData[position.toString()] = {};
var data = player.world.blockEntityData[position.toString()];
const data = player.world.blockEntityData[position.toString()];
if (typeof data.note == 'undefined') data.note = 0;
serv.playNoteBlock(data.note ,player.world, position);
});
@ -70,7 +70,7 @@ module.exports.player=function(player,serv) {
usage: '/playsound <sound_name> [volume] [pitch]',
op: true,
parse(str) {
var results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
const results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
if(!results) return false;
return {
sound_name:results[1],
@ -90,7 +90,7 @@ module.exports.player=function(player,serv) {
usage: '/playsoundforall <sound_name> [volume] [pitch]',
op: true,
parse(str) {
var results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
const results=str.match(/([^ ]+)(?: ([^ ]+))?(?: ([^ ]+))?/);
if(!results) return false;
return {
sound_name:results[1],

View file

@ -1,19 +1,19 @@
var version = require("flying-squid").version;
var entitiesByName=require("minecraft-data")(version).entitiesByName;
var entitiesById=require("minecraft-data")(version).entities;
var Entity = require("prismarine-entity");
var path = require('path');
var requireIndex = require('requireindex');
var plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
var Item = require("prismarine-item")(version);
var UserError = require('flying-squid').UserError;
const version = require("flying-squid").version;
const entitiesByName=require("minecraft-data")(version).entitiesByName;
const entitiesById=require("minecraft-data")(version).entities;
const Entity = require("prismarine-entity");
const path = require('path');
const requireIndex = require('requireindex');
const plugins = requireIndex(path.join(__dirname,'..', 'plugins'));
const Item = require("prismarine-item")(version);
const UserError = require('flying-squid').UserError;
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
module.exports.server=function(serv,options) {
serv.initEntity = (type, entityType, world, position) => {
serv.entityMaxId++;
var entity = new Entity(serv.entityMaxId);
const entity = new Entity(serv.entityMaxId);
Object.keys(plugins)
.filter(pluginName => plugins[pluginName].entity!=undefined)
@ -27,7 +27,7 @@ module.exports.server=function(serv,options) {
};
serv.spawnObject = (type, world, position, {pitch=0,yaw=0,velocity=new Vec3(0,0,0),data=1,itemId,itemDamage=0,pickupTime=undefined,deathTime=undefined}) => {
var object = serv.initEntity('object', type, world, position.scaled(32).floored());
const object = serv.initEntity('object', type, world, position.scaled(32).floored());
object.data = data;
object.velocity = velocity.scaled(32).floored();
object.pitch = pitch;
@ -45,7 +45,7 @@ module.exports.server=function(serv,options) {
};
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());
const mob = serv.initEntity('mob', type, world, position.scaled(32).floored());
mob.name=entitiesById[type].name;
mob.velocity = velocity.scaled(32).floored();
mob.pitch = pitch;
@ -78,7 +78,7 @@ module.exports.player=function(player,serv){
usage: '/spawn <entity_id>',
op: true,
parse(str) {
var results=str.match(/(\d+)/);
const results=str.match(/(\d+)/);
if (!results) return false;
return {
id: parseInt(results[1])
@ -97,7 +97,7 @@ module.exports.player=function(player,serv){
usage: '/spawnObject <entity_id>',
op: true,
parse(str) {
var results=str.match(/(\d+)/);
const results=str.match(/(\d+)/);
if (!results) return false;
return {
id: parseInt(results[1])
@ -116,7 +116,7 @@ module.exports.player=function(player,serv){
usage: '/summon <entity_name>',
op: true,
action(name) {
var entity=entitiesByName[name];
const entity=entitiesByName[name];
if(!entity) {
player.chat("No entity named "+name);
return;
@ -133,7 +133,7 @@ module.exports.player=function(player,serv){
usage: '/pile <entities types>',
op: true,
parse(str) {
var args=str.split(' ');
const args=str.split(' ');
if(args.length==0)
return false;
return args
@ -159,7 +159,7 @@ module.exports.player=function(player,serv){
usage: '/attach <carrier> <attached>',
op: true,
parse(str) {
var args=str.split(' ');
const args=str.split(' ');
if(args.length!=2)
return false;
@ -221,7 +221,7 @@ module.exports.entity=function(entity,serv) {
};
entity.getSpawnPacket = () => {
var scaledVelocity = entity.velocity.scaled(8000/32/20).floored(); // from fixed-position/second to unit => 1/8000 blocks per tick
const scaledVelocity = entity.velocity.scaled(8000/32/20).floored(); // from fixed-position/second to unit => 1/8000 blocks per tick
if (entity.type == 'player') {
return {
entityId: entity.id,
@ -271,17 +271,17 @@ module.exports.entity=function(entity,serv) {
entity.updateAndSpawn = () => {
var updatedEntities=entity.getNearby();
var entitiesToAdd=updatedEntities.filter(e => entity.nearbyEntities.indexOf(e)==-1);
var entitiesToRemove=entity.nearbyEntities.filter(e => updatedEntities.indexOf(e)==-1);
const updatedEntities=entity.getNearby();
const entitiesToAdd=updatedEntities.filter(e => entity.nearbyEntities.indexOf(e)==-1);
const entitiesToRemove=entity.nearbyEntities.filter(e => updatedEntities.indexOf(e)==-1);
if (entity.type == 'player') {
entity.despawnEntities(entitiesToRemove);
entitiesToAdd.forEach(entity.spawnEntity);
}
entity.lastPositionPlayersUpdated=entity.position.clone();
var playersToAdd = entitiesToAdd.filter(e => e.type == 'player');
var playersToRemove = entitiesToRemove.filter(e => e.type == 'player');
const playersToAdd = entitiesToAdd.filter(e => e.type == 'player');
const playersToRemove = entitiesToRemove.filter(e => e.type == 'player');
playersToRemove.forEach(p => p.despawnEntities([entity]));
playersToRemove.forEach(p => p.nearbyEntities=p.getNearby());
@ -303,7 +303,7 @@ module.exports.entity=function(entity,serv) {
entity.attach= (attachedEntity,leash=false) =>
{
var p={
const p={
entityId:attachedEntity.id,
vehicleId:entity.id,
leash:leash

View file

@ -8,8 +8,8 @@ module.exports.server=function(serv) {
serv.tickInterval = setInterval(() => {
serv.tickCount++;
var t=Date.now();
var time = (t - serv.lastTickTime) / 1000;
const t=Date.now();
let time = (t - serv.lastTickTime) / 1000;
if (time > 100) time = 0;
serv.emit('tick', time, serv.tickCount);
serv.lastTickTime = t;

View file

@ -1,5 +1,5 @@
var Vec3 = require("vec3").Vec3;
var UserError = require('flying-squid').UserError;
const Vec3 = require("vec3").Vec3;
const UserError = require('flying-squid').UserError;
module.exports.player = (player, serv) => {

View file

@ -1,4 +1,4 @@
var Vec3 = require("vec3").Vec3;
const Vec3 = require("vec3").Vec3;
Vec3.prototype.toFixedPosition=function() {
return this.scaled(32).floored();
@ -10,7 +10,7 @@ module.exports.player=function(player)
// float (degrees) --> byte (1/256 "degrees")
function conv(f){
var b = Math.floor((f % 360) * 256 / 360);
let b = Math.floor((f % 360) * 256 / 360);
if (b < -128) b += 256;
else if (b > 127) b -= 256;
return b;
@ -22,8 +22,8 @@ module.exports.player=function(player)
pitch: pitch,
onGround: onGround
}, () => {
var convYaw=conv(yaw);
var convPitch=conv(pitch);
const convYaw=conv(yaw);
const convPitch=conv(pitch);
if (convYaw == player.yaw && convPitch == player.pitch) return;
player._writeOthersNearby("entity_look", {
entityId: player.id,
@ -64,18 +64,18 @@ module.exports.player=function(player)
};
player.teleport = async (position) => {
var notCancelled = await player.sendPosition(position.scaled(32).floored(), false, true);
const notCancelled = await player.sendPosition(position.scaled(32).floored(), false, true);
if (notCancelled) player.sendSelfPosition();
}
};
player.sendAbilities = () => { // TODO: Fix all of this...
var godmode = player.gameMode == 1 || player.gameMode == 3;
var canFly = player.gameMode == 1 || player.gameMode == 3;
var isFlying = !player.onGround && canFly;
var creativeMode = player.gameMode == 1;
var f = (+godmode*8) + (+canFly*4) + (+isFlying*2) + (+creativeMode*1);
var walkingSpeed = 0.2 * (1 + (player.effects[1] != null ? (player.effects[1].amplifier + 1) : 0) * 0.2)
var flyingSpeed = 0.1;
const godmode = player.gameMode == 1 || player.gameMode == 3;
const canFly = player.gameMode == 1 || player.gameMode == 3;
const isFlying = !player.onGround && canFly;
const creativeMode = player.gameMode == 1;
const f = (+godmode*8) + (+canFly*4) + (+isFlying*2) + (+creativeMode*1);
const walkingSpeed = 0.2 * (1 + (player.effects[1] != null ? (player.effects[1].amplifier + 1) : 0) * 0.2)
const flyingSpeed = 0.1;
/*console.log(walkingSpeed, flyingSpeed);
player._client.write('abilities', { // FIIIIXXXXXXX
flags: f,
@ -94,7 +94,7 @@ module.exports.entity=function(entity,serv){
onGround: onGround,
teleport: teleport
}, ({position,onGround}) => {
var diff = position.minus(entity.position);
const diff = position.minus(entity.position);
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
entity._writeOthersNearby('entity_teleport', {
entityId: entity.id,

View file

@ -1,15 +1,15 @@
var items=require("minecraft-data")(require("flying-squid").version).items;
var Item = require("prismarine-item")(require("flying-squid").version);
var Vec3 = require("vec3").Vec3;
const items=require("minecraft-data")(require("flying-squid").version).items;
const Item = require("prismarine-item")(require("flying-squid").version);
const Vec3 = require("vec3").Vec3;
module.exports.player=function(player,serv)
{
player._client.on("block_place",({direction,heldItem,location} = {}) => {
if (direction == -1 || heldItem.blockId == -1 || !items[heldItem.blockId]) return;
var item=Item.fromNotch(heldItem);
var referencePosition = new Vec3(location.x, location.y, location.z);
var directionVector = directionToVector[direction];
var position = referencePosition.plus(directionVector);
const item=Item.fromNotch(heldItem);
const referencePosition = new Vec3(location.x, location.y, location.z);
const directionVector = directionToVector[direction];
const position = referencePosition.plus(directionVector);
if(item.name=="flint_and_steel")
player.use_flint_and_steel(referencePosition,directionVector,position);
@ -17,4 +17,4 @@ module.exports.player=function(player,serv)
serv.spawnMob(item.metadata,player.world,position);
});
};
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)];
const 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)];

View file

@ -1,9 +1,9 @@
var spiralloop = require('spiralloop');
const spiralloop = require('spiralloop');
var World = require('prismarine-world');
var WorldSync = require("prismarine-world-sync");
const World = require('prismarine-world');
const WorldSync = require("prismarine-world-sync");
var generations=require("flying-squid").generations;
const generations=require("flying-squid").generations;
module.exports.server=function(serv,{regionFolder,generation={"name":"diamond_square","options":{"worldHeight":80}}}={}) {
generation.options.seed=generation.options.seed || Math.random()*Math.pow(2, 32);
@ -22,9 +22,9 @@ module.exports.server=function(serv,{regionFolder,generation={"name":"diamond_sq
//////////////
serv.pregenWorld = (world, size=3) => {
var promises = [];
for (var x = -size; x < size; x++) {
for (var z = -size; z < size; z++) {
const promises = [];
for (let x = -size; x < size; x++) {
for (let z = -size; z < size; z++) {
promises.push(world.getColumn(x, z));
}
}
@ -79,7 +79,7 @@ module.exports.player=function(player,serv,settings) {
function spiral(arr)
{
var t=[];
const t=[];
spiralloop(arr,(x,z) => {
t.push([x,z]);
});
@ -89,8 +89,8 @@ module.exports.player=function(player,serv,settings) {
player.sendNearbyChunks = (view,group) =>
{
player.lastPositionChunkUpdated=player.position;
var playerChunkX=Math.floor(player.position.x/16/32);
var playerChunkZ=Math.floor(player.position.z/16/32);
const playerChunkX=Math.floor(player.position.x/16/32);
const playerChunkZ=Math.floor(player.position.z/16/32);
Object.keys(player.loadedChunks)
.map((key) => key.split(",").map(a => parseInt(a)))
@ -103,13 +103,13 @@ module.exports.player=function(player,serv,settings) {
chunkZ:playerChunkZ+t[1]-view
}))
.filter(({chunkX,chunkZ}) => {
var key=chunkX+","+chunkZ;
var loaded=player.loadedChunks[key];
const key=chunkX+","+chunkZ;
const loaded=player.loadedChunks[key];
if(!loaded) player.loadedChunks[key]=1;
return !loaded;
})
.reduce((acc,{chunkX,chunkZ})=> {
var p=acc
const p=acc
.then(() => player.world.getColumn(chunkX, chunkZ))
.then((column) => player.sendChunk(chunkX, chunkZ, column));
return group ? p.then(() => sleep(5)) : p;

View file

@ -1,14 +1,14 @@
var Vec3 = require("vec3").Vec3;
var assert = require('assert');
var flatMap = require('flatmap');
var range = require('range').range;
const Vec3 = require("vec3").Vec3;
const assert = require('assert');
const flatMap = require('flatmap');
const range = require('range').range;
module.exports={detectFrame,findPotentialLines,findBorder,getAir,generateLine,generatePortal,addPortalToWorld,makeWorldWithPortal};
async function findLineInDirection(world,startingPoint,type,direction,directionV)
{
var line=[];
var point=startingPoint;
const line=[];
let point=startingPoint;
while((await world.getBlock(point)).name==type && (await world.getBlockType(point.plus(directionV)))==0)
{
line.push(point);
@ -19,15 +19,15 @@ async function findLineInDirection(world,startingPoint,type,direction,directionV
async function findLine(world,startingPoint,type,direction,directionV)
{
var firstSegment=(await findLineInDirection(world,startingPoint.plus(direction.scaled(-1)),type,direction.scaled(-1),directionV)).reverse();
var secondSegment=await findLineInDirection(world,startingPoint,type,direction,directionV);
const firstSegment=(await findLineInDirection(world,startingPoint.plus(direction.scaled(-1)),type,direction.scaled(-1),directionV)).reverse();
const secondSegment=await findLineInDirection(world,startingPoint,type,direction,directionV);
return firstSegment.concat(secondSegment);
}
async function findPotentialLines(world,startingPoint,directionV)
{
var firstLineDirection=directionV.y!=0 ? [new Vec3(1,0,0),new Vec3(0,0,1)] :
const firstLineDirection=directionV.y!=0 ? [new Vec3(1,0,0),new Vec3(0,0,1)] :
[new Vec3(0,1,0)];
return (await Promise.all(firstLineDirection
.map(async d => ({direction:d,line:(await findLine(world,startingPoint,'obsidian',d,directionV))}))))
@ -44,15 +44,15 @@ function positiveOrder(line,direction)
async function findBorder(world,{line,direction},directionV)
{
var bottom=line;
let bottom=line;
if(bottom.length==0)
return [];
var left=await findLineInDirection(world,bottom[0].plus(direction.scaled(-1).plus(directionV)),'obsidian',directionV,direction);
var right=await findLineInDirection(world,bottom[line.length-1].plus(direction).plus(directionV),'obsidian',
let left=await findLineInDirection(world,bottom[0].plus(direction.scaled(-1).plus(directionV)),'obsidian',directionV,direction);
let right=await findLineInDirection(world,bottom[line.length-1].plus(direction).plus(directionV),'obsidian',
directionV,direction.scaled(-1));
if(left.length==0 || left.length!=right.length)
return null;
var top=await findLineInDirection(world,left[left.length-1].plus(direction).plus(directionV),'obsidian',
let top=await findLineInDirection(world,left[left.length-1].plus(direction).plus(directionV),'obsidian',
direction,directionV.scaled(-1));
if(bottom.length!=top.length)
return null;
@ -66,7 +66,7 @@ async function findBorder(world,{line,direction},directionV)
[bottom,left,right,top]=[left,bottom,top,right];
[bottom,top]=directionV.y<0 ? [top,bottom] : [bottom,top];
var horDir=direction.x!=0 || directionV.x!=0 ? 'x' :'z';
const horDir=direction.x!=0 || directionV.x!=0 ? 'x' :'z';
[left,right]=direction[horDir]<0 || directionV[horDir]<0 ? [right,left] : [left,right];
if(bottom.length<2 || top.length<2 || left.length<3 || right.length<3)
@ -103,20 +103,20 @@ async function isAllAir(world,blocks)
function getAir(border)
{
var {bottom,top}=border;
const {bottom,top}=border;
return flatMap(bottom,pos => range(1,top[0].y-bottom[0].y).map(i => pos.offset(0,i,0)));
}
var World = require('prismarine-world');
var Chunk = require('prismarine-chunk')(require("./version"));
const World = require('prismarine-world');
const Chunk = require('prismarine-chunk')(require("./version"));
function generateLine(startingPoint,direction,length) {
return range(0,length).map(i => startingPoint.plus(direction.scaled(i)));
}
function generatePortal(bottomLeft,direction,width,height){
var directionV=new Vec3(0,1,0);
const directionV=new Vec3(0,1,0);
return {
bottom:generateLine(bottomLeft.plus(direction),direction,width-2),
left:generateLine(bottomLeft.plus(directionV),directionV,height-2),
@ -131,9 +131,9 @@ function addPortalToWorld(world,portal,additionalAir,additionalObsidian,setBlock
{
if(setBlockType==null)
setBlockType=world.setBlockType.bind(world);
let {bottom,left,right,top,air}=portal;
const {bottom,left,right,top,air}=portal;
var p=flatMap([bottom,left,right,top],border => border.map(pos => setBlockType(pos,49)));
const p=flatMap([bottom,left,right,top],border => border.map(pos => setBlockType(pos,49)));
p.push(air.map(pos => setBlockType(pos,0)));
p.push(additionalAir.map(pos => setBlockType(pos,0)));
@ -145,7 +145,7 @@ function addPortalToWorld(world,portal,additionalAir,additionalObsidian,setBlock
async function makeWorldWithPortal(portal,additionalAir,additionalObsidian)
{
var world=new World(() => new Chunk());
const world=new World(() => new Chunk());
await addPortalToWorld(world,portal,additionalAir,additionalObsidian);
return world;

View file

@ -1,15 +1,15 @@
var Chunk = require('prismarine-chunk')(require("../version"));
var Vec3 = require('vec3').Vec3;
var blocks=require("minecraft-data")(require("../version")).blocks;
const Chunk = require('prismarine-chunk')(require("../version"));
const Vec3 = require('vec3').Vec3;
const blocks=require("minecraft-data")(require("../version")).blocks;
function generation() {
function generateSimpleChunk() {
var chunk = new Chunk();
const chunk = new Chunk();
var i=2;
for (var x = 0; x < 16;x++) {
for (var z = 0; z < 16; z++) {
var y;
let i=2;
for (let x = 0; x < 16;x++) {
for (let z = 0; z < 16; z++) {
let y;
for(y=47;y<=50;y++)
{
chunk.setBlockType(new Vec3(x,y,z), i);

View file

@ -1,6 +1,6 @@
var Chunk = require('prismarine-chunk')(require("../version"));
var Vec3 = require('vec3').Vec3;
var rand = require('random-seed');
const Chunk = require('prismarine-chunk')(require("../version"));
const Vec3 = require('vec3').Vec3;
const rand = require('random-seed');
class DiamondSquare {
constructor(size, roughness, seed) {
@ -33,7 +33,7 @@ class DiamondSquare {
if (this.data[x + '_' + y] == null) {
this.opCountN++;
var base = 1;
let base = 1;
while (((x & base) == 0) && ((y & base) == 0))
base <<= 1;
@ -47,13 +47,14 @@ class DiamondSquare {
}
randFromPair(x, y) {
for (var i = 0; i < 80; i++) {
var xm7 = x % 7;
var xm13 = x % 13;
var xm1301081 = x % 1301081;
var ym8461 = y % 8461;
var ym105467 = y % 105467;
var ym105943 = y % 105943;
let xm7,xm13,xm1301081,ym8461,ym105467,ym105943;
for (let i = 0; i < 80; i++) {
xm7 = x % 7;
xm13 = x % 13;
xm1301081 = x % 1301081;
ym8461 = y % 8461;
ym105467 = y % 105467;
ym105943 = y % 105943;
//y = (i < 40 ? seed : x);
y = x + this.seed;
x += (xm7 + xm13 + xm1301081 + ym8461 + ym105467 + ym105943);
@ -89,27 +90,27 @@ class DiamondSquare {
function generation({seed,worldHeight=80,waterline=20}={}) {
// Selected empirically
var size = 10000000;
var space = new DiamondSquare(size, size / 500, seed);
const size = 10000000;
const space = new DiamondSquare(size, size / 500, seed);
function generateSimpleChunk(chunkX, chunkZ) {
var chunk = new Chunk();
var seedRand = rand.create(seed+':'+chunkX+':'+chunkZ);
const chunk = new Chunk();
const seedRand = rand.create(seed+':'+chunkX+':'+chunkZ);
var worldX = chunkX * 16 + size / 2;
var worldZ = chunkZ * 16 + size / 2;
const worldX = chunkX * 16 + size / 2;
const worldZ = chunkZ * 16 + size / 2;
for (var x = 0; x < 16; x++) {
for (var z = 0; z < 16; z++) {
var level = Math.floor(space.value(worldX + x, worldZ + z) * worldHeight);
var dirtheight = level - 4 + seedRand(3);
var bedrockheight = 1 + seedRand(4);
for (var y = 0; y < 256; y++) {
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
const level = Math.floor(space.value(worldX + x, worldZ + z) * worldHeight);
const dirtheight = level - 4 + seedRand(3);
const bedrockheight = 1 + seedRand(4);
for (let y = 0; y < 256; y++) {
let block;
let data;
var surfaceblock = level < waterline ? 12 : 2; // Sand below water, grass
var belowblock = level < waterline ? 12 : 3; // 3-5 blocks below surface
const surfaceblock = level < waterline ? 12 : 2; // Sand below water, grass
const belowblock = level < waterline ? 12 : 3; // 3-5 blocks below surface
if (y < bedrockheight) block = 7; // Solid bedrock at bottom
else if (y < level && y >= dirtheight) block = belowblock; // Dirt/sand below surface
@ -121,7 +122,7 @@ function generation({seed,worldHeight=80,waterline=20}={}) {
data = 1;
}
var pos = new Vec3(x, y, z);
const pos = new Vec3(x, y, z);
if (block) chunk.setBlockType(pos, block);
if (data) chunk.setBlockData(pos, data);
chunk.setSkyLight(pos, 15);

View file

@ -1,14 +1,14 @@
var Chunk = require('prismarine-chunk')(require("../version"));
var Vec3 = require('vec3').Vec3;
const Chunk = require('prismarine-chunk')(require("../version"));
const Vec3 = require('vec3').Vec3;
function generation() {
function generateSimpleChunk() {
var chunk = new Chunk();
const chunk = new Chunk();
for (var x = 0; x < 16; x++) {
for (var z = 0; z < 16; z++) {
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
chunk.setBlockType(new Vec3(x, 50, z), 2);
for (var y = 0; y < 256; y++) {
for (let y = 0; y < 256; y++) {
chunk.setSkyLight(new Vec3(x, y, z), 15);
}
}

View file

@ -1,16 +1,16 @@
var Chunk = require('prismarine-chunk')(require("../version"));
var Vec3 = require('vec3').Vec3;
var rand = require('random-seed');
const Chunk = require('prismarine-chunk')(require("../version"));
const Vec3 = require('vec3').Vec3;
const rand = require('random-seed');
function generation({seed,level=50}={}) {
function generateChunk(chunkX, chunkZ) {
var seedRand = rand.create(seed+':'+chunkX+':'+chunkZ);
var chunk=new Chunk();
for (var x = 0; x < 16; x++) {
for (var z = 0; z < 16; z++) {
var bedrockheighttop = 1 + seedRand(4);
var bedrockheightbottom = 1 + seedRand(4);
for (var y = 0; y < 128; y++) { // Nether only goes up to 128
const seedRand = rand.create(seed+':'+chunkX+':'+chunkZ);
const chunk=new Chunk();
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
const bedrockheighttop = 1 + seedRand(4);
const bedrockheightbottom = 1 + seedRand(4);
for (let y = 0; y < 128; y++) { // Nether only goes up to 128
let block;
let data;
@ -18,7 +18,7 @@ function generation({seed,level=50}={}) {
else if (y < level) block = 87;
else if (y > 127 - bedrockheighttop) block = 7;
var pos = new Vec3(x, y, z);
const pos = new Vec3(x, y, z);
if (block) chunk.setBlockType(pos, block);
if (data) chunk.setBlockData(pos, data);
// Don't need to set light data in nether

View file

@ -1,14 +1,14 @@
var Chunk = require('prismarine-chunk')(require("../version"));
var Vec3 = require('vec3').Vec3;
const Chunk = require('prismarine-chunk')(require("../version"));
const Vec3 = require('vec3').Vec3;
function generation({opt='default',bottom_id=7,middle_id=1,top_id=2,middle_thickness=3,debug=false}={}) {
function generateChunk() {
var chunk=new Chunk();
var height = middle_thickness + 1;
var DEBUG_POINTS = [new Vec3(0, height, 0), new Vec3(15, height, 0), new Vec3(0, height, 15), new Vec3(15, height, 15)];
for (var x = 0; x < 16; x++) {
for (var z = 0; z < 16; z++) {
for (var y = 0; y < middle_thickness + 2; y++) {
const chunk=new Chunk();
const height = middle_thickness + 1;
const DEBUG_POINTS = [new Vec3(0, height, 0), new Vec3(15, height, 0), new Vec3(0, height, 15), new Vec3(15, height, 15)];
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
for (let y = 0; y < middle_thickness + 2; y++) {
if (y == 0) chunk.setBlockType(new Vec3(x, y, z), bottom_id);
else if (y < middle_thickness + 1) chunk.setBlockType(new Vec3(x, y, z), middle_id);
else chunk.setBlockType(new Vec3(x, y, z), top_id);

View file

@ -1,25 +1,25 @@
var net = require('net');
var mcServer=require("flying-squid");
var settings = require('../config/default-settings');
var mineflayer = require("mineflayer");
var assert = require('chai').assert;
var Vec3 = require('vec3').Vec3;
const net = require('net');
const mcServer=require("flying-squid");
const settings = require('../config/default-settings');
const mineflayer = require("mineflayer");
const assert = require('chai').assert;
const Vec3 = require('vec3').Vec3;
function assertPosEqual(actual,expected) {
assert.isBelow(actual.distanceTo(expected),1,"expected: "+expected+", actual: "+actual+"\n");
}
var once = require('event-promise');
const once = require('event-promise');
describe("Server with mineflayer connection", function() {
this.timeout(10 * 60 * 1000);
var bot;
var bot2;
var serv;
let bot;
let bot2;
let serv;
async function onGround(bot)
{
await new Promise((cb) => {
var l=() => {
const l=() => {
if(bot.entity.onGround) {
bot.removeListener("move",l);
cb();
@ -30,19 +30,19 @@ describe("Server with mineflayer connection", function() {
}
async function waitMessage(bot,message) {
let msg1=await once(bot,'message');
const msg1=await once(bot,'message');
assert.equal(msg1.extra[0].text,message);
}
async function waitMessages(bot,messages) {
var toReceive=messages.reduce((acc,message) => {
const toReceive=messages.reduce((acc,message) => {
acc[message]=1;
return acc;
},{});
var received={};
const received={};
return new Promise(cb => {
var listener=msg => {
var message=msg.extra[0].text;
const listener=msg => {
const message=msg.extra[0].text;
if(!toReceive[message]) throw new Error("Received "+message+" , expected to receive one of "+messages);
if(received[message]) throw new Error("Received "+message+" two times");
received[message]=1;
@ -62,7 +62,7 @@ describe("Server with mineflayer connection", function() {
beforeEach(async function () {
this.timeout(10 * 60 * 1000);
var options = settings;
const options = settings;
options["online-mode"]=false;
options["port"]=25566;
options["view-distance"]=2;
@ -94,10 +94,10 @@ describe("Server with mineflayer connection", function() {
function waitSpawnZone(bot,view)
{
var nbChunksExpected=(view*2)*(view*2);
var c=0;
const nbChunksExpected=(view*2)*(view*2);
let c=0;
return new Promise(cb => {
var listener=() => {
const listener=() => {
c++;
if(c==nbChunksExpected)
{
@ -113,7 +113,7 @@ describe("Server with mineflayer connection", function() {
this.timeout(10 * 60 * 1000);
await Promise.all([waitSpawnZone(bot,2),waitSpawnZone(bot2,2),onGround(bot),onGround(bot2)]);
var pos=bot.entity.position.offset(0,-1,0).floored();
const pos=bot.entity.position.offset(0,-1,0).floored();
bot.dig(bot.blockAt(pos));
let [oldBlock,newBlock]=await once(bot2,'blockUpdate',{array:true});
@ -126,7 +126,7 @@ describe("Server with mineflayer connection", function() {
this.timeout(10 * 60 * 1000);
await Promise.all([waitSpawnZone(bot,2),waitSpawnZone(bot2,2),onGround(bot),onGround(bot2)]);
var pos=bot.entity.position.offset(0,-2,0).floored();
const pos=bot.entity.position.offset(0,-2,0).floored();
bot.dig(bot.blockAt(pos));
let [oldBlock,newBlock]=await once(bot2,'blockUpdate',{array:true});
@ -168,7 +168,7 @@ describe("Server with mineflayer connection", function() {
function waitDragon()
{
return new Promise((done) => {
var listener=(entity) => {
const listener=(entity) => {
if(entity.name=="EnderDragon") {
bot.removeListener('entitySpawn',listener);
done();
@ -208,14 +208,14 @@ describe("Server with mineflayer connection", function() {
});
it("can tp with relative positions",async () => {
await onGround(bot);
var initialPosition=bot.entity.position.clone();
const initialPosition=bot.entity.position.clone();
bot.chat('/tp ~1 ~-2 ~3');
await once(bot,'forcedMove');
assertPosEqual(bot.entity.position,initialPosition.offset(1,-2,3));
});
it("can tp somebody else with relative positions",async () => {
await Promise.all([onGround(bot),onGround(bot2)]);
var initialPosition=bot2.entity.position.clone();
const initialPosition=bot2.entity.position.clone();
bot.chat('/tp bot2 ~1 ~-2 ~3');
await once(bot2,'forcedMove');
assertPosEqual(bot2.entity.position,initialPosition.offset(1,-2,3));

View file

@ -1,7 +1,7 @@
var {detectFrame,findPotentialLines,findBorder,getAir,generateLine,generatePortal,addPortalToWorld,makeWorldWithPortal}=require("flying-squid").portal_detector;
var Vec3 = require("vec3").Vec3;
var assert = require('chai').assert;
var range = require('range').range;
const {detectFrame,findPotentialLines,findBorder,getAir,generateLine,generatePortal,addPortalToWorld,makeWorldWithPortal}=require("flying-squid").portal_detector;
const Vec3 = require("vec3").Vec3;
const assert = require('chai').assert;
const range = require('range').range;
describe("Generate portal",function(){
@ -20,7 +20,7 @@ describe("Generate portal",function(){
});
describe("Detect portal", function() {
var portalData=[];
const portalData=[];
portalData.push({
name:"simple portal frame x",
bottomLeft:new Vec3(2,1,1),
@ -57,7 +57,7 @@ describe("Detect portal", function() {
additionalAir:[],
additionalObsidian:[new Vec3(2,1,1),new Vec3(5,1,1),new Vec3(2,6,1),new Vec3(5,6,1)]
});
var {bottom,left,right,top,air}=generatePortal(new Vec3(2,1,2),new Vec3(1,0,0),4,5);
const {bottom,left,right,top,air}=generatePortal(new Vec3(2,1,2),new Vec3(1,0,0),4,5);
portalData.push({
name:"2 portals",
@ -82,12 +82,12 @@ describe("Detect portal", function() {
portalData.forEach(({name,bottomLeft,direction,width,height,additionalAir,additionalObsidian}) => {
var portal=generatePortal(bottomLeft,direction,width,height);
var {bottom,left,right,top,air}=portal;
const portal=generatePortal(bottomLeft,direction,width,height);
const {bottom,left,right,top,air}=portal;
describe("Detect "+name,() => {
var expectedBorder={bottom,left,right,top};
const expectedBorder={bottom,left,right,top};
var world;
let world;
before(async function(){
world=await makeWorldWithPortal(portal,additionalAir,additionalObsidian);
});
@ -147,7 +147,7 @@ describe("Detect portal", function() {
describe("find borders",function() {
it("find borders from bottom", async function () {
var border = await findBorder(world, {
const border = await findBorder(world, {
"direction": direction,
"line": bottom
}, new Vec3(0, 1, 0));
@ -155,7 +155,7 @@ describe("Detect portal", function() {
});
it("find borders from top", async function () {
var border = await findBorder(world, {
const border = await findBorder(world, {
"direction": direction,
"line": top
}, new Vec3(0, -1, 0));
@ -163,14 +163,14 @@ describe("Detect portal", function() {
});
it("find borders from left", async function () {
var border = await findBorder(world, {
const border = await findBorder(world, {
"direction": new Vec3(0, 1, 0),
"line": left
},direction);
assert.deepEqual(border, expectedBorder)
});
it("find borders from right", async function () {
var border = await findBorder(world, {
const border = await findBorder(world, {
"direction": new Vec3(0, 1, 0),
"line": right
}, direction.scaled(-1));
@ -180,21 +180,21 @@ describe("Detect portal", function() {
describe("detect portals",function(){
it("detect portals from bottom left",async function() {
var portals=await detectFrame(world,bottom[0],new Vec3(0,1,0));
const portals=await detectFrame(world,bottom[0],new Vec3(0,1,0));
assert.deepEqual(portals,[portal])
});
it("detect portals from top left",async function() {
var portals=await detectFrame(world,top[0],new Vec3(0,-1,0));
const portals=await detectFrame(world,top[0],new Vec3(0,-1,0));
assert.deepEqual(portals,[portal])
});
it("detect portals from right top",async function() {
var portals=await detectFrame(world,right[right.length-1],direction.scaled(-1));
const portals=await detectFrame(world,right[right.length-1],direction.scaled(-1));
assert.deepEqual(portals,[portal])
})
});
it("get air",function(){
var foundAir=getAir(expectedBorder);
const foundAir=getAir(expectedBorder);
assert.deepEqual(foundAir,air);
});
});
@ -205,7 +205,7 @@ describe("Detect portal", function() {
describe("Doesn't detect non-portal",function() {
var portalData=[];
const portalData=[];
portalData.push({
name:"simple portal frame x with one obsidian in the middle",
@ -218,25 +218,25 @@ describe("Doesn't detect non-portal",function() {
});
portalData.forEach(({name,bottomLeft,direction,width,height,additionalAir,additionalObsidian}) => {
var portal = generatePortal(bottomLeft, direction, width, height);
var {bottom,left,right,top,air}=portal;
const portal = generatePortal(bottomLeft, direction, width, height);
const {bottom,left,right,top,air}=portal;
describe("Doesn't detect detect " + name, () => {
var world;
let world;
before(async function () {
world=await makeWorldWithPortal(portal, additionalAir, additionalObsidian);
});
describe("doesn't detect portals",function(){
it("doesn't detect portals from bottom left",async function() {
var portals=await detectFrame(world,bottom[0],new Vec3(0,1,0));
const portals=await detectFrame(world,bottom[0],new Vec3(0,1,0));
assert.deepEqual(portals,[])
});
it("doesn't detect portals from top left",async function() {
var portals=await detectFrame(world,top[0],new Vec3(0,-1,0));
const portals=await detectFrame(world,top[0],new Vec3(0,-1,0));
assert.deepEqual(portals,[])
});
it("doesn't detect portals from right top",async function() {
var portals=await detectFrame(world,right[right.length-1],direction.scaled(-1));
const portals=await detectFrame(world,right[right.length-1],direction.scaled(-1));
assert.deepEqual(portals,[])
})
});

View file

@ -1,6 +1,6 @@
var net = require('net');
const net = require('net');
describe("Server", function() {
var serv;
let serv;
before(function(done){
serv=require("../app");
serv.on("listening",function(){
@ -15,7 +15,7 @@ describe("Server", function() {
});
});
it("Is running", function(done) {
var client = net.Socket();
const client = net.Socket();
client.connect(serv._server.socketServer.address().port, '127.0.0.1', done);
client.on('error', done);
});