mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-13 19:41:24 +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
|
||||
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
|
||||
|
||||
var mcServer=require("./index");
|
||||
var mcServer=require("./");
|
||||
|
||||
var settings = require('./config/settings');
|
||||
var commands = require('./config/commands');
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
var mcServer=require("..");
|
||||
var mcServer=require("../");
|
||||
|
||||
mcServer.createMCServer({
|
||||
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');
|
||||
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');
|
||||
|
|
@ -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"
|
||||
},
|
||||
"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
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.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
|
||||
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
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