mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-16 21:11:22 +00:00
put together player plugins and server plugins
This commit is contained in:
parent
15350791df
commit
39dc37f94d
42 changed files with 527 additions and 593 deletions
|
|
@ -2,7 +2,7 @@ var mc = require('minecraft-protocol');
|
|||
var EventEmitter = require('events').EventEmitter;
|
||||
var path = require('path');
|
||||
var requireIndex = require('requireindex');
|
||||
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'serverPlugins'));
|
||||
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'plugins'));
|
||||
if (process.env.NODE_ENV === 'dev'){
|
||||
require('longjohn');
|
||||
}
|
||||
|
|
@ -26,7 +26,9 @@ class MCServer extends EventEmitter {
|
|||
|
||||
connect(options) {
|
||||
this._server = mc.createServer(options);
|
||||
Object.keys(serverPlugins).forEach(pluginName => serverPlugins[pluginName](this, options));
|
||||
Object.keys(serverPlugins)
|
||||
.filter(pluginName => serverPlugins[pluginName].server!=undefined)
|
||||
.forEach(pluginName => serverPlugins[pluginName].server(this, options));
|
||||
if(options.logging == true) this.createLog();
|
||||
this._server.on('error', error => this.emit('error',error));
|
||||
this._server.on('listening', () => this.emit('listening',this._server.socketServer.address().port));
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
{
|
||||
player._writeOthers= (packetName, packetFields) =>
|
||||
player
|
||||
.getOthers()
|
||||
.forEach((otherPlayer) => otherPlayer._client.write(packetName, packetFields));
|
||||
|
||||
player._writeOthersNearby = (packetName, packetFields) =>
|
||||
serv._writeArray(packetName, packetFields, player.nearbyPlayers());
|
||||
|
||||
player.getOthers = () => serv.players.filter((otherPlayer) => otherPlayer != player);
|
||||
|
||||
player.getNearbyPlayers = (radius=player.entity.viewDistance*32) => serv.getNearby({
|
||||
world: player.world,
|
||||
position: player.position,
|
||||
radius: radius
|
||||
});
|
||||
|
||||
player.nearbyPlayers = (radius=player.entity.viewDistance*32) => player.entity.nearbyEntities
|
||||
.filter(e => e.type == 'player')
|
||||
.map(e => e.player);
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
{
|
||||
|
||||
player.on("connected",() => serv.log("[INFO]: " + player.username + ' connected'));
|
||||
|
||||
player.on("spawned",() => serv.log("[INFO]: position written, player spawning..."));
|
||||
|
||||
player.on("disconnected",() => serv.log("[INFO]: " + player.username + ' disconnected'));
|
||||
|
||||
player.on("chat", message => serv.log("[INFO] " + '<' + player.username + '>' + ' ' + message));
|
||||
|
||||
player.on("kicked",(kicker,reason) =>
|
||||
serv.log(kicker.username + " kicked " + player.username + (reason ? " (" + reason + ")" : "")));
|
||||
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
var moment=require("moment");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
{
|
||||
player.kick = reason =>
|
||||
{
|
||||
player._client.write('kick_disconnect', {
|
||||
reason: reason ? JSON.stringify(reason) : '"You were kicked!"'
|
||||
});
|
||||
};
|
||||
|
||||
player.ban = reason => {
|
||||
reason = reason || "You were banned!";
|
||||
player.kick(reason);
|
||||
var uuid=player._client.uuid;
|
||||
serv.ban(uuid, reason);
|
||||
};
|
||||
|
||||
player.pardon = () => serv.pardon(player._client.uuid);
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
{
|
||||
player.gameMode=serv.gameMode;
|
||||
player.spawnPoint=serv.getSpawnPoint();
|
||||
player._client.on('settings',({viewDistance}) => {
|
||||
player.view=viewDistance;
|
||||
});
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
{
|
||||
//WIP: temporary removed
|
||||
}
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player._client.on("arm_animation", () =>
|
||||
player._writeOthersNearby("animation", {
|
||||
|
|
@ -30,4 +28,4 @@ function inject(serv, player)
|
|||
player.entity.crouching = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player.changeBlock=async (position,blockType,blockData) =>
|
||||
{
|
||||
|
|
@ -19,4 +17,4 @@ function inject(serv,player)
|
|||
});
|
||||
|
||||
player.setBlock = (position,blockType,blockData) => serv.setBlock(player.world,position,blockType,blockData);
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
//WIP: Does't work
|
||||
/* player._client.write('world_border', {
|
||||
|
|
@ -18,4 +16,4 @@ function inject(serv, player)
|
|||
action: 0,
|
||||
radius: 15
|
||||
});*/
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,13 @@
|
|||
module.exports=inject;
|
||||
module.exports.server=function(serv)
|
||||
{
|
||||
serv.broadcast = (message, color) =>
|
||||
serv.players.forEach(player => player.chat({
|
||||
"text": message,
|
||||
"color": color
|
||||
}));
|
||||
};
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player._client.on('chat', ({message} = {}) => {
|
||||
if(message[0]=="/") {
|
||||
|
|
@ -20,4 +27,4 @@ function inject(serv, player)
|
|||
player.system = message => {
|
||||
player._client.write('chat', { message: JSON.stringify(message), position: 2 });
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
@ -1,8 +1,6 @@
|
|||
var vec3 = require("vec3");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player._client.on('block_place', async ({location} = {}) => {
|
||||
var referencePosition=new vec3(location.x,location.y,location.z);
|
||||
|
|
@ -1,9 +1,8 @@
|
|||
var Vec3 = require('vec3');
|
||||
module.exports = inject;
|
||||
|
||||
var Command = require('../command');
|
||||
|
||||
function inject(serv, player) {
|
||||
module.exports.player=function(serv, player) {
|
||||
var base = new Command({});
|
||||
|
||||
base.add({
|
||||
|
|
@ -331,4 +330,4 @@ function inject(serv, player) {
|
|||
var res = base.use(str);
|
||||
if(res) player.chat('' + res);
|
||||
};
|
||||
}
|
||||
};
|
||||
46
src/lib/plugins/communication.js
Normal file
46
src/lib/plugins/communication.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
module.exports.server=function(serv,settings)
|
||||
{
|
||||
serv._writeAll= (packetName, packetFields) =>
|
||||
serv.players.forEach((player) => player._client.write(packetName, packetFields));
|
||||
|
||||
serv._writeArray= (packetName, packetFields, players) =>
|
||||
players.forEach((player) =>player._client.write(packetName, packetFields));
|
||||
|
||||
serv._writeNearby= (packetName, packetFields, loc) =>
|
||||
serv._writeArray(packetName, packetFields, serv.getNearby(loc));
|
||||
|
||||
serv.getNearby= ({world,position,radius=8*16*32}) => serv.players.filter( player =>
|
||||
player.world == world &&
|
||||
player.entity.position.distanceTo(position) <= radius
|
||||
);
|
||||
|
||||
serv.getNearbyEntities= ({world,position,radius=8*16*32}) => Object.keys(serv.entities)
|
||||
.map(eId => serv.entities[eId])
|
||||
.filter(entity =>
|
||||
entity.world == world &&
|
||||
entity.position.distanceTo(position) <= radius
|
||||
);
|
||||
};
|
||||
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player._writeOthers= (packetName, packetFields) =>
|
||||
player
|
||||
.getOthers()
|
||||
.forEach((otherPlayer) => otherPlayer._client.write(packetName, packetFields));
|
||||
|
||||
player._writeOthersNearby = (packetName, packetFields) =>
|
||||
serv._writeArray(packetName, packetFields, player.nearbyPlayers());
|
||||
|
||||
player.getOthers = () => serv.players.filter((otherPlayer) => otherPlayer != player);
|
||||
|
||||
player.getNearbyPlayers = (radius=player.entity.viewDistance*32) => serv.getNearby({
|
||||
world: player.world,
|
||||
position: player.position,
|
||||
radius: radius
|
||||
});
|
||||
|
||||
player.nearbyPlayers = (radius=player.entity.viewDistance*32) => player.entity.nearbyEntities
|
||||
.filter(e => e.type == 'player')
|
||||
.map(e => e.player);
|
||||
};
|
||||
|
|
@ -1,7 +1,4 @@
|
|||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv, settings) {
|
||||
module.exports.server=function(serv, settings) {
|
||||
serv.setTime = (time) => {
|
||||
serv.time = time;
|
||||
serv._writeAll('update_time', {
|
||||
|
|
@ -18,6 +15,6 @@ function inject(serv, settings) {
|
|||
if (!serv.doDaylightCycle) return;
|
||||
if (count % 20 == 0) {
|
||||
serv.setTime((serv.time + 20) % 24000); // Vanilla only does it every second
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
};
|
||||
|
|
@ -1,8 +1,6 @@
|
|||
var Vec3 = require("vec3");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player._client.on("block_dig",({location,status} = {}) => {
|
||||
var pos=new Vec3(location);
|
||||
|
|
@ -5,9 +5,7 @@ var vec3 = require("vec3");
|
|||
var EventEmitter = require('events').EventEmitter;
|
||||
var util = require('util');
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv) {
|
||||
module.exports.server=function(serv) {
|
||||
|
||||
util.inherits(Entity, EventEmitter);
|
||||
|
||||
|
|
@ -86,7 +84,7 @@ function inject(serv) {
|
|||
entity.sendPosition = ({oldPos,onGround}) => {
|
||||
var diff = entity.position.minus(oldPos);
|
||||
|
||||
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
|
||||
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
|
||||
serv._writeNearby('entity_teleport', {
|
||||
entityId: entity.id,
|
||||
x: entity.position.x,
|
||||
|
|
@ -97,12 +95,12 @@ function inject(serv) {
|
|||
onGround: onGround
|
||||
}, entity);
|
||||
else serv._writeNearby('rel_entity_move', {
|
||||
entityId: entity.id,
|
||||
dX: diff.x,
|
||||
dY: diff.y,
|
||||
dZ: diff.z,
|
||||
onGround: onGround
|
||||
}, entity);
|
||||
entityId: entity.id,
|
||||
dX: diff.x,
|
||||
dY: diff.y,
|
||||
dZ: diff.z,
|
||||
onGround: onGround
|
||||
}, entity);
|
||||
|
||||
entity.emit('positionChanged', oldPos);
|
||||
}
|
||||
|
|
@ -236,7 +234,7 @@ function inject(serv) {
|
|||
})
|
||||
).catch((err)=> setTimeout(() => {throw err;},0));
|
||||
});
|
||||
|
||||
|
||||
serv.destroyEntity = entity => {
|
||||
serv._writeNearby('entity_destroy', {
|
||||
entityIds: [entity.id]
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player.playerlistUpdateText = (header, footer) =>
|
||||
player._client.write('playerlist_header', {
|
||||
|
|
@ -9,4 +7,4 @@ function inject(serv, player)
|
|||
});
|
||||
|
||||
player.playerlistUpdateText("Flying squid", "Test server");
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player.heldItemSlot=0;
|
||||
player.heldItem=0;
|
||||
|
|
@ -55,4 +53,4 @@ function inject(serv, player)
|
|||
});
|
||||
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -4,9 +4,7 @@ var path = require('path');
|
|||
var mkdirp = require('mkdirp');
|
||||
var moment=require("moment");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
function inject(serv,settings)
|
||||
module.exports.server=function(serv,settings)
|
||||
{
|
||||
serv.on("error", error => serv.log('[ERR]: Server: '+error.stack));
|
||||
serv.on("clientError", (client,error) => serv.log('[ERR]: Client '+client.socket.remoteAddress + ':' + client.socket.remotePort+' : '+error.stack));
|
||||
|
|
@ -44,4 +42,20 @@ function inject(serv,settings)
|
|||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
|
||||
player.on("connected",() => serv.log("[INFO]: " + player.username + ' connected'));
|
||||
|
||||
player.on("spawned",() => serv.log("[INFO]: position written, player spawning..."));
|
||||
|
||||
player.on("disconnected",() => serv.log("[INFO]: " + player.username + ' disconnected'));
|
||||
|
||||
player.on("chat", message => serv.log("[INFO] " + '<' + player.username + '>' + ' ' + message));
|
||||
|
||||
player.on("kicked",(kicker,reason) =>
|
||||
serv.log(kicker.username + " kicked " + player.username + (reason ? " (" + reason + ")" : "")));
|
||||
|
||||
};
|
||||
|
|
@ -1,9 +1,34 @@
|
|||
var Entity=require("prismarine-entity");
|
||||
var Vec3=require("vec3");
|
||||
|
||||
module.exports=inject;
|
||||
var path = require('path');
|
||||
var requireIndex = require('requireindex');
|
||||
var playerPlugins = requireIndex(path.join(__dirname,'..', 'plugins'));
|
||||
var Player=require("../player");
|
||||
|
||||
function inject(serv,player)
|
||||
module.exports.server=function(serv,options)
|
||||
{
|
||||
serv._server.on('connection', client =>
|
||||
client.on('error',error => serv.emit('clientError',client,error)));
|
||||
|
||||
serv._server.on('login', async (client) => {
|
||||
var player=new Player();
|
||||
player._client=client;
|
||||
Object.keys(playerPlugins)
|
||||
.filter(pluginName => playerPlugins[pluginName].player!=undefined)
|
||||
.forEach(pluginName => playerPlugins[pluginName].player(serv, player, options));
|
||||
|
||||
serv.emit("newPlayer",player);
|
||||
try {
|
||||
await player.login();
|
||||
}
|
||||
catch(err){
|
||||
setTimeout(() => {throw err;},0)
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
function addPlayer()
|
||||
{
|
||||
|
|
@ -162,4 +187,4 @@ function inject(serv,player)
|
|||
player.sendRestMap();
|
||||
sendChunkWhenMove();
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player.despawnPlayers = despawnedPlayers => {
|
||||
player._client.write('entity_destroy', {
|
||||
|
|
@ -31,4 +29,4 @@ function inject(serv,player)
|
|||
delete serv.uuidToPlayer[player._client.uuid];
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -2,9 +2,7 @@ var moment=require("moment");
|
|||
var rp=require("request-promise");
|
||||
var nodeUuid=require('node-uuid');
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv)
|
||||
module.exports.server=function(serv)
|
||||
{
|
||||
|
||||
serv.ban = (uuid, reason) => {
|
||||
|
|
@ -47,4 +45,23 @@ function inject(serv)
|
|||
}
|
||||
|
||||
serv.bannedPlayers = {};
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player.kick = reason =>
|
||||
{
|
||||
player._client.write('kick_disconnect', {
|
||||
reason: reason ? JSON.stringify(reason) : '"You were kicked!"'
|
||||
});
|
||||
};
|
||||
|
||||
player.ban = reason => {
|
||||
reason = reason || "You were banned!";
|
||||
player.kick(reason);
|
||||
var uuid=player._client.uuid;
|
||||
serv.ban(uuid, reason);
|
||||
};
|
||||
|
||||
player.pardon = () => serv.pardon(player._client.uuid);
|
||||
};
|
||||
241
src/lib/plugins/modpe.js
Normal file
241
src/lib/plugins/modpe.js
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
var vec3 = require("vec3");
|
||||
var dir = require("node-dir");
|
||||
var fs = require("fs");
|
||||
|
||||
function requireFromString(src, filename) {
|
||||
var Module = module.constructor;
|
||||
var m = new Module();
|
||||
m._compile(src, filename);
|
||||
return m.exports;
|
||||
}
|
||||
|
||||
function log(msg) {
|
||||
console.log("[MODPE-NOINJECT] " + msg);
|
||||
}
|
||||
|
||||
function modpeApi() {
|
||||
var Vec3 = null;
|
||||
var vec3 = null;
|
||||
|
||||
var server = null;
|
||||
var player = null;
|
||||
|
||||
module.exports.startDestroyBlock = startDestroyBlock;
|
||||
module.exports.destroyBlock = destroyBlock;
|
||||
module.exports.newLevel = newLevel;
|
||||
module.exports.procCmd = procCmd;
|
||||
module.exports.exec = exec;
|
||||
module.exports.modTick = modTick;
|
||||
module.exports.useItem = useItem;
|
||||
module.exports.initSquid = initSquid;
|
||||
function modTick(){}
|
||||
function newLevel(){}
|
||||
|
||||
function useItem(x,y,z,itemId,blockId){}
|
||||
function startDestroyBlock(x,y,z,side){}
|
||||
function destroyBlock(x,y,z,side){}
|
||||
function procCmd(command){}
|
||||
function exec(code){eval(code)}
|
||||
|
||||
function initSquid(pl1, srv, v3) {
|
||||
player = pl1;
|
||||
server = srv;
|
||||
vec3=v3;
|
||||
Vec3=v3;
|
||||
}
|
||||
|
||||
function clientMessage(message) {
|
||||
console.log(message);
|
||||
player.chat(message);
|
||||
}
|
||||
|
||||
function setTile(x, y, z, id, damage) {
|
||||
server.setBlock(server.overworld,new vec3(x, y, z), id, damage);
|
||||
}
|
||||
|
||||
function getTile(x, y, z) {
|
||||
return server._worldSync.getBlockType(new vec3(x, y, z));
|
||||
}
|
||||
|
||||
function preventDefault() {
|
||||
}
|
||||
|
||||
function getPlayerX() {
|
||||
return player.entity.position.x/32;
|
||||
}
|
||||
|
||||
function getPlayerY() {
|
||||
return player.entity.position.y/32;
|
||||
}
|
||||
|
||||
function getPlayerZ() {
|
||||
return player.entity.position.z/32;
|
||||
}
|
||||
|
||||
function getPlayerEnt() {
|
||||
return null;
|
||||
}
|
||||
|
||||
function getCarriedItem() {
|
||||
return player.heldItem.blockId;
|
||||
}
|
||||
|
||||
var Player = {
|
||||
getCarriedItem: function () {
|
||||
return player.heldItem.blockId;
|
||||
}
|
||||
};
|
||||
var Entity = {
|
||||
getPitch: function () {
|
||||
return 1;
|
||||
}
|
||||
, getYaw: function () {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
var Level = {
|
||||
getGameMode: function () {
|
||||
return player.gameMode;
|
||||
}
|
||||
, getData: function (x, y, z) {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function convert(code) {
|
||||
log("Started conversion...");
|
||||
var api = modpeApi.toString()
|
||||
.split("\n");
|
||||
api[0] = "";
|
||||
api[api.length - 1] = "";
|
||||
var finapi = api.join("\n");
|
||||
code = finapi + code;
|
||||
return code;
|
||||
}
|
||||
|
||||
module.exports.server=function(serv,settings)
|
||||
{
|
||||
function log(msg){
|
||||
serv.log("[MPE]: "+msg);
|
||||
}
|
||||
if(!settings.modpe){
|
||||
log("Modpe support is not enabled, disabling injecting...");
|
||||
return;
|
||||
}
|
||||
log("Modpe injection start...");
|
||||
var modPePluginsDir = __dirname+"/../../../modpePlugins";
|
||||
log("Place your scripts in " + modPePluginsDir);
|
||||
var modCount = 0;
|
||||
var mods = [];
|
||||
dir.readFiles(modPePluginsDir, {
|
||||
match: /.js/
|
||||
, exclude: /^\./
|
||||
}, function (err, content, fname, next) {
|
||||
if (err) throw err;
|
||||
log("Converting " + fname);
|
||||
content = convert(content);
|
||||
var modname = fname.split("/")[fname.split("/")
|
||||
.length - 1].split(".")[0];
|
||||
log("Loading mod " + modname);
|
||||
mods.push(requireFromString(content));
|
||||
modCount++;
|
||||
next();
|
||||
}
|
||||
, function (err, files) {
|
||||
if(err) return;
|
||||
log('Loaded ' + modCount + " mods");
|
||||
});
|
||||
|
||||
serv.on("newPlayer", function (player) {
|
||||
injectPlayer(serv, player);
|
||||
});
|
||||
|
||||
function injectPlayer(serv, player) {
|
||||
log("Injected into player");
|
||||
|
||||
initSquid(player, serv, vec3);
|
||||
newLevel();
|
||||
|
||||
player._client.on("block_dig", function (packet) {
|
||||
var pos = new vec3(packet.location);
|
||||
if (packet.status == 0 && player.gameMode != 1)
|
||||
startDestroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
else if (packet.status == 2)
|
||||
destroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
else if (packet.status == 1)
|
||||
console.log("Unused in ModPE");
|
||||
else if (packet.status == 0 && player.gameMode == 1)
|
||||
destroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
});
|
||||
|
||||
player._client.on('position', function (packet) {
|
||||
modTick();
|
||||
});
|
||||
|
||||
player._client.on("block_place", function (packet) {
|
||||
if (packet.location.y < 0) return;
|
||||
useItem(packet.location.x, packet.location.y, packet.location.z,
|
||||
packet.heldItem.blockId,
|
||||
serv._worldSync.getBlockType(new vec3(packet.location.x, packet.location.y, packet.location.z)));
|
||||
});
|
||||
|
||||
player.on('modpe', function (command) {
|
||||
try {
|
||||
procCmd(command);
|
||||
}
|
||||
catch(err) {
|
||||
console.log("MODPE error: "+err.stack);
|
||||
}
|
||||
});
|
||||
|
||||
function newLevel() {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.newLevel();
|
||||
});
|
||||
}
|
||||
|
||||
function useItem(x, y, z, itemId, blockId) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.useItem(x, y, z, itemId, blockId);
|
||||
element.exec("lastUsedItem=" + itemId);
|
||||
});
|
||||
}
|
||||
|
||||
function modTick() {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.modTick();
|
||||
});
|
||||
}
|
||||
|
||||
function exec(code) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.exec(code);
|
||||
});
|
||||
}
|
||||
|
||||
function procCmd(command) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.procCmd(command);
|
||||
});
|
||||
}
|
||||
|
||||
function startDestroyBlock(x, y, z, side) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.startDestroyBlock(x, y, z, side);
|
||||
});
|
||||
}
|
||||
|
||||
function destroyBlock(x, y, z, side) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.destroyBlock(x, y, z, side);
|
||||
});
|
||||
}
|
||||
|
||||
function initSquid(pl, sr, v3) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.initSquid(pl, sr, v3);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -1,8 +1,6 @@
|
|||
var vec3 = require("vec3");
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv) {
|
||||
module.exports.server=function(serv) {
|
||||
serv.emitParticle = (particle, world, position, {whitelist,blacklist=[],radius=32*32,longDistance,size,count}={}) => {
|
||||
var players = (typeof whitelist != 'undefined' ? (typeof whitelist == 'array' ? whitelist : [whitelist]) : serv.getNearby({
|
||||
world: world,
|
||||
|
|
@ -27,4 +25,4 @@ function inject(serv) {
|
|||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -9,11 +9,9 @@ var materialToSound = {
|
|||
'wool': 'cloth',
|
||||
'web': 'cloth',
|
||||
'wood': 'wood'
|
||||
}
|
||||
};
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
function inject(serv,player)
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player._client.on("block_place",({direction,heldItem,location} = {}) => {
|
||||
if(direction==-1 || heldItem.blockId==-1) return;
|
||||
|
|
@ -41,6 +39,6 @@ function inject(serv,player)
|
|||
}
|
||||
}).catch((err)=> setTimeout(() => {throw err;},0));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
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)];
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv)
|
||||
module.exports.server=function(serv)
|
||||
{
|
||||
serv.entityMaxId=0;
|
||||
serv.players=[];
|
||||
|
|
@ -13,4 +11,4 @@ function inject(serv)
|
|||
}
|
||||
return null;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
|
||||
player.updateHealth = (health) => {
|
||||
|
|
@ -37,4 +35,4 @@ function inject(serv, player)
|
|||
attackEntity(target);
|
||||
});
|
||||
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player._client.on("client_command", ({payload}) => {
|
||||
if(payload == 0) {
|
||||
|
|
@ -16,4 +14,4 @@ function inject(serv, player)
|
|||
player.updateAndSpawnNearbyPlayers();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
23
src/lib/plugins/settings.js
Normal file
23
src/lib/plugins/settings.js
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
var vec3=require("vec3");
|
||||
|
||||
|
||||
function randomInt (low, high) {
|
||||
return Math.floor(Math.random() * (high - low) + low);
|
||||
}
|
||||
|
||||
module.exports.server=function(serv,settings)
|
||||
{
|
||||
serv.gameMode=settings.gameMode;
|
||||
|
||||
serv.getSpawnPoint = () => new vec3(randomInt(5,20),81,randomInt(5,20));
|
||||
};
|
||||
|
||||
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player.gameMode=serv.gameMode;
|
||||
player.spawnPoint=serv.getSpawnPoint();
|
||||
player._client.on('settings',({viewDistance}) => {
|
||||
player.view=viewDistance;
|
||||
});
|
||||
};
|
||||
4
src/lib/plugins/signs.js
Normal file
4
src/lib/plugins/signs.js
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
module.exports.player=function(serv, player)
|
||||
{
|
||||
//WIP: temporary removed
|
||||
};
|
||||
|
|
@ -1,12 +1,43 @@
|
|||
var vec3 = require('vec3');
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv, player) {
|
||||
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 == '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.entity.position.scaled(1/32)).scaled(8).floored();
|
||||
player._client.write('named_sound_effect', {
|
||||
soundName: sound,
|
||||
x: pos.x,
|
||||
y: pos.y,
|
||||
z: pos.z,
|
||||
volume: volume,
|
||||
pitch: Math.round(pitch*63)
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
serv.playNoteBlock = (world, position, pitch) => {
|
||||
serv.emitParticle(23, world, position.clone().add(vec3(0.5, 1.5, 0.5)), {
|
||||
count: 1,
|
||||
size: vec3(0, 0, 0)
|
||||
});
|
||||
serv.playSound('note.harp', world, position, { pitch: serv.getNote(pitch) });
|
||||
};
|
||||
|
||||
serv.getNote = note => 0.5 * Math.pow(Math.pow(2, 1/12), note);
|
||||
};
|
||||
|
||||
module.exports.player=function(serv, player) {
|
||||
player.playSound = (sound, opt={}) => {
|
||||
opt.whitelist = player;
|
||||
serv.playSound(sound, player.world, null, opt);
|
||||
}
|
||||
};
|
||||
|
||||
player._client.on('block_place', ({location}={}) => {
|
||||
if (player.entity.crouching) return;
|
||||
|
|
@ -33,4 +64,4 @@ function inject(serv, player) {
|
|||
serv.playNoteBlock(player.world, pos, data.note);
|
||||
}).catch((err)=> setTimeout(() => {throw err;},0));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv, player)
|
||||
module.exports.player=function(serv, player)
|
||||
{
|
||||
player._client.on('client_command', ({payload} = {}) => {
|
||||
if(payload==1){
|
||||
|
|
@ -8,4 +6,4 @@ function inject(serv, player)
|
|||
player.system ("WIP, press ESC");
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -1,7 +1,4 @@
|
|||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv, settings) {
|
||||
module.exports.server=function(serv, settings) {
|
||||
serv.tickCount = 0;
|
||||
serv.lastTickTime = 0;
|
||||
|
||||
|
|
@ -25,5 +22,5 @@ function inject(serv, settings) {
|
|||
|
||||
|
||||
serv.setTickInterval(20);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -1,12 +1,10 @@
|
|||
var vec3 = require("vec3");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
vec3.Vec3.prototype.toFixedPosition=function() {
|
||||
return this.scaled(32).floored();
|
||||
};
|
||||
|
||||
function inject(serv,player)
|
||||
module.exports.player=function(serv,player)
|
||||
{
|
||||
player._client.on('look', ({yaw,pitch,onGround} = {}) => sendLook(yaw,pitch,onGround));
|
||||
|
||||
|
|
@ -85,4 +83,4 @@ function inject(serv,player)
|
|||
flags: 0x00
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
@ -1,9 +1,58 @@
|
|||
var vec3=require("vec3");
|
||||
var spiralloop = require('spiralloop');
|
||||
|
||||
module.exports = inject;
|
||||
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||
var World = require('prismarine-world');
|
||||
var Vec3 = require('vec3');
|
||||
var WorldSync = require("prismarine-world-sync");
|
||||
|
||||
function inject(serv, player) {
|
||||
var generations={
|
||||
'grass_field':require("../worldGenerations/grass_field"),
|
||||
'diamond_square':require("../worldGenerations/diamond_square"),
|
||||
'superflat':require("../worldGenerations/superflat"),
|
||||
'all_the_blocks':require("../worldGenerations/all_the_blocks"),
|
||||
'nether':require("../worldGenerations/nether")
|
||||
};
|
||||
|
||||
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);
|
||||
serv.emit("seed",generation.options.seed);
|
||||
serv.overworld = new World(generations[generation.name](generation.options), regionFolder);
|
||||
serv.netherworld = new World(generations["nether"]({}));
|
||||
//serv.endworld = new World(generations["end"]({}));
|
||||
|
||||
serv._worldSync=new WorldSync(serv.overworld);
|
||||
|
||||
// WILL BE REMOVED WHEN ACTUALLY IMPLEMENTED
|
||||
serv.overworld.blockEntityData = {};
|
||||
serv.netherworld.blockEntityData = {};
|
||||
//////////////
|
||||
|
||||
serv.pregenWorld = (world, size=3) => {
|
||||
var promises = [];
|
||||
for (var x = -size; x < size; x++) {
|
||||
for (var z = -size; z < size; z++) {
|
||||
promises.push(world.getColumn(x, z));
|
||||
}
|
||||
}
|
||||
return Promise.all(promises);
|
||||
};
|
||||
|
||||
serv.setBlock = async (world,position,blockType,blockData) =>
|
||||
{
|
||||
serv.players
|
||||
.filter(p => p.world==world)
|
||||
.forEach(player => player.sendBlock(position, blockType, blockData));
|
||||
|
||||
await world.setBlockType(position,blockType);
|
||||
await world.setBlockData(position,blockData);
|
||||
};
|
||||
|
||||
//serv.pregenWorld(serv.overworld).then(() => serv.log('Pre-Generated Overworld'));
|
||||
//serv.pregenWorld(serv.netherworld).then(() => serv.log('Pre-Generated Nether'));
|
||||
};
|
||||
|
||||
module.exports.player=function(serv, player) {
|
||||
|
||||
player.spawnEntity = entity => {
|
||||
player._client.write(entity.spawnPacketName, entity.getSpawnPacket());
|
||||
|
|
@ -118,4 +167,4 @@ function inject(serv, player) {
|
|||
player.sendRestMap();
|
||||
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv)
|
||||
{
|
||||
serv.broadcast = (message, color) =>
|
||||
serv.players.forEach(player => player.chat({
|
||||
"text": message,
|
||||
"color": color
|
||||
}));
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
module.exports=inject;
|
||||
|
||||
function inject(serv,settings)
|
||||
{
|
||||
serv._writeAll= (packetName, packetFields) =>
|
||||
serv.players.forEach((player) => player._client.write(packetName, packetFields));
|
||||
|
||||
serv._writeArray= (packetName, packetFields, players) =>
|
||||
players.forEach((player) =>player._client.write(packetName, packetFields));
|
||||
|
||||
serv._writeNearby= (packetName, packetFields, loc) =>
|
||||
serv._writeArray(packetName, packetFields, serv.getNearby(loc));
|
||||
|
||||
serv.getNearby= ({world,position,radius=8*16*32}) => serv.players.filter( player =>
|
||||
player.world == world &&
|
||||
player.entity.position.distanceTo(position) <= radius
|
||||
);
|
||||
|
||||
serv.getNearbyEntities= ({world,position,radius=8*16*32}) => Object.keys(serv.entities)
|
||||
.map(eId => serv.entities[eId])
|
||||
.filter(entity =>
|
||||
entity.world == world &&
|
||||
entity.position.distanceTo(position) <= radius
|
||||
);
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
var path = require('path');
|
||||
var requireIndex = require('requireindex');
|
||||
var playerPlugins = requireIndex(path.join(__dirname,'..', 'playerPlugins'));
|
||||
var Player=require("../player");
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv,options)
|
||||
{
|
||||
serv._server.on('connection', client =>
|
||||
client.on('error',error => serv.emit('clientError',client,error)));
|
||||
|
||||
serv._server.on('login', async (client) => {
|
||||
var player=new Player();
|
||||
player._client=client;
|
||||
Object.keys(playerPlugins)
|
||||
.forEach(pluginName => playerPlugins[pluginName](serv, player, options));
|
||||
|
||||
serv.emit("newPlayer",player);
|
||||
try {
|
||||
await player.login();
|
||||
}
|
||||
catch(err){
|
||||
setTimeout(() => {throw err;},0)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1,243 +0,0 @@
|
|||
var vec3 = require("vec3");
|
||||
var dir = require("node-dir");
|
||||
var fs = require("fs");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
function requireFromString(src, filename) {
|
||||
var Module = module.constructor;
|
||||
var m = new Module();
|
||||
m._compile(src, filename);
|
||||
return m.exports;
|
||||
}
|
||||
|
||||
function log(msg) {
|
||||
console.log("[MODPE-NOINJECT] " + msg);
|
||||
}
|
||||
|
||||
function modpeApi() {
|
||||
var Vec3 = null;
|
||||
var vec3 = null;
|
||||
|
||||
var server = null;
|
||||
var player = null;
|
||||
|
||||
module.exports.startDestroyBlock = startDestroyBlock;
|
||||
module.exports.destroyBlock = destroyBlock;
|
||||
module.exports.newLevel = newLevel;
|
||||
module.exports.procCmd = procCmd;
|
||||
module.exports.exec = exec;
|
||||
module.exports.modTick = modTick;
|
||||
module.exports.useItem = useItem;
|
||||
module.exports.initSquid = initSquid;
|
||||
function modTick(){}
|
||||
function newLevel(){}
|
||||
|
||||
function useItem(x,y,z,itemId,blockId){}
|
||||
function startDestroyBlock(x,y,z,side){}
|
||||
function destroyBlock(x,y,z,side){}
|
||||
function procCmd(command){}
|
||||
function exec(code){eval(code)}
|
||||
|
||||
function initSquid(pl1, srv, v3) {
|
||||
player = pl1;
|
||||
server = srv;
|
||||
vec3=v3;
|
||||
Vec3=v3;
|
||||
}
|
||||
|
||||
function clientMessage(message) {
|
||||
console.log(message);
|
||||
player.chat(message);
|
||||
}
|
||||
|
||||
function setTile(x, y, z, id, damage) {
|
||||
server.setBlock(server.overworld,new vec3(x, y, z), id, damage);
|
||||
}
|
||||
|
||||
function getTile(x, y, z) {
|
||||
return server._worldSync.getBlockType(new vec3(x, y, z));
|
||||
}
|
||||
|
||||
function preventDefault() {
|
||||
}
|
||||
|
||||
function getPlayerX() {
|
||||
return player.entity.position.x/32;
|
||||
}
|
||||
|
||||
function getPlayerY() {
|
||||
return player.entity.position.y/32;
|
||||
}
|
||||
|
||||
function getPlayerZ() {
|
||||
return player.entity.position.z/32;
|
||||
}
|
||||
|
||||
function getPlayerEnt() {
|
||||
return null;
|
||||
}
|
||||
|
||||
function getCarriedItem() {
|
||||
return player.heldItem.blockId;
|
||||
}
|
||||
|
||||
var Player = {
|
||||
getCarriedItem: function () {
|
||||
return player.heldItem.blockId;
|
||||
}
|
||||
};
|
||||
var Entity = {
|
||||
getPitch: function () {
|
||||
return 1;
|
||||
}
|
||||
, getYaw: function () {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
var Level = {
|
||||
getGameMode: function () {
|
||||
return player.gameMode;
|
||||
}
|
||||
, getData: function (x, y, z) {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function convert(code) {
|
||||
log("Started conversion...");
|
||||
var api = modpeApi.toString()
|
||||
.split("\n");
|
||||
api[0] = "";
|
||||
api[api.length - 1] = "";
|
||||
var finapi = api.join("\n");
|
||||
code = finapi + code;
|
||||
return code;
|
||||
}
|
||||
|
||||
function inject(serv,settings)
|
||||
{
|
||||
function log(msg){
|
||||
serv.log("[MPE]: "+msg);
|
||||
}
|
||||
if(!settings.modpe){
|
||||
log("Modpe support is not enabled, disabling injecting...");
|
||||
return;
|
||||
}
|
||||
log("Modpe injection start...");
|
||||
var modPePluginsDir = __dirname+"/../../../modpePlugins";
|
||||
log("Place your scripts in " + modPePluginsDir);
|
||||
var modCount = 0;
|
||||
var mods = [];
|
||||
dir.readFiles(modPePluginsDir, {
|
||||
match: /.js/
|
||||
, exclude: /^\./
|
||||
}, function (err, content, fname, next) {
|
||||
if (err) throw err;
|
||||
log("Converting " + fname);
|
||||
content = convert(content);
|
||||
var modname = fname.split("/")[fname.split("/")
|
||||
.length - 1].split(".")[0];
|
||||
log("Loading mod " + modname);
|
||||
mods.push(requireFromString(content));
|
||||
modCount++;
|
||||
next();
|
||||
}
|
||||
, function (err, files) {
|
||||
if(err) return;
|
||||
log('Loaded ' + modCount + " mods");
|
||||
});
|
||||
|
||||
serv.on("newPlayer", function (player) {
|
||||
injectPlayer(serv, player);
|
||||
});
|
||||
|
||||
function injectPlayer(serv, player) {
|
||||
log("Injected into player");
|
||||
|
||||
initSquid(player, serv, vec3);
|
||||
newLevel();
|
||||
|
||||
player._client.on("block_dig", function (packet) {
|
||||
var pos = new vec3(packet.location);
|
||||
if (packet.status == 0 && player.gameMode != 1)
|
||||
startDestroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
else if (packet.status == 2)
|
||||
destroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
else if (packet.status == 1)
|
||||
console.log("Unused in ModPE");
|
||||
else if (packet.status == 0 && player.gameMode == 1)
|
||||
destroyBlock(pos.x, pos.y, pos.z, 0);
|
||||
});
|
||||
|
||||
player._client.on('position', function (packet) {
|
||||
modTick();
|
||||
});
|
||||
|
||||
player._client.on("block_place", function (packet) {
|
||||
if (packet.location.y < 0) return;
|
||||
useItem(packet.location.x, packet.location.y, packet.location.z,
|
||||
packet.heldItem.blockId,
|
||||
serv._worldSync.getBlockType(new vec3(packet.location.x, packet.location.y, packet.location.z)));
|
||||
});
|
||||
|
||||
player.on('modpe', function (command) {
|
||||
try {
|
||||
procCmd(command);
|
||||
}
|
||||
catch(err) {
|
||||
console.log("MODPE error: "+err.stack);
|
||||
}
|
||||
});
|
||||
|
||||
function newLevel() {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.newLevel();
|
||||
});
|
||||
}
|
||||
|
||||
function useItem(x, y, z, itemId, blockId) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.useItem(x, y, z, itemId, blockId);
|
||||
element.exec("lastUsedItem=" + itemId);
|
||||
});
|
||||
}
|
||||
|
||||
function modTick() {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.modTick();
|
||||
});
|
||||
}
|
||||
|
||||
function exec(code) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.exec(code);
|
||||
});
|
||||
}
|
||||
|
||||
function procCmd(command) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.procCmd(command);
|
||||
});
|
||||
}
|
||||
|
||||
function startDestroyBlock(x, y, z, side) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.startDestroyBlock(x, y, z, side);
|
||||
});
|
||||
}
|
||||
|
||||
function destroyBlock(x, y, z, side) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.destroyBlock(x, y, z, side);
|
||||
});
|
||||
}
|
||||
|
||||
function initSquid(pl, sr, v3) {
|
||||
mods.forEach(function (element, index, array) {
|
||||
element.initSquid(pl, sr, v3);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
var vec3=require("vec3");
|
||||
|
||||
module.exports=inject;
|
||||
|
||||
|
||||
function randomInt (low, high) {
|
||||
return Math.floor(Math.random() * (high - low) + low);
|
||||
}
|
||||
|
||||
function inject(serv,settings)
|
||||
{
|
||||
serv.gameMode=settings.gameMode;
|
||||
|
||||
serv.getSpawnPoint = () => new vec3(randomInt(5,20),81,randomInt(5,20));
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
var vec3 = require('vec3');
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv) {
|
||||
serv.playSound = (sound, world, position, {whitelist,blacklist=[],radius=32*32,volume=1.0,pitch=1.0}={}) => {
|
||||
var players = (typeof whitelist != 'undefined' ? (typeof whitelist == '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.entity.position.scaled(1/32)).scaled(8).floored();
|
||||
player._client.write('named_sound_effect', {
|
||||
soundName: sound,
|
||||
x: pos.x,
|
||||
y: pos.y,
|
||||
z: pos.z,
|
||||
volume: volume,
|
||||
pitch: Math.round(pitch*63)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
serv.playNoteBlock = (world, position, pitch) => {
|
||||
serv.emitParticle(23, world, position.clone().add(vec3(0.5, 1.5, 0.5)), {
|
||||
count: 1,
|
||||
size: vec3(0, 0, 0)
|
||||
});
|
||||
serv.playSound('note.harp', world, position, { pitch: serv.getNote(pitch) });
|
||||
}
|
||||
|
||||
serv.getNote = note => 0.5 * Math.pow(Math.pow(2, 1/12), note);
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
var Chunk = require('prismarine-chunk')(require("../version"));
|
||||
var World = require('prismarine-world');
|
||||
var Vec3 = require('vec3');
|
||||
var WorldSync = require("prismarine-world-sync");
|
||||
|
||||
var generations={
|
||||
'grass_field':require("../worldGenerations/grass_field"),
|
||||
'diamond_square':require("../worldGenerations/diamond_square"),
|
||||
'superflat':require("../worldGenerations/superflat"),
|
||||
'all_the_blocks':require("../worldGenerations/all_the_blocks"),
|
||||
'nether':require("../worldGenerations/nether")
|
||||
};
|
||||
|
||||
module.exports = inject;
|
||||
|
||||
function inject(serv,{regionFolder,generation={"name":"diamond_square","options":{"worldHeight":80}}}={}) {
|
||||
generation.options.seed=generation.options.seed || Math.random()*Math.pow(2, 32);
|
||||
serv.emit("seed",generation.options.seed);
|
||||
serv.overworld = new World(generations[generation.name](generation.options), regionFolder);
|
||||
serv.netherworld = new World(generations["nether"]({}));
|
||||
//serv.endworld = new World(generations["end"]({}));
|
||||
|
||||
serv._worldSync=new WorldSync(serv.overworld);
|
||||
|
||||
// WILL BE REMOVED WHEN ACTUALLY IMPLEMENTED
|
||||
serv.overworld.blockEntityData = {};
|
||||
serv.netherworld.blockEntityData = {};
|
||||
//////////////
|
||||
|
||||
serv.pregenWorld = (world, size=3) => {
|
||||
var promises = [];
|
||||
for (var x = -size; x < size; x++) {
|
||||
for (var z = -size; z < size; z++) {
|
||||
promises.push(world.getColumn(x, z));
|
||||
}
|
||||
}
|
||||
return Promise.all(promises);
|
||||
};
|
||||
|
||||
serv.setBlock = async (world,position,blockType,blockData) =>
|
||||
{
|
||||
serv.players
|
||||
.filter(p => p.world==world)
|
||||
.forEach(player => player.sendBlock(position, blockType, blockData));
|
||||
|
||||
await world.setBlockType(position,blockType);
|
||||
await world.setBlockData(position,blockData);
|
||||
};
|
||||
|
||||
//serv.pregenWorld(serv.overworld).then(() => serv.log('Pre-Generated Overworld'));
|
||||
//serv.pregenWorld(serv.netherworld).then(() => serv.log('Pre-Generated Nether'));
|
||||
}
|
||||
Loading…
Reference in a new issue