-
Notifications
You must be signed in to change notification settings - Fork 0
/
playerdat.js
110 lines (78 loc) · 1.98 KB
/
playerdat.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
'use strict';
var nbt = require('nbt');
var ItemPile = require('itempile');
var Inventory = require('inventory');
// translate MC numerical ID to names used by some common voxel.js plugins
// see http://minecraft-ids.grahamedgecombe.com/
var id2name = {
0: 'air',
1: 'stone',
2: 'grass',
3: 'dirt',
4: 'cobblestone',
5: 'plankOak',
8: 'waterFlow',
9: 'waterSource',
10: 'lavaFlow',
11: 'lavaSource',
14: 'oreGold',
15: 'oreIron',
16: 'oreCoal',
17: 'logOak',
18: 'leavesOak',
20: 'glass',
35: 'woolWhite', // TODO: colors
41: 'blockGold',
42: 'blockIron',
54: 'chest',
58: 'workbench',
61: 'furnace',
86: 'pumpkin',
98: 'stoneBrick', // TODO: mossy, cracked, chiseled
256: 'spadeIron',
257: 'pickaxeIron',
258: 'axeIron',
259: 'lighter',
260: 'apple',
263: 'coal',
265: 'ingotIron',
266: 'ingotGold',
270: 'pickaxeWood',
271: 'axeWood',
273: 'spadeStone',
274: 'pickaxeStone',
275: 'axeStone',
297: 'bread',
280: 'stick',
325: 'bucket',
326: 'bucketWater',
327: 'bucketLava',
357: 'cookie',
359: 'shears',
375: 'spiderEye',
};
var loadInventory = function(data, cb) {
if (data instanceof ArrayBuffer) data = new Buffer(new Uint8Array(data));
nbt.parse(data, function(err, result) {
//console.log(JSON.stringify(result,null, ' '));
if (result.Inventory) {
var inventory = new Inventory(result.Inventory.length);
for (var i = 0; i < result.Inventory.length; i += 1) {
//console.log(i, result.Inventory[i]);
var name = id2name[result.Inventory[i].id] || 'unknown-' + result.Inventory[i].id;
var count = +result.Inventory[i].Count;
var slot = +result.Inventory[i].Slot;
var pile = new ItemPile(name, count);
//console.log(pile);
inventory.set(slot, pile);
}
//console.log(inventory);
cb(inventory, data);
} else {
cb(undefined, data);
}
});
};
module.exports = {
loadInventory: loadInventory
};