From c28d5d005866945ae79a80395946e733b867e09a Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 26 May 2025 15:57:38 +0200 Subject: [PATCH 1/2] Revert "Expose get_rpc_config and get_node_rpc_config" This reverts commit 8835f326b1b8ae0727727fec93ddb1e871571f32. --- core/object/script_language.cpp | 2 -- core/object/script_language.h | 2 +- core/object/script_language_extension.h | 2 +- doc/classes/Node.xml | 6 ------ doc/classes/Script.xml | 6 ------ modules/gdscript/gdscript.cpp | 2 +- modules/gdscript/gdscript.h | 2 +- modules/mono/csharp_script.cpp | 2 +- modules/mono/csharp_script.h | 2 +- modules/multiplayer/scene_rpc_interface.cpp | 2 +- scene/main/node.cpp | 3 +-- scene/main/node.h | 4 ++-- 12 files changed, 10 insertions(+), 25 deletions(-) diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp index bf357f6c6e4..4b52b5c1d16 100644 --- a/core/object/script_language.cpp +++ b/core/object/script_language.cpp @@ -172,8 +172,6 @@ void Script::_bind_methods() { ClassDB::bind_method(D_METHOD("is_tool"), &Script::is_tool); ClassDB::bind_method(D_METHOD("is_abstract"), &Script::is_abstract); - ClassDB::bind_method(D_METHOD("get_rpc_config"), &Script::get_rpc_config); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "source_code", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_source_code", "get_source_code"); } diff --git a/core/object/script_language.h b/core/object/script_language.h index e37a5d3e75e..1e02de0f9db 100644 --- a/core/object/script_language.h +++ b/core/object/script_language.h @@ -191,7 +191,7 @@ public: virtual bool is_placeholder_fallback_enabled() const { return false; } - virtual Variant get_rpc_config() const = 0; + virtual const Variant get_rpc_config() const = 0; Script() {} }; diff --git a/core/object/script_language_extension.h b/core/object/script_language_extension.h index 99010149066..23448d3dc3d 100644 --- a/core/object/script_language_extension.h +++ b/core/object/script_language_extension.h @@ -209,7 +209,7 @@ public: GDVIRTUAL0RC_REQUIRED(Variant, _get_rpc_config) - virtual Variant get_rpc_config() const override { + virtual const Variant get_rpc_config() const override { Variant ret; GDVIRTUAL_CALL(_get_rpc_config, ret); return ret; diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 1186bd41823..18281ac0c62 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -538,12 +538,6 @@ [b]Note:[/b] The returned value will be larger than expected if running at a framerate lower than [member Engine.physics_ticks_per_second] / [member Engine.max_physics_steps_per_frame] FPS. This is done to avoid "spiral of death" scenarios where performance would plummet due to an ever-increasing number of physics steps per frame. This behavior affects both [method _process] and [method _physics_process]. As a result, avoid using [code]delta[/code] for time measurements in real-world seconds. Use the [Time] singleton's methods for this purpose instead, such as [method Time.get_ticks_usec]. - - - - Returns a [Dictionary] mapping method names to their RPC configuration defined for this node using [method rpc_config]. - - diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index 80aad9d30d1..45f0bbb8aac 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -58,12 +58,6 @@ Returns the default value of the specified property. - - - - Returns a [Dictionary] mapping method names to their RPC configuration defined by this script. - - diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 188bcf81f9a..8eceb4a0e08 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -922,7 +922,7 @@ void GDScript::get_members(HashSet *p_members) { } } -Variant GDScript::get_rpc_config() const { +const Variant GDScript::get_rpc_config() const { return rpc_config; } diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index 033925150d2..58ea47c5989 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -346,7 +346,7 @@ public: virtual void get_constants(HashMap *p_constants) override; virtual void get_members(HashSet *p_members) override; - virtual Variant get_rpc_config() const override; + virtual const Variant get_rpc_config() const override; void unload_static() const; diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 45a762f0a37..da037005c0e 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -2737,7 +2737,7 @@ int CSharpScript::get_member_line(const StringName &p_member) const { return -1; } -Variant CSharpScript::get_rpc_config() const { +const Variant CSharpScript::get_rpc_config() const { return rpc_config; } diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 0e4b1a313b3..533d78b0bfd 100644 --- a/modules/mono/csharp_script.h +++ b/modules/mono/csharp_script.h @@ -289,7 +289,7 @@ public: int get_member_line(const StringName &p_member) const override; - Variant get_rpc_config() const override; + const Variant get_rpc_config() const override; #ifdef TOOLS_ENABLED bool is_placeholder_fallback_enabled() const override { diff --git a/modules/multiplayer/scene_rpc_interface.cpp b/modules/multiplayer/scene_rpc_interface.cpp index 45ea6b2d72f..e8c07c426b9 100644 --- a/modules/multiplayer/scene_rpc_interface.cpp +++ b/modules/multiplayer/scene_rpc_interface.cpp @@ -105,7 +105,7 @@ const SceneRPCInterface::RPCConfigCache &SceneRPCInterface::_get_node_config(con return rpc_cache[oid]; } RPCConfigCache cache; - _parse_rpc_config(p_node->get_rpc_config(), true, cache); + _parse_rpc_config(p_node->get_node_rpc_config(), true, cache); if (p_node->get_script_instance()) { _parse_rpc_config(p_node->get_script_instance()->get_rpc_config(), false, cache); } diff --git a/scene/main/node.cpp b/scene/main/node.cpp index e069170c814..aeb1598a1b6 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -849,7 +849,7 @@ void Node::rpc_config(const StringName &p_method, const Variant &p_config) { } } -Variant Node::get_rpc_config() const { +const Variant Node::get_node_rpc_config() const { return data.rpc_config; } @@ -3980,7 +3980,6 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("get_multiplayer"), &Node::get_multiplayer); ClassDB::bind_method(D_METHOD("rpc_config", "method", "config"), &Node::rpc_config); - ClassDB::bind_method(D_METHOD("get_rpc_config"), &Node::get_rpc_config); ClassDB::bind_method(D_METHOD("set_editor_description", "editor_description"), &Node::set_editor_description); ClassDB::bind_method(D_METHOD("get_editor_description"), &Node::get_editor_description); diff --git a/scene/main/node.h b/scene/main/node.h index 5a7988b64a2..50176b09dd5 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -210,7 +210,7 @@ private: void *process_group = nullptr; // to avoid cyclic dependency int multiplayer_authority = 1; // Server by default. - Variant rpc_config = Dictionary(); + Variant rpc_config; // Variables used to properly sort the node when processing, ignored otherwise. int process_priority = 0; @@ -786,7 +786,7 @@ public: bool is_multiplayer_authority() const; void rpc_config(const StringName &p_method, const Variant &p_config); // config a local method for RPC - Variant get_rpc_config() const; + const Variant get_node_rpc_config() const; template Error rpc(const StringName &p_method, VarArgs... p_args); From b73ec1fa9b597890d5fd0eb7b25a8eec6a6754ee Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 26 May 2025 22:17:21 +0200 Subject: [PATCH 2/2] Expose get_rpc_config and get_node_rpc_config --- core/object/script_language.cpp | 2 ++ core/object/script_language.h | 4 ++++ doc/classes/Node.xml | 7 +++++++ doc/classes/Script.xml | 6 ++++++ misc/extension_api_validation/4.4-stable.expected | 7 +++++++ scene/main/node.compat.inc | 5 +++++ scene/main/node.cpp | 1 + scene/main/node.h | 5 +++++ 8 files changed, 37 insertions(+) diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp index 4b52b5c1d16..3935f7137c3 100644 --- a/core/object/script_language.cpp +++ b/core/object/script_language.cpp @@ -172,6 +172,8 @@ void Script::_bind_methods() { ClassDB::bind_method(D_METHOD("is_tool"), &Script::is_tool); ClassDB::bind_method(D_METHOD("is_abstract"), &Script::is_abstract); + ClassDB::bind_method(D_METHOD("get_rpc_config"), &Script::_get_rpc_config_bind); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "source_code", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_source_code", "get_source_code"); } diff --git a/core/object/script_language.h b/core/object/script_language.h index 1e02de0f9db..6b606d6c676 100644 --- a/core/object/script_language.h +++ b/core/object/script_language.h @@ -135,6 +135,10 @@ protected: void _set_debugger_break_language(); + Variant _get_rpc_config_bind() const { + return get_rpc_config().duplicate(true); + } + public: virtual void reload_from_file() override; diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 18281ac0c62..4a5c3270dd8 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -495,6 +495,13 @@ Fetches a node by [NodePath]. Similar to [method get_node], but does not generate an error if [param path] does not point to a valid node. + + + + Returns a [Dictionary] mapping method names to their RPC configuration defined for this node using [method rpc_config]. + [b]Note:[/b] This method only returns the RPC configuration assigned via [method rpc_config]. See [method Script.get_rpc_config] to retrieve the RPCs defined by the [Script]. + + diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index 45f0bbb8aac..80aad9d30d1 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -58,6 +58,12 @@ Returns the default value of the specified property. + + + + Returns a [Dictionary] mapping method names to their RPC configuration defined by this script. + + diff --git a/misc/extension_api_validation/4.4-stable.expected b/misc/extension_api_validation/4.4-stable.expected index 33e021c399a..3682f5b5540 100644 --- a/misc/extension_api_validation/4.4-stable.expected +++ b/misc/extension_api_validation/4.4-stable.expected @@ -251,3 +251,10 @@ Validate extension JSON: Error: Field 'classes/InputMap/methods/add_action/argum Validate extension JSON: Error: Field 'global_enums/KeyModifierMask/values/KEY_MODIFIER_MASK': value changed value in new API, from 532676600.0 to 2130706432. Precision of string-serialized Variant constants increased. + + +GH-106848 +--------- +Validate extension JSON: API was removed: classes/Node/methods/get_rpc_config + +Change Node `get_rpc_config` to `get_node_rpc_config`. Compatibility method registered. diff --git a/scene/main/node.compat.inc b/scene/main/node.compat.inc index 173fc227a49..27685d2260b 100644 --- a/scene/main/node.compat.inc +++ b/scene/main/node.compat.inc @@ -34,8 +34,13 @@ void Node::_set_name_bind_compat_76560(const String &p_name) { set_name(p_name); } +Variant Node::_get_rpc_config_bind_compat_106848() const { + return _get_node_rpc_config_bind(); +} + void Node::_bind_compatibility_methods() { ClassDB::bind_compatibility_method(D_METHOD("set_name", "name"), &Node::_set_name_bind_compat_76560); + ClassDB::bind_compatibility_method(D_METHOD("get_rpc_config"), &Node::_get_rpc_config_bind_compat_106848); } #endif diff --git a/scene/main/node.cpp b/scene/main/node.cpp index aeb1598a1b6..200b3ea8d7d 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -3980,6 +3980,7 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("get_multiplayer"), &Node::get_multiplayer); ClassDB::bind_method(D_METHOD("rpc_config", "method", "config"), &Node::rpc_config); + ClassDB::bind_method(D_METHOD("get_node_rpc_config"), &Node::_get_node_rpc_config_bind); ClassDB::bind_method(D_METHOD("set_editor_description", "editor_description"), &Node::set_editor_description); ClassDB::bind_method(D_METHOD("get_editor_description"), &Node::get_editor_description); diff --git a/scene/main/node.h b/scene/main/node.h index 50176b09dd5..9791fede588 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -388,6 +388,10 @@ protected: void _validate_property(PropertyInfo &p_property) const; + Variant _get_node_rpc_config_bind() const { + return get_node_rpc_config().duplicate(true); + } + protected: virtual bool _uses_signal_mutex() const override { return false; } // Node uses thread guards instead. @@ -414,6 +418,7 @@ protected: #ifndef DISABLE_DEPRECATED void _set_name_bind_compat_76560(const String &p_name); + Variant _get_rpc_config_bind_compat_106848() const; static void _bind_compatibility_methods(); #endif