mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-24 17:21:43 +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-entity": "0.1.0",
|
||||||
"prismarine-world": "0.3.3",
|
"prismarine-world": "0.3.3",
|
||||||
"prismarine-world-sync": "0.1.0",
|
"prismarine-world-sync": "0.1.0",
|
||||||
|
"prismarine-item": "0.0.0",
|
||||||
|
"prismarine-windows": "0.0.0",
|
||||||
"random-seed": "^0.2.0",
|
"random-seed": "^0.2.0",
|
||||||
"request-promise": "^0.4.3",
|
"request-promise": "^0.4.3",
|
||||||
"requireindex": "~1.0.0",
|
"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 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 path = require('path');
|
||||||
var requireIndex = require('requireindex');
|
var requireIndex = require('requireindex');
|
||||||
|
|
@ -79,7 +81,6 @@ module.exports.server=function(serv,options) {
|
||||||
});
|
});
|
||||||
if (players.length) {
|
if (players.length) {
|
||||||
players[0].collect(entity);
|
players[0].collect(entity);
|
||||||
entity.destroy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!entity.velocity || !entity.size) return;
|
if (!entity.velocity || !entity.size) return;
|
||||||
|
|
@ -257,13 +258,37 @@ module.exports.entity=function(entity,serv){
|
||||||
};
|
};
|
||||||
|
|
||||||
entity.collect = (collectEntity) => {
|
entity.collect = (collectEntity) => {
|
||||||
if (entity.type != 'player') serv.emit('error', 'Non-player entity (ttype ' + entity.type + ') cannot collect another entity');
|
if (entity.type != 'player'){
|
||||||
else {
|
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', {
|
collectEntity._writeOthersNearby('collect', {
|
||||||
collectedEntityId: collectEntity.id,
|
collectedEntityId: collectEntity.id,
|
||||||
collectorEntityId: entity.id
|
collectorEntityId: entity.id
|
||||||
});
|
});
|
||||||
entity.playSoundAtSelf('random.pop');
|
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)
|
module.exports.player=function(player)
|
||||||
{
|
{
|
||||||
player.heldItemSlot=0;
|
player.heldItemSlot = 0
|
||||||
player.heldItem=0;
|
player.heldItem = new ItemStack(256, 1)
|
||||||
player.inventory=new Array(44);
|
player.inventory = new Windows.InventoryWindow(0, "Inventory", 44)
|
||||||
|
|
||||||
player._client.on("held_item_slot", ({slotId} = {}) => {
|
player._client.on("held_item_slot", ({slotId} = {}) => {
|
||||||
player.heldItemSlot = slotId;
|
player.heldItemSlot = slotId;
|
||||||
if(player.inventory[36+player.heldItemSlot]===undefined){
|
|
||||||
player.inventory[36+player.heldItemSlot]={
|
player.heldItem = player.inventory.itemsRange(36 + player.heldItemSlot, 36 + player.heldItemSlot + 1)
|
||||||
blockId:-1
|
|
||||||
};
|
|
||||||
}
|
|
||||||
player.heldItem = player.inventory[36+player.heldItemSlot];
|
|
||||||
player._writeOthersNearby("entity_equipment",{
|
player._writeOthersNearby("entity_equipment",{
|
||||||
entityId:player.id,
|
entityId: player.id,
|
||||||
slot:0,
|
slot: 0,
|
||||||
item:player.heldItem
|
item: ItemStack.toNotch(player.heldItem)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
player._client.on("set_creative_slot", ({slot,item} ={}) => {
|
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)
|
if (slot==36)
|
||||||
player._writeOthersNearby("entity_equipment",{
|
player._writeOthersNearby("entity_equipment",{
|
||||||
entityId:player.id,
|
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