Build portals out of any block, travel in dimension or cross dimension.
  • Java 98.8%
  • Nix 1.2%
Find a file
2026-04-28 21:31:14 -04:00
.sworm feat(portals): add scaled counterpart portal routing 2026-04-27 02:38:25 -04:00
.vscode chore: formatting pass 2026-04-01 19:32:37 -04:00
examples docs: update readme; and datapacks documentation 2026-04-28 17:48:01 -04:00
gradle/wrapper feat(portals): initial alpha of Custom Portals Foxified 2026-04-01 15:04:14 -04:00
public docs: images for README 2026-04-02 18:17:30 -04:00
src/main fix(portals): tighten link matching, port vanilla placement, recover stale links 2026-04-28 17:20:50 -04:00
.agents feat(portals): add datapack/API portal definitions with frame and catalyst selectors 2026-04-09 17:57:57 -04:00
.gitignore chore: update mod metadata, clean up TODO list, and refine gitignore patterns 2026-04-08 22:02:13 -04:00
build.gradle feat(portals): add scaled counterpart portal routing 2026-04-27 02:38:25 -04:00
flake.lock feat: nix environment 2026-04-01 12:22:57 -04:00
flake.nix feat: fix nix run script 2026-04-28 21:31:14 -04:00
gradle.properties chore: bump version to 0.3.0 2026-04-28 17:21:39 -04:00
README.md docs: update readme; and datapacks documentation 2026-04-28 17:48:01 -04:00
settings.gradle feat(config): integrate KwahsCore with config screen, SafeConfig, and sound muting 2026-04-04 14:48:08 -04:00
TODO.md feat(portals): add scaled counterpart portal routing 2026-04-27 02:38:25 -04:00

Custom Portals Foxified

Banner, diorite portal in floating island

Custom Portals lets you build portals out of any block. Matching frames link together and allow easy distant travel. You can create networks of portals all across your world and dimensions.

This mod is a NeoForge re-implementation of Custom Portals (Fabric).

Portals

Build a rectangular-ish frame using any solid block, then right-click the inside with a Portal Catalyst. Create a second frame out of the exact same block, light it with a matching catalyst color, and they link up instantly.

  • Any block works as a frame; stone, leafs, diamond blocks, whatever you want
  • Vertical or horizontal portals work, you can build frames on walls, floors, ceilings, even floating.
  • 16 catalyst colors to organize your portal network
  • Portals link by matching color + frame material
  • Same-dimension and cross-dimension travel (with Gate Rune)
  • Colored particles and portal effects just like vanilla portals
  • Baaaahhh 🐑

Catalysts

Shaped recipe: 4 ender pearls + 4 eyes of ender + 1 dye -> 2 portal catalysts

Catalyst recipe

Catalysts can also be recolored: any catalyst + a dye -> 1 catalyst of the new color (shapeless).

Runes

Place rune blocks on the portal's frame to enhance it. The rune must be mounted on a block that is directly adjacent to a portal block.

Rune Effect Key Ingredients
Haste Instant teleportation (1 tick) feathers, rabbit foot, amethyst shard
Gate Enables cross-dimension linking weeping vines, twisting vines, amethyst shard
Enhancer Increases linking range to 1,000 blocks lapis lazuli, amethyst shard
Strong Enhancer Increases linking range to 10,000 blocks prismarine, enhancer rune
Infinity Unlimited linking range popped chorus fruit, netherite ingot, strong enhancer rune

Without runes, portals link within 100 blocks in the same dimension. Haste on either end of a linked pair grants instant teleportation for both sides.

Recipe Images

Haste Rune Gate Rune Enhance Rune Strong Enhancer Rune Infinite Rune

Linking

Portals link automatically to the nearest compatible unlinked portal (same catalyst color + same frame block). If a portal is destroyed or disabled, its partner becomes unlinked and will search for a new valid match 🥀

This system is intentionally simple and deterministic. In multiplayer or dense same-color networks, relinking may choose a different frame than you expected. That is by design: placement/distance and layout matter, and it enables more creative portal topologies.

Redstone

Redstone behavior is enabled by default: a redstone signal turns off a portal. While powered, the portal unlinks; when power is removed, it automatically re-links using the normal linking rules above.

Because this works per-portal, you can disable one end of a pair and let the freed portal find a different compatible partner if one exists. This supports builds like ABC portal switching, redstone-controlled travel networks, and multiplayer routing setups.

You can disable redstone interaction entirely in config if you prefer.

Datapacks

You can define entirely new custom portals using datapacks. With datapacks, you can:

  • Pick the frame block (single block or a block tag) and catalyst item for a portal
  • Set the portal's color (any of the 16 dye colors)
  • Choose how the catalyst is used (consumed, damaged, or untouched) and how much
  • Use linked-pair linking like the built-in portals, or scaled dimension counterpart linking that auto-generates the other side in a target dimension (like vanilla nether portals, with a configurable coordinate scale)
  • Restrict the built-in 16 colored portals with a frame allowlist/blocklist tag, or by claiming a frame block exclusively for a custom portal

See examples/ for the full datapack reference and ready-to-use example datapacks.

Configuration

Settings are split between two config files and can be edited in-game via the mod config screen (Mod Menu or the Mods button).

Client (custom_portals_foxified-client.toml):

Setting Default Description
muteSounds false Mute portal ambient, trigger, and teleport sounds

Common (custom_portals_foxified-common.toml) server-controlled:

Setting Default Description
maxPortalSize 64 Maximum portal blocks a frame can enclose
minPortalSize 1 Minimum portal blocks a frame must enclose
baseRange 100 Linking range with no enhancer runes
enhancedRange 1,000 Linking range with weak enhancer rune
strongRange 10,000 Linking range with strong enhancer rune
allowCrossDimension true Whether Gate Runes can link across dimensions
redstoneDisables true Redstone signal turns off adjacent portals

Differences from the Original

Why port?

The original mod works with Sinytra Connector, but connector can break mods and adds overhead. More importantly, the original mod uses mixins to rewrite Minecraft's teleportation sequence, which can cause crashes or data loss with mods that attach data to players. It's not the original dev's fault, it's just how modding goes.

This port uses NeoForge's native Portal interface instead. Vanilla handles all player data and dimension hopping. No mixins, no data loss, so hopefully better compatibility.

Beyond compatibility, this port also includes a number of improvements over the original:

Improvements over the original

Performance

  • Removed per-tick block entity polling - the original mod ticks every portal block every game tick to check state. This port is fully event-driven (neighborChanged, link/unlink, rune changes)
  • No block entity at all - portal state lives in world saved data with spatial indexing

Compatibility

  • No mixins - the original mod uses EntityMixin, ServerPlayerMixin, and LocalPlayerMixin to rewrite teleportation. This port uses NeoForge's native Portal interface so vanilla handles all entity data and dimension transitions cleanly

Gameplay

  • Rune removal revalidates links - in the original, removing a gate rune from a cross-dimension pair leaves them linked. This port properly breaks incompatible links when runes are removed
  • Map integration - Portals broadcast their location and link status to compatible map/minimap mods.
  • Datapacks integration

No Private Portals

The original mod's private portals feature is not included. The implementation didn't make practical sense in multiplayer. If you want to travel with a friend, what happens then? If there's real demand for portal access control, I can implement it; but a proper integration would be with something like FTB Teams.

Redstone Modes

Compared to the original mods three redstone modes (off, on, no effect), this port uses one consistent behavior: powered portals are disabled (redstoneDisables = true by default).
This keeps portal state predictable and supports practical routing builds; see Redstone for full behavior details.

Compatibility

  • Requires NeoForge 1.21.1 (21.1.219+)

Credits

Original Custom Portals mod by Palyon (MIT licensed). This is a NeoForge reimplementation of their legendary work.

License

GPL-3.0-or-later