From 5a0c1b2151988a7d6aadbceba6b427fb70b9f959 Mon Sep 17 00:00:00 2001 From: Jared Miller Date: Sat, 14 Feb 2026 01:20:40 -0500 Subject: [PATCH] Fix dataclass equality causing duplicate items in move_to Objects were comparing by value instead of identity, causing list.remove() to remove the wrong object when moving items with identical attributes. Set eq=False on all dataclasses to use identity-based comparison. --- src/mudlib/container.py | 2 +- src/mudlib/entity.py | 4 ++-- src/mudlib/object.py | 2 +- src/mudlib/player.py | 2 +- src/mudlib/thing.py | 2 +- src/mudlib/zone.py | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/mudlib/container.py b/src/mudlib/container.py index e99195c..5d63fd1 100644 --- a/src/mudlib/container.py +++ b/src/mudlib/container.py @@ -8,7 +8,7 @@ from mudlib.object import Object from mudlib.thing import Thing -@dataclass +@dataclass(eq=False) class Container(Thing): """A container that can hold other items. diff --git a/src/mudlib/entity.py b/src/mudlib/entity.py index 72575e7..d29ae72 100644 --- a/src/mudlib/entity.py +++ b/src/mudlib/entity.py @@ -7,7 +7,7 @@ from dataclasses import dataclass, field from mudlib.object import Object -@dataclass +@dataclass(eq=False) class Entity(Object): """Base class for anything with position and identity in the world. @@ -68,7 +68,7 @@ class Entity(Object): pass -@dataclass +@dataclass(eq=False) class Mob(Entity): """Represents a non-player character (NPC) in the world.""" diff --git a/src/mudlib/object.py b/src/mudlib/object.py index 25b60fa..41870c8 100644 --- a/src/mudlib/object.py +++ b/src/mudlib/object.py @@ -6,7 +6,7 @@ from collections.abc import Awaitable, Callable from dataclasses import dataclass, field -@dataclass +@dataclass(eq=False) class Object: """Base class for everything in the world. diff --git a/src/mudlib/player.py b/src/mudlib/player.py index d1d516f..ebcb88e 100644 --- a/src/mudlib/player.py +++ b/src/mudlib/player.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: from mudlib.if_session import IFSession -@dataclass +@dataclass(eq=False) class Player(Entity): """Represents a connected player.""" diff --git a/src/mudlib/thing.py b/src/mudlib/thing.py index 1411182..d6c06eb 100644 --- a/src/mudlib/thing.py +++ b/src/mudlib/thing.py @@ -7,7 +7,7 @@ from dataclasses import dataclass, field from mudlib.object import Object -@dataclass +@dataclass(eq=False) class Thing(Object): """An item in the world. diff --git a/src/mudlib/zone.py b/src/mudlib/zone.py index fbc8e76..1da1322 100644 --- a/src/mudlib/zone.py +++ b/src/mudlib/zone.py @@ -8,7 +8,7 @@ from dataclasses import dataclass, field from mudlib.object import Object -@dataclass +@dataclass(eq=False) class SpawnRule: """Configuration for spawning mobs in a zone. @@ -21,7 +21,7 @@ class SpawnRule: respawn_seconds: int = 300 -@dataclass +@dataclass(eq=False) class Zone(Object): """A spatial area with a grid of terrain tiles.