From 6b6a6764ae13c8207ce28d9e7b24b827c61ed5c7 Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Mon, 14 Dec 2015 23:59:26 +0100 Subject: [PATCH] update fire placing/destroying, fix #171 --- src/lib/plugins/digging.js | 68 +++++++++++++++++++++++--------------- src/lib/plugins/portal.js | 12 ++++--- src/lib/plugins/useItem.js | 2 +- 3 files changed, 50 insertions(+), 32 deletions(-) diff --git a/src/lib/plugins/digging.js b/src/lib/plugins/digging.js index 67194c2..fd5cab9 100644 --- a/src/lib/plugins/digging.js +++ b/src/lib/plugins/digging.js @@ -7,32 +7,46 @@ module.exports.player=function(player,serv) player.sendBlock(position, block.type, block.metadata); } - player._client.on("block_dig",({location,status} = {}) => { + player._client.on("block_dig",async ({location,status,face}) => { var pos=new Vec3(location.x,location.y,location.z); - player.world.getBlock(pos) - .then(block => { - currentlyDugBlock=block; - if(currentlyDugBlock.type==0) return; - if(status==0 && player.gameMode!=1) - player.behavior('dig', { // Start dig survival - position: pos, - block: block - }, ({position}) => { - return startDigging(position); - }, cancelDig); - else if(status==2) - completeDigging(pos); - else if(status==1) - player.behavior('cancelDig', { // Cancel dig survival - position: pos, - block: block - }, ({position}) => { - return cancelDigging(position); - }); - else if(status==0 && player.gameMode==1) - return creativeDigging(pos); - }) - .catch((err)=> setTimeout(() => {throw err;},0)) + + var directionVector=directionToVector[face]; + var facedPos=pos.plus(directionVector); + + try { + let facedBlock = await player.world.getBlock(facedPos); + let block; + if(facedBlock.name=="fire") + { + block=facedBlock; + pos=facedPos; + } + else block=player.world.getBlock(pos); + + currentlyDugBlock = block; + if (currentlyDugBlock.type == 0) return; + if (status == 0 && player.gameMode != 1) + player.behavior('dig', { // Start dig survival + position: pos, + block: block + }, ({position}) => { + return startDigging(position); + }, cancelDig); + else if (status == 2) + completeDigging(pos); + else if (status == 1) + player.behavior('cancelDig', { // Cancel dig survival + position: pos, + block: block + }, ({position}) => { + return cancelDigging(position); + }); + else if (status == 0 && player.gameMode == 1) + return creativeDigging(pos); + } + catch(err) { + setTimeout(() => {throw err;},0); + } }); function diggingTime() @@ -159,4 +173,6 @@ module.exports.player=function(player,serv) }, cancelDig); } -}; \ No newline at end of file +}; + +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)]; \ No newline at end of file diff --git a/src/lib/plugins/portal.js b/src/lib/plugins/portal.js index ed01dd6..8a73c2a 100644 --- a/src/lib/plugins/portal.js +++ b/src/lib/plugins/portal.js @@ -3,17 +3,19 @@ var Vec3 = require("vec3").Vec3; var UserError=require("flying-squid").UserError; module.exports.player=function(player,serv) { - player.use_flint_and_steel=async (referencePosition,direction) => { + player.use_flint_and_steel=async (referencePosition,direction,position) => { let block=await player.world.getBlock(referencePosition); if(block.name=="obsidian") { var frames=await detectFrame(player.world,referencePosition,direction); - if(frames.length==0) + if(frames.length!=0) { + var air = frames[0].air; + air.forEach(pos => player.setBlock(pos, 90, (frames[0].bottom[0].x - frames[0].bottom[1].x) != 0 ? 1 : 2)); + player.world.portals.push(frames[0]); return; - var air=frames[0].air; - air.forEach(pos => player.setBlock(pos,90,(frames[0].bottom[0].x-frames[0].bottom[1].x)!=0 ? 1 : 2)); - player.world.portals.push(frames[0]); + } } + player.changeBlock(position, 51, 0); }; player.on("dug",({position,block}) => { diff --git a/src/lib/plugins/useItem.js b/src/lib/plugins/useItem.js index d3e7606..dbe9046 100644 --- a/src/lib/plugins/useItem.js +++ b/src/lib/plugins/useItem.js @@ -11,7 +11,7 @@ module.exports.player=function(player,serv) var item= items[heldItem.blockId]; if(item.name=="flint_and_steel") - player.use_flint_and_steel(referencePosition,directionVector); + player.use_flint_and_steel(referencePosition,directionVector,position); }); }; 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)]; \ No newline at end of file