UNPKG

minecraft.js

Version:

Minecraft data serialization/deserialization and networking

123 lines (115 loc) 3.91 kB
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'];