Наследование: PhysicsTask
Пример #1
0
 public static void blockSquash(object sender, PlayerPlacingBlockEventArgs e)
 {
     try
     {
         Player player = e.Player;
         World  world  = player.World;
         if (null == world)
         {
             return;
         }
         lock (world.SyncRoot)
         {
             if (null != world.Map && world.IsLoaded && world.plantPhysics)
             {
                 if (e.NewBlock == Block.Sapling)
                 {
                     world.AddPhysicsTask(
                         new PlantTask(world, (short)e.Coords.X, (short)e.Coords.Y, (short)e.Coords.Z),
                         PlantTask.GetRandomDelay());
                 }
                 Vector3I z = new Vector3I(e.Coords.X, e.Coords.Y, e.Coords.Z - 1);
                 if (world.Map.GetBlock(z) == Block.Grass && e.NewBlock != Block.Air)
                 {
                     world.Map.QueueUpdate(new BlockUpdate(null, z, Block.Dirt));
                 }
                 else if (Physics.CanSquash(world.Map.GetBlock(z)) && e.NewBlock != Block.Air)
                 {
                     e.Result = CanPlaceResult.Revert;
                     Player.RaisePlayerPlacedBlockEvent(player, world.Map, z, world.Map.GetBlock(z), e.NewBlock,
                                                        BlockChangeContext.Physics);
                     world.Map.QueueUpdate(new BlockUpdate(null, z, e.NewBlock));
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Log(LogType.SeriousError, "BlockSquash" + ex);
     }
 }
Пример #2
0
 internal void AddPlantTask(short x, short y, short z)
 {
     AddPhysicsTask(new PlantTask(this, x, y, z), PlantTask.GetRandomDelay());
 }