Join the Game4Freak Discord Get exclusive plugin sneak peeks, talk directly with VisEntities, never miss important updates, and unlock special discount codes!
Building Grades

Building Grades 1.3.2

Upgrade, downgrade, skin, and wallpaper building blocks through chat, hammer, or ui
image (1).jpg
image (2).jpg
image (4).jpg
image (5).jpg
image (6).jpg
image (7).jpg
image (8).jpg
image (9).jpg


Building Grades is an all-in-one plugin for upgrading, downgrading, skinning, and wallpapering building blocks. Players can grade single blocks or entire buildings through chat, a hammer HUD, or a settings panel, and pick their preferred building skin per grade tier and wallpaper per surface, applied automatically on every grade change. Compound walls and gates are also supported, swapping between configurable tiers like wood, adobe, stone, and ice. Also includes optional aura mode that grades blocks passively as players walk through their base.

Features

  • Chat grading - Upgrade/downgrade single blocks or whole buildings via /up, /down, /upall, /downall
  • Hammer HUD - Equip a hammer to get an on-screen grade picker with direction, scope, target grade, and undo buttons
  • Auto-grade on placement - Newly placed blocks upgrade to the chosen tier automatically with an inactivity timer
  • Aura mode - Walk through the base with a hammer and blocks within the radius grade themselves as you pass
  • Resource cost preview - See exactly which resources are needed before confirming a whole-building upgrade
  • Building skins - Set your favorite skin for each grade tier and have it applied automatically to every block you upgrade, downgrade, or auto-grade
  • Container metal coloring - Color palette and randomize option for the Container metal skin
  • Wallpapers - Pick a wallpaper for each surface type (walls, floors, ceilings) and have it applied automatically on every grade change
  • Compound walls and gates - Swap high external walls and gates between configurable tiers like wood, adobe, stone, and ice with a hammer hit
  • Block type filter - Choose which block types are included in bulk operations, like foundations, walls, stairs, or roofs
  • Undo system - Reverse the last grade operation within a configurable time window
  • Cost refunds on downgrade - Get a configurable percentage of resources back whenever you downgrade a block
  • Raid/combat block integration - Optional integration with Better No Escape to block grading during raid or combat
  • Access control - Decide who can grade whose base through TC auth, building ownership, teams, Friends, and Clans
  • DLC ownership checks - Optional Player DLC API integration to gate skins and wallpapers behind DLC ownership
  • Floating settings button - Always-visible on-screen button to open the settings panel without typing
  • Per-player preferences - Skins, wallpapers, hammer direction/scope, block filter, and aura radius persist across sessions

Permissions

Core Permissions:
  • buildinggrades.use -- Required for any plugin usage (chat commands, hammer, settings panel)
  • buildinggrades.bulk -- Required for /upall, /downall, and Hammer Building scope mode
  • buildinggrades.preview -- Required to use the cost preview button in the hammer HUD
  • buildinggrades.undo -- Required for the /undo command and the HUD undo button
  • buildinggrades.nocost -- Skips resource costs on upgrades and skips refund payouts on downgrades
  • buildinggrades.skinbypass -- Bypasses DLC ownership checks for skins and wallpapers
  • buildinggrades.admin -- Full access to all features, bypasses TC auth, cooldowns, attack window, and all gate checks

Grade-Specific Permissions:
Players need permission for each individual grade tier they want to reach. Grant either the specific grade permission or the "all" wildcard.
  • buildinggrades.up.<grade> -- Allows upgrading to a specific grade (e.g., buildinggrades.up.2 for Stone)
  • buildinggrades.down.<grade> -- Allows downgrading to a specific grade (e.g., buildinggrades.down.1 for Wood)
  • buildinggrades.up.all -- Allows upgrading to any grade
  • buildinggrades.down.all -- Allows downgrading to any grade
Grade values: 1 = Wood, 2 = Stone, 3 = Metal, 4 = Armored (HQM).

Section Permissions (VIP Gating):
These permissions are configured under Section Permissions in the config. By default the auto-grade, aura, block filter, skins, and wallpapers sections are open to everyone (blank perm string), but externals is gated behind buildinggrades.vip.externals. Set any section's permission string in the config to lock it behind that permission. See Section Permissions Settings.

Players without a section's required permission see a "Premium feature" overlay on that section in the UI.

Commands

Main Commands

The main chat command defaults to /bg and is configurable (see Chat Command Settings).
  • /bg -- Shows the help screen
  • /bg help -- Shows the help screen
  • /bg up [grade] -- Upgrades the block you're looking at. Omit [grade] to step up one tier
  • /bg down [grade] -- Downgrades the block you're looking at. Omit [grade] to step down one tier
  • /bg upall [grade] -- Upgrades every block in the building you're looking at
  • /bg downall [grade] -- Downgrades every block in the building you're looking at
  • /bg undo -- Reverses the last grade operation within the undo time window
  • /bg hammer [up/down] -- Toggles the hammer tool. Optional argument sets direction
  • /bg settings -- Opens the settings panel
Grade argument accepts: 0/twigs, 1/wood, 2/stone, 3/metal, 4/hqm/toptier/armored.

Shortcut Aliases

These aliases work as standalone chat commands without the /bg prefix. All aliases are configurable.
  • /up, /upgrade -- Same as /bg up
  • /down, /downgrade -- Same as /bg down
  • /upall, /upgradeall -- Same as /bg upall
  • /downall, /downgradeall -- Same as /bg downall
  • /undo -- Same as /bg undo
  • /hammer -- Same as /bg hammer

Console Commands & Keybinds

These console commands are designed to be bound to keys via the F1 console.
  • bg.hammer -- Toggles hammer mode
  • bg.hammerdir -- Toggles hammer direction between Upgrade and Downgrade. Also clears the target grade if one is locked
  • bg.hammermode -- Cycles hammer scope between Single block and whole Building
  • bg.undo -- Triggers the undo
  • bg.off -- Disables auto-grade
  • bg.settings -- Opens/closes the settings panel
  • bg.aura <off/wood/stone/metal/hqm> -- Toggles aura mode at the specified grade
  • bg.aura radius <int> -- Sets the aura radius in meters
Recommended keybinds (paste into F1 console):
Code:
bind mouse2 bg.hammerdir
bind mouse3 bg.hammermode
bind b bg.undo

Configuration

General Settings

JSON:
"General Settings": {
  "Skip Grade On Recently-Damaged Blocks": true,
  "Recently-Damaged Window Seconds": 30.0,
  "Play Upgrade/Downgrade Effects On Grade Change": true,
  "Remember Player Preferences (UI choices, hammer, skins, etc.)": true,
  "Chat Command Cooldown Seconds (0 = disabled)": 0.0
}
  • Skip Grade On Recently-Damaged Blocks -- Refuses to grade blocks that were attacked within the recently-damaged window. Prevents grading during active raids
  • Recently-Damaged Window Seconds -- How long after an attack a block stays "recently damaged"
  • Play Upgrade/Downgrade Effects On Grade Change -- Plays the standard upgrade particle effect on each grade change
  • Remember Player Preferences -- Persists per-player settings to disk so they survive disconnects and server restarts
  • Chat Command Cooldown Seconds -- Global cooldown applied to single-block and bulk chat commands. Admins bypass

Auto-Grade Settings

JSON:
"Auto Grade Settings (auto-upgrade newly placed blocks)": {
  "Enabled (off = feature fully disabled, hidden from UI)": true,
  "Auto-Disable Timer Enabled (off = auto-grade stays on until player turns it off)": true,
  "Default Auto-Disable Duration Seconds": 300,
  "Maximum Allowed Timer Duration Seconds": 1800,
  "Allow Players To Edit Timer In Settings UI": true
}
  • Enabled -- Master switch. When false, the entire auto-grade section is hidden from the UI and the placement hook is unsubscribed
  • Auto-Disable Timer Enabled -- When false, auto-grade stays on indefinitely. When true, it shuts off after the timer expires to stop accidental resource drain
  • Default Auto-Disable Duration Seconds -- Timer used when a player hasn't set their own duration
  • Maximum Allowed Timer Duration Seconds -- Hard cap on the timer duration players can set in the UI
  • Allow Players To Edit Timer In Settings UI -- When false, players see the timer value but can't type a new one

Bulk Operation Settings

JSON:
"Bulk Operation Settings (whole-base upgrade/downgrade jobs)": {
  "Blocks Processed Per Frame (lower = smoother, higher = faster)": 10,
  "Show Progress Messages During Long Operations": true,
  "Progress Message Interval (every N blocks)": 50
}
  • Blocks Processed Per Frame -- How many blocks the coroutine handles before yielding to the next frame. Lower values keep TPS smooth on large bases at the cost of total completion time
  • Show Progress Messages During Long Operations -- Sends "Processing X/Y blocks" chat messages while a bulk job runs
  • Progress Message Interval -- How often progress messages are sent

Hammer Tool Settings

JSON:
"Hammer Tool Settings": {
  "Enabled (off = feature fully disabled, hidden from UI)": true,
  "Auto-Activate When Hammer Equipped": true,
  "Custom Hammer Skin Id (0 = any hammer)": 0,
  "Custom Hammer Display Name (blank = skip name check)": "",
  "Hold Button To Grade (blank = always grade on hit)": "SPRINT"
}
  • Enabled -- Master switch for the hammer feature
  • Auto-Activate When Hammer Equipped -- Automatically turns on hammer mode when a player equips a hammer
  • Custom Hammer Skin Id -- Restricts plugin behavior to hammers with this specific skin ID. Set to 0 to accept any hammer
  • Custom Hammer Display Name -- Restricts plugin behavior to hammers with this exact custom name
  • Hold Button To Grade -- When set, hits only grade while this button is held. Other hits pass through to vanilla repair. Accepts standard Rust button names like SPRINT, DUCK, RELOAD, USE. Set to blank to always grade on every hit

Floating Settings Button

JSON:
"Floating Settings Button": {
  "Enabled (off = button never appears)": true,
  "Hide While Hammer HUD Is Visible": true,
  "Anchor Minimum (0 0 = bottom-left)": "0 0",
  "Anchor Maximum (1 1 = top-right)": "0 0",
  "Offset Minimum Pixels (X Y from anchor)": "28 27",
  "Offset Maximum Pixels (X Y from anchor)": "78 77",
  "Icon Sprite Path": "assets/icons/level_stone.png",
  "Background Color (Hex)": "#000000C7"
}
  • Enabled -- Shows a persistent on-screen button that opens the settings panel
  • Hide While Hammer HUD Is Visible -- Hides the floating button when the hammer HUD is showing to avoid clutter
  • Anchor Minimum / Anchor Maximum -- Standard Rust CUI anchor coordinates. 0 0 = bottom-left of screen, 1 1 = top-right
  • Offset Minimum Pixels / Offset Maximum Pixels -- Pixel offset from the anchor point. The defaults place a 50x50px button near the bottom-left
  • Icon Sprite Path -- Any in-game sprite path.
  • Background Color -- Hex color with optional alpha channel.

Building Skin Settings

JSON:
"Building Skin Settings": {
  "Enabled (off = feature fully disabled, hidden from UI)": true,
  "Available Skins (keyed by grade: 1=Wood, 2=Stone, 3=Metal, 4=TopTier)": {
    "1": [ { "Display Name": "Default", "Skin Id (Steam Workshop ID, 0 = default)": 0, "Icon URL (blank = use Display Name as text label)": "https://..." } ],
    "2": [ ... ],
    "3": [ ... ],
    "4": [ ... ]
  },
  "Apply Player's Skin On Vanilla Upgrade": true,
  "Require Skin Ownership (via PlayerDLCAPI plugin)": true,
  "Container Skin Color Palette (only used when player picks the Container metal skin)": {
    "Default": 0, "Blue": 1, "Green": 2, "Purple": 3, "Dark Brown": 4, ...
  }
}
  • Enabled -- Master switch for the skins section
  • Available Skins-- Dictionary keyed by grade integer (1-4). Each entry is a list of skins available for that grade
    • Display Name -- Label shown in the skin dropdown
    • Skin Id -- Steam Workshop skin ID. 0 means vanilla/default
    • Icon URL -- HTTP(S) URL to a PNG that becomes the dropdown thumbnail. The plugin downloads, center-crops, and caches the image on server start. Leave blank to fall back to a text label
  • Apply Player's Skin On Vanilla Upgrade -- When true, the player's preferred skin is also applied when they upgrade through the vanilla hammer UI (not just plugin commands)
  • Require Skin Ownership -- When true and PlayerDLCAPI is loaded, only skins the player actually owns are selectable. Locked skins display a lock icon
  • Container Skin Color Palette -- Maps display names to Rust's internal color ids (0-16). Only used when the player picks the Container skin (ID 10221) for the Metal grade

Wallpaper Settings

JSON:
"Wallpaper Settings": {
  "Enabled (off = feature fully disabled, hidden from UI)": true,
  "Re-Apply Wallpaper When Grading A Block": true,
  "Show Ceiling Wallpaper On Underside Of Floors": true,
  "Wallpapers Damageable (off = invulnerable, can't be shot off)": true,
  "Play Wallpaper Placement Sound/Effect": true,
  "Require Wallpaper Ownership (via PlayerDLCAPI plugin)": true,
  "Auto-Populate Wallpaper List From Game Items On Load": true,
  "Available Wallpapers (1=Wall, 2=Floor, 3=Ceiling)": {
    "1": [ { "Display Name": "None", "Skin Id (Steam Workshop ID, 0 = default)": 0 }, { "Display Name": "Remove", "Skin Id (Steam Workshop ID, 0 = default)": 1 } ],
    "2": [ ... ],
    "3": [ ... ]
  }
}
  • Enabled -- Master switch for the wallpapers section
  • Re-Apply Wallpaper When Grading A Block -- When a block is graded, the plugin re-runs the wallpaper logic so the player's wallpaper sticks
  • Show Ceiling Wallpaper On Underside Of Floors -- When enabled, floors get both a floor wallpaper (top) and a ceiling wallpaper (underside)
  • Wallpapers Damageable -- When false, applied wallpapers become invulnerable (can't be shot off). When true, vanilla damage behavior applies
  • Play Wallpaper Placement Sound/Effect -- Plays the standard wallpaper placement effect on each application
  • Require Wallpaper Ownership -- When true, players need to own the wallpaper skin (checked via PlayerDLCAPI or their Steam inventory) to use it
  • Auto-Populate Wallpaper List From Game Items On Load -- On plugin load, scans Rust's wallpaper item definitions and adds any missing skins to the dropdown lists. Useful so new wallpapers from updates appear automatically
  • Available Wallpapers -- Dictionary keyed by category (1=Wall, 2=Floor, 3=Ceiling). Skin id 0 is the "None" sentinel (no change), skin id`1` is the "Remove" sentinel (strip existing wallpaper)

External Walls and Gates Settings

JSON:
"External Walls & Gates Settings": {
  "Enabled (off = feature fully disabled, hidden from UI)": true,
  "Allow Hammer Hits To Step Tiers (up or down per direction)": true,
  "Allow Auto-Upgrade On Placement (off = locks the per-player toggle in UI)": false,
  "Wall Tiers (in upgrade order; index 0 = base placement tier)": [
    { "Display Name (shown in UI dropdown)": "Legacy", "Prefab Path": "assets/prefabs/building/wall.external.high.legacy/wall.external.high.legacy.prefab" },
    { "Item Shortname": "wall.external.high", "Display Name (shown in UI dropdown)": "Wood", "Prefab Path": "assets/prefabs/building/wall.external.high.wood/wall.external.high.wood.prefab" },
    { "Display Name (shown in UI dropdown)": "Adobe", "Prefab Path": "assets/prefabs/building/wall.external.high.adobe/wall.external.high.adobe.prefab" },
    { "Display Name (shown in UI dropdown)": "Stone", "Prefab Path": "assets/prefabs/building/wall.external.high.stone/wall.external.high.stone.prefab" },
    { "Display Name (shown in UI dropdown)": "Ice", "Prefab Path": "assets/prefabs/misc/xmas/icewalls/wall.external.high.ice.prefab" }
  ],
  "Gate Tiers (in upgrade order; index 0 = base placement tier)": [ ... ]
}
  • Enabled -- Master switch for the externals section
  • Allow Hammer Hits To Step Tiers -- When true, hitting an external wall or gate with the plugin's hammer mode swaps it for the next/previous tier in the ladder (direction follows the hammer's Upgrade/Downgrade setting)
  • Allow Auto-Upgrade On Placement -- When true, newly placed externals are tier-stepped toward the player's target tier on placement. When false, the per-player toggle is greyed out in the UI
  • Wall Tiers/ Gate Tiers-- Ordered list of tiers. Index `0`is the base tier that gets placed by default
    • Display Name -- Label shown in the UI dropdown
    • Prefab Path -- Full prefab asset path that gets spawned when stepping to this tier
    • Item Shortname -- Optional override for which item's blueprint cost is charged when stepping to this tier. If omitted, the cost is derived from the prefab's shortname

Aura Settings

JSON:
"Aura Settings (passive walk-by grading)": {
  "Enabled (off = feature fully disabled, hidden from UI)": true,
  "Default Aura Radius": 1.0,
  "Maximum Allowed Aura Radius": 30.0,
  "Scan Interval Seconds (how often aura ticks)": 0.5,
  "Blocks Processed Per Scan (caps single-tick cost)": 20,
  "Aura Requires Player Resources (off = free)": true,
  "Sphere Opacity (1-5)": 2
}
  • Enabled -- Master switch for the aura section
  • Default Aura Radius -- Radius used when a player first turns on aura mode
  • Maximum Allowed Aura Radius -- Hard cap on the radius players can set in the UI slider
  • Scan Interval Seconds -- How often the aura tick fires. Lower values feel more responsive but cost more performance
  • Blocks Processed Per Scan -- Caps how many blocks can be processed in a single tick to prevent stalls
  • Aura Requires Player Resources -- When false, aura upgrades are free regardless of buildinggrades.nocost permission
  • Sphere Opacity -- How many overlapping visual spheres are stacked to represent the aura range. More spheres = more opaque

Chat Command Settings

JSON:
"Chat Command Settings": {
  "Main Chat Command (without slash)": "bg",
  "Aliases For \"/up\" Shortcut": [ "up", "upgrade" ],
  "Aliases For \"/down\" Shortcut": [ "down", "downgrade" ],
  "Aliases For \"/upall\" Shortcut": [ "upall", "upgradeall" ],
  "Aliases For \"/downall\" Shortcut": [ "downall", "downgradeall" ],
  "Aliases For \"/undo\" Shortcut": [ "undo" ],
  "Aliases For \"/hammer\" Shortcut": [ "hammer" ],
  "Chat Message Prefix": "[BuildingGrades]: "
}
  • Main Chat Command -- The root chat command (defaults to bg, so players type /bg)
  • Aliases For "/up" Shortcut -- Standalone shortcut commands that act like /bg up. Add or remove to taste
  • Aliases For "/down" Shortcut -- Standalone aliases for /bg down
  • Aliases For "/upall" Shortcut -- Standalone aliases for /bg upall
  • Aliases For "/downall" Shortcut -- Standalone aliases for /bg downall
  • Aliases For "/undo" Shortcut -- Standalone aliases for /bg undo
  • Aliases For "/hammer" Shortcut -- Standalone aliases for /bg hammer
  • Chat Message Prefix -- Prepended to the help screen output

Resource Settings

JSON:
"Resource Settings (cost/refund behavior)": {
  "Refund Resources When Downgrading": true,
  "Downgrade Refund Percentage (0-100)": 50
}
  • Refund Resources When Downgrading -- When true, downgrades refund a portion of the original construction cost
  • Downgrade Refund Percentage -- Percentage of the original cost that gets refunded. 50 refunds half, 100 refunds full cost, 0 disables refunds without touching the toggle above

Undo Settings

JSON:
"Undo Settings (revert recent grade actions)": {
  "Enabled (off = no undo tracking)": true,
  "Undo Time Window Seconds (after this, undo expires)": 60,
  "Maximum Blocks Tracked Per Undo Batch": 500
}
  • Enabled -- When false, no undo records are tracked at all and the undo button is non-functional
  • Undo Time Window Seconds -- After this many seconds from the last operation, undo data expires and can't be applied
  • Maximum Blocks Tracked Per Undo Batch -- Caps memory usage on very large bulk operations. Blocks past the cap can't be undone

Access Control Settings

JSON:
"Access Control Settings (who can grade whose base)": {
  "Authed Players Can Grade (TC auth at the base)": true,
  "Building Owner And Allies Can Grade": true,
  "Allow Owner's Friends (Friends plugin)": true,
  "Allow Owner's Teammates (Rust Team)": true,
  "Allow Owner's Clanmates (Clans plugin)": true
}
  • Authed Players Can Grade -- Players authed on the dominating tool cupboard can grade. This is the most common access path
  • `Building Owner And Allies Can Grade -- The original block owner and their allies (per the toggles below) can grade even without TC auth
  • Allow Owner's Friends -- Allies includes Friends-linked friends of the owner
  • Allow Owner's Teammates -- Allies includes Rust team members of the owner
  • Allow Owner's Clanmates -- Allies includes Clans clanmates of the owner
Admins (buildinggrades.admin) bypass all access checks.

BetterNoEscape Settings

JSON:
"BetterNoEscape Settings (raid/combat block lockout)": {
  "Deny Grade/Skin/Wallpaper Actions While Raid-Blocked": true,
  "Deny Grade/Skin/Wallpaper Actions While Combat-Blocked": true
}
Only applies when Better No Escape is installed. With the plugin missing, both toggles silently do nothing.
  • Deny Grade/Skin/Wallpaper Actions While Raid-Blocked -- Refuses all grade, skin, and wallpaper actions when the player is raid-blocked. The HUD shows a countdown
  • Deny Grade/Skin/Wallpaper Actions While Combat-Blocked -- Same but for combat block

Section Permissions

JSON:
"Section Permissions (lock UI sections behind perms)": {
  "Auto-Grade Permission (e.g. buildinggrades.vip.auto, blank = open to all)": "",
  "Aura Permission (e.g. buildinggrades.vip.aura, blank = open to all)": "",
  "Block Filter Permission (e.g. buildinggrades.vip.filter, blank = open to all)": "",
  "Building Skins Permission (e.g. buildinggrades.vip.skins, blank = open to all)": "",
  "Wallpapers Permission (e.g. buildinggrades.vip.wallpapers, blank = open to all)": "",
  "External Walls Permission (e.g. buildinggrades.vip.externals, blank = open to all)": "buildinggrades.vip.externals"
}
Each section's permission gates access to that section's UI controls and underlying actions. Leave blank to open the section to anyone with buildinggrades.use. Set a non-empty string and the plugin auto-registers the permission and locks the section behind it. Strings without a . are prefixed with buildinggrades. automatically.
  • Auto-Grade Permission -- Locks the auto-grade UI section
  • Aura Permission -- Locks aura mode
  • Block Filter Permission -- Locks the block type filter
  • Building Skins Permission -- Locks all skin selection and the per-grade skin dropdowns
  • Wallpapers Permission -- Locks all wallpaper selection
  • External Walls Permission -- Locks tier stepping on high external walls and gates. Defaults to buildinggrades.vip.externals
Admin permission (buildinggrades.admin) bypasses all section permissions.

Block Type Filter Settings

JSON:
"Block Type Filter Settings": {
  "Block Types (shortname to sprite path)": {
    "foundation": "assets/prefabs/building core/foundation.triangle/foundation.triangle.png",
    "foundation.triangle": "assets/prefabs/building core/foundation.triangle/foundation.triangle.png",
    "floor": "assets/prefabs/building core/floor/floor.png",
    "wall": "assets/prefabs/building core/wall/wall.png",
    "wall.window": "assets/prefabs/building core/wall.window/wall.window.png",
    "stairs.l": "assets/prefabs/building core/stairs.l/stairs_l.png",
    "roof": "assets/prefabs/building core/roof/roof.png"
  }
}
  • Block Types -- Dictionary mapping block prefab shortnames to icon sprite paths used in the block filter dropdown. Adding a new entry exposes that block type for filtering; removing one hides it from the UI

Stored Data

JSON:
{
  "Player Preferences": {
    "76561198000000000": {
      "Auto Upgrade Target Grade": 2,
      "Auto Disable Timer Seconds": 300,
      "Hammer Tool Active": true,
      "Hammer Tool Manually Disabled": false,
      "Hammer Direction Is Upgrade": true,
      "Hammer Scope Index": 0,
      "Wood Grade Skin Id": 0,
      "Stone Grade Skin Id": 10220,
      "Metal Grade Skin Id": 10221,
      "Top Tier Grade Skin Id": 0,
      "Metal Container Color Id": 5,
      "Use Random Metal Color": false,
      "Wall Surface Wallpaper Id": 0,
      "Floor Surface Wallpaper Id": 0,
      "Ceiling Surface Wallpaper Id": 0,
      "Disabled Block Types": [ "stairs.l", "stairs.u" ],
      "Auto Disable Timer Enabled": true,
      "Cursor Free Movement": false,
      "External Wall Target Tier Index": -1,
      "External Gate Target Tier Index": -1,
      "Auto Upgrade Externals On Placement": false
    }
  }
}
Each player's settings are saved under their Steam id, covering their grade choices, hammer setup, skin and wallpaper selections, block filter, and external tier targets. Everything is restored automatically when they reconnect.

Localization

JSON:
{
  "Error.NoPermission": "<color=#E07070>No permission.</color>",
  "Error.NoPermissionUse": "<color=#E07070>No access. Missing: buildinggrades.use</color>",
  "Error.NoResources": "<color=#E07070>Not enough resources.</color>",
  "Error.NotLookingAt": "<color=#E07070>Not looking at a building block.</color>",
  "Error.RaidBlocked": "<color=#E07070>Raid blocked.</color>",
  "Error.CombatBlocked": "<color=#E07070>Combat blocked.</color>",
  "Auto.SetGrade": "Auto-upgrade: {0}. Timer: {1}s.",
  "Auto.Disabled": "Auto-upgrade off.",
  "Auto.DisabledAuto": "Auto-upgrade off (timer expired).",
  "Bulk.StartUpgrade": "Starting upgrade...",
  "Bulk.FinishedUpgrade": "{0} blocks upgraded.",
  "Bulk.Progress": "Processing {0}/{1} blocks",
  "Single.Upgraded": "Upgraded to {0}",
  "Single.Downgraded": "Downgraded to {0}",
  "Undo.Complete": "{0} blocks restored.",
  "Undo.NothingToUndo": "Nothing to undo.",
  "Undo.Expired": "Undo window expired.",
  "Hammer.Enabled": "Hammer tool on ({0}, {1}).",
  "Hammer.Disabled": "Hammer tool off.",
  "Aura.Activated": "Aura on. Target {0}, radius {1}m.",
  "Aura.Deactivated": "Aura off ({0} blocks graded).",
  "Aura.NeedHammer": "Aura needs hammer equipped.",
  "Notify.HammerEnabled": "Hammer tool ON. Hit blocks to change grade.",
  "Notify.SectionLocked": "{0} is a VIP perk on this server. Rank up by playing, or grab VIP from the store to unlock it.",
  "Notify.NoAccessToBuilding": "No access to this building.",
  "Notify.SkinNotOwned": "You don't own this skin.",
  "Notify.WallpapersApplied": "Wallpapers applied to {0}.",
  "Notify.WallpapersStripped": "Wallpapers stripped from {0}.",
  "Notify.ExternalApplied": "Tiered up {0} toward target.",
  "Notify.ExternalNoTarget": "Set a wall or gate target tier first.",
  "Notify.HudNoAuth": "No auth on this base, can't grade it",
  "Notify.HudGradingInProgress": "Grading in progress..."
}

Developer API

API_TryChangeBlockGrade

C#:
bool API_TryChangeBlockGrade(BasePlayer player, BuildingBlock block, int targetGrade)
Attempts to change a block's grade to targetGrade. Respects all access, cost, and refund logic. Returns true on success.

API_TryApplyBlockSkin

C#:
bool API_TryApplyBlockSkin(BasePlayer player, BuildingBlock block, ulong skinId)
Applies a skin to a block, respecting DLC ownership checks and the CanBuildingGradesApplySkin hook. Returns true on success.

API_TryApplyBlockWallpaper

C#:
bool API_TryApplyBlockWallpaper(BasePlayer player, BuildingBlock block, int side, ulong wallpaperId)
Applies a wallpaper to a block surface. side is 0 (soft) or 1 (hard). Skin id0 or 1 strips existing wallpaper. Returns true on success.

API_TryGradeBuilding

C#:
int API_TryGradeBuilding(BasePlayer player, BuildingBlock anchorBlock, int targetGrade, bool isUpgrade)
Grades every block in the building containing anchorBlock toward targetGrade. Returns the number of blocks successfully graded.

API_GetGradeUpgradeCost

C#:
Dictionary<int, int> API_GetGradeUpgradeCost(BuildingBlock block, int targetGrade)
Returns the resource cost to upgrade a block to targetGrade, keyed by item ID. Returns an empty dictionary on invalid input.

Developer Hooks

CanBuildingGradesChangeGrade

C#:
object CanBuildingGradesChangeGrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum fromGrade, BuildingGrade.Enum toGrade)
Called when a grade change is about to happen, after access and resource checks but before the block is modified. Return any non-null value to block the grade change, or null to allow it.

CanBuildingGradesApplySkin

C#:
object CanBuildingGradesApplySkin(BasePlayer player, BuildingBlock block, ulong skinId)
Called when a skin is about to be applied to a block. Return any non-null value to block the skin application, or null to allow it.

CanBuildingGradesApplyWallpaper

C#:
object CanBuildingGradesApplyWallpaper(BasePlayer player, BuildingBlock block, int side, ulong wallpaperId)
Called when a wallpaper is about to be applied to a block surface (side is 0 for soft side, 1 for hard side). Return any non-null value to block the wallpaper application, or null to allow it.

OnBuildingGradesGradeChanged

C#:
void OnBuildingGradesGradeChanged(BasePlayer player, BuildingBlock block, BuildingGrade.Enum fromGrade, BuildingGrade.Enum toGrade)
Called after a block's grade has been changed by the plugin. Notification-only; no return value is used.

OnBuildingGradesBulkCompleted

C#:
void OnBuildingGradesBulkCompleted(BasePlayer player, bool isUpgrade, int successCount, int totalCount)
Called when a bulk grade operation finishes. Notification-only; no return value is used.
Author
VisEntities
License duration
Unlimited
Price
29.99 USD
First release
Last update

Ratings

0.00 star(s) 0 reviews

Also by VisEntities

  • No Harvest Junk
    No Harvest Junk
    Prevents unwanted junk items (grubs, worms, seeds) from being given when harvesting growables
  • Remote Siege Tower
    Remote Siege Tower
    Allows players to remotely control siege towers using RF transmitters
  • Offline Raiding Weakened
    Offline Raiding Weakened
    Lowers the damage inflicted on buildings when owners are offline

Latest updates

  1. 1.3.2

    Patched for the June Rust update.
  2. 1.3.1

    Fixed /upall and /downall changing blocks the wrong way, so /upall only ever upgrades lower-tier...
  3. 1.3.0

    Added bg.hammercyclegrade keybind command that steps the hammer's target grade through Wood...
Back
Top
Chat commands start with a /, while console commands can be entered directly in the F1 console or server console. Use find <keyword> in console to search for available commands related to the plugin. Parameters in < > are required, while [ ] are optional.
This plugin uses Oxide's permission system. Grant or revoke permissions using oxide.grant and oxide.revoke. You can assign them to individual players or groups using their Steam id or group name.
Settings are stored in the config file found under the config/ directory. You can edit this file manually, then reload the plugin to apply your changes.
Persistent data is saved in the data/ directory. This includes things like saved settings, usage stats, or player progress depending on the plugin. Deleting a data file will reset stored progress or customizations.
Language files are located in the lang/ folder. To translate messages, copy the en.json file into your target language folder (e.g. fr, de) and edit the values. Reload the plugin after changes to apply new messages.
This section lists public methods exposed by the plugin for use in other plugins. You can call these via the CallHook method. Ensure the plugin is loaded before calling its API to avoid null reference errors.
These are custom hooks that other plugins can listen for. Simply define a method with the same name and expected parameters in your plugin to handle the event. Hooks are triggered at key moments and are useful for extending or reacting to plugin behavior.
These hooks are injected into the game's code using Harmony. They let the plugin run code at key points in the game's internal logic. You can return values to block or modify behavior. Use with caution — these are powerful and can affect core mechanics.
Cart