Oxide recently added an OnQuarryToggled method. It's not perfect, but this patch does a sphere check to ensure someone who is authorized is close to the quarry and if not turns the quarry back on:
void OnQuarryToggled(MiningQuarry quarry)
{
if (quarry.IsEngineOn())
return;
var codelock = quarry.GetComponentInChildren<CodeLock>();
if (codelock == null)
return;
var owner = covalence.Players.FindPlayerById(quarry.OwnerID.ToString())?.Name ?? "unknown";
var position = quarry.ServerPosition;
BaseEntity[] results = new BaseEntity[25];
var by = BaseEntity.Query.Server.GetInSphere(position, 0.75f, results,
entity =>
{
BasePlayer player = entity as BasePlayer;
return player != null;
});
var near = "";
var i = 0;
var whitelisted = false;
while (results[i] != null)
{
var player = (BasePlayer)results[i++];
near += (" " + player.displayName);
if (codelock.whitelistPlayers.Contains(player.userID))
{
whitelisted = true;
}
}
Puts("Quarry owned by " + owner + " at " + position + " turned off. Whitelisted player nearby? " + whitelisted + ". Nearby players:" + near);
if (!whitelisted)
{
quarry.EngineSwitch(true);
}
}