Jump to content

1 Screenshot

  • 23,093
  • 2,787
  • 58.48 kB

About NoDecay

This is the official release of NoDecay.  Any other versions out there are forks or otherwise unrelated.

Uses GridAPI and ZoneManager (for logging and optionally to skip decay) and JPipes (to allow JPipes to handle decay for it's building blocks)

NoDecay nullifies or scales down/up any decay damage applied to any item in game (except of small stashes). Each building tier has a different multiplier, so do all other entities.

The default configuration does NOT affect Twig decay but nullifies all damage on all other items.

As of version 1.0.68 users can enable or disable NoDecay for their owned entities

As of version 1.0.34 you can optionally also check for the presence of a deployed tool cupboard. Set requireCupboard to true. This will check for an attached cupboard for building blocks and a nearby cupboard for entities. For entities, use "cupboardCheckEntity: true" and "cupboardRange: number" to configure how far the entities can be from a cupboard before they will decay. The default is 30 game meters (?), which may or may not be enough for your needs. Adjust as desired.

Note, the default is cupboardCheckEntity: false, which will skip checking for cupboards in range of entities. It will still check for blocks attached to cupboards, which should be more accurate.


NOTE: The long-standing misspelling of Multipliers has been fixed as of 1.0.46.  Older configs should be upgraded automatically.

  "Debug": {
    "outputToRcon": false,
    "outputMundane": false,
    "logPosition": false
  "Global": {
    "blockCupboardResources": false,
    "blockCupboardWood": false,
    "requireCupboard": false,
    "cupboardCheckEntity": false,
    "cupboardRange": 30.0,
    "useCupboardRange": false,
    "usePermission": false,
    "DestroyOnZero": true,
    "disableWarning": true,
    "disableLootWarning": false,
    "protectedDisplayTime": 44000.0,
    "useJPipes": false,
    "honorZoneManagerFlag": false,
    "protectedDays": 0.0,
    "protectVehicleOnLift": true,
    "respondToActivationHooks": false,
    "warningTime": 10.0,
    "overrideZoneManager": [
  "multipliers": {
    "armored": 0.0,
    "baloon": 0.0,
    "barricades": 0.0,
    "bbq": 0.0,
    "boat": 0.0,
    "box": 0.0,
    "campfire": 0.0,
    "deployables": 0.0,
    "entityCupboard": 0.0,
    "furnace": 0.0,
    "highStoneWall": 0.0,
    "highWoodWall": 0.0,
    "horse": 0.0,
    "minicopter": 0.0,
    "scrapcopter": 0.0,
    "sam": 0.0,
    "sedan": 0.0,
    "sheet": 0.0,
    "stone": 0.0,
    "trap": 0.0,
    "twig": 1.0,
    "vehicle": 1.0,
    "watchtower": 0.0,
    "water": 0.0,
    "wood": 0.0
  "Multipliers": null,
  "Version": {
    "Major": 1,
    "Minor": 0,
    "Patch": 81

The default configuration above disables decay for all but twig. For each multiplier, set to 1 for normal decay, 0 for no decay, and somewhere in between for reduced decay.

Set usePermission to true to require the nodecay.use permission to prevent decay. If false, all players are protected by default.

If "blockCupboardResources" is set to true, blocks stone, frags, and hqm from being added to a cupboard.

If "blockCupboardWood" is set to true, blocks wood from being added to a cupboard.

  • Use both of these to prevent all building materials from being added to cupboards. Players will still get the Building Decaying warning but will not waste resources on upkeep since they are not necessary with NoDecay.  You can disable the warning as of 1.0.48 by setting disableWarning true.
  • Use only blockCupboardWood to block wood and therefore upkeep on twig.

Set requireCupboard to true to check for a cupboard to prevent decay.

Set cupboardCheckEntity to also check for entities in range of cupboards (i.e. not just foundations, etc. This should work on doors and high walls, etc.

Set cupboardRange to a desired value for the cupboardCheckEntity range. If too high, may affect other user's stuff. If set too low it may not protect external items if out of range.  Note that this was created primarily to take care of entities that are not building blocks but are part of a building (doors, etc.)  Set "entityCupboardMultiplier" to the desired amount of decay for entities in cupboard range (default 0).

  •   NOTE: As of 1.0.80, this value will also be used as a secondary check for nearby buildings without a tool cupboard.  The block owner will be compared to the authorized players list of TCs in range to prevent incidental use of nearby but unowned cupboards.

Set useCupboardRange to false to ignore the range setting above and simply use the building privilege for the entity.  This is likely more efficient and is the default as of 1.0.65.

Set DestroyOnZero to true to enable destroying entities when health is zero. This is most likely needed due to a bug in the Feb 2020 Rust.

Set disableWarning to true to disable the "Building Decaying" warning.  This will be set to a default of 44000 minutes (730+ hours) based on the value of protectedDisplayTime.  As of December 2022, this should display > 30 days.  Without NoDecay it will show the actual time remaining.  A warning will still be shown when viewing the contents of the TC.  But, as always, the building is protected anyway since that's what NoDecay is for.  Players may need to periodically open their TC to disable the warning again every couple of days.

Set disableLootWarning to true to overlay the orange text in the TC loot table.  This would typically be used in conjunction with disableWarning above to hide any mention of decay on the screen.

Set useJPipes if you have JPipes installed to ensure no decay for JPipes if NoDecay is configured with zero Multiplier for the JPipe building grade.

Set honorZoneManagerFlag if you have ZoneManager installed and wish to honor the NoDecay flag on ZoneManager zones.  This should, at least for NoDecay, skip all decay within a matching zone with that flag set.

Adjust the overrideZoneManager  to override the zone manager flags for categories of entities.  Defaults as shown.  Use the entityinfo.json datafile to find the categories you can use.

Set protectVehicleOnLift true if you want to prevent decay for vehicles on a lift.  This should bypass the vehicleMultiplier.

Set respondToActivationHooks true if you want plugins such as NextGenPVE to be able to enable/disable NoDecay.

If protectedDays is set to any value other than zero, player buildings, etc. will only be protected if the user has been online sometime within that number of days.

Set warningTime to a number greater than the default of 10.0 (ms) to limit the warnings fired off due to time to execute.  If your logs are consistently being filled with messages like the following:

    "(17:04:31) | [NoDecay] NoDecay.OnEntityTakeDamage on Rowboat took 15.04 ms to execute."

A Few Notes About Multipliers, decay.tick, etc.

  For any config file multiplier, you can set to 0 to disable decay for that item, 1 for normal decay, or a higher number for faster decay.  In other words, anything below 1 is slower than standard down to 0 which is no decay.  Anything above 1 increases the rate of decay for that item and, yes, you can set numbers higher than 1.

Decay is implemented by Rust based on the decay.tick value which defaults to 600 (10 minutes).  This specifies how often decay is processed on your server.  decay.scale must also be set to the default of 1.

The warning from Rust about Building Decaying should be blocked at all times.  If a player adds materials to his TC, NoDecay will be bypassed altogether for their building, and normal upkeep costs will apply.  There are server variables available to adjust cost and decay rates, but that is outside of the scope of what NoDecay is intended to do and may also affect its operation.

As of version 1.0.63, the list of entities used for comparison is prepared in advance programmatically and is written to oxide/data/NoDecay/entityinfo.json.  This should include all available entities in the game from month to month.  However, not all may actually be considered by the game for decay during the decay loop.  Adding entities to this list is not recommended and will likely have NO impact.  You can, however, remove entities from this list and reload to skip their consideration.  One example of an item not sent to this loop is the fridge.  In the future, we may attempt to replace the standard decay loop pending performance considerations in order to handle these lost deployables.


  • nodecay.use     -- Required for NoDecay to work for a user, if the usePermission flag is set to true.
  • nodecay.admin -- Required to use the /nodecay commands below


These commands work for any user regardless of permission:

  • `nodecay ?` -- For users to show current global as well as personal status for enable/disable of NoDecay
  • `nodecay off` -- For users to set their status as disabled.  In this case, decay will be standard for this user's owned items
  • `nodecay on` -- For users to set their status as enabled.  In this case, decay will be managed by NoDecay for this user's owned items

These commands only work for users with the nodecay.admin permission:

  • `nodecay log` -- Toggle logging of debug info to oxide log and rcon
    • Set logPosition true in your config for the following:
      • The X, Y, Z and grid position of each entity/block will be logged.  If you have GridAPI, the grid location should be more accurate.
      • If you have ZoneManager, logging will check for any overlapping zones on each entity or building block and log accordingly
  • `nodecay info` -- Display current configuration (must still set manually and reload)
  • `nodecay enable` -- Toggle enable/disable of the plugin.  This can only be switched off/on via chat and the plugin will always default to enabled on reload.
  • `nodecay update` -- Reload the list of entities from the game itself.  This is normally run automatically during the wipe.  It will overwrite the entityinfo.json file.

A couple of hooks have been implemented:

private bool NoDecayGet(ulong playerid=0)
  • Returns global enabled status if playerid == 0
  • Returns player status if playerid > 0
private object NoDecaySet(ulong playerid=0, bool status=true)
  • Sets global status if playerid == 0
  • Sets player status if playerid > 0


  • Deicide666ra and Piarb, the original authors of this plugin
  • Diesel, for helping maintain the plugin

Thanks to Deicide666ra, the original author of this plugin, for his permission to continue his work.

  • Like 4

User Feedback



Total number of downloads.



Total customers served.


Files Sold

Total number of files sold.


Payments Processed

Total payments processed.

  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.