From f46c4225b54b9c66046cf8b36b1601ae5babbbe6 Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Sun, 21 Feb 2016 20:35:26 +0100 Subject: [PATCH] move modpe to a plugin, fix #66, fix #69 --- README.md | 1 + package.json | 1 - src/lib/plugins/modpe.js | 236 --------------------------------------- src/lib/plugins/world.js | 3 - 4 files changed, 1 insertion(+), 240 deletions(-) delete mode 100644 src/lib/plugins/modpe.js diff --git a/README.md b/README.md index 749d78f..0dfd48f 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Currently used between our test server (rom1504.fr) and our gitter room (through * [flying-squid-schematic](https://github.com/rom1504/flying-squid-schematic) Flying-squid plugin providing /listSchemas and /loadSchema commands. You can add schema through a simple http api and then add them in your world by just calling /loadSchema in game. Http api available in the test instance at [flying-squid.rom1504.fr](http://flying-squid.rom1504.fr) +* [flying-squid-modpe](https://github.com/PrismarineJS/flying-squid-modpe) load modpe plugins ## Documentation Documentation for how to operate and how to customize your server are coming soon! diff --git a/package.json b/package.json index da2b44f..76f1908 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "prismarine-provider-anvil": "^1.0.0", "prismarine-windows": "^1.0.0", "prismarine-world": "^1.0.0", - "prismarine-world-sync": "^0.1.0", "random-seed": "^0.3.0", "range": "^0.0.3", "request-promise": "^2.0.0", diff --git a/src/lib/plugins/modpe.js b/src/lib/plugins/modpe.js deleted file mode 100644 index 804c769..0000000 --- a/src/lib/plugins/modpe.js +++ /dev/null @@ -1,236 +0,0 @@ -const Vec3 = require("vec3").Vec3; -const dir = require("node-dir"); -const fs = require("fs"); - -function requireFromString(src, filename) { - let Module = module.constructor; - let m = new Module(); - m._compile(src, filename); - return m.exports; -} - -function modpeApi() { - let Vec3 = null; - let vec3 = null; - - let server = null; - let 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) { - 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.position.x/32; - } - - function getPlayerY() { - return player.position.y/32; - } - - function getPlayerZ() { - return player.position.z/32; - } - - function getPlayerEnt() { - return null; - } - - function getCarriedItem() { - return player.heldItem.blockId; - } - - let Player = { - getCarriedItem: function () { - return player.heldItem.blockId; - } - }; - let Entity = { - getPitch: function () { - return 1; - } - , getYaw: function () { - return 1; - } - }; - let Level = { - getGameMode: function () { - return player.gameMode; - } - , getData: function (x, y, z) { - return 0; - } - }; -} - -function convert(code) { - let api = modpeApi.toString() - .split("\n"); - api[0] = ""; - api[api.length - 1] = ""; - let finapi = api.join("\n"); - code = finapi + code; - return code; -} - -module.exports.server=function(serv,settings) -{ - let verboseMPE=false; - function log(msg){ - if(verboseMPE) serv.log("[MPE]: "+msg); - } - if(!settings.modpe){ - log("Modpe support is not enabled, disabling injecting..."); - return; - } - log("Modpe injection start..."); - let modPePluginsDir = __dirname+"/../../../modpePlugins"; - log("Place your scripts in " + modPePluginsDir); - let modCount = 0; - let mods = []; - dir.readFiles(modPePluginsDir, { - match: /.js/ - , exclude: /^\./ - }, function (err, content, fname, next) { - if (err) throw err; - log("Converting " + fname); - content = convert(content); - let 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(player,serv); - }); - - function injectPlayer(player,serv) { - log("Injected into player"); - - initSquid(player, serv, Vec3); - newLevel(); - - player._client.on("block_dig", function (packet) { - let pos = new Vec3(packet.location.x,packet.location.y,packet.location.z); - 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) - {/*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) { - serv.emit("error",err); - } - }); - - 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); - }); - } - } -}; diff --git a/src/lib/plugins/world.js b/src/lib/plugins/world.js index 654528a..6acf747 100644 --- a/src/lib/plugins/world.js +++ b/src/lib/plugins/world.js @@ -1,7 +1,6 @@ const spiralloop = require('spiralloop'); const World = require('prismarine-world'); -const WorldSync = require("prismarine-world-sync"); const generations=require("flying-squid").generations; import {fs} from 'node-promise-es6'; @@ -37,8 +36,6 @@ module.exports.server=async function(serv,{worldFolder,generation={"name":"diamo 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 = {};