mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-24 17:21:43 +00:00
go to es6 + use real prismarine-chunk and prismarine-world
This commit is contained in:
parent
f5e2b9aaa7
commit
a79181b27e
34 changed files with 172 additions and 158 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
||||||
node_modules
|
node_modules
|
||||||
|
dist/
|
||||||
1
.npmignore
Normal file
1
.npmignore
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
||||||
2
app.js
2
app.js
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
var mcServer=require("./index");
|
var mcServer=require("./");
|
||||||
|
|
||||||
var settings = require('./config/settings');
|
var settings = require('./config/settings');
|
||||||
var commands = require('./config/commands');
|
var commands = require('./config/commands');
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
var mcServer=require("..");
|
var mcServer=require("../");
|
||||||
|
|
||||||
mcServer.createMCServer({
|
mcServer.createMCServer({
|
||||||
motd: "Basic flying-squid server",
|
motd: "Basic flying-squid server",
|
||||||
|
|
|
||||||
32
gulpfile.js
Normal file
32
gulpfile.js
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
var gulp = require('gulp');
|
||||||
|
|
||||||
|
var plumber = require('gulp-plumber');
|
||||||
|
var babel = require('gulp-babel');
|
||||||
|
var options = {
|
||||||
|
stage: 0, // Dat ES7 goodness
|
||||||
|
optional: ["runtime"]
|
||||||
|
};
|
||||||
|
|
||||||
|
var sourcemaps = require('gulp-sourcemaps');
|
||||||
|
|
||||||
|
gulp.task('compile', function() {
|
||||||
|
return gulp
|
||||||
|
.src('src/**/*.js')
|
||||||
|
.pipe(plumber({
|
||||||
|
errorHandler: function(err) {
|
||||||
|
console.error(err.stack);
|
||||||
|
this.emit('end');
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.pipe(sourcemaps.init())
|
||||||
|
.pipe(babel(options))
|
||||||
|
.pipe(plumber.stop())
|
||||||
|
.pipe(sourcemaps.write('maps/'))
|
||||||
|
.pipe(gulp.dest('dist/'));
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('watch', function() {
|
||||||
|
return gulp.watch('src/**/*.js', ['compile']);
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('default', ['compile']);
|
||||||
48
index.js
48
index.js
|
|
@ -1,47 +1 @@
|
||||||
var mc = require('minecraft-protocol');
|
module.exports = require('./dist/index.js');
|
||||||
var EventEmitter = require('events').EventEmitter;
|
|
||||||
var util = require('util');
|
|
||||||
var path = require('path');
|
|
||||||
var requireIndex = require('requireindex');
|
|
||||||
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'serverPlugins'));
|
|
||||||
if (process.env.NODE_ENV === 'dev'){
|
|
||||||
require('longjohn');
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
createMCServer:createMCServer
|
|
||||||
};
|
|
||||||
|
|
||||||
function createMCServer(options) {
|
|
||||||
options = options || {};
|
|
||||||
var mcServer = new MCServer();
|
|
||||||
mcServer.connect(options);
|
|
||||||
return mcServer;
|
|
||||||
}
|
|
||||||
|
|
||||||
function MCServer() {
|
|
||||||
EventEmitter.call(this);
|
|
||||||
this._server = null;
|
|
||||||
}
|
|
||||||
util.inherits(MCServer, EventEmitter);
|
|
||||||
|
|
||||||
MCServer.prototype.connect = function(options) {
|
|
||||||
var self = this;
|
|
||||||
self._server = mc.createServer(options);
|
|
||||||
|
|
||||||
for(var pluginName in serverPlugins) {
|
|
||||||
serverPlugins[pluginName](self, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(options.logging == true) {
|
|
||||||
self.createLog();
|
|
||||||
}
|
|
||||||
|
|
||||||
self._server.on('error', function(error) {
|
|
||||||
self.emit('error',error);
|
|
||||||
});
|
|
||||||
|
|
||||||
self._server.on('listening', function() {
|
|
||||||
self.emit('listening',self._server.socketServer.address().port);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
var moment=require("moment");
|
|
||||||
var request=require("request");
|
|
||||||
var nodeUuid=require('node-uuid');
|
|
||||||
|
|
||||||
module.exports = inject;
|
|
||||||
|
|
||||||
function inject(serv)
|
|
||||||
{
|
|
||||||
|
|
||||||
function ban(uuid, reason) {
|
|
||||||
serv.bannedPlayers[uuid] = {
|
|
||||||
time: +moment(),
|
|
||||||
reason: reason || "You are banned!"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function uuidInParts(plainUUID)
|
|
||||||
{
|
|
||||||
return nodeUuid.unparse(nodeUuid.parse(plainUUID));
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUUIDFromUsername(username, cb) {
|
|
||||||
request('https://api.mojang.com/users/profiles/minecraft/' + username, function(err, res, body) {
|
|
||||||
if(!body || err)
|
|
||||||
{
|
|
||||||
cb(new Error("username not found"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cb(null,uuidInParts(JSON.parse(body).id));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function banUsername(username, reason, cb) {
|
|
||||||
serv.getUUIDFromUsername(username, function(err,uuid) {
|
|
||||||
if(err)
|
|
||||||
{
|
|
||||||
cb(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
serv.ban(uuid, reason);
|
|
||||||
cb();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function pardonUsername(username, cb) {
|
|
||||||
serv.getUUIDFromUsername(username, function(err,uuid) {
|
|
||||||
if(err)
|
|
||||||
{
|
|
||||||
cb(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var result=pardon(uuid);
|
|
||||||
if(!result)
|
|
||||||
{
|
|
||||||
cb(new Error("Player wasn't banned."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cb();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function pardon(uuid) {
|
|
||||||
if (serv.bannedPlayers[uuid]) {
|
|
||||||
delete serv.bannedPlayers[uuid];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
serv.bannedPlayers = {};
|
|
||||||
serv.ban = ban;
|
|
||||||
serv.banUsername = banUsername;
|
|
||||||
serv.pardonUsername = pardonUsername;
|
|
||||||
serv.getUUIDFromUsername = getUUIDFromUsername;
|
|
||||||
}
|
|
||||||
17
package.json
17
package.json
|
|
@ -14,14 +14,15 @@
|
||||||
"flying-squid": "./app.js"
|
"flying-squid": "./app.js"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha --reporter spec",
|
"prepublish": "gulp",
|
||||||
"postinstall": "node_modules/.bin/babel -d node_modules/prismarine-world/dist/ node_modules/prismarine-world/src/ && node_modules/.bin/babel -d node_modules/prismarine-chunk/dist/ node_modules/prismarine-chunk/src/ "
|
"test": "mocha --reporter spec"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"licenses": {
|
"licenses": {
|
||||||
"type": "MIT"
|
"type": "MIT"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"babel-runtime": "^5.4.4",
|
||||||
"buffers": "0.1.1",
|
"buffers": "0.1.1",
|
||||||
"chai": "~3.2.0",
|
"chai": "~3.2.0",
|
||||||
"minecraft-data": "0.7.0",
|
"minecraft-data": "0.7.0",
|
||||||
|
|
@ -31,10 +32,10 @@
|
||||||
"moment": "^2.10.6",
|
"moment": "^2.10.6",
|
||||||
"node-uuid": "^1.4.3",
|
"node-uuid": "^1.4.3",
|
||||||
"prismarine-block": "0.1.0",
|
"prismarine-block": "0.1.0",
|
||||||
"prismarine-chunk": "git://github.com/rom1504/prismarine-chunk.git#use-prismarine-block",
|
"prismarine-chunk": "0.2.1",
|
||||||
"prismarine-entity": "0.1.0",
|
"prismarine-entity": "0.1.0",
|
||||||
"prismarine-world": "git://github.com/rom1504/prismarine-world.git#implementation",
|
"prismarine-world": "0.1.0",
|
||||||
"request": "^2.61.0",
|
"request-promise": "^0.4.3",
|
||||||
"requireindex": "~1.0.0",
|
"requireindex": "~1.0.0",
|
||||||
"vec3": "0.1.3"
|
"vec3": "0.1.3"
|
||||||
},
|
},
|
||||||
|
|
@ -48,6 +49,10 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"doctoc": "^0.15.0",
|
"doctoc": "^0.15.0",
|
||||||
"longjohn": "~0.2.8",
|
"longjohn": "~0.2.8",
|
||||||
"babel": "5.8.23"
|
"babel": "5.8.23",
|
||||||
|
"gulp": "^3.8.11",
|
||||||
|
"gulp-babel": "^5.1.0",
|
||||||
|
"gulp-plumber": "^1.0.1",
|
||||||
|
"gulp-sourcemaps": "^1.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
47
src/index.js
Normal file
47
src/index.js
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
var mc = require('minecraft-protocol');
|
||||||
|
var EventEmitter = require('events').EventEmitter;
|
||||||
|
var util = require('util');
|
||||||
|
var path = require('path');
|
||||||
|
var requireIndex = require('requireindex');
|
||||||
|
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'serverPlugins'));
|
||||||
|
if (process.env.NODE_ENV === 'dev'){
|
||||||
|
require('longjohn');
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
createMCServer:createMCServer
|
||||||
|
};
|
||||||
|
|
||||||
|
function createMCServer(options) {
|
||||||
|
options = options || {};
|
||||||
|
var mcServer = new MCServer();
|
||||||
|
mcServer.connect(options);
|
||||||
|
return mcServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
function MCServer() {
|
||||||
|
EventEmitter.call(this);
|
||||||
|
this._server = null;
|
||||||
|
}
|
||||||
|
util.inherits(MCServer, EventEmitter);
|
||||||
|
|
||||||
|
MCServer.prototype.connect = function(options) {
|
||||||
|
var self = this;
|
||||||
|
self._server = mc.createServer(options);
|
||||||
|
|
||||||
|
for(var pluginName in serverPlugins) {
|
||||||
|
serverPlugins[pluginName](self, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(options.logging == true) {
|
||||||
|
self.createLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
self._server.on('error', function(error) {
|
||||||
|
self.emit('error',error);
|
||||||
|
});
|
||||||
|
|
||||||
|
self._server.on('listening', function() {
|
||||||
|
self.emit('listening',self._server.socketServer.address().port);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
@ -7,7 +7,7 @@ function inject(serv,player)
|
||||||
player.getOthers().forEach(function(player) {
|
player.getOthers().forEach(function(player) {
|
||||||
player.sendBlock(position, blockType);
|
player.sendBlock(position, blockType);
|
||||||
});
|
});
|
||||||
serv.world.setBlockType(position,blockType);
|
return serv.world.setBlockType(position,blockType);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendBlock(position, blockType) { // Call from serv.setBlock unless you want "local" fake blocks
|
function sendBlock(position, blockType) { // Call from serv.setBlock unless you want "local" fake blocks
|
||||||
|
|
@ -59,15 +59,12 @@ function inject(serv, player, options) {
|
||||||
serv.emit("banned",player,username,reason);
|
serv.emit("banned",player,username,reason);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
serv.banUsername(username, reason, function (err) {
|
serv.banUsername(username, reason)
|
||||||
if(err) {
|
.then(()=>{
|
||||||
player.chat(results[1] + " is not a valid player!");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
serv.emit("banned",player,username,reason);
|
serv.emit("banned",player,username,reason);
|
||||||
player.chat(results[1] + " was banned");
|
player.chat(results[1] + " was banned");
|
||||||
}
|
})
|
||||||
});
|
.catch(err => player.chat(results[1] + " is not a valid player!"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -77,14 +74,9 @@ function inject(serv, player, options) {
|
||||||
player.chat("Usage: /pardon <player>");
|
player.chat("Usage: /pardon <player>");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
serv.pardonUsername(results[1], function (err) {
|
serv.pardonUsername(results[1])
|
||||||
if(err) {
|
.then(()=> player.chat(results[1] + " is unbanned"))
|
||||||
player.chat(results[1] + " is not banned");
|
.catch(err => player.chat(results[1] + " is not banned"));
|
||||||
}
|
|
||||||
else {
|
|
||||||
player.chat(results[1] + " is unbanned");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -6,16 +6,19 @@ function inject(serv,player)
|
||||||
{
|
{
|
||||||
player._client.on("block_dig",function(packet){
|
player._client.on("block_dig",function(packet){
|
||||||
var pos=new Vec3(packet.location);
|
var pos=new Vec3(packet.location);
|
||||||
currentlyDugBlock=serv.world.getBlock(pos);
|
serv.world.getBlock(pos)
|
||||||
if(currentlyDugBlock.type==0) return;
|
.then(block => {
|
||||||
if(packet.status==0 && player.gameMode!=1)
|
currentlyDugBlock=block;
|
||||||
startDigging(pos);
|
if(currentlyDugBlock.type==0) return;
|
||||||
else if(packet.status==2)
|
if(packet.status==0 && player.gameMode!=1)
|
||||||
completeDigging(pos);
|
startDigging(pos);
|
||||||
else if(packet.status==1)
|
else if(packet.status==2)
|
||||||
cancelDigging(pos);
|
completeDigging(pos);
|
||||||
else if(packet.status==0 && player.gameMode==1)
|
else if(packet.status==1)
|
||||||
creativeDigging(pos);
|
cancelDigging(pos);
|
||||||
|
else if(packet.status==0 && player.gameMode==1)
|
||||||
|
creativeDigging(pos);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function diggingTime(location)
|
function diggingTime(location)
|
||||||
|
|
@ -84,7 +87,7 @@ function inject(serv,player)
|
||||||
|
|
||||||
function creativeDigging(location)
|
function creativeDigging(location)
|
||||||
{
|
{
|
||||||
player.changeBlock(location,0);
|
return player.changeBlock(location,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -7,7 +7,7 @@ function inject(serv)
|
||||||
serv.players.forEach(function(player){
|
serv.players.forEach(function(player){
|
||||||
player.sendBlock(position, blockType);
|
player.sendBlock(position, blockType);
|
||||||
});
|
});
|
||||||
serv.world.setBlockType(position,blockType);
|
return serv.world.setBlockType(position,blockType);
|
||||||
}
|
}
|
||||||
|
|
||||||
serv.setBlock = setBlock;
|
serv.setBlock = setBlock;
|
||||||
54
src/lib/serverPlugins/moderation.js
Normal file
54
src/lib/serverPlugins/moderation.js
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
var moment=require("moment");
|
||||||
|
var rp=require("request-promise");
|
||||||
|
var nodeUuid=require('node-uuid');
|
||||||
|
|
||||||
|
module.exports = inject;
|
||||||
|
|
||||||
|
function inject(serv)
|
||||||
|
{
|
||||||
|
|
||||||
|
function ban(uuid, reason) {
|
||||||
|
serv.bannedPlayers[uuid] = {
|
||||||
|
time: +moment(),
|
||||||
|
reason: reason || "You are banned!"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function uuidInParts(plainUUID)
|
||||||
|
{
|
||||||
|
return nodeUuid.unparse(nodeUuid.parse(plainUUID));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUUIDFromUsername(username) {
|
||||||
|
return rp('https://api.mojang.com/users/profiles/minecraft/' + username)
|
||||||
|
.then((body) => {
|
||||||
|
if(!body) throw new Error("username not found");
|
||||||
|
return uuidInParts(JSON.parse(body).id)
|
||||||
|
})
|
||||||
|
.catch(err => {throw new Error("username not found");});
|
||||||
|
}
|
||||||
|
|
||||||
|
function banUsername(username, reason, cb) {
|
||||||
|
return serv.getUUIDFromUsername(username)
|
||||||
|
.then(uuid => serv.ban(uuid, reason));
|
||||||
|
}
|
||||||
|
|
||||||
|
function pardonUsername(username, cb) {
|
||||||
|
return serv.getUUIDFromUsername(username)
|
||||||
|
.then(pardon);
|
||||||
|
}
|
||||||
|
|
||||||
|
function pardon(uuid) {
|
||||||
|
if (serv.bannedPlayers[uuid]) {
|
||||||
|
delete serv.bannedPlayers[uuid];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
serv.bannedPlayers = {};
|
||||||
|
serv.ban = ban;
|
||||||
|
serv.banUsername = banUsername;
|
||||||
|
serv.pardonUsername = pardonUsername;
|
||||||
|
serv.getUUIDFromUsername = getUUIDFromUsername;
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue