private static void FatBlock_OwnershipChanged(MyTerminalBlock block)
        {
            if (block?.CubeGrid?.Physics == null || block.Closed)
            {
                //idfk
                Thread.Sleep(500);
                if (block?.CubeGrid?.Physics == null || block.Closed)
                {
                    return;
                }
            }

            Task.Run(() =>
            {
                if (block.OwnerId != 0)
                {
                    var owner = MySession.Static.Players.GetPlayerById(new MyPlayer.PlayerId(PlayerMap.Instance.GetSteamIdFromPlayerId(block.OwnerId)));
                    if (owner != null && MySession.Static.Players.IdentityIsNpc(block.OwnerId))
                    {
                        if (owner.DisplayName != "Space Pirates")
                        {
                            lock (BlockOwners)
                                BlockOwners[block] = block.OwnerId;
                            return;
                        }
                    }
                }

                lock ( BlockOwners )
                {
                    if (BlockOwners.ContainsKey(block))
                    {
                        MyAPIGateway.Utilities.InvokeOnGameThread(() => block.ChangeBlockOwnerRequest(BlockOwners[block], MyOwnershipShareModeEnum.Faction));
                    }
                    else if (PluginSettings.Instance.PlayerBlockEnforcementChangeOwner)
                    {
                        ChangeOwnershipToNearestPlayer(block);
                        if (block.OwnerId == 0 && block.CubeGrid.BigOwners.Count > 0)
                        {
                            MyAPIGateway.Utilities.InvokeOnGameThread(() => block.ChangeBlockOwnerRequest(block.CubeGrid.BigOwners[0], MyOwnershipShareModeEnum.Faction));
                        }

                        if (block.OwnerId != 0)
                        {
                            BlockOwners[block] = block.OwnerId;
                        }
                    }
                }
            });

            ProcessEnforcement();
        }
        private static void ChangeOwnershipToNearestPlayer(MyTerminalBlock block)
        {
            Wrapper.GameAction(() =>
            {
                double minDist   = 0;
                MyPlayer nearest = null;

                foreach (var player in MySession.Static.Players.GetOnlinePlayers())
                {
                    var dist = Vector3D.DistanceSquared(player.GetPosition(), block.PositionComp.GetPosition());

                    if (nearest == null)
                    {
                        nearest = player;
                        minDist = dist;
                    }
                    else if (dist < minDist)
                    {
                        nearest = player;
                    }
                }

                if (nearest == null)
                {
                    return;
                }
                MyAPIGateway.Utilities.InvokeOnGameThread(() => block.ChangeBlockOwnerRequest(nearest.Identity.IdentityId, MyOwnershipShareModeEnum.Faction));
            });
        }