Workcart/Train Wagon Option?Solved

Is there a Workcart/Train Wagon option to keep those from decaying?

Not currently. That was originally due to the fact that the plugin was designed (in v1) to detect and reduce decay damage, but workcarts don't actually take decay damage, they just despawn after a while.

Since the plugin now works by replacing the decay timers, it could be updated to prevent workcarts and train wagons from despawning, but I would have to find a solution for compatibility with Monument Addons which also modifies the workcart decay timer to prevent workcarts from despawning near their spawn point (when using MA to place workcart spawn points).

Which features of the plugin do you intend to apply to workcarts? Permissions, multiplier near tool cupboard, multiplier while inside?

Just keeping them from disappearing/decaying.  That's pretty much all that's needed.  Don't really need permissions and would rather them not have to be near a cupboard, regardless of inside or out.

Given that your use case is very simple, and given that I'm not sure what FP is going to do with workcart decay in the coming months, I'll just give you this tiny plugin for your use case. Save it as NoTrainDecay.cs.

namespace Oxide.Plugins
{
    [Info("No Train Decay", "WhiteThunder", "1.0.0")]
    [Description("Prevents Workcarts and Train Wagons from decaying.")]
    internal class NoTrainDecay : CovalencePlugin
    {
        private void OnServerInitialized()
        {
            foreach (var entity in BaseNetworkable.serverEntities)
            {
                var trainCar = entity as TrainCar;
                if (trainCar != null)
                {
                    OnEntitySpawned(trainCar);
                }
            }
        }

        private void OnEntitySpawned(TrainCar trainCar)
        {
            trainCar.CancelInvoke(trainCar.DecayTick);
        }
    }
}

Do the magnet cranes decay?

No, they simply take damage when moving away from their origin. It happens in their FixedUpdate loop, meaning it checks the crane's position every physics frame (physics.steps convar determines how many of these steps happen per second).

Below is the vanilla code for reference.

if (spawnOrigin != Vector3.zero && maxDistanceFromOrigin != 0f)
{
    if (Vector3Ex.Distance2D(base.transform.position, spawnOrigin) > maxDistanceFromOrigin)
    {
        if (Vector3Ex.Distance2D(base.transform.position, lastDamagePos) > 6f)
        {
            if (GetDriver() != null)
            {
                GetDriver().ShowToast(1, ReturnMessage);
            }
            Hurt(MaxHealth() * 0.15f, DamageType.Generic, this, false);
            lastDamagePos = base.transform.position;
            nextSelfHealTime = realtimeSinceStartup + 3600f;
            Effect.server.Run(selfDamageEffect.resourcePath, base.transform.position + Vector3.up * 2f, Vector3.up);
            return;
        }
    }
    else if (base.healthFraction < 1f && realtimeSinceStartup > nextSelfHealTime && base.SecondsSinceAttacked > 600f)
    {
        Heal(1000f);
    }
}
Locked automatically