From e062e4d6a94c25a613f0847fc8e10276f44da491 Mon Sep 17 00:00:00 2001 From: DemiPixel Date: Fri, 9 Oct 2015 17:18:13 -0700 Subject: [PATCH] Start of ticks, added daycycle, fixed inventory + chest things --- src/lib/playerPlugins/animations.js | 11 +++++++---- src/lib/playerPlugins/chest.js | 15 +++++++++++---- src/lib/playerPlugins/inventory.js | 8 ++++---- src/lib/playerPlugins/login.js | 2 +- src/lib/serverPlugins/daycycle.js | 21 +++++++++++++++++++++ src/lib/serverPlugins/tick.js | 25 +++++++++++++++++++++++++ 6 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 src/lib/serverPlugins/daycycle.js create mode 100644 src/lib/serverPlugins/tick.js diff --git a/src/lib/playerPlugins/animations.js b/src/lib/playerPlugins/animations.js index 4476fa1..c61400b 100644 --- a/src/lib/playerPlugins/animations.js +++ b/src/lib/playerPlugins/animations.js @@ -19,13 +19,16 @@ function inject(serv, player) } player._client.on("entity_action", function(packet) { - if(packet.actionId == 3) + if(packet.actionId == 3) { setMetadata([{"key":0,"type":0,"value": 0x08}]); - if(packet.actionId == 4) + } else if(packet.actionId == 4) { setMetadata([{"key":0,"type":0,"value": 0x00}]); - if(packet.actionId == 0) + } else if(packet.actionId == 0) { setMetadata([{"key":0,"type":0,"value": 0x02}]); - if(packet.actionId == 1) + player.entity.crouching = true; + } else if(packet.actionId == 1) { setMetadata([{"key":0,"type":0,"value": 0x00}]); + player.entity.crouching = false; + } }); } \ No newline at end of file diff --git a/src/lib/playerPlugins/chest.js b/src/lib/playerPlugins/chest.js index a0c0260..be80f8d 100644 --- a/src/lib/playerPlugins/chest.js +++ b/src/lib/playerPlugins/chest.js @@ -4,16 +4,23 @@ module.exports=inject; function inject(serv, player) { - player._client.on('block_place', function (packet) { + player._client.on('block_place', async function (packet) { var referencePosition=new vec3(packet.location.x,packet.location.y,packet.location.z); - var id = serv.world.getBlock(referencePosition).type; - if(id==54) + if (player.entity.crouching) return; + var id = await serv.world.getBlockType(referencePosition); + var blockAbove = await serv.world.getBlockType(referencePosition.clone().add(new vec3(0, 1, 0))); + + if(id==54) { + if (blockAbove) { + return; + } player._client.write("open_window",{ windowId:165, inventoryType:"minecraft:chest", windowTitle:JSON.stringify("Chest"), - slotCount:26 + slotCount:9*3 + 8 // 3 rows, make nicer later }); + } }); } \ No newline at end of file diff --git a/src/lib/playerPlugins/inventory.js b/src/lib/playerPlugins/inventory.js index 0e2dbf3..2bd3086 100644 --- a/src/lib/playerPlugins/inventory.js +++ b/src/lib/playerPlugins/inventory.js @@ -8,16 +8,16 @@ function inject(serv, player) player._client.on("held_item_slot", function (packet) { player.heldItemSlot = packet.slotId; - if(player.inventory[36+heldItemSlot]===undefined){ - player.inventory[36+heldItemSlot]={ + if(player.inventory[36+player.heldItemSlot]===undefined){ + player.inventory[36+player.heldItemSlot]={ blockId:-1 }; } - player.heldItem = player.inventory[36+heldItemSlot]; + player.heldItem = player.inventory[36+player.heldItemSlot]; player._writeOthers("entity_equipment",{ entityId:player.entity.id, slot:0, - item:heldItem + item:player.heldItem }); }); diff --git a/src/lib/playerPlugins/login.js b/src/lib/playerPlugins/login.js index c91cc35..d7c5378 100644 --- a/src/lib/playerPlugins/login.js +++ b/src/lib/playerPlugins/login.js @@ -136,7 +136,7 @@ function inject(serv,player) { player._client.write('update_time', { age: [0, 0], - time: [0, 1] + time: [0, serv.time] }); } diff --git a/src/lib/serverPlugins/daycycle.js b/src/lib/serverPlugins/daycycle.js new file mode 100644 index 0000000..c256510 --- /dev/null +++ b/src/lib/serverPlugins/daycycle.js @@ -0,0 +1,21 @@ + +module.exports = inject; + +function inject(serv, settings) { + serv.setTime = function(time) { + serv.time = time; + serv._writeAll('update_time', { + age: [0, 0], // TODO + time: [0, serv.time] + }); + } + + serv.doDaylightCycle = true; + + serv.time = 0; + + serv.on('tick', function() { + if (!serv.doDaylightCycle) return; + if (serv.tick % 20 == 0) serv.setTime((serv.time + 20) % 24000); // Vanilla only does it every second + }) +} \ No newline at end of file diff --git a/src/lib/serverPlugins/tick.js b/src/lib/serverPlugins/tick.js new file mode 100644 index 0000000..802c939 --- /dev/null +++ b/src/lib/serverPlugins/tick.js @@ -0,0 +1,25 @@ + +module.exports = inject; + +function inject(serv, settings) { + serv.setTickInterval = setTickInterval; + serv.stopTickInterval = stopTickInterval; + serv.tick = 0; + + serv.setTickInterval(20); +} + +function setTickInterval(ticksPerSecond) { + var serv = this; + if (serv.tickInterval) clearInterval(serv.tickInterval); + + serv.tickInterval = setInterval(function() { + serv.tick++; + serv.emit('tick', serv.tick); + }, 1000/ticksPerSecond); +} + +function stopTickInterval() { + if (serv.tickInterval) clearInterval(serv.tickInterval); + serv.tickInterval = null; +} \ No newline at end of file