PortalSystem
1 / 8
PortalSystem
Fast travel that stays balanced for any Rust server.
PortalSystem adds placeable, name-linked portals that teleport players between a matching pair - while giving you full admin control over cooldowns, limits, costs, and sharing.
And yes: Map/Monument Portals are included too, so you can create fixed portals for hubs, events, monuments, arenas, and custom locations - perfect for building a real server travel network.
Perfect for: PvE, RPG/RP, Hub servers, Vanilla+, and PvP servers that want fast travel without abuse.
✨ Features
- Portal Pair System (name linking): Portals link by name - only 2 portals can share the same name (A ↔ B). Use one to teleport to the other.
- Player Portals (placeable item): Portals are placed from an item (configurable name + skin).
- Includes anti-stack to prevent stacking/abuse.
- Map / Monument Portals: Admins can place fixed portals on monuments / locations using /portal commands (great for hubs & travel routes).
- Portal UI Menu: Clean UI to manage portal settings in-game (distance-limited to prevent remote abuse).
- Sharing Modes: Set portals as Everyone / Only Me / My Team.
- Optional clan logic (treat clanmates/allies as team) if enabled.
- Access Mode: Set a portal to Entry / Exit / Both.
- Teleport Cooldowns: Global cooldown + VIP overrides (permission → cooldown seconds).
- Portal Limits: Default portal limit per player + optional permission limits (portalsystem.limit.X).
- Entry Costs (optional): Charge players to use portals via:
- Items
- Economics
- ServerRewards
- Pickup System: Pickup with hammer right-click hold (configurable) with optional durability/HP behavior.
- Portal Visual Options: Optional name text above portals + optional map marker support + optional placement indicator.
- Loot Integration (optional): Add portal items to loot containers with configurable chances.
🗺️ Map Portals (Custom Maps)
PortalSystem supports map-placed portals for custom maps, hubs, monuments, arenas, and event areas.
How to use
- Enable it in config:
[Custom Maps] Enable map-placed portals from prefabs = true- Place prefab
"Halloweenportalexit"on your map and set its Name to:portalsystem.<portal name>
[Custom Maps] Prefab name prefix (e.g. portalsystem.) - default: portalsystem.)- 2 portals with the same name will link (A ↔ B).
Important:
Make sure you don’t break the prefab, and don’t add these portals as part of other prefabs.
⌨️ Commands
Player
/buyportal→ Buy a portal (if enabled; Economics/ServerRewards)./giveportal [amount]→ Give yourself portal items./giveportal <player> [amount]→ Give portal items to another player.
giveportal <player> [amount].)Admin
/spawnportal→ Spawns a portal at your look position and opens its UI./portal add <name>→ Add a Map/Monument Portal where you’re looking./portal remove→ Remove the portal you’re looking at (monument)./portal reset→ Remove all portals on the current monument./portal edit→ Edit the portal you’re looking at./portal list→ List monument portals on the current monument./portal list all→ List all monument portals (grouped by monument) in console.
⚙️ Example Configuration
| 1 | { |
| 2 | "Plugin Settings": { |
| 3 | "[Chat] Prefix text (shown before messages)": "[PortalSystem]", |
| 4 | "[Chat] Prefix color": "#00FF00", |
| 5 | "[Chat] Send notifications in chat": true, |
| 6 | "[GameTip] Show notifications as GameTips": true, |
| 7 | "[GameTip] Display time (seconds)": 10.0 |
| 8 | }, |
| 9 | "Portal Settings": { |
| 10 | "[Teleport] Cooldown between teleports (seconds)": 10.0, |
| 11 | "[Teleport] VIP cooldown overrides (permission -> seconds)": { |
| 12 | "portalsystem.vip1": 5.0, |
| 13 | "portalsystem.vip2": 2.0 |
| 14 | }, |
| 15 | "[Item] Portal item skin ID": 3616898784, |
| 16 | "[Placement] Default doorway snap-down amount (meters)": 0.45, |
| 17 | "[Placement] Default vertical lift when not in doorway (meters)": 0.2, |
| 18 | "[Placement] Per-skin placement offsets (key -> offsets)": { |
| 19 | "portal": { |
| 20 | "[Placement] Doorway snap-down amount (meters)": 0.45, |
| 21 | "[Placement] Vertical lift when not in doorway (meters)": 0.0 |
| 22 | }, |
| 23 | "normal": { |
| 24 | "[Placement] Doorway snap-down amount (meters)": 0.1, |
| 25 | "[Placement] Vertical lift when not in doorway (meters)": 0.0 |
| 26 | }, |
| 27 | "gingerbread": { |
| 28 | "[Placement] Doorway snap-down amount (meters)": 0.1, |
| 29 | "[Placement] Vertical lift when not in doorway (meters)": 0.0 |
| 30 | } |
| 31 | }, |
| 32 | "[Teleport] Move player forward from portal exit (meters)": 1.0, |
| 33 | "[Teleport] Safe-check radius for obstructions (meters)": 0.5, |
| 34 | "[Teleport] Max upward steps to find safe spot": 6, |
| 35 | "[Teleport] Upward step size when searching safe spot (meters)": 0.6, |
| 36 | "[Teleport] Block arrivals if under building foundations": true, |
| 37 | "[Teleport] Depth to check for foundations below exit (meters)": 2.0, |
| 38 | "[UI] Max distance to open portal menu (meters)": 3.0, |
| 39 | "[Building] Require TC auth to place portals": true, |
| 40 | "[Building] Require TC auth to pick up portals": true, |
| 41 | "[Building] Require TC auth to configure portals": true, |
| 42 | "[Pickup] Allow pickup with hammer (hold right-click)": true, |
| 43 | "[Pickup] Right-click hold time for pickup (seconds)": 0.0, |
| 44 | "[Limits] Default portal limit per player": 2, |
| 45 | "[Limits] Extra portal limits from permissions": [ |
| 46 | 4, |
| 47 | 6, |
| 48 | 10 |
| 49 | ], |
| 50 | "[Item] Base portal item name (shown in inventory)": "Portal", |
| 51 | "[Entry Cost] Charge any price to use portals": true, |
| 52 | "[Entry Cost] Item cost to enter": { |
| 53 | "ShortName": "scrap", |
| 54 | "Amount": 0, |
| 55 | "SkinID": 0 |
| 56 | }, |
| 57 | "[Entry Cost] Permission that bypasses all entry costs": "portalsystem.freeuse", |
| 58 | "[Entry Cost] Use Economics balance per teleport": false, |
| 59 | "[Entry Cost] Economics cost per teleport": 50.0, |
| 60 | "[Entry Cost] Use ServerRewards RP per teleport": false, |
| 61 | "[Entry Cost] ServerRewards RP cost per teleport": 50, |
| 62 | "[Damage] Portals can be damaged and destroyed": false, |
| 63 | "[Damage] Portal maximum HP": 250, |
| 64 | "[Damage] HP loss on pickup (0-100 %, 0 = no loss)": 0.0, |
| 65 | "[Damage] Bullet damage (projectile shortname -> HP)": { |
| 66 | "riflebullet_explosive": 4, |
| 67 | "riflebullet": 0, |
| 68 | "pistolbullet": 0 |
| 69 | }, |
| 70 | "[Damage] Explosive damage (prefab shortname -> HP)": { |
| 71 | "explosive.timed.deployed": 250, |
| 72 | "explosive.satchel.deployed": 70, |
| 73 | "rocket_basic": 220, |
| 74 | "40mm_grenade_he": 28 |
| 75 | }, |
| 76 | "[Repair] Allow repairing portals with hammer hits": true, |
| 77 | "[Repair] Item shortname used as repair cost": "metal.fragments", |
| 78 | "[Repair] Amount of repair item used per hit": 25, |
| 79 | "[Repair] HP restored per hammer hit": 25, |
| 80 | "[Repair] Require TC auth to repair portals": true, |
| 81 | "[Repair] Play repair effect when repairing": true, |
| 82 | "[Repair] Lock repairs after taking damage (seconds)": 30.0, |
| 83 | "[Repair][NoEscape] Block repair when combat blocked": true, |
| 84 | "[Repair][NoEscape] Block repair when raid blocked": true, |
| 85 | "[Buy] Enable /buyportal chat command": false, |
| 86 | "[Buy] Require permission 'portalsystem.buy'": true, |
| 87 | "[Buy] Use Economics balance": true, |
| 88 | "[Buy] Economics price per portal": 250.0, |
| 89 | "[Buy] Use ServerRewards RP": false, |
| 90 | "[Buy] ServerRewards price per portal": 250, |
| 91 | "[Custom Maps] Enable map-placed portals from prefabs": true, |
| 92 | "[Custom Maps] Prefab name prefix (e.g. portalsystem.)": "portalsystem.", |
| 93 | "[Wipe] Remove monument portals on map wipe": false, |
| 94 | "[Name Tag] Show portal name above portal": true, |
| 95 | "[Name Tag] View distance for name text (meters)": 5.0, |
| 96 | "[Name Tag] Refresh interval for name text (seconds)": 0.1, |
| 97 | "[Name Tag] Height of name text above portal (meters)": 3.0, |
| 98 | "[Name Tag] Font size of name text": 40.0, |
| 99 | "[Name Tag] Color of name text (hex)": "#0000ff", |
| 100 | "[Placement] Show arrow indicator after placing portal": true, |
| 101 | "[Placement] Arrow indicator duration (seconds)": 5.0, |
| 102 | "[Placement] Arrow indicator color (hex)": "#33CC33", |
| 103 | "[Placement] Arrow indicator length (meters)": 1.5, |
| 104 | "[NoEscape] Block portal use when combat blocked": false, |
| 105 | "[NoEscape] Block portal use when raid blocked": false, |
| 106 | "[Clans] Treat clanmates as team for portal sharing": true, |
| 107 | "[Clans] Treat clan allies as team for portal sharing": false, |
| 108 | "[Blacklist] Block normal portals if carrying these items": false, |
| 109 | "[Blacklist] Block monument portals if carrying these items": false, |
| 110 | "[Blacklist] Item shortnames that block portal use": [ |
| 111 | "wood", |
| 112 | "metal.fragments" |
| 113 | ], |
| 114 | "[Loot] Portal item drop settings for containers": [ |
| 115 | { |
| 116 | "Enabled": true, |
| 117 | "Prefab contains this string": "assets/bundled/prefabs/radtown/crate_normal.prefab", |
| 118 | "Chance (0-100) to add a portal item": 8, |
| 119 | "Minimum portals to add": 1, |
| 120 | "Maximum portals to add": 2 |
| 121 | }, |
| 122 | { |
| 123 | "Enabled": true, |
| 124 | "Prefab contains this string": "assets/prefabs/npc/patrolhelicopter/heli_crate.prefab", |
| 125 | "Chance (0-100) to add a portal item": 10, |
| 126 | "Minimum portals to add": 1, |
| 127 | "Maximum portals to add": 2 |
| 128 | }, |
| 129 | { |
| 130 | "Enabled": true, |
| 131 | "Prefab contains this string": "assets/bundled/prefabs/radtown/crate_elite.prefab", |
| 132 | "Chance (0-100) to add a portal item": 5, |
| 133 | "Minimum portals to add": 1, |
| 134 | "Maximum portals to add": 2 |
| 135 | }, |
| 136 | { |
| 137 | "Enabled": true, |
| 138 | "Prefab contains this string": "assets/prefabs/npc/m2bradley/bradley_crate.prefab", |
| 139 | "Chance (0-100) to add a portal item": 10, |
| 140 | "Minimum portals to add": 1, |
| 141 | "Maximum portals to add": 2 |
| 142 | } |
| 143 | ] |
| 144 | }, |
| 145 | "UI Settings": { |
| 146 | "[UI] Use blur material behind main window": true, |
| 147 | "[UI] Blur material path": "assets/content/ui/uibackgroundblur.mat", |
| 148 | "[UI] Window background color (hex)": "#3C3C3C", |
| 149 | "[UI] Window background transparency (0-100)": 77, |
| 150 | "[UI] Divider/line color (hex)": "#D9D9D9", |
| 151 | "[UI] Header text color (hex)": "#FFFFFF", |
| 152 | "[UI] Version text color (hex)": "#FFFFFF", |
| 153 | "[Buttons] Close button background (hex)": "#892D2D", |
| 154 | "[Buttons] Close button text color (hex)": "#FF7E7E", |
| 155 | "[Buttons] Remove button background (hex)": "#892D2D", |
| 156 | "[Buttons] Remove button text color (hex)": "#FF7E7E", |
| 157 | "[Buttons] Confirm button background (hex)": "#3D4B27", |
| 158 | "[Buttons] Confirm button text color (hex)": "#A6CD63", |
| 159 | "[Text] Main label text color (hex)": "#FFFFFF", |
| 160 | "[Text] Options / toggle label text color (hex)": "#FFFFFF", |
| 161 | "[Text] Note / hint text color (hex)": "#FFFFFF", |
| 162 | "[Input] Text box background color (hex)": "#3C3C3C", |
| 163 | "[Input] Text box text color (hex)": "#FFFFFF", |
| 164 | "[Toggles] ON background color (hex)": "#3D4B27", |
| 165 | "[Toggles] ON text color (hex)": "#A6CD63", |
| 166 | "[Toggles] OFF background color (hex)": "#892D2D", |
| 167 | "[Toggles] OFF text color (hex)": "#FF7E7E", |
| 168 | "[Share] Active share mode background (hex)": "#305A80", |
| 169 | "[Share] Active share mode text color (hex)": "#599FC6", |
| 170 | "[Share] Inactive share mode background (hex)": "#3C3C3C", |
| 171 | "[Share] Inactive share mode text color (hex)": "#FFFFFF", |
| 172 | "[UI] Footer text color (hex)": "#FFFFFF", |
| 173 | "[Insufficient] Main popup background color (hex)": "#24201A", |
| 174 | "[Insufficient] Main popup background transparency (0-100)": 95, |
| 175 | "[Insufficient] Header bar background color (hex)": "#893B2D", |
| 176 | "[Insufficient] Amount row background color (hex)": "#24201A", |
| 177 | "[Insufficient] Amount row background transparency (0-100)": 38, |
| 178 | "[Insufficient] Border color (hex)": "#D9D9D9", |
| 179 | "[Insufficient] Border transparency (0-100)": 0, |
| 180 | "[Insufficient] Text color (hex)": "#E4DAD1" |
| 181 | }, |
| 182 | "Config Version": { |
| 183 | "Major": 1, |
| 184 | "Minor": 0, |
| 185 | "Patch": 0 |
| 186 | } |
| 187 | } |
🔐 Permissions
portalsystem.use→ Use portals (teleport)portalsystem.place→ Place portalsportalsystem.give→ Use /giveportalportalsystem.spawn→ Use /spawnportalportalsystem.admin→ Access /portal map/monument portal managementportalsystem.buy→ Required for /buyportal (when enabled)portalsystem.free→ Free /buyportal purchase (bypass buy cost)portalsystem.freeuse→ Bypass entry cost when using portals (configurable)portalsystem.limit.X→ Extra portal limits via permission (example: portalsystem.limit.6)- VIP cooldown perms → whatever you define in the VIP cooldown override list
🧩 API
Item API_CreatePortalItem() // returns a ready-to-use portal item
BaseEntity API_SpawnPortal(Vector3 position, Quaternion rotation, string name) // spawns a portal entity at position/rotation and registers it (spawn portal)
💡 Why Choose PortalSystem?
Because fast travel should be useful for players and controllable for admins.
PortalSystem gives you a clean paired portal system, plus Map/Monument Portals for hubs and events all while keeping things fair with cooldowns, limits, costs, and sharing rules.
PortalSystem.json
{
"Plugin Settings": {
"[Chat] Prefix text (shown before messages)": "[PortalSystem]",
"[Chat] Prefix color": "#00FF00",
"[Chat] Send notifications in chat": true,
"[GameTip] Show notifications as GameTips": true,
"[GameTip] Display time (seconds)": 10.0
},
"Portal Settings": {
"[Teleport] Cooldown between teleports (seconds)": 10.0,
"[Teleport] VIP cooldown overrides (permission -> seconds)": {
"portalsystem.vip1": 5.0,
"portalsystem.vip2": 2.0
},
"[Item] Portal item skin ID": 3616898784,
"[Placement] Default doorway snap-down amount (meters)": 0.45,
"[Placement] Default vertical lift when not in doorway (meters)": 0.2,
"[Placement] Per-skin placement offsets (key -> offsets)": {
"portal": {
"[Placement] Doorway snap-down amount (meters)": 0.45,
"[Placement] Vertical lift when not in doorway (meters)": 0.0
},
"normal": {
"[Placement] Doorway snap-down amount (meters)": 0.1,
"[Placement] Vertical lift when not in doorway (meters)": 0.0
},
"gingerbread": {
"[Placement] Doorway snap-down amount (meters)": 0.1,
"[Placement] Vertical lift when not in doorway (meters)": 0.0
}
},
"[Teleport] Move player forward from portal exit (meters)": 1.0,
"[Teleport] Safe-check radius for obstructions (meters)": 0.5,
"[Teleport] Max upward steps to find safe spot": 6,
"[Teleport] Upward step size when searching safe spot (meters)": 0.6,
"[Teleport] Block arrivals if under building foundations": true,
"[Teleport] Depth to check for foundations below exit (meters)": 2.0,
"[UI] Max distance to open portal menu (meters)": 3.0,
"[Building] Require TC auth to place portals": true,
"[Building] Require TC auth to pick up portals": true,
"[Building] Require TC auth to configure portals": true,
"[Pickup] Allow pickup with hammer (hold right-click)": true,
"[Pickup] Right-click hold time for pickup (seconds)": 0.0,
"[Limits] Default portal limit per player": 2,
"[Limits] Extra portal limits from permissions": [
4,
6,
10
],
"[Item] Base portal item name (shown in inventory)": "Portal",
"[Entry Cost] Charge any price to use portals": true,
"[Entry Cost] Item cost to enter": {
"ShortName": "scrap",
"Amount": 0,
"SkinID": 0
},
"[Entry Cost] Permission that bypasses all entry costs": "portalsystem.freeuse",
"[Entry Cost] Use Economics balance per teleport": false,
"[Entry Cost] Economics cost per teleport": 50.0,
"[Entry Cost] Use ServerRewards RP per teleport": false,
"[Entry Cost] ServerRewards RP cost per teleport": 50,
"[Damage] Portals can be damaged and destroyed": false,
"[Damage] Portal maximum HP": 250,
"[Damage] HP loss on pickup (0-100 %, 0 = no loss)": 0.0,
"[Damage] Bullet damage (projectile shortname -> HP)": {
"riflebullet_explosive": 4,
"riflebullet": 0,
"pistolbullet": 0
},
"[Damage] Explosive damage (prefab shortname -> HP)": {
"explosive.timed.deployed": 250,
"explosive.satchel.deployed": 70,
"rocket_basic": 220,
"40mm_grenade_he": 28
},
"[Repair] Allow repairing portals with hammer hits": true,
"[Repair] Item shortname used as repair cost": "metal.fragments",
"[Repair] Amount of repair item used per hit": 25,
"[Repair] HP restored per hammer hit": 25,
"[Repair] Require TC auth to repair portals": true,
"[Repair] Play repair effect when repairing": true,
"[Repair] Lock repairs after taking damage (seconds)": 30.0,
"[Repair][NoEscape] Block repair when combat blocked": true,
"[Repair][NoEscape] Block repair when raid blocked": true,
"[Buy] Enable /buyportal chat command": false,
"[Buy] Require permission 'portalsystem.buy'": true,
"[Buy] Use Economics balance": true,
"[Buy] Economics price per portal": 250.0,
"[Buy] Use ServerRewards RP": false,
"[Buy] ServerRewards price per portal": 250,
"[Custom Maps] Enable map-placed portals from prefabs": true,
"[Custom Maps] Prefab name prefix (e.g. portalsystem.)": "portalsystem.",
"[Wipe] Remove monument portals on map wipe": false,
"[Wipe] Monument Portals Permanent": false,
"[Name Tag] Show portal name above portal": true,
"[Name Tag] View distance for name text (meters)": 5.0,
"[Name Tag] Refresh interval for name text (seconds)": 0.1,
"[Name Tag] Height of name text above portal (meters)": 3.0,
"[Name Tag] Font size of name text": 40.0,
"[Name Tag] Color of name text (hex)": "#0000ff",
"[Placement] Show arrow indicator after placing portal": true,
"[Placement] Arrow indicator duration (seconds)": 5.0,
"[Placement] Arrow indicator color (hex)": "#33CC33",
"[Placement] Arrow indicator length (meters)": 1.5,
"[NoEscape] Block portal use when combat blocked": false,
"[NoEscape] Block portal use when raid blocked": false,
"[Clans] Treat clanmates as team for portal sharing": true,
"[Clans] Treat clan allies as team for portal sharing": false,
"[Blacklist] Block normal portals if carrying these items": false,
"[Blacklist] Block monument portals if carrying these items": false,
"[Blacklist] Item shortnames that block portal use": [
"wood",
"metal.fragments"
],
"[Loot] Portal item drop settings for containers": [
{
"Enabled": true,
"Prefab contains this string": "assets/bundled/prefabs/radtown/crate_normal.prefab",
"Chance (0-100) to add a portal item": 8,
"Minimum portals to add": 1,
"Maximum portals to add": 2
},
{
"Enabled": true,
"Prefab contains this string": "assets/prefabs/npc/patrolhelicopter/heli_crate.prefab",
"Chance (0-100) to add a portal item": 10,
"Minimum portals to add": 1,
"Maximum portals to add": 2
},
{
"Enabled": true,
"Prefab contains this string": "assets/bundled/prefabs/radtown/crate_elite.prefab",
"Chance (0-100) to add a portal item": 5,
"Minimum portals to add": 1,
"Maximum portals to add": 2
},
{
"Enabled": true,
"Prefab contains this string": "assets/prefabs/npc/m2bradley/bradley_crate.prefab",
"Chance (0-100) to add a portal item": 10,
"Minimum portals to add": 1,
"Maximum portals to add": 2
}
]
},
"UI Settings": {
"[UI] Use blur material behind main window": true,
"[UI] Blur material path": "assets/content/ui/uibackgroundblur.mat",
"[UI] Window background color (hex)": "#3C3C3C",
"[UI] Window background transparency (0-100)": 77,
"[UI] Divider/line color (hex)": "#D9D9D9",
"[UI] Header text color (hex)": "#FFFFFF",
"[UI] Version text color (hex)": "#FFFFFF",
"[Buttons] Close button background (hex)": "#892D2D",
"[Buttons] Close button text color (hex)": "#FF7E7E",
"[Buttons] Remove button background (hex)": "#892D2D",
"[Buttons] Remove button text color (hex)": "#FF7E7E",
"[Buttons] Confirm button background (hex)": "#3D4B27",
"[Buttons] Confirm button text color (hex)": "#A6CD63",
"[Text] Main label text color (hex)": "#FFFFFF",
"[Text] Options / toggle label text color (hex)": "#FFFFFF",
"[Text] Note / hint text color (hex)": "#FFFFFF",
"[Input] Text box background color (hex)": "#3C3C3C",
"[Input] Text box text color (hex)": "#FFFFFF",
"[Toggles] ON background color (hex)": "#3D4B27",
"[Toggles] ON text color (hex)": "#A6CD63",
"[Toggles] OFF background color (hex)": "#892D2D",
"[Toggles] OFF text color (hex)": "#FF7E7E",
"[Share] Active share mode background (hex)": "#305A80",
"[Share] Active share mode text color (hex)": "#599FC6",
"[Share] Inactive share mode background (hex)": "#3C3C3C",
"[Share] Inactive share mode text color (hex)": "#FFFFFF",
"[UI] Footer text color (hex)": "#FFFFFF",
"[Insufficient] Main popup background color (hex)": "#24201A",
"[Insufficient] Main popup background transparency (0-100)": 95,
"[Insufficient] Header bar background color (hex)": "#893B2D",
"[Insufficient] Amount row background color (hex)": "#24201A",
"[Insufficient] Amount row background transparency (0-100)": 38,
"[Insufficient] Border color (hex)": "#D9D9D9",
"[Insufficient] Border transparency (0-100)": 0,
"[Insufficient] Text color (hex)": "#E4DAD1"
},
"Config Version": {
"Major": 1,
"Minor": 1,
"Patch": 0
}
}

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