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
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
var mcServer=require("./index");
var mcServer=require("./");
var settings = require('./config/settings');
var commands = require('./config/commands');

View file

@ -1,4 +1,4 @@
var mcServer=require("..");
var mcServer=require("../");
mcServer.createMCServer({
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');
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);
});
};
module.exports = require('./dist/index.js');

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"
},
"scripts": {
"test": "mocha --reporter spec",
"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/ "
"prepublish": "gulp",
"test": "mocha --reporter spec"
},
"keywords": [],
"licenses": {
"type": "MIT"
},
"dependencies": {
"babel-runtime": "^5.4.4",
"buffers": "0.1.1",
"chai": "~3.2.0",
"minecraft-data": "0.7.0",
@ -31,10 +32,10 @@
"moment": "^2.10.6",
"node-uuid": "^1.4.3",
"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-world": "git://github.com/rom1504/prismarine-world.git#implementation",
"request": "^2.61.0",
"prismarine-world": "0.1.0",
"request-promise": "^0.4.3",
"requireindex": "~1.0.0",
"vec3": "0.1.3"
},
@ -48,6 +49,10 @@
"devDependencies": {
"doctoc": "^0.15.0",
"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.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

View file

@ -59,15 +59,12 @@ function inject(serv, player, options) {
serv.emit("banned",player,username,reason);
}
else {
serv.banUsername(username, reason, function (err) {
if(err) {
player.chat(results[1] + " is not a valid player!");
}
else {
serv.banUsername(username, reason)
.then(()=>{
serv.emit("banned",player,username,reason);
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>");
}
else {
serv.pardonUsername(results[1], function (err) {
if(err) {
player.chat(results[1] + " is not banned");
}
else {
player.chat(results[1] + " is unbanned");
}
});
serv.pardonUsername(results[1])
.then(()=> player.chat(results[1] + " is unbanned"))
.catch(err => player.chat(results[1] + " is not banned"));
}
}
else

View file

@ -6,16 +6,19 @@ function inject(serv,player)
{
player._client.on("block_dig",function(packet){
var pos=new Vec3(packet.location);
currentlyDugBlock=serv.world.getBlock(pos);
if(currentlyDugBlock.type==0) return;
if(packet.status==0 && player.gameMode!=1)
startDigging(pos);
else if(packet.status==2)
completeDigging(pos);
else if(packet.status==1)
cancelDigging(pos);
else if(packet.status==0 && player.gameMode==1)
creativeDigging(pos);
serv.world.getBlock(pos)
.then(block => {
currentlyDugBlock=block;
if(currentlyDugBlock.type==0) return;
if(packet.status==0 && player.gameMode!=1)
startDigging(pos);
else if(packet.status==2)
completeDigging(pos);
else if(packet.status==1)
cancelDigging(pos);
else if(packet.status==0 && player.gameMode==1)
creativeDigging(pos);
});
});
function diggingTime(location)
@ -84,7 +87,7 @@ function inject(serv,player)
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){
player.sendBlock(position, blockType);
});
serv.world.setBlockType(position,blockType);
return serv.world.setBlockType(position,blockType);
}
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;
}