From a991959e6cb0a76c811ed01ae3e8888f562553b9 Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Wed, 2 Sep 2026 19:39:42 +0100 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20TeleportToRequest.realm=20=E2=80=94?= =?UTF-8?q?=20a=20teleport=20can=20name=20the=20realm=20its=20parcel=20is?= =?UTF-8?q?=20in?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parcel coordinates only address one realm's grid. A client feature that offers "a place" (a Places listing, a map pin) has a realm and a parcel, and until now had to fire changeRealm and teleportTo separately and guess at their interleaving — the teleport lands on the realm being left. This lets the request carry the realm: the client changes realm (a full reconnect, as for ChangeRealm) and then lands on the parcel. Omitted, nothing changes. Co-Authored-By: Claude Fable 5.1 (cherry picked from commit 4a844e9c452f6731356346464fbc29968e4df90a) --- proto/decentraland/kernel/apis/restricted_actions.proto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/proto/decentraland/kernel/apis/restricted_actions.proto b/proto/decentraland/kernel/apis/restricted_actions.proto index 2a8c839f..a4c64557 100644 --- a/proto/decentraland/kernel/apis/restricted_actions.proto +++ b/proto/decentraland/kernel/apis/restricted_actions.proto @@ -14,6 +14,10 @@ message MovePlayerToRequest { message TeleportToRequest { decentraland.common.Vector2 world_coordinates = 1; + // The realm the parcel belongs to: a world name (`foo.dcl.eth`) or a realm url. When set, the + // client changes realm (as for ChangeRealm — a full reconnect, even to the realm the player is + // in) and lands on the parcel there. Omitted: the parcel is in the player's current realm. + optional string realm = 2; } message TriggerEmoteRequest { From c67abe8e6128960da1323db47c182c32685642ac Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Wed, 2 Sep 2026 20:33:29 +0100 Subject: [PATCH 2/2] feat: TeleportToRequest.world_coordinates optional; deprecate ChangeRealm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A teleport that names a realm and no parcel lands on that realm's default spawn — exactly what ChangeRealm does — so a realm change is now just a TeleportTo. ChangeRealm stays for existing scenes. Co-Authored-By: Claude Fable 5.1 (cherry picked from commit 882d4eeece064ee71b16f49457c610d48f1c3ffb) --- proto/decentraland/kernel/apis/restricted_actions.proto | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/proto/decentraland/kernel/apis/restricted_actions.proto b/proto/decentraland/kernel/apis/restricted_actions.proto index a4c64557..2aeb03f3 100644 --- a/proto/decentraland/kernel/apis/restricted_actions.proto +++ b/proto/decentraland/kernel/apis/restricted_actions.proto @@ -13,10 +13,11 @@ message MovePlayerToRequest { } message TeleportToRequest { - decentraland.common.Vector2 world_coordinates = 1; + // The parcel to land on. Omitted: the realm's default spawn (only meaningful with `realm`). + optional decentraland.common.Vector2 world_coordinates = 1; // The realm the parcel belongs to: a world name (`foo.dcl.eth`) or a realm url. When set, the - // client changes realm (as for ChangeRealm — a full reconnect, even to the realm the player is - // in) and lands on the parcel there. Omitted: the parcel is in the player's current realm. + // client changes realm (a full reconnect, even to the realm the player is in) and lands on the + // parcel there. Omitted: the parcel is in the player's current realm. optional string realm = 2; } @@ -106,6 +107,7 @@ service RestrictedActionsService { // TriggerEmote will trigger an emote in this current user rpc TriggerEmote(TriggerEmoteRequest) returns (TriggerEmoteResponse) {} + // @deprecated, use TeleportTo with `realm` (and no `world_coordinates` for the realm's default spawn) // ChangeRealm prompts the user to change to a specific realm rpc ChangeRealm(ChangeRealmRequest) returns (SuccessResponse) {}