mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-18 05:51:12 +00:00
Merge pull request #173 from mhsjlw/no_more_var
use const and let instead of var
This commit is contained in:
commit
7ac0117860
44 changed files with 454 additions and 460 deletions
12
src/index.js
12
src/index.js
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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) ? '' : ' ';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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('');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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: [],
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)];
|
||||
22
src/lib/plugins/effects.js
vendored
22
src/lib/plugins/effects.js
vendored
|
|
@ -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');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
};
|
||||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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]),
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -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)];
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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}));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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],
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) => {
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)];
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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,[])
|
||||
})
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue