From 8ff8234f461d44b846b7fb04cadbd259ad221974 Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Fri, 23 Feb 2024 13:52:35 -0500 Subject: [PATCH] Fix inherited component registration with different names but identical slots --- evennia/contrib/base_systems/components/holder.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/evennia/contrib/base_systems/components/holder.py b/evennia/contrib/base_systems/components/holder.py index 9053bd3e69..65fb51d22d 100644 --- a/evennia/contrib/base_systems/components/holder.py +++ b/evennia/contrib/base_systems/components/holder.py @@ -283,9 +283,16 @@ class ComponentHolderMixin: for base_type in base_type_iterator(): base_class_components = getattr(base_type, "_class_components", ()) - class_components.update({cmp[0]: cmp[1] for cmp in base_class_components}) + for cmp_name, cmp_values in base_class_components: + cmp_class = get_component_class(cmp_name) + cmp_slot = cmp_class.get_component_slot() + class_components[cmp_slot] = (cmp_name, cmp_values) + # TODO Is this necessary? instance_components = getattr(self, "_class_components", ()) - class_components.update({cmp[0]: cmp[1] for cmp in instance_components}) + for cmp_name, cmp_values in instance_components: + cmp_class = get_component_class(cmp_name) + cmp_slot = cmp_class.get_component_slot() + class_components[cmp_slot] = (cmp_name, cmp_values) - return tuple(class_components.items()) + return tuple(class_components.values())