{"id":16377481,"url":"https://github.com/phoenix616/snap","last_synced_at":"2025-04-05T15:07:22.195Z","repository":{"id":38027309,"uuid":"294737260","full_name":"Phoenix616/Snap","owner":"Phoenix616","description":"Experimental tool to run BungeeCord plugins on Velocity","archived":false,"fork":false,"pushed_at":"2024-10-02T14:02:06.000Z","size":107,"stargazers_count":125,"open_issues_count":12,"forks_count":13,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-29T14:09:10.761Z","etag":null,"topics":["bungee","bungeecord","java","minecraft","velocity","velocitypowered"],"latest_commit_sha":null,"homepage":"https://hangar.papermc.io/Phoenix616/Snap","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Phoenix616.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["Phoenix616"],"ko_fi":"Phoenix616","custom":"https://tip.phoenix616.dev"}},"created_at":"2020-09-11T15:48:53.000Z","updated_at":"2025-02-08T16:20:26.000Z","dependencies_parsed_at":"2024-12-30T07:06:53.213Z","dependency_job_id":"d3910a4a-5387-4050-b28d-7840688f7a09","html_url":"https://github.com/Phoenix616/Snap","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phoenix616%2FSnap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phoenix616%2FSnap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phoenix616%2FSnap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phoenix616%2FSnap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Phoenix616","download_url":"https://codeload.github.com/Phoenix616/Snap/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247353745,"owners_count":20925329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bungee","bungeecord","java","minecraft","velocity","velocitypowered"],"created_at":"2024-10-11T03:43:21.220Z","updated_at":"2025-04-05T15:07:22.173Z","avatar_url":"https://github.com/Phoenix616.png","language":"Java","readme":"# Snap!\n\nThis is the Seriously Necessary Adapter Plugin to enable plugins written against the\n BungeeCord or Waterfall API to load and (kinda) run on [Velocity](https://velocitypowered.com/). 👀\n\n## How?\n\nSimply add the Bungee plugins into the plugins folder inside the Snap plugin folder.\n\nSnap will use it's own instance of BungeeCord's plugin manager to load the plugins \n from there and translate BungeeCord methods, classes as well as event calls to the \n respective Velocity ones and vice versa.\n\n## Why?\n\nOriginally I wanted to document the Velocity equivalents to Bungee events, methods\n and classes. This evolved into the idea of writing a converter for source code which\n led me to decide to try to make a plugin which can directly load Bungee plugins.\n \nSeeing as the proxies don't have too much logic that seems to have worked although\n it is definitely a lot more inefficient than just running native Velocity plugins \n due lots of classes being in need of getting translated on the fly.\n \nTechnically this could be made in a way that is a lot more efficient by directly \n modifying the Velocity or BungeeCord source code to extend the respective other\n classes but in practice that massively increases the work required to get this\n plugin running, and that's all I wanted to do for now.\n \n## What works?\n\nMost of it (hopefully). I mean that's the goal... make sure to report any issues!\n\n## What doesn't work?\n\nSome functionality isn't easily recreated (e.g. group handling is not a\n thing in Velocity, use [a permissions plugin](https://luckperms.net)) and of course\n anything related to hacking into Bungee-internals or packets wont work.\n Just write a Velocity plugin at that point...\n\nThose functions not supported will throw an UnsupportedOperationException. Please report\n those including the plugin causing them on the issue tracker!\n \nIf you are sure that the plugin will work fine otherwise then you can have it return\n default values by setting `throw-unsupported-exception` to `false` in the `snap.conf`!\n\n### Not supported:\n\n- Using Bungee's **inbuilt permissions system** to set and get groups/permissions. \n  Don't! Please use LuckPerms on Velocity. (hasPermission checks work though)\n- **Reconnect server functionality.** That's an inbuilt function in Bungee but better \n  suited for a plugin. The related methods will return `null` or set nothing. Instead\n  of erroring.\n- **Scoreboards.** Velocity doesn't have API for them and I'm not going to create a \n  packet based one. Maybe there will be a way to integrate in some plugin or Velocity \n  adds support in the future.\n- Some **ProxyConfig** settings don't exist on Velocity or aren't exposed in the API so \n  they return some sensible defaults which should reflect the proxy's state.\n- Registering commands after a plugin was enabled. I currently have no good way to hook\n  into this besides straight up modifying the PluginManager class which I would like to\n  avoid.\n- Velocity plugins and Bungee plugins are not available to each other via the respective\n  PluginManager APIs and as dependencies. Their classes should be accessible though.\n- Some connection handling and related events might not work 100% exactly like on \n  Bungee. They are as close as possible though but if you already have to fiddle with \n  that then its best to create a standalone Velocity plugin tbh.\n- Some events don't work 100% or not at all.  \n  Not working: `TabCompleteEvent`, `ProxyDefineCommandEvent`, `ProxyExceptionEvent`.  \n  Only partially: `ServerDisconnectEvent` (only triggers on kicks),\n  `ClientConnectEvent` (uses Velocity's `LoginEvent` with `PostOrder.FIRST`)\n  `ConnectionInitEvent` (uses Velocity's `LoginEvent` with `PostOrder.EARLY`)\n- **Unsafe** doesn't work.\n\n## Sounds awesome! How can I get it?\n\nYou can download the jar via [GitHub releases](https://github.com/Phoenix616/Snap/releases)\n or get builds from the latest commits from the [Minebench.de Jenkins](https://ci.minebench.de/job/Snap/).\n \n## How can I support the project?\n\nFor the start trying out the plugin and reporting what other plugins work and don't work\n would already help a ton figuring out what work is still needed.\n \nOf course I would also appreciate [monetary help](https://tip.phoenix616.dev) if the plugin\n has helped you transition to Velocity either by directly using it or referencing its code to \n adapt Bungee plugins to get running on Velocity natively. (Did you know that GitHub is still \n doubling donations to [my GitHub Sponsors page](https://ghsponsor.phoenix616.dev)? 😉)\n\n## Is it open source?\n\nYes, the base code of Snap is open source! Unless noted otherwise in the source it's licensed \n under LGPLv3 in order to be compatible with the shipped Waterfall/BungeeCord.\n\n```\n Snap\n Copyright (c) 2020 Max Lee aka Phoenix616 (max@themoep.de)\n\n This program is free software: you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, either\n version 3 of the License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public\n License along with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n```\n\nPlease note that BungeeCord is not Free Software and licensed under their own, BSD 3-Clause based\n [license](https://github.com/SpigotMC/BungeeCord/blob/master/LICENSE) (which forbids usage of BungeeCord \"for commercial software hosting services without\nwritten permission from the author\") and that Waterfall uses\n an [MIT License](https://github.com/PaperMC/Waterfall/blob/master/LICENSE.txt) for its patches.\n\nTherefore pre-built binaries of Snap would have to be  distributed under Bungee's modified BSD 3-Clause license or a compatible one.\n","funding_links":["https://github.com/sponsors/Phoenix616","https://ko-fi.com/Phoenix616","https://tip.phoenix616.dev"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoenix616%2Fsnap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphoenix616%2Fsnap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoenix616%2Fsnap/lists"}