Changelog

Last updated Oct 28, 2026

Changelog

Version history for SoapsTeleporter.


1.0.7

Build and packaging release. Owner wiki restructured to the SoapsUniverse docs pattern (Config Reference, intent pages, setup leaves, Troubleshooting, Upgrading).


1.0.6

Reliability and permission/config polish.

Critical / behavior fixes

  • /st shapepreview undo restores world blocks from place (not only preview particle history)
  • Bidirectional rectangular portals: thin-wall detection matches full block depth; move-scan no longer skips non-custom portals
  • Selection marking is outline-only again (no density/interior fill); live portal particles start after create
  • Multi-destination portals work without a paired connectedPortal (routing list alone is enough)
  • /st unlink clears multi-destination routes and uses st.command.unlink
  • Economy payment-timing (before/after) and refund-on-failure are honored for standard + RTP teleports
  • Portal world/player creation limits from config are enforced; creators are stored as ownerUUID
  • Custom-shape portals are included in frame/radius protection
  • RTP safe-location search uses rtp.retry.max-attempts
  • FIXED/RANDOM routing strips name|weight / name|permission suffixes before portal lookup
  • Warmup start no longer treated as a successful teleport (ENTER deferred; EXIT eligibility fixed)
  • Removed duplicate ENTER command execution from PlayerListener (TeleportManager owns teleport pipeline commands)
  • Failed teleports / cancelled warmups allow in-portal retry
  • Global warmup cleared on cleanup and failed post-warmup teleport
  • GUI/chat condition tokens enforced: SNEAK, FLYING, SOLO, SUN, LEVEL, PLAYERS_MIN/MAX, PLAYTIME, WORLD, BIOME, GAMEMODE, ADVANCEMENT
  • RTP portals run full ConditionChecker checks
  • Rename updates linkedDestinations references; connect clears stale destination lists; unlink scrubs peer destination entries
  • PlaceholderAPI %soapsteleporter_portals_nearest_distance% fixed
  • Cross-world block now shows a player message; chat-input cancel returns to the right manage screen
  • One-way portals block use from the one-way portal itself (docs-aligned); arrivals into one-way exits still work
  • Custom-shape destinations land in interior blocks; move supports custom-shape reselection and safe chunk-index rollback
  • GUI/manage delete removes commands/conditions by index (duplicate-safe)
  • SetDestinations validates destination portal names exist
  • RTP async failure resets teleport retry state (no soft-lock)
  • Particle center null-guard; unload-world NPE guard in portal lookup
  • Custom shape blocks reload from YAML map entries as well as Location objects
  • Post-teleport payment failure (payment-timing: after) rolls the player back to origin instead of granting a free teleport
  • Custom-shape entry uses full player AABB against computed interior/opening cells (not feet-only)
  • Custom-shape interior prefers best projected mask + 3D enclosed flood-fill (no AND-of-all-masks / whole-AABB fallback)
  • Custom→custom landing stays in interior; comprehensive search no longer rejects valid interior destinations
  • Same-chunk move throttle skipped when custom-shape portals are present; orientation from frame thickness
  • Chunk index includes every custom frame block's chunk
  • Exit facing DEFAULT auto looks out of the destination portal; relative approach angle when preserve-orientation is true
  • /st setdirection DEFAULT works (aliases AUTO/PLAYER/NONE); horizontal portals no longer block direction setting
  • Floor-pad (laying-down) portals: unified stand-on-pad detection, land on pad, surface particles, no instant bounce-back on arrival
  • GUI polish: pitch/volume via setsound, condition delete-by-index, portal PDC clicks, empty states, DEFAULT/floor-pad labels, /st list opens portal browser, admin Reset, chat-input returns to menu
  • Backend performance: async batched daily-usage I/O; coalesced portals.yml saves without re-read; live portal view (no per-tick ArrayList copy); protection via chunk index; custom-block view without clones; bounds/particle caches until invalidate; slim CacheManager; lazy DebugLogger on hot paths; single-pass render visibility count
  • Creation polish: denser new-portal particles (2× air, min 8) + violet default DUST color; selection density preview; custom frame (purple) vs interior (cyan); clickable wizard actions + /st add cancel
  • Custom oval/circle portals: seal diagonal ring gaps so interior detection works both ways; land just outside vertical destinations so return trips aren’t stuck “processed”
  • Selection: /st set p1|p2 uses the same marking + ready actions as the wand; min portal size default 2; custom create rejects empty openings; cleaner wand/corner messages

Permissions and config

  • Added st.command.removecondition, st.protection.bypass, st.portal.limit.bypass to plugin.yml
  • /st debug accepts st.command.debug / st.debug (not admin-only)
  • Documented missing adaptive density + permission-format keys; removed dead global RTP cooldown section
  • Fallback createDefaultConfig() aligned with shipped config.yml

Cleanup

  • Noisy production DEBUG: logger spam routed through DebugLogger / removed
  • Portal delete cleans linked destination entries that pointed at the removed portal

1.0.5

Messages and help polish release.

Production readiness (2026-06-11)

  • portals.yml merge-save with atomic disk write
  • Per-player YAML shards for portal cooldowns and stats
  • RTP cooldown tracked per portal via PlayerData
  • Thread-safe chunk portal index with copy-on-write rebuild
  • Same-chunk micro-movements skip portal re-checks
  • Warmup cancel on movement; chunk preload settings reload; GUI closed before config reload
  • Quit handler evicts player shards and clears GUI/chat input state
  • Condition and GUI chat prompts migrated to shared SoapsChatInput
  • api-version 1.21.11; Folia not yet supported (folia-supported: false documented)

Messages and help (1.0.5)

  • Added /st help <command> detail mode with clickable help navigation
  • Deterministic help pagination and improved tab completion (pages and command names)
  • Help metadata for shapepreview, setrouting, setdestinations, and addcondition
  • Migrated player-facing strings for shape preview, routing, destinations, GUI chat input, and manage delete flows into messages.yml
  • GUI item labels and lore now read from gui.yml with Java fallbacks
  • Fixed setdirection success message {direction} placeholder
  • Improved cross-world selection errors with world name placeholders
  • Dynamic usage templates consistently include the /st prefix
  • Routing and destination commands aligned with dedicated permissions
  • st.command.wand and st.command.addcondition permission alignment; WandCommand accepts legacy st.command.tool

1.0.4

Shape preview reliability and rendering polish.

  • Complete outer frame generation; polygon presets draw edge outlines
  • Plane-aware 2D vs 3D preview behavior; improved random_rift continuity
  • Safer rotate, mirror, undo, and place workflow; place commits preview to world
  • Batched block placement for performance
  • Configurable default frame material: portals.shape-preview.default-frame-material
  • Wand hints for shape preview after selecting positions
  • Portal creation particle handoff improvements

1.0.3

Shape preview workflow polish.

  • /st shapepreview is preview-first again (non-destructive)
  • Added /st shapepreview place and /st shapepreview place <material> to commit frame blocks only
  • Undo reverts preview state only, not world blocks
  • Fixed square/rectangle generating perimeter frames instead of filled interiors
  • Improved random rift framing on selection bounds
  • Stabilized portal visibility checks for render gating
  • Updated shapepreview permission to st.command.shapepreview

1.0.2

GUI and shape builder reliability.

  • Fixed duplicate portal deletion feedback in GUI confirm flow
  • /st shapepreview builds actual frame structures in-world (OBSIDIAN frame, AIR interior)
  • Shape switching no longer overlaps wand selection markers
  • Improved circle/oval and 3D ellipsoid shell generation
  • Rotate, mirror, and undo update world frame placement to match preview

1.0.1

Major architecture and systems update.

  • Modular TeleporterRuntime service registry and metrics
  • Layered render engine with adaptive quality, culling, and sleep states
  • Shape preview presets, rotate, mirror, undo, and /st shapepreview
  • Condition expression parser with AND, OR, and NOT
  • Multi-destination routing: fixed, random, weighted, permission
  • /st setrouting and /st setdestinations
  • /st debug overlay runtime metrics
  • Portal render, preview, stabilize, and teleport prepare API events

1.0.0

Initial public release.

  • Portal wand creation, connect, and standard two-way teleport
  • Per-portal particles, sounds, costs, conditions, and commands
  • RTP portals, warmup, cooldown, and protection
  • Vault, PlaceholderAPI, WorldGuard, and Lands hooks
  • Interactive management and backup tools

Still stuck? Ask about this page