go to es6 + use real prismarine-chunk and prismarine-world

This commit is contained in:
Romain Beaumont 2015-10-02 00:12:09 +02:00
parent f5e2b9aaa7
commit a79181b27e
34 changed files with 172 additions and 158 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
node_modules node_modules
dist/

1
.npmignore Normal file
View file

@ -0,0 +1 @@
node_modules

2
app.js
View file

@ -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');

View file

@ -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
View 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']);

View file

@ -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);
});
};

View file

@ -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;
}

View file

@ -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
View 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);
});
};

View file

@ -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

View file

@ -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

View file

@ -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);
} }
} }

View file

@ -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;

View 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;
}