papermc / velocity Goto Github PK
View Code? Open in Web Editor NEWThe modern, next-generation Minecraft server proxy.
Home Page: https://papermc.io/software/velocity
License: GNU General Public License v3.0
The modern, next-generation Minecraft server proxy.
Home Page: https://papermc.io/software/velocity
License: GNU General Public License v3.0
Checker Framework
Essentially, a very handy tool that aims to catch common mistakes at compile time. IntelliJ and other modern IDEs already do a lot of useful inspections, but Checker Framework is more comprehensive in scope.
Checker Framework will be integrated into the Velocity build process.
Checkstyle
Says what it is: a code-style checker.
Can you ad something like Ore by Spongepowered, to your Website?
Add a way to register plugin through API. I need this for bungee api proxying.
Java already has Closeable
/AutoCloseable
for native resources. Why not use it instead of Disposable
?
Velocity does not yet currently support attempts to fall back to other servers in the try
list. Supporting this would be a very easy project to knock out for a new contributor.
see #84 for context
See https://wiki.vg/Query for protocol specification.
Hello fellow developers!
I tried connecting to the proxy without their being any server online or correctly configured.
Of course, it won't work, but there shouldn't be any error if coded well.
The follow error is displayed into the console:
[13:43:53 INFO]: [connected player] StealWonders (/127.0.0.1:6779) has connected[13:43:54 ERROR]: [connected player] StealWonders (/127.0.0.1:6779): unable to connect to server lobby java.util.concurrent.CompletionException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /127.0.0.1:30066 at java.util.concurrent.CompletableFuture.encodeRelay(Unknown Source) ~[?:1.8.0_102] at java.util.concurrent.CompletableFuture.completeRelay(Unknown Source) ~[?:1.8.0_102] at java.util.concurrent.CompletableFuture.uniRelay(Unknown Source) ~[?:1.8.0_102] at java.util.concurrent.CompletableFuture$UniRelay.tryFire(Unknown Source) ~[?:1.8.0_102] at java.util.concurrent.CompletableFuture.postComplete(Unknown Source) ~[?:1.8.0_102] at java.util.concurrent.CompletableFuture.completeExceptionally(Unknown Source) ~[?:1.8.0_102] at com.velocitypowered.proxy.connection.backend.VelocityServerConnection$1.operationComplete(VelocityServerConnection.java:87) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at com.velocitypowered.proxy.connection.backend.VelocityServerConnection$1.operationComplete(VelocityServerConnection.java:77) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:504) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:483) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:121) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:327) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:343) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:616) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:563) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at java.lang.Thread.run(Unknown Source) [?:1.8.0_102] Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /127.0.0.1:30066 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.8.0_102] at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) ~[?:1.8.0_102] at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] ... 6 more Caused by: java.net.ConnectException: Connection refused: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.8.0_102] at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) ~[?:1.8.0_102] at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) ~[velocity.jar:1.0-SNAPSHOT (git-dc594e69, build 287)] ... 6 more [13:43:54 INFO]: [connected player] StealWonders (/127.0.0.1:6779) has disconnected
Maybe you are also able to make this message a bit clearer for normal users or might connect to the proxy: Image
Basically, add hosts that can direct to a specified set of initial connection servers that can be configured in velocity.toml
as follows:
[forced-hosts]
"ftb.example.com" = ["ftb-lobby-1", "ftb-lobby-2"]
Add a Player#sendTitle(title, subtitle, fadeIn, stay, fadeOut) method.
Useful: https://wiki.vg/Minecraft_Forge_Handshake
Note: the handshake will change for 1.13, will need to investigate what it's going to be.
Then it would be possible to start velocity on port 25565 with the following command
java -jar velocity.jar -p 25565
or java -jar velocity.jar --port 25565
This would be great for automated scripts, programs (also known as cloud-systems) and so on.
Some people genuinely do not need a large, complex permissions plugin such as LuckPerms. Some people may prefer a very basic permissions configuration integrated into Velocity.
This system would by no means replace more complex permissions plugins, only provide a basic floor of support.
See #71 for reasoning
Hello!
I was just wondering what kind of direction will you be taking with SQL Drivers - Will you be taking the Sponge route and provide a DataSource, Bungee route of including a driver in the library, or having all plugins shade in their own database drivers?
Sorry if this is the wrong place for this discussion.
Thanks!
Rsl
This is not very high priority, but I'd like to be able to change the hardcoded "Velocity" map in the query response to something else. I think this was planned, looking at the original PR discussion, but was never executed.
Also, even more low priroity - it'd be nice if there is an opt-in option to expose the plugins of the proxy, since there are some voting sites (which are the primary reason query is enabled in the first place) reward with higher rankings if you show your plugins
cough Minecraft-MP cough cough
(feature request)
Velocity doesn't currently support Minecraft 1.8. This can be a good issue to tackle if you have some familiarity with the Minecraft protocol on a low level.
Links that may help you:
I just wanted to thank you for this amazing API!
Thank you!
There is currently no plugin support in Velocity. Adding support should be fairly trivial.
Stacktrace: https://hastebin.com/rowehiluwu.bash
Mode: Legacy (1.8)
Serversoftware: Paperspigot
Occurred randomly while switching the server
In essence:
velocity.toml
in-place as much as reasonably (and safely) possible.ProxyReloadEvent
to allow plugins to reload their own configurations.One of the downfalls of Bungeecord and Spigot(along with their forks, afaik) is that there is no API to determine a player's client version. I'm working to fix this issue for Velocity so that developers can cater functions based on a player's version with ease.
Tracking Branch:
https://github.com/Crypnotic/Velocity/tree/protocol-constants-rework
Currently I can't find such method, I can only find server.getAllPlayers()
, but no way to get them for a single server. A player count (like server.getPlayerCount()
) for a single server would also be nice :)
[17:29:58 INFO]: Using channel type nio
[17:29:58 INFO]: Using Java compression
[17:29:58 INFO]: Using Java cipher
[17:29:58 INFO]: Booting up Velocity...
[17:29:58 INFO]: Listening on /0:0:0:0:0:0:0:0:25577
[17:29:59 INFO]: Closing endpoint /0:0:0:0:0:0:0:0:25577
When sending messages to the player the message is after line-breaks white
@dualspiral Asked for this to be posted here.
https://paste.ubuntu.com/p/rG25CTbz6J/
This error occurs when moving between a SpongeVanilla lobby and a Direwolf20 1.12 server on its latest recommended release. Player information forwarding is enabled and the DW server is running SpongeForge.
Use Mojang messages where possible, otherwise provide our own localizations.
I read that you want integrate velocity to paper and sponge.
How about to make velocity to handle(generate) players entity ids and sync it across network?
Ex:
In the class VelocityCommandManager exisis this method:
@Override
public void register(final Command command, final String... aliases) {
Preconditions.checkNotNull(aliases, "aliases");
Preconditions.checkNotNull(command, "executor");
for (int i = 0, length = aliases.length; i < length; i++) {
final String alias = aliases[i];
Preconditions.checkNotNull(aliases, "alias at index %s", i);
this.commands.put(alias.toLowerCase(Locale.ENGLISH), command);
}
}
i think Preconditions.checkNotNull(aliases, "alias at index %s", i);
this line is not right.
i think this lin must looks like this: Preconditions.checkNotNull(alias, "alias at index %s", i);
Velocity plugins should be able to handle incoming/outgoing messages, and gain the ability to send them out to servers as needed. Once this is done, we can port NuVotifier and introduce a degree of backward-compatibility for Bukkit/Sponge plugins expecting to talk to BungeeCord.
It's been a long standing goal of mine to be able to swap between 'profiles' for a given online account.
E.g. ryantheleach owns 1 Mojang account, and has authenticated. He is a junior staff member on a server. He is in highschool, so can't afford a second account.
Our server network prefers to audit staff actions, and to make that easier, requires that all staff members have a staff account, that has completely different permissions, and mode of play. Actions taken by staff members are audited for fair play.
Spoofing UUID's of authenticated accounts, would allow junior staff member ryantheleach to play normally on the server, as well as administrating the server, without constantly flagging false positive's in the audit log, as if he had 2 accounts on the server.
It would also enable interesting gameplay, being able to swap from a "Engineer" on a build server, that builds dungeons for other users, and an "Adventurer" who runs dungeons of other Engineers. without conflating the native in-built statistics of Minecraft.
In order for both of these to work effectively, and present themselves as completely different profiles to plugins, the far 'easiest' solution is just to swap the UUID/profile completely. Custom Plugins that need to be aware of the online owner of the account, could query it via an API.
Instead of migrating a large amount of UUID's or accidentally creating 2 profiles for offline/lan use and Online authentication, first class support for online/offline mapping would allow offline users to connect to their normally online mode server in a LAN scenario, as well as promoting offine/LAN servers back to online mode.
This would have the unintended side-effect of making mixed mode authentication easier, should auth servers go down, But would not completely allow it. as you could restrict the feature to authenticated accounts only.
I fully understand if you instantly close this ticket, as it's very close to enabling cracked server authentication via the proxy, But my instinct is people will do this anyway so we may as well enable the feature for those that could use it in positive ways, or Libraries that need multiple profiles for shared computers.
UuidUtils::toUndashed results (Input -> Output)
# Incorrect: Completely wrong
00000000-0000-0000-0000-000000000000 -> 00
# Incorrect: Missing zero at start
0d470a25-0416-48a1-b7a6-2a27aa5eb251 -> d470a25041648a1b7a62a27aa5eb251
# Correct
668a9655-cf4c-402f-8a43-c3869e66da3e -> 668a9655cf4c402f8a43c3869e66da3e
This issue was first noticed when this exception occurred: https://pastebin.com/Gy22czHa
After connecting to the proxy, disconnecting then connecting again, the client is forcibly disconnected with 'You are already on this proxy!' and then follow error then spams the console:
java.lang.NullPointerException: null
at com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler.handleUnknown(BackendPlaySessionHandler.java:74) ~[classes/:?]
at com.velocitypowered.proxy.connection.MinecraftConnection.channelRead(MinecraftConnection.java:86) ~[classes/:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) [netty-handler-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:808) [netty-transport-native-epoll-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:417) [netty-transport-native-epoll-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:317) [netty-transport-native-epoll-4.1.28.Final.jar:4.1.28.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [netty-common-4.1.28.Final.jar:4.1.28.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_172]
[15:54:28 WARN]: An exception 'java.lang.IllegalStateException: Connection is closed.' [enable DEBUG level for full stacktrace] was thrown by a user handler's exceptionCaught() method while handling the following exception:
java.lang.NullPointerException: null
at com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler.handleUnknown(BackendPlaySessionHandler.java:74) ~[classes/:?]
at com.velocitypowered.proxy.connection.MinecraftConnection.channelRead(MinecraftConnection.java:86) ~[classes/:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284) [netty-codec-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) [netty-handler-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) [netty-transport-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:808) [netty-transport-native-epoll-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:417) [netty-transport-native-epoll-4.1.28.Final.jar:4.1.28.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:317) [netty-transport-native-epoll-4.1.28.Final.jar:4.1.28.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [netty-common-4.1.28.Final.jar:4.1.28.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_172]
I'd hoped to not open up a tracking issue, but I'm going to do so anyway to help us organize this:
Here are the various messages that could be improved
Connect to the proxy with no online servers behind it
https://i.imgur.com/1nM3OAt.png
Forcibly close server behind the proxy while connected
https://i.imgur.com/D4E8Zn0.png
Essentially should cover the same sort of ground the BungeeCord plugin messaging channel does today.
This error occurred when connecting to an Engimatic 2: Expert Skyblock server AFTER connecting to a Sponge Vanilla lobby. Put here for tracking purposes.
You should call the DisconnectEvent (or something related here) because otherwise it's not possible to catch this result via velocity-api.
https://gist.github.com/DoNotSpamPls/2344676a707178331de48e8b89a372b9
Maybe the error shouldn't be that long, after all it's just a 204 error from Mojang
How to reproduce
Try connecting to a server and clicking cancel before completely logging in. Do it a few times and this error usually occors
https://gist.github.com/MatrixTunnel/8cf6a1f22fc09e7bff8340390c93f182
latency
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.