Live
badgyver updated CHRONUSBrad Copp updated Deep Sea OptionsRustFlash updated MyServerGearRazor updated Npc HorsesRazor updated Animal Farm ProDávid Balázs updated SquidBridgeBrad Copp updated Biofuel Generator UpgradesBrad Copp published Biofuel Generator UpgradesBrad Copp updated Water Wheel UpgradesBrad Copp updated Windmill UpgradesBrad Copp updated Solar Panel UpgradesRazor updated Admin TC ManagerRazor updated Animal FarmRazor updated The Supermarket eventRazor updated SoundBoxKap followed @AroxRazor updated Animal Farm ProDávid Balázs updated SquidBridgeaRandumDude updated FillPantersRickySpanish updated Zombie AnimalsSilent_Creations published High TimezRickySpanish updated Escape RoomCrazyRust updated Cargo ConvoyaRandumDude updated FillPantersCrazyRust updated Lighthouse Party EventCrazyRust updated Christmas Outpost EventRazor updated TestGenerator ModifierMayonnaiseScc started Plugin video Badwolf followed @RazoraRandumDude published FillPanters
Browse/Rust/Plugins/GatherRang

GatherRang

Duff★ 0.0 (0)v1.0.3OxideCarbon#farming#resources#weapon#weapons
GatherRang1 / 2
Description

GatherRang V2

Native-Style Ranged Gathering for Rust (High-Pop Optimized)

GatherRang V2 is a full rewrite designed to let players farm trees, ore nodes, and corpses using ranged weapons - while still behaving like native Rust gathering internally.

Instead of faking yields or spawning resources, V2 routes hits through Rust’s ResourceDispenser system using the same mechanics tools rely on (fraction remaining, destroy fraction, finish bonus, hotspot scaling, etc.). This keeps the system stable, consistent, and compatible with Rust’s normal gather behavior.

 

Media:

 

What Players Can Farm:

  • Trees (wood)
  • Ore Nodes (stone / metal / sulfur / HQM)
  • Animals / Corpses (flesh harvesting)
  • Charcoal farming is not part of V2 (and there are no charcoal permissions in the current build).

 

Native-Style Gather Flow:

GatherRang V2 gathers through Rust’s native dispenser calls:

  • ResourceDispenser.GiveResources(...)
  • ResourceDispenser.AssignFinishBonus(...)

 

So the plugin supports:

  • Proper dispenser depletion (fractionRemaining)
  • Correct destroy scaling (destroyFraction)
  • Optional finish bonus (config controlled)
  • Hotspot/spark scaling for nodes
  • X-marker bonus scaling for trees
  • This approach is built for long-term stability and avoids the common “fake gather” problems that desync or inflate yield.

 

Always Hit System (Permission Based):

GatherRang V2 includes two optional VIP-style permissions that force the bonus systems:

 

Always Hit “X” (Trees)

  • Permission: gatherrang.alwayshitx
  • When granted:
  • Ranged hits will always count as hitting the tree X marker
  • The plugin will spawn/maintain marker flow automatically
  • Bonus scaling applies reliably without needing perfect aim
  • Without this permission:
  • Players must hit the X marker normally

 

Always Hit Spark (Nodes)

  • Permission: gatherrang.alwayshitspark
  • When granted:
  • Ranged hits will always count as hitting the node spark
  • Spark multiplier and bonus level sound triggers apply
  • Hotspot logic stays active and consistent
  • Without this permission:
  • Players must aim for the spark like vanilla Rust

 

Permission System:

Core (Required)

  • gatherrang.use

 

Weapon-Type + Target Permissions

Trees:

  • gatherrang.bow.tree
  • gatherrang.pistol.tree
  • gatherrang.shotgun.tree
  • gatherrang.smg.tree
  • gatherrang.rifle.tree

Nodes:

  • gatherrang.bow.node
  • gatherrang.pistol.node
  • gatherrang.shotgun.node
  • gatherrang.smg.node
  • gatherrang.rifle.node

Flesh (corpses/animals):

  • gatherrang.bow.flesh
  • gatherrang.pistol.flesh
  • gatherrang.shotgun.flesh
  • gatherrang.smg.flesh
  • gatherrang.rifle.flesh

Bonus forcing:

  • gatherrang.alwayshitx
  • gatherrang.alwayshitspark

 

Player Toggle System (No Chat Spam)

GatherRang V2 does not send gather messages to chat.

  • Instead it includes a clean player toggle:
  • Command: /gather on or /gather off
  • Uses a toast notification (gametip.showtoast)
  • Player state is saved to a datafile:
  • GatherRang/PlayerToggles

So players can opt in/out without any server-wide spam.

 

Datafile-Based Farming Profiles

Gather behavior is driven by profiles stored in a datafile, not hardcoded values.

Profiles File > GatherRang/FarmProfiles >Profiles define:

  • Tree.gatherDamage
  • Ore.gatherDamage
  • Flesh.gatherDamage
  • Tree.destroyFraction
  • Ore.destroyFraction
  • Flesh.destroyFraction

Default profiles are created automatically if missing, and new defaults are merged in safely over time.

This system makes it easy for server owners to:

  • Add custom profiles
  • Fine-tune balance
  • Create tiered harvesting power (VIP)

 

Per-Weapon Profile Overrides

Each weapon group supports per-weapon overrides through config:

Config key:
"Per-Weapon Inherit Profile Overrides (shortname -> profileName)"

 

Example use cases:

  • Make rifle.ak inherit a stronger profile
  • Give a custom weapon its own harvesting profile
  • Balance specific guns differently without changing the whole weapon group

 

Config Example:

{
  "Enabled": true,
  "Enable Tree Gathering": true,
  "Enable Node Gathering": true,
  "Enable Flesh Gathering (corpses)": true,
  "Native Engine Settings": {
    "Kill Trees On Complete": false,
    "Kill Nodes On Complete": true,
    "Kill Corpses On Complete": false,
    "UseFinishBonus": true
  },
  "Weapon Group Defaults": {
    "Bow": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Pistol": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Shotgun": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "SMG": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Rifle": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    }
  },
  "Weapon Groups": {
    "Bow": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "bow.hunting",
        "bow.compound",
        "crossbow",
        "minicrossbow",
        "legacy bow"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Pistol": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "pistol.revolver",
        "pistol.semiauto",
        "pistol.python",
        "pistol.m92",
        "pistol.nailgun",
        "pistol.semiauto.a.m15",
        "pistol.prototype17"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Shotgun": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "shotgun.pump",
        "shotgun.spas12",
        "shotgun.double",
        "shotgun.waterpipe",
        "blunderbuss",
        "krieg.shotgun",
        "shotgun.m4"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "SMG": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "smg.2",
        "smg.thompson",
        "smg.mp5",
        "t1_smg"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Rifle": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "rifle.ak",
        "rifle.ak.diver",
        "rifle.ak.ice",
        "rifle.ak.jungle",
        "rifle.ak.med",
        "rifle.sks",
        "rifle.lr300",
        "rifle.lr300.space",
        "rifle.bolt",
        "rifle.l96",
        "rifle.m39",
        "rifle.semiauto",
        "lmg.m249",
        "hmlmg",
        "minigun"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    }
  },
  "Debug Enabled": false
}



Profile Datafile Example:
 

{
  "Rock": {
    "Tree.gatherDamage": 10.0,
    "Ore.gatherDamage": 5.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.5,
    "Ore.destroyFraction": 0.5,
    "Flesh.destroyFraction": 0.5
  },
  "BoneClub": {
    "Tree.gatherDamage": 9.0,
    "Ore.gatherDamage": 4.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.4,
    "Ore.destroyFraction": 0.4,
    "Flesh.destroyFraction": 0.5
  },
  "BoneKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "StonePickaxe": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 16.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.15,
    "Flesh.destroyFraction": 0.2
  },
  "StoneHatchet": {
    "Tree.gatherDamage": 20.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.15,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.334
  },
  "SalvagedCleaver": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "VampireStake": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 30.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "BaseballBat": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "Hatchet": {
    "Tree.gatherDamage": 30.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 12.0,
    "Tree.destroyFraction": 0.1,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "Pickaxe": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 30.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.6
  },
  "SalvagedAxe": {
    "Tree.gatherDamage": 50.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 15.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "SalvagedIcepick": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 50.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.2
  },
  "Jackhammer": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 25.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.2
  },
  "Chainsaw": {
    "Tree.gatherDamage": 30.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 2.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.5,
    "Flesh.destroyFraction": 0.25
  },
  "SalvagedHammer": {
    "Tree.gatherDamage": 20.0,
    "Ore.gatherDamage": 20.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.2,
    "Ore.destroyFraction": 0.2,
    "Flesh.destroyFraction": 0.6
  },
  "ButcherKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 18.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "CombatKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 20.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "Longsword": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "SalvagedSword": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "SkinningKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 18.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "Machete": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "KriegChainsword": {
    "Tree.gatherDamage": 30.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 2.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.5,
    "Flesh.destroyFraction": 0.25
  },
  "Mace": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "Generic": {
    "Tree.gatherDamage": 25.0,
    "Ore.gatherDamage": 25.0,
    "Flesh.gatherDamage": 12.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  }
}

 

 

High-Pop Optimized

  • V2 is built for performance:
  • Permission bitmask caching per player
  • Weapon group lookup cache
  • TreeMarkerData prefab cache
  • Proper NetID cleanup in OnEntityKill
  • Uses Subscribe/Unsubscribe to avoid idle overhead when disabled
  • Minimal allocations and safe NextTick usage
  • Designed to run smoothly on high population servers with constant farming activity.

 

 

Plugins by Duff
Discord: https://discord.gg/2KBPH7hXb7

 

Default configuration
GatherRang.json
{
  "Enabled": true,
  "Enable Tree Gathering": true,
  "Enable Node Gathering": true,
  "Enable Flesh Gathering (corpses)": true,
  "Native Engine Settings": {
    "Kill Trees On Complete": false,
    "Kill Nodes On Complete": true,
    "Kill Corpses On Complete": false,
    "UseFinishBonus": true
  },
  "Weapon Group Defaults": {
    "Bow": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Pistol": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Shotgun": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "SMG": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Rifle": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    }
  },
  "Weapon Groups": {
    "Bow": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "bow.hunting",
        "bow.compound",
        "crossbow",
        "minicrossbow",
        "legacy bow"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Pistol": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "pistol.revolver",
        "pistol.semiauto",
        "pistol.python",
        "pistol.m92",
        "pistol.nailgun",
        "pistol.semiauto.a.m15",
        "pistol.prototype17"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Shotgun": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "shotgun.pump",
        "shotgun.spas12",
        "shotgun.double",
        "shotgun.waterpipe",
        "blunderbuss",
        "krieg.shotgun",
        "shotgun.m4"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "SMG": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "smg.2",
        "smg.thompson",
        "smg.mp5",
        "t1_smg"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Rifle": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "rifle.ak",
        "rifle.ak.diver",
        "rifle.ak.ice",
        "rifle.ak.jungle",
        "rifle.ak.med",
        "rifle.sks",
        "rifle.lr300",
        "rifle.lr300.space",
        "rifle.bolt",
        "rifle.l96",
        "rifle.m39",
        "rifle.semiauto",
        "lmg.m249",
        "hmlmg",
        "minigun"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    }
  },
  "Debug Enabled": false
}
Sponsored
Pine Hosting
Pine Hosting

Trusted hosting partner. Affordable game servers with solid support and panels.

Visit site ↗
$14.99$12.74
Views1.3k
Downloads0
Purchases0
Rating★ 0.0
Version1.0.3
Compile check✓ Passed Oct 8, 2026
PlatformRust
CategoryPlugins
CompatibleOxide · Carbon
Size88 KB
PublishedMay 23, 2026
UpdatedJul 25, 2026
✓ Reviewed for safety and integrity