{"id":"editx1980/ev","name":"ev","scope":"editx1980","platform":"roblox","description":"A simple Roblox networking package with runtime argument validation.","version":"0.1.2","latest":"0.1.2","versions":["0.0.1","0.0.2","0.0.3","0.0.4","0.0.5","0.0.6","0.0.7","0.0.8","0.0.9","0.1.0","0.1.1","0.1.2"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"42a93b214d4612eaa0356c015045329073a7dffbed0bc033e44fdf13cd3c005e","likes":0,"downloads":0,"install":"forest install editx1980/ev","url":"https://forest.dev/p/roblox/editx1980/ev","files":"https://api.forest.dev/ai/package/roblox/editx1980/ev/files","readme":"# EV\r\n\r\nA simple networking package for Roblox with runtime argument validation.\r\n\r\n## Features\r\n\r\nServer and client APIs\r\nRemoteEvent management\r\nRuntime argument validation\r\nServer → client communication\r\nClient → server communication\r\nEvent listeners\r\nBuilt-in connection cleanup\r\nSimple API\r\n\r\n## How It Works\r\n\r\nEV uses Roblox RemoteEvents underneath.\r\n\r\nWhen you create an event on the server, EV creates and manages the corresponding RemoteEvent inside the Remotes folder.\r\n\r\nThe server and client interact with the event through EV's API instead of directly accessing the RemoteEvent.\r\n\r\nEV also validates event arguments at runtime before passing them to the listener callback.\r\n\r\nConnections created with Listen() are tracked and cleaned up when the event is destroyed.\r\n\r\n## Client API\r\n\r\n```lua\r\nlocal Event = Ev.GetEvent(\"Clicked\", \"none\")\r\n\r\nEvent:Listen(function()\r\n\tprint(\"Clicked\")\r\nend)\r\n\r\nEvent:Once(function()\r\n\tprint(\"This runs on the next click only\")\r\nend)\r\n```\r\n\r\n`Listen()` waits for the remote event, including events with `\"none\"` arguments. `Once()` disconnects after the first valid event.\r\n\r\n## Server API\r\n\r\n```lua\r\nlocal Event = Ev.CreateEvent(\"Message\", \"string\")\r\n\r\nEvent:FireClient(Player, \"Hello\")\r\nEvent:FireAllPlayers(\"Hello everyone\")\r\nEvent:FireAllExcept(Player, \"Hello everyone else\")\r\n\r\nEvent:Once(function(Sender, Message)\r\n\tprint(Sender.Name, Message)\r\nend)\r\n```\r\n\r\n`FireAllExcept()` sends the event to every current player except the supplied player. Argument types are checked before an event is sent or passed to a listener.\r\n\r\n## Installation\r\n\r\nInstall EV through Wally:\r\n\r\n[dependencies]\r\n\r\nev = \"editx1980/ev@0.1.1\"\r\n","readmeTruncated":false}