minecraft.js
Version:
Minecraft data serialization/deserialization and networking
123 lines (115 loc) • 3.91 kB
JavaScript
var Entity = require(__dirname + '/entity.js'),
Vector3 = require(__dirname + '/vector3.js'),
Tag = require(__dirname + '/tag.js');
/** @constructor */
var TileEntity = module.exports = function(args) {
if(typeof args != 'object') args = {};
Entity.call(this, args);
this.id = args.id || "";
this.pos = args.pos || new Vector3(0.0, 0.0, 0.0);
switch(this.id) {
case 'Furnace':
this.burnTime = args.burnTime || 0;
this.cookTime = args.cookTime || 0;
this.items = args.items || [];
//TODO: verify items are instances of Item
break;
case 'Sign':
this.text = args.text || ["","","","",""];
break;
case 'MobSpawner':
this.entityId = args.entityId || "";
this.delay = args.delay || 100;
break;
case 'Chest':
this.items = args.items || [];
//TODO: verify items are instances of Item
break;
case 'Music':
this.note = args.note || 0;
break;
case 'Trap':
this.items = args.items || [];
//TODO: verify items are instances of Item
break;
case 'RecordPlayer':
this.record = args.record || 0;
break;
case 'Piston':
this.blockId = args.blockId || 0;
this.blockData = args.blockData || 0;
this.facing = args.facing || 0;
this.progress = args.progress || 0.0;
this.extending = args.extending || 0;
break;
case 'Cauldron':
this.items = args.items || [];
//TODO: verify items are instances of Item
this.brewTime = args.brewTime || 0;
break;
}
};
TileEntity.prototype.toTag = function() {
var tag = new Tag('compound', []);
tag.append(new Tag('string', 'id', this.id))
.append(new Tag('int', 'x', this.pos.x))
.append(new Tag('int', 'y', this.pos.y))
.append(new Tag('int', 'z', this.pos.z));
switch(this.id) {
case 'Furnace':
tag.append(new Tag('short', 'BurnTime', this.burnTime))
.append(new Tag('short', 'CookTime', this.cookTime));
var itemsTag = new Tag('list', 'Items', []);
for(var i = 0; i < this.items.length; i++)
itemsTag.append(this.items[i].toTag());
tags.append(itemsTag);
break;
case 'Sign':
tag.append(new Tag('string', 'Text1', this.text[0]))
.append(new Tag('string', 'Text2', this.text[1]))
.append(new Tag('string', 'Text3', this.text[2]))
.append(new Tag('string', 'Text4', this.text[3]))
.append(new Tag('string', 'Text5', this.text[4]));
break;
case 'MobSpawner':
tag.append(new Tag('string', 'EntityId', this.entityId))
.append(new Tag('short', 'Delay', this.delay));
break;
case 'Chest':
var itemsTag = new Tag('list', 'Items', []);
for(var i = 0; i < this.items.length; i++)
itemsTag.append(this.items[i].toTag());
tags.append(itemsTag);
break;
case 'Music':
tag.append(new Tag('byte', 'note', this.note));
break;
case 'Trap':
var itemsTag = new Tag('list', 'Items', []);
for(var i = 0; i < this.items.length; i++)
itemsTag.append(this.items[i].toTag());
tags.append(itemsTag);
break;
case 'RecordPlayer':
tag.append(new Tag('int', 'Record', this.record));
break;
case 'Piston':
tag.append(new Tag('int', 'blockId', this.blockId))
.append(new Tag('int', 'blockData', this.blockData))
.append(new Tag('int', 'facing', this.facing))
.append(new Tag('float', 'progress', this.progress))
.append(new Tag('byte', 'extending', this.extending));
break;
case 'Cauldron':
var itemsTag = new Tag('list', 'Items', []);
for(var i = 0; i < this.items.length; i++)
itemsTag.append(this.items[i].toTag());
tags.append(itemsTag)
.append(new Tag('int', 'BrewTime', this.brewTime));
break;
}
return tag;
};
TileEntity.prototype.tpyes = ['Furnace', 'Sign', 'MobSpawner',
'Chest', 'Music', 'Trap', 'RecordPlayer', 'Piston', 'Cauldron', 'EnchantTable',
'Airportal'];