Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
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;
     }
 }