public virtual void OnUpdate() { net.minecraft.src.WorldServer worldserver = playerManager.GetMinecraftServer(); if (dirtyCount == 0) { return; } if (dirtyCount == 1) { int i = chunkX * 16 + minX; int l = minY; int k1 = chunkZ * 16 + minZ; SendPacketToPlayersInInstance(new net.minecraft.src.Packet53BlockChange(i, l, k1, worldserver)); if (net.minecraft.src.Block.isBlockContainer[worldserver.GetBlockId(i, l, k1)]) { UpdateTileEntity(worldserver.GetBlockTileEntity(i, l, k1)); } } else { if (dirtyCount == 10) { minY = (minY / 2) * 2; maxY = (maxY / 2 + 1) * 2; int j = minX + chunkX * 16; int i1 = minY; int l1 = minZ + chunkZ * 16; int j2 = (maxX - minX) + 1; int l2 = (maxY - minY) + 2; int i3 = (maxZ - minZ) + 1; SendPacketToPlayersInInstance(new net.minecraft.src.Packet51MapChunk(j, i1, l1, j2, l2, i3, worldserver)); List <TileEntity> list = worldserver.GetTileEntityList(j, i1, l1, j + j2, i1 + l2, l1 + i3); for (int j3 = 0; j3 < list.Count; j3++) { UpdateTileEntity((net.minecraft.src.TileEntity)list[j3]); } } else { SendPacketToPlayersInInstance(new net.minecraft.src.Packet52MultiBlockChange(chunkX, chunkZ, dirtyBlocks, dirtyCount, worldserver)); for (int k = 0; k < dirtyCount; k++) { // CRAFTBUKKIT start -- Fixes TileEntity updates occurring upon a multi-block change; dirtyCount -> dirtyBlocks[i] int j1 = chunkX * 16 + (dirtyBlocks[k] >> 12 & 0xf); int i2 = dirtyBlocks[k] & 0xff; int k2 = chunkZ * 16 + (dirtyBlocks[k] >> 8 & 0xf); // CRAFTBUKKIT end if (net.minecraft.src.Block.isBlockContainer[worldserver.GetBlockId(j1, i2, k2)]) { //System.Console.Out.WriteLine("Sending!"); UpdateTileEntity(worldserver.GetBlockTileEntity(j1, i2, k2)); } } } } dirtyCount = 0; }
public virtual void OnUpdateEntity(bool flag) { base.OnUpdate(); for (int i = 0; i < inventory.GetSizeInventory(); i++) { net.minecraft.src.ItemStack itemstack = inventory.GetStackInSlot(i); if (itemstack == null || !net.minecraft.src.Item.itemsList[itemstack.itemID].Func_28019_b () || netServerHandler.GetNumChunkDataPackets() > 2) { continue; } net.minecraft.src.Packet packet = ((net.minecraft.src.ItemMapBase)net.minecraft.src.Item .itemsList[itemstack.itemID]).Func_28022_b(itemstack, worldObj, this); if (packet != null) { netServerHandler.SendPacket(packet); } } if (flag && chunkCoordIntPairQueue.Count > 0) { net.minecraft.src.ChunkCoordIntPair chunkcoordintpair = (net.minecraft.src.ChunkCoordIntPair )chunkCoordIntPairQueue[0]; if (chunkcoordintpair != null) { bool flag1 = false; if (netServerHandler.GetNumChunkDataPackets() < 4) { flag1 = true; } if (flag1) { net.minecraft.src.WorldServer worldserver = mcServer.GetWorldServer(dimension); chunkCoordIntPairQueue.Remove(chunkcoordintpair); netServerHandler.SendPacket(new net.minecraft.src.Packet51MapChunk(chunkcoordintpair .X * 16, 0, chunkcoordintpair.Z * 16, 16, 128, 16, worldserver)); System.Collections.Generic.List <TileEntity> list = worldserver.GetTileEntityList(chunkcoordintpair.X * 16, 0, chunkcoordintpair.Z * 16, chunkcoordintpair.X * 16 + 16 , 128, chunkcoordintpair.Z * 16 + 16); for (int j = 0; j < list.Count; j++) { GetTileEntityInfo((net.minecraft.src.TileEntity)list[j]); } } } } if (inPortal) { if (mcServer.propertyManager.GetBoolean("allow-nether", true)) { if (currentCraftingInventory != personalCraftingInventory) { UsePersonalCraftingInventory(); } if (ridingEntity != null) { MountEntity(ridingEntity); } else { timeInPortal += 0.0125F; if (timeInPortal >= 1.0F) { timeInPortal = 1.0F; timeUntilPortal = 10; mcServer.serverConfigurationManager.SendPlayerToOtherDimension(this); } } inPortal = false; } } else { if (timeInPortal > 0.0F) { timeInPortal -= 0.05F; } if (timeInPortal < 0.0F) { timeInPortal = 0.0F; } } if (timeUntilPortal > 0) { timeUntilPortal--; } if (health != lastHealth) { netServerHandler.SendPacket(new net.minecraft.src.Packet8UpdateHealth(health )); lastHealth = health; } }