• Stars
    star
    105
  • Rank 320,443 (Top 7 %)
  • Language
    Java
  • License
    GNU Lesser Genera...
  • Created almost 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Experimental tool to run BungeeCord plugins on Velocity

Snap!

This is the Seriously Necessary Adapter Plugin to enable plugins written against the BungeeCord or Waterfall API to load and (kinda) run on Velocity. 👀

How?

Simply add the Bungee plugins into the plugins folder inside the Snap plugin folder.

Snap will use it's own instance of BungeeCord's plugin manager to load the plugins from there and translate BungeeCord methods, classes as well as event calls to the respective Velocity ones and vice versa.

Why?

Originally I wanted to document the Velocity equivalents to Bungee events, methods and classes. This evolved into the idea of writing a converter for source code which led me to decide to try to make a plugin which can directly load Bungee plugins.

Seeing as the proxies don't have too much logic that seems to have worked although it is definitely a lot more inefficient than just running native Velocity plugins due lots of classes being in need of getting translated on the fly.

Technically this could be made in a way that is a lot more efficient by directly modifying the Velocity or BungeeCord source code to extend the respective other classes but in practice that massively increases the work required to get this plugin running, and that's all I wanted to do for now.

What works?

Most of it (hopefully). I mean that's the goal... make sure to report any issues!

What doesn't work?

Some functionality isn't easily recreated (e.g. group handling is not a thing in Velocity, use a permissions plugin) and of course anything related to hacking into Bungee-internals or packets wont work. Just write a Velocity plugin at that point...

Those functions not supported will throw an UnsupportedOperationException. Please report those including the plugin causing them on the issue tracker!

If you are sure that the plugin will work fine otherwise then you can have it return default values by setting throw-unsupported-exception to false in the snap.conf!

Not supported:

  • Using Bungee's inbuilt permissions system to set and get groups/permissions. Don't! Please use LuckPerms on Velocity. (hasPermission checks work though)
  • Reconnect server functionality. That's an inbuilt function in Bungee but better suited for a plugin. The related methods will return null or set nothing. Instead of erroring.
  • Scoreboards. Velocity doesn't have API for them and I'm not going to create a packet based one. Maybe there will be a way to integrate in some plugin or Velocity adds support in the future.
  • Some ProxyConfig settings don't exist on Velocity or aren't exposed in the API so they return some sensible defaults which should reflect the proxy's state.
  • Registering commands after a plugin was enabled. I currently have no good way to hook into this besides straight up modifying the PluginManager class which I would like to avoid.
  • Velocity plugins and Bungee plugins are not available to each other via the respective PluginManager APIs and as dependencies. Their classes should be accessible though.
  • Some connection handling and related events might not work 100% exactly like on Bungee. They are as close as possible though but if you already have to fiddle with that then its best to create a standalone Velocity plugin tbh.
  • Some events don't work 100% or not at all.
    Not working: TabCompleteEvent, ProxyDefineCommandEvent, ProxyExceptionEvent.
    Only partially: ServerDisconnectEvent (only triggers on kicks), ClientConnectEvent (uses Velocity's LoginEvent with PostOrder.FIRST) ConnectionInitEvent (uses Velocity's LoginEvent with PostOrder.EARLY)
  • Unsafe doesn't work.

Sounds awesome! How can I get it?

You can download the jar via GitHub releases or get builds from the latest commits from the Minebench.de Jenkins.

How can I support the project?

For the start trying out the plugin and reporting what other plugins work and don't work would already help a ton figuring out what work is still needed.

Of course I would also appreciate monetary help if the plugin has helped you transition to Velocity either by directly using it or referencing its code to adapt Bungee plugins to get running on Velocity natively. (Did you know that GitHub is still doubling donations to my GitHub Sponsors page? 😉)

Is it open source?

Yes, the base code of Snap is open source! Unless noted otherwise in the source it's licensed under LGPLv3 in order to be compatible with the shipped Waterfall/BungeeCord.

 Snap
 Copyright (c) 2020 Max Lee aka Phoenix616 ([email protected])

 This program is free software: you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation, either
 version 3 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this program.  If not, see <http://www.gnu.org/licenses/>.

Please note that BungeeCord is licensed under their own, BSD 3-Clause based license and that Waterfall uses an MIT License for its patches.

Therefore pre-built binaries of Snap would have to be distributed under Bungee's modified BSD 3-Clause license or a compatible one.

More Repositories

1

MineDown

A MarkDown inspired markup library for Minecraft chat components
Java
267
star
2

InventoryGui

A library for Bukkit plugins to create GUIs with inventories
Java
162
star
3

ResourcepacksPlugins

Set resource packs on whole proxy, per server and per world!
Java
66
star
4

ConnectorPlugin

Plugin to simplify communication between multiple Minecraft servers (and proxies) in a network. Supports plugin messages, redis and MQTT (e.g. using RabbitMQ or Google Cloud. MQTT is untested rn!). RedisBungee alternative.
Java
53
star
5

RandomTeleport

Bukkit plugin which lets you teleport players to random locations. [v2: 1.13 - 1.16.x]
Java
17
star
6

IDConverter

Converts numeric item IDs to Bukkit Material names (1.13 and legacy) in files (e.g. configs)
Java
12
star
7

Updater

Update utility, made mainly for Minecraft plugins but can be used for any software
Java
11
star
8

TFT-Overlay-Java

Java Overlay for League of Legends' Teamfight Tactics.
Java
11
star
9

VersionConnector

Bungee plugin to connect different Minecraft client versions to different servers on join
Java
10
star
10

ServerStatus

Small BungeeCord plugin to check the status of connected servers
Java
9
star
11

BetterBeds

Bukkit plugin to make sleeping in Minecraft a lot better.
Java
8
star
12

MineDownPlugin

Plugin providing commands to send MineDown messages
Java
7
star
13

EditArmorStands

Bukkit plugin to edit all the awesome features of ArmorStands
Java
5
star
14

lang

Language config framework for Bukkit, Bungee and standalone java programs
Java
5
star
15

TimedScripts

Bukkit plugin to create scripts to run commands in correctly timed processes
Java
4
star
16

WhatPlugin

What plugin is a command from? What is its permission, aliases and description? Find out with this cool kid's Bukkit plugin!
Java
3
star
17

NamechangeSimulator

Bukkit plugin to simulate Minecraft online mode name changes
Java
3
star
18

OpenShulkerBoxes

Simple Bukkit/Spigot plugin to open the inventories of Shulker Boxes without placing them down
Java
3
star
19

ResourcePackDecryptor

A simple tool to unpack corrupted zip files commonly used to "encrypt" Minecraft resource packs with tools like PackSquash.
Java
3
star
20

MapToImage

Simple Bukkit plugin to save maps to images
Java
2
star
21

GlobalWarps

Simple global network warp plugin depending on ConnectorPlugin
Java
2
star
22

ShowItem

Show your items to other players via chat.
Java
2
star
23

CommandBlockPermissions

Bukkit plugin to manage command blocks with permissions
Java
2
star
24

TemporaryBlocks

Bukkit plugin to remove player placed blocks after a certain, per-type configurable delay.
Java
2
star
25

AutoQueue

Bungee plugin to automatically queue players that try to join a server
Java
2
star
26

BungeePlugin

Framework to better provide some basic Bungee plugin methods like Bukkit does
Java
2
star
27

EnhancedVanilla

Bukkit plugin to add new mechanics that enhance the vanilla gameplay
Java
1
star
28

BlockElytraArrowBoost

Simple bukkit plugin to block boosting yourself with arrows while gliding with an Elytra!
Java
1
star
29

df-style-glowing-earth

Glowing Earth style for the German browser game Darkfleet.de
CSS
1
star
30

hook

Library to simplify hooking into other plugins.
Java
1
star
31

BukkitPlugin

Simple base for plugins based on the Bukkit API
Java
1
star
32

TextIconsRP-Web

Web tool to easily convert and find icons from the Text Icons Rsourcepack by WolfieMario
JavaScript
1
star
33

StopFocusSteal

Really simple AutoHotKey script to stop unwanted focus steal under Windows
AutoHotkey
1
star
34

OpenAuctions

An open source auction house plugin for Paper Minecraft servers. WIP for the next couple of months/years! ETA: Nov '23
1
star
35

ListenerControl

Simple Bukkit plugin to unregister event listeners of other plugins
Java
1
star
36

NeoBans

Modern player banning plugin
Java
1
star
37

CheaperPhysicsEvent

Paper plugin to replace BlockPhysicsEvent listeners with the BlockDestroyEvent
Java
1
star
38

FakeEconomy

Simple, in-memory Vault economy provider. Not a real economy plugin! Only useful for testing.
Java
1
star
39

DynamicSlots

Dynamically set your Minecraft server list slots (Bungee&Bukkit)
Java
1
star
40

BlockPluginMessages

Bungee plugin to block specific plugin message channels for specific servers in your network
Java
1
star