public void Write(int x, short y, int z, NbtNode node) { lock (this) { NbtWriter writer = new NbtWriter(); MemoryStream stream = new MemoryStream(); writer.WriteFile(stream, node); byte[] buffer = Compress(stream.ToArray()); _sizes.Add(buffer.Length); int usedSectors = ((buffer.Length + 5) % _sectorSize) == 0 ? (buffer.Length + 5) / _sectorSize : (buffer.Length + 5) / _sectorSize + 1; MoveToHeaderPosition(x, y, z); _filePointer.Write(0); int sectorPostion = FindFreeSector(usedSectors); int sector = (sectorPostion << 9) | usedSectors; MoveToHeaderPosition(x, y, z); _filePointer.Write(sector); _filePointer.Seek(_headerSize + sectorPostion * _sectorSize, SeekOrigin.Begin); _filePointer.Write(buffer.Length); _filePointer.Write((byte)2); //Zlib Compression _filePointer.Write(buffer); _filePointer.Flush(); } }
public void Write(int x, int z, NbtNode node) { lock (this) { NbtWriter writer = new NbtWriter(); MemoryStream stream = new MemoryStream(); writer.WriteFile(stream, node); byte[] buffer = Compress(stream.ToArray()); int usedSectors = ((buffer.Length + 5) % 4096) == 0 ? (buffer.Length + 5) / 4096 : (buffer.Length + 5) / 4096 + 1; MoveToHeaderPosition(x, z); _filePointer.Write(0); int sectorPostion = FindFreeSector(usedSectors); Console.WriteLine("Saving chunk {0},{1} at position {2}.", x, z, sectorPostion); int sector = (sectorPostion << 8) | usedSectors; MoveToHeaderPosition(x, z); _filePointer.Write(sector); _filePointer.Seek(sectorPostion * 4096, SeekOrigin.Begin); _filePointer.Write(buffer.Length); _filePointer.Write((byte)1); //GZip Compression _filePointer.Write(buffer); _filePointer.Flush(); } }
public override void Write(BigEndianStream s, bool inclHeader = true) { if (inclHeader) { s.WriteByte(StartByte); s.WriteByte(TLVChannelByte); } s.Write(Flags); s.Write(MessageFamily); s.Write(MessageType); s.Write(SequenceNumber); BlockSize = 0; if (Block != null) { foreach (TLV t in Block) { BlockSize += t.GetSize(); } } s.Write(BlockSize); if (Block != null) { foreach (TLV t in Block) { t.Write(s); } } }
internal void Write(BigEndianStream stream) { stream.Write(Type > 0 ? Type : (short)-1); if (Type > 0) { stream.Write(Count); stream.Write(Durability); if (Durability > 0 || IsEnchantable()) { stream.Write((short)-1); } // TODO: Remove the two lines above and implement items and enchantments write /* * if (Item.CanBeDamaged()) * { * if(_enchantments != null) * WriteEnchantmentsToNBT(stream); * else * stream.Write(-1); * } */ } }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(Type); stream.Write((int)(X * 32)); stream.Write((int)(Y * 32)); stream.Write((int)(Z * 32)); }
internal virtual void Write(BigEndianStream stream) { stream.Write(Type > 0 ? Type : (short)-1); if (Type > 0) { stream.Write(Count); stream.Write(Durability); } }
private void CreateRegionFile(Stream stream, short sectorSize = 128) { BigEndianStream endianStream = new BigEndianStream(stream); { endianStream.Write(sectorSize); endianStream.Write(new byte[32 * 32 * 16 * 4], 0, 32 * 32 * 16 * 4); // Write Empty Header endianStream.Flush(); stream.Seek(0, SeekOrigin.Begin); } }
public void Write(BigEndianStream s) { s.Write(TLVType); if (Is32) { s.Write(Length); } else { s.Write((ushort)Length); } s.Write(Value, 0, Value.Length); }
public override void Write(BigEndianStream stream) { stream.Write(X); stream.Write(Y); stream.Write(Z); stream.Write(SizeX); stream.Write(SizeY); stream.Write(SizeZ); int o = 16 * 16 * 128; byte[] data = new byte[o * 5 / 2]; int i = 0; for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { for (int y = 0; y < 128; y++) { int s = ((i + 1) & 1) * 4; int ofst = i; data[ofst] = Chunk[x, y, z]; ofst = i / 2 + o * 2 / 2; data[ofst] = unchecked((byte)(data[ofst] | (Chunk.GetData(x, y, z) << s))); ofst = i / 2 + o * 3 / 2; data[ofst] = unchecked((byte)(data[ofst] | (Chunk.GetBlockLight(x, y, z) << s))); ofst = i / 2 + o * 4 / 2; data[ofst] = unchecked((byte)(data[ofst] | (Chunk.GetSkyLight(x, y, z) << s))); i++; } } } byte[] comp = new byte[o * 5]; int len; Deflater deflater = new Deflater(0); try { deflater.setInput(data); deflater.finish(); len = deflater.deflate(comp); } finally { deflater.end(); } stream.Write(len); stream.Write(comp, 0, len); }
private void WriteRaw(BigEndianStream zipped, byte tagId, object tag) { switch (tagId) { case 1: zipped.Write((byte)tag); break; case 2: zipped.Write((short)tag); break; case 3: zipped.Write((int)tag); break; case 4: zipped.Write((long)tag); break; case 5: zipped.Write((float)tag); break; case 6: zipped.Write((double)tag); break; case 10: NbtCompound subNodes; if (tag is NbtCompound) { subNodes = (NbtCompound)tag; } else { subNodes = new NbtCompound { Childs = (List <NbtNode>)tag } }; foreach (var nbtNode in subNodes.Childs) { WriteNode(zipped, nbtNode); } WriteNode(zipped, new NbtStop()); break; } }
public override void Write(BigEndianStream stream) { stream.Write(World); stream.Write(Unknown); stream.Write(CreativeMode); stream.Write(WorldHeight); stream.Write(MapSeed); }
private void WriteNode(BigEndianStream zipped, NbtNode node) { zipped.Write(node.Type); if (node.Type == 0) { return; } zipped.Write8(node.Name); switch (node.Type) { case 1: zipped.Write(((NbtByte)node).Value); break; case 2: zipped.Write(((NbtShort)node).Value); break; case 3: zipped.Write(((NbtInt)node).Value); break; case 4: zipped.Write(((NbtLong)node).Value); break; case 5: zipped.Write(((NbtFloat)node).Value); break; case 6: zipped.Write(((NbtDouble)node).Value); break; case 7: zipped.Write(((NbtBytes)node).Value.Length); zipped.Write(((NbtBytes)node).Value); break; case 8: zipped.Write8(((NbtString)node).Value); break; case 9: var list = (NbtList)node; zipped.Write(list.TagId); zipped.Write(list.Childs.Count); foreach (var child in list.Childs) { WriteRaw(zipped, list.TagId, child); } break; case 10: var compount = (NbtCompound)node; foreach (var item in compount.Childs) { WriteNode(zipped, item); } WriteNode(zipped, new NbtStop()); break; case 11: zipped.Write(((NbtInts)node).Value.Length); zipped.Write(IntToByteArray(((NbtInts)node).Value)); break; } }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(Title); stream.Write(X); stream.Write(Y); stream.Write(Z); stream.Write(GraphicId); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(Yaw); stream.Write(Pitch); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write((byte)Effect); stream.Write(Amplifier); stream.Write(Duration); }
public override void Write(BigEndianStream stream) { stream.Write(Reason); }
public override void Write(BigEndianStream stream) { stream.Write(WindowId); }
public override void Write(BigEndianStream stream) { stream.Write(Sink1); stream.Write(Sink2); stream.Write(Sink3); stream.Write(Sink4); stream.Write(Sink5); stream.Write(Sink6); }
public override void Write(BigEndianStream stream) { stream.Write(WindowId); stream.Write(Transaction); stream.Write(Accepted); }
public override void Write(BigEndianStream stream) { stream.Write(Time); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(Unknown); stream.Write(X); stream.Write(Y); stream.Write(Z); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(ItemId); stream.Write(Count); stream.Write(Durability); stream.Write((int)(X * 32)); stream.Write((int)(Y * 32)); stream.Write((int)(Z * 32)); stream.Write(Yaw); stream.Write(Pitch); stream.Write(Roll); }
public override void Write(BigEndianStream stream) { stream.Write((int)EffectID); stream.Write(X); stream.Write(Y); stream.Write(Z); stream.Write((int)SoundData); }
public override void Write(BigEndianStream stream) { stream.Write(WindowId); stream.Write(Slot); (Item ?? ItemStack.Void).Write(stream); }
public override void Write(BigEndianStream stream) { stream.Write(X); stream.Write(Y); stream.Write(Z); stream.Write(Type); stream.Write(Data); }
public override void Write(BigEndianStream stream) { stream.Write(Message); }
public override void Write(BigEndianStream stream) { stream.Write(Health); stream.Write(Food); stream.Write(FoodSaturation); }
public override void Write(BigEndianStream stream) { stream.Write(Slot); stream.Write(ItemID); stream.Write(Quantity); stream.Write(Damage); }
public override void Write(BigEndianStream stream) { stream.Write(X); stream.Write(Y); stream.Write(Z); for (int i = 0; i < Lines.Length; i++) stream.Write(Lines[i]); }
public override void Write(BigEndianStream stream) { stream.Write(PlayerId); stream.Write((sbyte)Action); }
public override void Write(BigEndianStream stream) { stream.Write(PlayerId); stream.Write(InBed); stream.Write(X); stream.Write(Y); stream.Write(Z); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(Slot); stream.Write(ItemId); stream.Write(Durability); }
public override void Write(BigEndianStream stream) { stream.Write(User); stream.Write(Target); stream.Write(LeftClick); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(Data); }
public override void Write(BigEndianStream stream) { stream.Write(WindowId); stream.Write(Slot); stream.Write(RightClick); stream.Write(Transaction); stream.Write(Shift); (Item ?? ItemStack.Void).Write(stream); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write(DeltaX); stream.Write(DeltaY); stream.Write(DeltaZ); }
public override void Write(BigEndianStream stream) { stream.Write(WindowId); stream.Write((short)Items.Length); for (int i = 0; i < Items.Length; i++) (Items[i] ?? ItemStack.Void).Write(stream); }
public override void Write(BigEndianStream stream) { stream.Write(WindowId); stream.Write(ProgressBar); stream.Write(Value); }
public override void Write(BigEndianStream stream) { stream.Write(EntityId); stream.Write((byte)Effect); }