fCraft.Portals.PortalHandler.Player_PlacingBlock C# (CSharp) Метод

Player_PlacingBlock() приватный статический Метод

private static Player_PlacingBlock ( object sender, Events e ) : void
sender object
e Events
Результат void
        private static void Player_PlacingBlock( object sender, Events.PlayerPlacingBlockEventArgs e )
        {
            try {
                if ( e.Player.World.Map.Portals != null && e.Player.World.Map.Portals.Count > 0 && e.Context != BlockChangeContext.Portal ) {
                    lock ( e.Player.World.Map.Portals.SyncRoot ) {
                        foreach ( Portal portal in e.Player.World.Map.Portals ) {
                            if ( portal.IsInRange( e.Coords ) ) {
                                e.Result = CanPlaceResult.Revert;
                                e.Player.Message( "You can not place a block inside portal: " + portal.Name );
                                return;
                            }
                        }
                    }
                }

                if ( e.NewBlock == Block.Red ) {
                    if ( e.Context == BlockChangeContext.Manual ) {
                        if ( e.Player.PortalCache.Name != null ) {
                            if ( e.Player.PortalCache.AffectedBlocks != null ) {
                                if ( e.Player.PortalCache.AffectedBlocks.Contains( e.Coords ) ) { //stop output being inside the unfinished portal
                                    e.Result = CanPlaceResult.Revert;
                                    e.Player.Message( "You can not place a block inside a portal" );
                                    return;
                                }
                                e.Player.PortalCache.DesiredOutputX = e.Coords.ToPlayerCoords().X;
                                e.Player.PortalCache.DesiredOutputY = e.Coords.ToPlayerCoords().Y;
                                e.Player.PortalCache.DesiredOutputZ = ( e.Coords.Z + 2 ) * 32;
                                e.Player.PortalCache.DesiredOutputR = e.Player.Position.R;
                                e.Player.PortalCache.DesiredOutputL = e.Player.Position.L;

                                e.Player.PortalCache.Name = Portal.GenerateName( e.Player.PortalCache.World, true );
                                string oldWorld = e.Player.PortalCache.World;
                                e.Player.PortalCache.World = e.Player.World.Name;
                                PortalHandler.CreatePortal( e.Player.PortalCache, WorldManager.FindWorldExact( oldWorld ), true );
                                e.Player.Message( " Portal finalized: Exit point at {0} on world {1}", e.Coords.ToString(), e.Player.World.ClassyName );
                                e.Player.PortalCache = new Portal();
                                e.Result = CanPlaceResult.Revert;
                            }
                        }
                    }
                }
            } catch ( Exception ex ) {
                Logger.Log( LogType.Error, "PortalHandler.Player_PlacedBlock: " + ex );
            }
        }