Skip to content

Fix teleport UnsupportedOperationException on Folia/Canvas#234

Open
WhiteProject1 wants to merge 17 commits intoMaxlego08:developfrom
WhiteProject1:fix/teleport-async
Open

Fix teleport UnsupportedOperationException on Folia/Canvas#234
WhiteProject1 wants to merge 17 commits intoMaxlego08:developfrom
WhiteProject1:fix/teleport-async

Conversation

@WhiteProject1
Copy link
Contributor

Summary

  • Replace direct player.teleport() calls with plugin.getScheduler().teleportAsync() in SpawnModule, CommandTop, and CommandBottom
  • Fixes UnsupportedOperationException: Must use teleportAsync while in region threading on Canvas/Folia servers
  • Add missing cross-server teleport message constants

Test plan

  • Player join with teleportAtSpawnOnJoin enabled
  • First join teleport to first-spawn location
  • /top and /bottom commands

Enhanced debug logging and override logic in TeleportationModule for random teleportation, including better handling of void worlds and location validation. Optimized YamlLoader to support direct loading of Map<String, String> fields from configuration sections.
Added checks to ensure both users are online and have valid player objects before proceeding with teleportation in ZTeleportRequest and ZTeleportHereRequest. This prevents errors and improves stability when handling teleport requests.
Eliminated debug log statements throughout the TeleportationModule to improve performance and reduce console clutter. Debug logging can be re-enabled via configuration if needed.
Replaced several HashMap and HashSet usages with ConcurrentHashMap and thread-safe sets for better concurrency in command, storage, and utility classes. Added null checks and error logging in SanctionModule and VaultItemRepository to prevent potential runtime exceptions. Improved command extraction safety in PlayerListener and enhanced logging in TeleportationModule for chunk loading failures.
Teleportation to spawn on first join now waits for the player to be fully loaded in the chunk loader (Folia) by scheduling the teleport 2 ticks later. This ensures the player is online and avoids potential issues with chunk loading.
Added URL and changed seconds to long in VoteSiteConfiguration. Improved vote site configuration loading and reset scheduling in VoteModule, including safer monthly scheduling and async vote updates with error handling. Fixed typo in PlayerListener (cancelGoldEvent to cancelGodEvent), ensured playtime insertion runs asynchronously, and added online check before scheduling flight on login.
Introduces a comprehensive player trading feature, including trade request, accept, and deny commands, trade events, and a configurable trade GUI. Adds TradeManager, TradeModule, inventory handling, event listeners, and configuration for slots, items, and messages. Updates permissions and messages to support trading functionality.
TradeModule now sets custom model data on item meta if the 'custom-model-data' field is present in the configuration section. This allows for more flexible item customization in trades.
ExpiringCache now supports soft expiration: entries are asynchronously refreshed when soft-expired, but the old value is returned until hard expiration. This improves cache responsiveness and reduces blocking on cache misses.
Introduces a SimpleCache for item retrieval to improve performance when no replacements are needed. Refactors item meta handling by separating raw item loading and meta updates, and adds support for custom model data in item configuration.
Introduces cross-server teleportation via Redis and BungeeCord/Velocity, including new API interfaces, message classes, and configuration options. Implements Redis-based server for handling cross-server player transfers and teleport requests, with listener for pending teleports. Optimizes several hot-paths for performance and updates configuration files to support new features.
Replace direct player.teleport() calls with plugin.getScheduler().teleportAsync()
in SpawnModule, CommandTop, and CommandBottom to support region threading.
@Maxlego08
Copy link
Owner

Plz on develop branch

@WhiteProject1 WhiteProject1 changed the base branch from main to develop March 13, 2026 15:40
@Maxlego08
Copy link
Owner

You need to resolve conflicts plz

- Migrate package imports from fr.maxlego08.menu.zcore to fr.maxlego08.menu.common
- Update Button API: getCustomItemStack(Player) -> getCustomItemStack(Player, boolean, Placeholders)
- Add missing TradeRequest class and TradeManager methods
- Add SimpleCache.clear() and ZModule.onDisable() methods
- Bump version to 1.0.3.5
Add null checks after createHologram() to gracefully handle cases where
the server NMS version is not supported (e.g. 1.21.11 without a matching
CraftHologram implementation).
On Canvas/Folia, teleportAsync during PlayerJoinEvent fires before the
player entity is fully registered in the chunk system. Wrap the call in
runAtEntityLater to defer it by one tick.
Port NMS module to 1.21.11 API with updated ServerEntity constructor
signature and CraftBlockType block lookup replacing ResourceLocation.
@Maxlego08
Copy link
Owner

I’ll let you notify me on Discord when your PR is finished for the merge!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants