Start of ticks, added daycycle, fixed inventory + chest things

This commit is contained in:
DemiPixel 2015-10-09 17:18:13 -07:00
parent 012f6e7c30
commit e062e4d6a9
6 changed files with 69 additions and 13 deletions

View file

@ -19,13 +19,16 @@ function inject(serv, player)
} }
player._client.on("entity_action", function(packet) { player._client.on("entity_action", function(packet) {
if(packet.actionId == 3) if(packet.actionId == 3) {
setMetadata([{"key":0,"type":0,"value": 0x08}]); setMetadata([{"key":0,"type":0,"value": 0x08}]);
if(packet.actionId == 4) } else if(packet.actionId == 4) {
setMetadata([{"key":0,"type":0,"value": 0x00}]); setMetadata([{"key":0,"type":0,"value": 0x00}]);
if(packet.actionId == 0) } else if(packet.actionId == 0) {
setMetadata([{"key":0,"type":0,"value": 0x02}]); 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}]); setMetadata([{"key":0,"type":0,"value": 0x00}]);
player.entity.crouching = false;
}
}); });
} }

View file

@ -4,16 +4,23 @@ module.exports=inject;
function inject(serv, player) 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 referencePosition=new vec3(packet.location.x,packet.location.y,packet.location.z);
var id = serv.world.getBlock(referencePosition).type; if (player.entity.crouching) return;
if(id==54) 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",{ player._client.write("open_window",{
windowId:165, windowId:165,
inventoryType:"minecraft:chest", inventoryType:"minecraft:chest",
windowTitle:JSON.stringify("Chest"), windowTitle:JSON.stringify("Chest"),
slotCount:26 slotCount:9*3 + 8 // 3 rows, make nicer later
}); });
}
}); });
} }

View file

@ -8,16 +8,16 @@ function inject(serv, player)
player._client.on("held_item_slot", function (packet) { player._client.on("held_item_slot", function (packet) {
player.heldItemSlot = packet.slotId; player.heldItemSlot = packet.slotId;
if(player.inventory[36+heldItemSlot]===undefined){ if(player.inventory[36+player.heldItemSlot]===undefined){
player.inventory[36+heldItemSlot]={ player.inventory[36+player.heldItemSlot]={
blockId:-1 blockId:-1
}; };
} }
player.heldItem = player.inventory[36+heldItemSlot]; player.heldItem = player.inventory[36+player.heldItemSlot];
player._writeOthers("entity_equipment",{ player._writeOthers("entity_equipment",{
entityId:player.entity.id, entityId:player.entity.id,
slot:0, slot:0,
item:heldItem item:player.heldItem
}); });
}); });

View file

@ -136,7 +136,7 @@ function inject(serv,player)
{ {
player._client.write('update_time', { player._client.write('update_time', {
age: [0, 0], age: [0, 0],
time: [0, 1] time: [0, serv.time]
}); });
} }

View file

@ -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
})
}

View file

@ -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;
}