mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-11 10:31:08 +00:00
Implement player inventory using prismarine-windows and prismarine-item
* player can collect item
This commit is contained in:
parent
808b5a0149
commit
28343dc3d3
3 changed files with 65 additions and 18 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
})
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue