You are viewing a potentially older version of this package. View all versions.
Zenox-TeleportEverything-1.2.7 icon

TeleportEverything

Portals carry restricted items, your attached cart, and nearby tamed allies through with you (optionally nearby enemies too) - with a custom 'Vikings don't run' message and full translation support.

Date uploaded 4 days ago
Version 1.2.7
Download link Zenox-TeleportEverything-1.2.7.zip
Downloads 8828
Dependency string Zenox-TeleportEverything-1.2.7

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2350
ValheimModding-YamlDotNet-16.3.1 icon
ValheimModding-YamlDotNet

Shared version 16.3.0 of YamlDotNet from Antoine Aubry and contributors, net47 package for use in Valheim mods. Maintained by the ValheimModding team.

Preferred version: 16.3.1

README

TeleportEverything

Portals carry more than just you: restricted items (ore, ingots, dragon eggs, ...), your attached cart, and nearby tamed allies can all travel through with you - and, if you want the chaos, nearby enemies chasing you too.

Bugs / suggestions: Discord

Features

  • Item transport – vanilla's portal-restricted items (ore, ingots, dragon eggs, ...) can travel through portals with you, optionally with a percentage "toll" taken off each restricted stack.
  • Cart transport – a cart currently attached to (being pulled by) you teleports along too and is automatically re-attached once you arrive.
  • Ally transport – nearby tamed creatures teleport with you. Several modes: only ones currently following you, all tamed nearby, all except custom-named ones, or only custom-named ones. Boars, loxes and wolves can each be excluded individually.
  • Enemy transport (off by default) – nearby hostile creatures actively targeting you get pulled through the portal too, capped at a configurable maximum.

Configuration

Settings live in BepInEx/config/zenox.teleporteverything.cfg, generated on first run.

Section Setting Default Description
General Enabled true Enable/disable the whole mod.
Items TransportRestrictedItems true Allow portal-restricted items through.
Items TransportCheatTierItems true Also bypasses vanilla's tool-tier 1000+ portal block (normally debug/cheat items only, but also seen on at least one legitimate endgame item).
Items TransportFeePercent 0 % of each restricted stack removed as a toll. 0 = free. Never applied on a portal that already allows all items in vanilla (e.g. the Stone Portal).
Items FeeExemptItems (empty) Comma-separated item names exempt from the fee.
Portal ActivationRangeMultiplier 1 Multiplier on how close you need to be to use a portal.
Allies AllyMode FollowingOnly Disabled / FollowingOnly / AllTamedNearby / AllTamedExceptNamed / OnlyNamed.
Allies SearchRadius 10 Meters to search for transportable allies.
Allies TransportBoars / TransportLoxes / TransportWolves true Per-species opt-out.
Allies ShowAllyCountOnHover true Show ally count on the portal's hover text.
Allies AllyMaskMode / AllyTransportMask Disabled / (empty) Extra allow/block list by creature name, on top of AllyMode.
Allies ReattachGraceSeconds 2 Seconds to keep retrying to find a transported ally after the teleport completes, before giving up and logging it as lost.
Carts TransportCartsMode Enabled Disabled / Enabled (any portal/teleporter) / OnlyDungeons (only dungeon rune stones) / PortalsOnly (only player-built portals, never dungeons).
Carts SearchRadius 10 Meters to search for your attached cart.
Carts TaxCartRestrictedItemsPortals / TaxCartRestrictedItemsDungeons true Apply the item transport fee to the cart's cargo, separately for player-built portals vs dungeon rune stones.
Carts BlockCartsWithRestrictedItems false If true, a cart containing any restricted/cheat-tier item is left behind entirely instead of transported - lets you allow normal cart transport while still keeping restricted cargo out of carts specifically.
Carts PreventCartAutoDetach true An attached cart only detaches when you do it yourself (or it tips over) - vanilla otherwise re-checks the attach distance every frame and silently detaches whenever you drift a couple meters away.
Enemies TakeEnemiesWithYou false Drag nearby targeting enemies through the portal too.
Enemies SearchRadius 6 Meters to search for targeting enemies.
Enemies MaxEnemiesTransported 3 Safety cap on how many can be dragged at once.
Enemies SpawnOffset 6 How far ahead of the destination dragged enemies spawn.
Enemies SpawnScatterRadius 3 Random scatter so multiple enemies don't stack.
Enemies EnemiesMaskMode / EnemiesTransportMask Disabled / (empty) Extra allow/block list by creature name for dragged enemies.
Enemies PreventTeleportWhileChased false Block portal use entirely while a hostile creature is actively targeting you ("Vikings don't run").
Portal SoundVolume 1 Portal ambient sound volume multiplier.
Portal MessageMode TopLeft NoMessages / TopLeft / Centered - how transport feature messages are shown.

The exit point is also pushed 3m further forward automatically whenever a cart is attached (not configurable - vanilla's exit point is only sized for a bare player, so the cart would otherwise often clip into nearby walls).

The balance-affecting settings (item/cart/enemy toggles and percentages, ally/enemy masks) are pushed from the server to every connecting client automatically - no separate "force config" toggle needed, matching the pattern already used in Zenox.

Note: the three SearchRadius settings (Allies/Carts/Enemies) are not server-synced - each player's own local config value is what's used, same as in singleplayer. If you're running a server and want a specific radius to apply to everyone, each player needs to set it in their own config, not just the server's.

Multiplayer

Works per-player - each client with the mod installed gets the extended portal behavior for themselves; players without it just use portals normally (subject to vanilla's own restrictions). A dedicated server running the mod pushes its own config values (the gameplay-balance ones) to every connecting client automatically.

Translations

Hover text and transport messages can be translated. Create a file named TeleportEverything.<Language>.yml (e.g. TeleportEverything.German.yml) anywhere under your BepInEx folder - it's picked up automatically and used whenever the game's language matches. Use the exact language name Valheim itself uses in its own language dropdown (German, French, Spanish, ...). English is built into the mod and needs no file.

Copy this as a starting point and translate the text on the right of each : - keep the {placeholder} tokens exactly as they are, they get filled in automatically:

zenox_te_hover_allies: "\n{count} companion(s) nearby would teleport with you"
zenox_te_msg_cart_left_behind: "Cart left behind: contains a restricted item"
zenox_te_msg_cart_reattached: "Cart re-attached"
zenox_te_msg_cart_arrived_detached: "Cart arrived nearby - reattach it by hand"
zenox_te_msg_transport_toll: "Transport toll: {amount} item(s) taken ({percent}%) from {stacks} restricted stack(s)"
zenox_te_msg_enemies_followed: "{count} hostile creature(s) followed you through the portal!"
zenox_te_msg_allies_teleported: "{count} companion(s) teleported with you"
zenox_te_msg_vikings_dont_run: "Vikings don't run! A nearby enemy is stopping you from teleporting"

Note: this only covers in-game hover text and transport messages, not the BepInEx/config/...cfg setting descriptions - those come from a separate system (the Configuration Manager mod's own UI) and can't be translated this way.

Troubleshooting

Translations stopped working / mod fails to load after an update: this mod depends on the ValheimModding-YamlDotNet Thunderstore package (used to parse translation files). If another installed mod also bundles its own copy of YamlDotNet.dll instead of using that same dependency, you can end up with two different versions sitting in your BepInEx/plugins folder at once - which one actually gets loaded isn't guaranteed. If you hit this, try removing any extra/duplicate YamlDotNet.dll you find outside the ValheimModding-YamlDotNet folder, or ask that other mod's author to depend on the official package the same way instead of bundling their own copy.

Credits

Inspired by the long-inactive "TeleportEverything" mod's feature set. This is an independent, from-scratch implementation written against the current Valheim 1.0 API, not a port or copy of that mod's code.

CHANGELOG

Changelog

1.2.9

  • Fixed a cart teleport "explosion" bug (reported via Discord: arriving with an attached cart launched the player/cart several meters sideways or into the sky) - this was the same joint- rotation-mismatch issue already fixed for dungeon rune-stone arrivals, but it could also happen on ordinary player-built portal arrivals. The automatic cart reattach-on-arrival is now skipped on every arrival (not just dungeons) - the cart is still placed safely at your exact landing spot, just left detached; reattach it by hand as usual.

1.2.8

  • Fixed FeeExemptItems never actually matching anything (reported via Discord: a Dragon Egg was still fully removed by the transport fee despite FeeExemptItems = DragonEgg). The check only compared against the item's localization key (e.g. $item_dragonegg), not its plain prefab name
    • the exact name the config description asks for. Now checks both, so entries like DragonEgg work as documented.

1.2.7

  • Fixed ally transport (under AllyMode = AllTamedNearby, AllTamedExceptNamed, or OnlyNamed) sweeping up a tamed creature that was actively following a DIFFERENT nearby player, not the one using the portal (reported via Discord: this got a player's own follower "yoinked" through a portal someone else used, leaving that player's own teleport stuck until they relogged). Only FollowingOnly ever checked whose custody a creature was in - now every mode does, without changing FollowingOnly's own behavior.

1.2.6

  • Documentation only, no code changes: updated the mod description to mention translation support and the custom "Vikings don't run" message; added a README note that the SearchRadius settings (Allies/Carts/Enemies) are NOT server-synced, only your own local config value counts; added a troubleshooting section about duplicate YamlDotNet.dll copies from other mods potentially conflicting with the ValheimModding-YamlDotNet dependency.

1.2.5

  • YamlDotNet (needed for the translation support added in 1.2.2) is no longer bundled inside this mod's own package - it's now a proper Thunderstore dependency on the official ValheimModding-YamlDotNet package, which your mod manager installs automatically. Fixes a potential conflict where a different mod's own bundled YamlDotNet.dll could end up sitting next to ours with a different version, which .NET's assembly probing could pick either of unpredictably. No functional change if you're just using this mod through a mod manager.

1.2.4

  • PreventTeleportWhileChased now shows its own "Vikings don't run!" message when it blocks a portal jump, instead of vanilla's generic "can't teleport this" text (which was misleading here - nothing in your inventory is actually the problem). Localized the same way as the mod's other messages (translatable via a TeleportEverything.<Language>.yml file).

1.2.3

  • Fixed tamed Loxes never qualifying for transport under AllyMode = FollowingOnly, even when right next to you. Vanilla itself never lets you give a Lox a "follow" command in the first place (unlike Wolves/Boars), so the follow-state check the mod used could never be true for one - it wasn't reading anything wrong, the flag genuinely never gets set. Non-commandable creatures like the Lox now qualify under FollowingOnly based on being tamed and nearby instead, without needing to switch the whole mode to AllTamedNearby (which would've also swept up every other tamed creature nearby, not just the Lox).

1.2.2

  • Documentation only: added a "Translations" section to the README explaining how to add a TeleportEverything.<Language>.yml file, and included a ready-to-copy TeleportEverything.English.yml.template file in the package with all translatable keys and their default English text.

1.2.1

  • Fixed tamed allies (e.g. wolves) sometimes disappearing after teleporting with you in multiplayer ("MOB DISAPPEARED" in the log) even though they were correctly recognized as following - the creature's ownership handoff to the new zone didn't always finish propagating before its old zone unloaded, especially with several allies teleporting in the same frame. The mod now retries finding the creature for a short grace period instead of giving up on the first check.
  • Carts now stay outside Sunken Crypts instead of being teleported in - the dungeon interior was too cramped for the physics used to reattach a cart, which could launch you or the cart violently. This only applies to Sunken Crypts specifically; other portal/dungeon transport is unaffected.
  • Cart transport into other dungeons no longer auto-reattaches on arrival - the cart is placed safely nearby instead, and you reattach it by hand. Prevents the same physics launch issue in tighter dungeon spaces.
  • Added optional BlockCartsWithRestrictedItems: prevents teleporting with a cart entirely if it contains restricted items, instead of just taxing/leaving the cart behind.
  • Split cart tax config into TaxCartRestrictedItemsPortals and TaxCartRestrictedItemsDungeons for separate control over portal vs. dungeon entrance cart taxation.
  • Stone Portals no longer take a transport toll on restricted items, matching their vanilla "allow everything" behavior.
  • Added translation support via LocalizationManager: hover text and transport messages can now be overridden by placing a TeleportEverything.<Language>.yml file anywhere under your BepInEx folder (e.g. TeleportEverything.German.yml). English is the built-in default.
  • Fixed log spam from the restricted-item check firing every frame instead of only when relevant.

1.2.0

  • Added TransportCheatTierItems (default true): also bypasses vanilla's tool-tier 1000+ portal block, which turned out to also apply to at least one legitimate Ashlands boss-drop material, not just debug/cheat items as intended. On by default, matching this mod's whole point - set to false to restore vanilla's original behavior for these items specifically.

1.1.9

  • Whenever a teleport is blocked by a restricted or cheat-tier item, the exact item name is now always logged automatically - no config needed. Makes it possible to tell from the log alone which specific item is causing a blocked portal use, even if it's a completely different mod restricting it.

1.1.8

  • Fixed FollowingOnly ally transport unreliably leaving tamed creatures behind in multiplayer even though they were visibly following you - the check read a local, per-client AI field that only the current ZDO owner of that creature ever actually updates, so it could stay stale/null on your own client depending on who owned it. Now reads the creature's synced "follow" ZDO field instead, which is reliable regardless of who currently owns its AI.

1.1.7

  • Fixed a packaging bug: upload_to_thunderstore.py zipped the DLL from bin/Debug/ instead of bin/Release/, so every version since 1.1.3 actually shipped the same stale 1.1.3 binary despite the correct manifest/changelog - reported by a user seeing "wrong version" after updating. No functional code changes beyond what 1.1.4-1.1.6 already described - this is those changes, finally packaged correctly, republished as 1.1.7 since Thunderstore doesn't allow overwriting an existing version.

1.1.6

  • Ally/enemy transport: hardened the ownership handoff for transported creatures - the ZDO ownership claim now also gets pushed to the server/other clients immediately instead of waiting for the next normal sync tick, closing a race window that was more likely the more creatures got teleported together in the same moment (suspected cause of an occasional report of a single transported animal disappearing when several were teleported at once, with no such issue ever reported for exactly one). Added always-on diagnostic logging that names the exact creature, where it was placed, and how long ago if this ever happens again, to confirm or rule this out for good.

1.1.5

  • Fixed the README's config table breaking apart on the Thunderstore/Nexus page (a stray paragraph was inserted in the middle of the table, which cut it off right before the Enemies section - TakeEnemiesWithYou and the rest of the Enemies/Portal settings were still real config options, just missing from the page). No code changes.

1.1.4

  • Fixed dragged-along enemies (TakeEnemiesWithYou) having the same "placed before the dungeon finished generating" issue that allies had in 1.1.2 - they're now precisely re-placed with a real floor check once the teleport (and dungeon generation) is fully done, instead of just once immediately.

1.1.3

  • Fixed allies being left behind on ordinary player-built portal teleports too (not just dungeons): the hover text's ally count was scanned from the portal's own position, but the actual transport scanned from the player's position instead - usually close enough not to matter, but a portal can be activated from several meters away, so an ally within range of one reference point but not the other could be counted in the hover text and then not actually come along. Both now consistently scan from the portal's position.

1.1.2

  • Fixed allies sometimes not actually arriving when teleporting into a dungeon (Troll caves, Sunken Crypts, etc.) via a rune stone, even though the log showed them as transported. Dungeon interiors are generated procedurally right after the teleport, so an ally placed at the raw target position immediately could end up in not-yet-generated space with no ground under it. Allies are now precisely re-placed with a real floor check once the teleport fully completes and the destination is guaranteed ready - the same two-phase approach already used for attached carts.

1.1.1

  • Fixed the transport toll being charged on dungeon rune-stone teleports (Troll caves, Sunken Crypts, etc.) as well, even though no portal was involved - it now only applies to actual player-built portal teleports.
  • Fixed the portal's ambient sound: with the default sound volume it could keep playing no matter how far you were from the portal, and with the volume turned down it would still let a brief blip through as you approached before going silent again. Both were caused by directly overwriting the portal's audio volume on a timer, fighting against the game's own proximity-based fade instead of scaling it - now the game's normal "only audible when close" fade is left untouched and just scaled by the configured volume.

1.1.0

  • Cart transport is no longer beta - fixed vanishing on longer/sloped teleports and now auto-reattaches to the player on arrival. TransportCarts replaced by TransportCartsMode (Disabled/Enabled/OnlyDungeons - the last only allows cart transport via dungeon rune stones).
  • The exit point is now pushed 3m further forward automatically whenever a cart is attached, so it doesn't clip into walls near tight portal placements.
  • Added ally/enemy allow-block lists by creature name (AllyMaskMode/AllyTransportMask, EnemiesMaskMode/EnemiesTransportMask).
  • Added PreventTeleportWhileChased ("Vikings don't run") - optionally blocks portal use while a hostile creature is actively targeting you.
  • Added portal sound volume and configurable transport messages (none/top-left/centered).
  • Balance-affecting settings now sync from a dedicated server to every connecting client automatically.

1.0.0

  • Initial release: portal-restricted item transport (with optional toll), attached cart transport (beta), configurable ally transport modes with per-species opt-out, and optional enemy transport.