Module for tools with a centralized registry

I have created a tool system that allows my tools to follow a template with minimal boilerplate by relegating commonly repeated patterns to module scripts. In this system there are 3 scripts, MainModule (Server), Debris (Client), and Tool (Client). MainModule is typically required as an asset ID so that I do not have to copy paste the entire script cross-game, and puts the others in ReplicatedStorage where they need to be.

Debris handles clientside graphics, as RunContext = Client scripts add elements to the tables containing functions of what effects to play when a given event happens or object is added or removed.

Tool will register functions responsible for activating the tool, such as playing animations and invoking the RemoteEvent.

MainModule sets up the event and when invoked will fetch the correct function based on the tool the client is holding. Other scripts that require this would add them to the registry. My code looks kind of cluttered and is not very simple to use, although eliminates a lot of repetition. Are there any improvements I could make? Is a centralized ‘registry’ like this good practice?

ToolRegistry.rbxl (50.1 KB)