Implement player inventory using prismarine-windows and prismarine-item

* player can collect item
This commit is contained in:
C109 2015-11-22 09:49:51 -05:00 committed by Romain Beaumont
parent 808b5a0149
commit 28343dc3d3
3 changed files with 65 additions and 18 deletions

View file

@ -34,6 +34,8 @@
"prismarine-entity": "0.1.0",
"prismarine-world": "0.3.3",
"prismarine-world-sync": "0.1.0",
"prismarine-item": "0.0.0",
"prismarine-windows": "0.0.0",
"random-seed": "^0.2.0",
"request-promise": "^0.4.3",
"requireindex": "~1.0.0",

View file

@ -1,6 +1,8 @@
var Entity=require("../entity");
var Entity = require("../entity");
var Version = require("../version")
var Vec3 = require("vec3").Vec3;
var entitiesByName=require("minecraft-data")(require("../version")).entitiesByName;
var ItemStack = require("prismarine-item")(Version)
var entitiesByName=require("minecraft-data")(Version).entitiesByName;
var path = require('path');
var requireIndex = require('requireindex');
@ -79,7 +81,6 @@ module.exports.server=function(serv,options) {
});
if (players.length) {
players[0].collect(entity);
entity.destroy();
}
}
if (!entity.velocity || !entity.size) return;
@ -257,13 +258,37 @@ module.exports.entity=function(entity,serv){
};
entity.collect = (collectEntity) => {
if (entity.type != 'player') serv.emit('error', 'Non-player entity (ttype ' + entity.type + ') cannot collect another entity');
else {
if (entity.type != 'player'){
serv.emit('error', 'Non-player entity (ttype ' + entity.type + ') cannot collect another entity')
return;
}
// Add it to a stack already in the player's inventory if possible
for(var item in entity.inventory.items()){
if(item.type == collectEntity.itemId){
item.stackSize += 1
collectEntity._writeOthersNearby('collect', {
collectedEntityId: collectEntity.id,
collectorEntityId: entity.id
});
entity.playSoundAtSelf('random.pop');
collectEntity.destroy()
return;
}
}
// If we couldn't add it to a already existing stack, put it in a new stack if the inventory has room
var emptySlot = entity.inventory.firstEmptyInventorySlot()
if(emptySlot != null){
collectEntity._writeOthersNearby('collect', {
collectedEntityId: collectEntity.id,
collectorEntityId: entity.id
});
entity.playSoundAtSelf('random.pop');
var newItem = new ItemStack(collectEntity.itemId, 1, collectEntity.damage)
entity.inventory.updateSlot(emptySlot, newItem)
collectEntity.destroy()
}
}

View file

@ -1,26 +1,33 @@
var Version = require("../version")
var Windows = require("prismarine-windows")(Version).windows
var ItemStack = require("prismarine-item")(Version)
module.exports.player=function(player)
{
player.heldItemSlot=0;
player.heldItem=0;
player.inventory=new Array(44);
player.heldItemSlot = 0
player.heldItem = new ItemStack(256, 1)
player.inventory = new Windows.InventoryWindow(0, "Inventory", 44)
player._client.on("held_item_slot", ({slotId} = {}) => {
player.heldItemSlot = slotId;
if(player.inventory[36+player.heldItemSlot]===undefined){
player.inventory[36+player.heldItemSlot]={
blockId:-1
};
}
player.heldItem = player.inventory[36+player.heldItemSlot];
player.heldItem = player.inventory.itemsRange(36 + player.heldItemSlot, 36 + player.heldItemSlot + 1)
player._writeOthersNearby("entity_equipment",{
entityId:player.id,
slot:0,
item:player.heldItem
entityId: player.id,
slot: 0,
item: ItemStack.toNotch(player.heldItem)
});
});
player._client.on("set_creative_slot", ({slot,item} ={}) => {
player.inventory[slot]=item;
if(item.blockId == -1){
player.inventory.updateSlot(slot, undefined)
return;
}
var newItem = new ItemStack(item.blockId, item.itemCount, item.metadata)
player.inventory.updateSlot(slot, newItem)
if (slot==36)
player._writeOthersNearby("entity_equipment",{
entityId:player.id,
@ -53,4 +60,17 @@ module.exports.player=function(player)
});
});
player.inventory.on("windowUpdate", function(){
var items = player.inventory.slots
for(var itemIndex in items){
var item = items[itemIndex]
player._client.write("set_slot", {
windowId: 0,
slot: itemIndex,
item: ItemStack.toNotch(item)
})
}
})
};