#waterfall-dev
1 messages · Page 13 of 1
why does acf bungee use those for color codes 🤮
@bleak current acf in general does
oh wait i eralized why
i was misspelling the command lmao
phoenix616, so hmm, can I take the logic from serverstatus and take the logic from minequery and hack them both together to make my solution
I guess, not sure why one would need the serverstatus part though but you do you ¯_(ツ)_/¯
I mean, the socket wont be open when the server isn't running
yeah
serverstatus just pings the port without requiring a bukkit plugin
oh
so i'm confused
how will i be able to do /uptime factions on the prison server
(for example)
you query the server from your bungeecord via some way
in the case of having a plugin like Minequery on the bukkit server you would contact the query port of that plugin and send it the command
no, you could query that information when the command is run if you don't want to do any logging
hmm ok
i'll fork minequery and just
use my head from there
I can just remove all the password and stuff right?
seeing as i won't need any of it if i'm just getting the bukkit server uptime
with like, System.currentTime or sumting
theoretically you don't even need to fork it, you could just use that plugin as is and just make a simple bugnee plugin to query the info
(of course if you don't want to query it via a command but directly you would need to modify it)
also the password is there so that nobody can run commands on the server as console unauthenticated xD
yeah i want to query directly
the gneral info (like palyers) is available without a password you could just stick the updatime in there
yeah!
if all I want is just the uptime
do I need the port and stuff?
query port, etc
the query port is the port the query server will listen on and which you need to contact to get the info
what should that be
tbh it might be easier to just use a pub sub system (like the one in redis or rabbitmq) to get that info rather than directly dealing with sockets but I guess that's up to you ¯_(ツ)_/¯
idk man
i just want the plugin to work ya know
redis would make me have to install a totally different server and stuff
don't we all just want that? ;D
what about rabbitmq
it's a pub sub messaging server
afaik there are some peer2peer pub sub messaging java libraries too which don't require an extra server but I haven't dealt with any of them that
no, rabbitmq would require a central, standaloine server to run
mysql isn't really suited for sending messages. I mean you could abuse it to do that but not ideal lol
yeah hmm
damn it dude
alright so
what can I use that doesn't require an extra server
I just want to be able to do /uptime factions on the lobby and see 24h, 3m
or whatever man
ohhh
the minequery thing you wrote
is that using the query-port in the bungeecord config?
oh
is that all i need to do
open the port?
and configure minequery to use that
basically, yes
oh ok
i'll do that then
hmm
if all i'm doing in QueryData
is storing server uptime
I don't need the password right cause nobody could execute commands?
afaik it shouldn't accept commands if no password is set but if you want to be sure just remove the command logic I guess
hmm
for Request.java
should this not be implemented in core
and instead moved to bukkit
since i'm only getting one thing
that's for you to decide xD
i'm honestly confused on how this codebase is
like i'm only competent with java with what i knew through bukkit
it's abstracted so that code that is shared between bungee and bukkit isn't included twice
ohh
wait so how muchh of this do i actually need
do I need Request or QuerySender
I imagine I'd need QueryData and QueryServer
QuerySender is just for executing commands
the important part that you want to look at it is the server
yep I did the QueryServer
that's why I'm doing Request now
hmm I guess I need to modify Request to where it's only inquiring for like
the uptime? idk
yes, you would either add a new uptime command case or just remove all the other functions and simply always return the uptime
ok
this looks right, I think
phoenix616, is it fine to make the query port the same port the server runs on
or nah
and does it have to be open if utilized on the same system
because aikar decided that was nice
needs to be a different port, you can't run two services on the same port
You can also modify it to anything you want.
also you don't really need the response object or list if you just want to directly return it
ah ok
looks about right I think
hmm so in my bungeecord plugin
oh
does the query port need to be diff
for every server?
depends on whether or not to use different addresses to host them on
they're all gonna be local
I run every of my server on a different localhsot/lan address so I just use the same ports everywhere
but if you use the same address then you are going to have to use different ports
hmm ok thx phoenix616
my final question and hopefully this will turn out great
how do i query a server
so now I'm writing the command part
how do I get the query data result from a specific server
You'd need to ping that server
You'd need to pull up the needed code from somewhere or something, wiki.vg'll have docs and examples on it
ohhh
The Response class tracks the server port
Didn't see that
hmm
so maybe i should also make a field for the server name in the config, right?
hmm ok
i think i did it
alright cool
@trail plume wdym wiki.vg? this is phoenix's personal project tho
Well, I thought you was asking how to actually do the ping, not "I'm running through existing source for it"
ahh nah
I don't need to do a ping or anything
I think I figured that part out but what I was asking phoenix616 is
how would I get a different server with the methods provided
ah ok phoenix616, so i think i know thhe structure
hmm
nope nevermind
lost again
FUCK
this is too hard
how do you inquire for a query @lilac crystal? that's what i'm stuck at
like, how do i request my query to be sent t ome
i can't find any code in that repo showing me that
oh
I may have an idea
nvm
@trail plume would wiki.vg have a page on covering sockets? i think i just misinterpreted
this code looks like it's reading whatever input is sent to the socket
so i think in my command i have to send input?
i wrote this
but i get
java.net.SocketException: Socket is not connected at java.net.Socket.getOutputStream(Unknown Source)
the guides on wiki.vg might cover that, but, they're a protocol doc site with examples of impls, not a "how2java" course
it opens a socket with the ServerSocket
do you know how i could access that socket
Off the top of my head, no, but, this is not something that's all too hard to google, nor do I understand the full context of what you're doing nor do I have the will to decode it
I've been googling for like 20 minutes, either I'm just shit or for my use case nobody's tried it yet
.g java open UDP connection
(DiscordBot) https://www.baeldung.com/udp-in-java -- A Guide To UDP In Java | Baeldung: "Jan 18, 2020 ... Building UDP applications is very similar to building a TCP system; the only difference is that we don't establish a point to point..."
Basically I'm using my own fork of Phoenix616's minequery plugin to feed data from my bukkit servers to bungeecord
(this is the code https://github.com/Minebench/Minequery)
I don't know how to get the query though
2 second look shows that it literally has a getQueryData which takes a Socket?
Just, create a socket connection and throw it in there?
I think he's stuck on opening a connection to it from another server ;)
.g java connect to tcp server
(phoenix616) https://www.geeksforgeeks.org/socket-programming-in-java/ -- Socket Programming in Java - GeeksforGeeks: "Feb 26, 2018 ... This article describes a very basic one-way Client and Server setup where a Client ... To connect to other machine we need a socket..."
Read the page?
i meant for use with getQueryData
also TIL that I transfered that code over to github already 
walks out
you need to open the socket from your bungee plugin, not in the plugin that you are querying xD
that code doesn't really check anything
You're trying to open a connection to something
It needs to know where that something is
Once again, read the page you where linked
the geeksforgeeks one?
yes
once again
no, it only creates a server
it needs to know where the connection is
it doesn't have any code that connects to a server
ohh ok
A ServerSocket which waits for the client requests (when a client makes a new Socket()) A plain old Socket socket to use for communication with the client.
does it write to the server phoenix616?
I assume this is my response is writing to the socket
that part writes to the client which connected
ahhh
but since there's no client that connected
nothing happens
alright so i get
in my command class
when the command is ran, i
also why are you pressing enter that often? 
sorry, I have adhd and get excited quickly
hm
public void run() {
try {
for (; ; ) {
Socket socket = listener.accept();
new Thread(new Request(plugin, socket)).start();
}
} catch (IOException e) {
plugin.getLogger().info("Ran into IOException! Stopping server");
e.printStackTrace();
}
}
Ok I think I understand this code
Does this code take what's sent, then starts a Request with what was in the socket?
it basically just starts a new thread for each new connection
the request object is just there to pass the data and the plugin
theoretically you could just use a raw runnable there
as long as it doesnt massively affect performance i dont really mind
huh so what isn't this code doing for me
i need to connect to the server
with a Socket
read teh "Establish a Socket Connection" part in the page that the bot linked after my google search
yes
awesome
great i established thhe connection
am i supposed to write something to the socket now?
depends, if your server just instantly sends the uptime then you can just start reading from it I guess.
whether you read input data on the server side and only then send a response or if you don't read anything and send it instantly
in my original code I read the command info etc
then you should be able to directly read it
well you need to read the bytes and make that into a string ;D
why are you writing to the socket's output stream?
:)
My last question is, how would I get the socket a server is running on with its name?
like if i wanted to do /uptime lobby
should i store like
ok wait that wouldnt work nevermind
easiest would be a config that holds the address (if it differs from the normal server address) and the query port
something like lobby: "127.0.0.1:12345"
ahh ok
I’m pretty sure #461 is happening because of tablist rewriting
Does Waterfall have an option to disable it?
yes
This is the obligatory mention that Velocity does not have this issue
phoenix616 how do you get this working on docker
TheMineBench: ¯_(ツ)_/¯ I don't do docker
get what working on docker
How do you get what working on docker @bleak current ?
Hello, I would like to know if it is possible to make a waterfall cluster (I want several bungee in case of a crash) ?
Yes, you just run multiple dozen proxies and have some way to distribute between them
DNS RR is the goto generally
and how do we make the dns system?
You create multiple records for the server
here I created on port 25565 and 25566 but in minecraft it just pings me the bungee 25566 and when I turn it off, it doesn't ping me the 25565 how to do ?
0 = more priority
You'll also have to likely contend with stuff like DNS caching
Go test with whatsmyip or something
whatsmydns*
okay but then what do I put in priority for both?
ok let's leave them at 0
ah it's ok he pinged it
but it takes too much time to look for the right port...
it's a website which calls out to a few dozen other servers, it's not gonna be fast...
Beyond that it's literally just DNS
Registering new servers at runtime. Your thoughts on how to accomplish that? Implement your own AbstractReconnectHandler?
just add them to the server map?
Yes... thanks ^^
Hey guys! I'd like to know if there's a way to catch messages coming back from servers on a Waterfall plugin? I've looked up events and couldn't find an event for it, maybe there's another way? Thanks! 🙂
what kind of messages?
if we're talking chat messages there is a VERY good reason why the proxy doesn't intercept that
Like if a plugin sends a message and it gets forwarded to the player
But it sounds like I'm out of luck https://github.com/SpigotMC/BungeeCord/blob/c987ee199d3ec93ce13469deefb1e2787d97147c/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java#L478
yeah you'd need to intercept every chat message being sent from the proxy (including any from the backend)
that's a world of pain and performance issues nobody wants
I'm trying to add live translation to the chat (that works) but also translate 3rd party messages on the fly
I don't need to translate every outgoing message, just want to catch messages from paper to waterfall
Well I'm using Deepl it works quite well with text tokenization
If anyone's willing to give a hand on my yesterday's request, I've made a thread on Spigot's forum https://www.spigotmc.org/threads/get-chat-messages-coming-back-from-servers.466156/
you would need to register the corresponding packets... but uh, chat is a lot of pain lol
I found this, looks good https://www.spigotmc.org/threads/how-to-catch-when-player-receives-a-chat-message.353980/#post-3302496
Hey someone could help me with my question?
don't ask to ask it's a waste of you and everyone's time. Just ask
Yep, drop in replacement
And is it more complicated than bungee?
Paper and Waterfall are drop in replacements. You should just download the latest of each and use the same command to start each as you did with spigot/bungee and see what happens (still practice good backups)https://papermc.io/downloads
You don't need to change anything other than the jar itself
So when i want to do plugins for waterfall is it more complicated then bungee pl?
nope
They are derivatives
which means the API is additive only. Aka anything that works on spigot/bungee will work on these.
Once you use paper/waterfall there will be even more useful API's added on top of spigot/bungee
If you're a developer then you can target paper/waterfall and use those new features, but that'll make your plugin not work on just spigot. You'll even see this on the spigot plugin list's, when the plugin says Only works on Paper at the top. Hangar is a new list of plugins so those authors can list them in a better place
Ok thank you very much
ok thank you im really good at programming but i just wanted to see if the people are nice on this discord thank you and sorry for that stupid questions but after you told me all that stuff i really think i will switch to waterfall and paper
I always just thought its not that much better
But what you told me sounds really nice
Thank you and sorry if you see that as a waste of time but i didnt even know everything you told me rn
Im rlly going to switch my server to paper and waterfall thank you ❤️
don't ever consider your questions a waste of time
they're never a waste of time for you
@thin oar Sorry I'm a bit late, but yeah: Paper is Spigot but cooler, and Waterfall is Bungeecord but cooler. Configs are compatibles and you don't have anything to change. But for example, there's an anti X-Ray feature built-in that is much more efficient than solutions you can find on Spigot. For me, there's almost no good reason not to use Paper over Spigot and Waterfall for Bungeecord. They're the same, but better 🙂
Also the dev community is much more nicer and easier to talk to, on Spigot's IRC it's just dead, no one responds
Guys I'm so happy, I found a way to intercept, modify and cancel chat packets coming from the server on a proxy level. It's a bit hacky but no too much, I had to do some fields hacking in order to not import Waterfall's full .jar
I highly suggest you don't do that in production but congrats!
I will, but it will be way more robust than this
@exotic pike quick suggestion here; whatever you do DONT parse modify or add the data in this context. Just copy the packets contents and discard it. Once you’re ready send a packet with the contents you read (and modified). If you stop and process anything here in the packet pipeline it will block the entire rest of the players networking and also the network control thread. You don’t ever want that.
@wide maple this is exactly what I wrote in my comment on my Spigot thread, but thanks for notifying me 🙂 https://www.spigotmc.org/threads/get-chat-messages-coming-back-from-servers.466156/#post-3963554
This is in fact my disclaimer: PS: that handleChatPacket is NOT async. if you do heavy stuff in there, it WILL hurt performance of your whole network in a (very) massive way. Also this is not production grade code and it lacks tests. Please bulletproof and profile this code if you're using it in production.
I have one case I need to use this in, I fire a CompletableFuture and immediately discard the packet. The completableFuture then creates a ModifyableChat from my wrapping class for Chat and fires an AsynChatEvent. Once all handlers complete it will just fire the ModiyableChat packet down the pipeline.
my handler has: Instanceof Chat && !(instanceof ModifyableChat)
^ no blocking and thread-safe
That's clever to extend the Chat packet! I'll think about it, but in my case it's not a big problem because I'm operating between the Minecraft server and the Proxy, so if I just player.sendMessage() the thing it won't trigger my handler again
Waterfall is a fork of BungeeCord
Everything is at the top of the readme: https://github.com/PaperMC/Waterfall/blob/master/README.md 🙂
Ouuuu
@exotic pike I have a problem with my paper server my server laggg bec of 1000 of mobs how to turn off mob spawning
Ask in #paper-help this is the wrong channel 😉
Ok
@exotic pike ah yea in my case I am just old. I’ve always done it this way. Is a relic from the time before clientbound and serverbound packet types split up. IDK how bungee handles either from the top of my head though
@wide maple I genuinely thought there was an event for this on Bungee, until I read the documentation, but while this solution is not perfect and clearly not for beginners, I think it's good enough for my use case but I'll profile this I really don't want to hurt performance
@wide maple eh, no. It'll kill performance.
because I am a lazy bastard I still havent gotten rid of the connection.getAddress().getAddress() calls in my plugin - I assume the correct way to managed this - when i want to record ip address's for a connection is to cast the getSocketAddress. ?
getAddress() just casts getSocketAddress() anyway
so yeah, what I pretty much do is have a small helper method which casts the address itself. If I ever want a more descriptive error message when the address is of another type, I can add it there
how does one publish the waterfall api to a specified maven remote?
setting up our CI right now, not sure where to start with waterfall
-DaltDeploymentRepository="valaria-deployment::default::https://repo.valaria.pw/repository/valaria-shady/" for example
reponame | leave this | url
right, does it publish automaticallly with ./waterfall build?
No
i'll see if i can figure it out, thanks
if you want javadocs too, bahahahahaaaaa

Basically, in pre, we basically ./waterfall p and cd in Waterfall-Proxy and then build like any other maven project
mvn source:jar javadoc:jar javadoc:aggregate deploy -Dbuild.number=$BUILD_NUMBER -DskipTests -P deployment is what we use for the post step, I got no idea if the javadoc jar is delombok'd
why there is only one Boss thread?
afaik, that's normal netty practice, that's only really there for accepting new connections last I knew
is it possible to disable the communication channels of spigot plugins and bungeecord? I don't use this feature so I would like to disable it, does anyone know where the code is where this listener is registered, is located?
I always forget the directions, it's either in Upstream or Downstream bridge
I want to override the glist command and modify the amount of people online visual in the multiplayer menu
how might this be accomplished with the api?
ok I learned I can just disable glist in modules.yml and make my own glist command in a proxy
still not sure about the other challenge though
also learned I can just set the players in the proxy ping event
wow that was easier than expected, NEVERMIND THAT
I always forget the directions, it's either in Upstream or Downstream bridge
@trail plume thank you very much

Is it possible to create a command then only allow it to be run from console? If ran by a player, it passes through the proxy to the backend server
@plucky hearth forward it to the server when sender == player command sender
Problem solved
That way you don’t have to break lots of internal features
How would I forward it to the server or at least where can I find what I need to do it? I've rarely worked with BungeeCord
ProxiedPlayer#chat iirc
How to create a fake player for sending plugin messages?
XY problem. Use a better message broker than plugin messages
I need somethink to send message beetween spigot and bungee one time
just use sockets. ideally one uses a message broker though
My plugin uses socket, but I need solution for automatic reconnect when socket server crashs and restarts. I had idea to use fake players and plugin messages to inform client that Server is active again.
just try to reconnect every second or so?
it can overload network
Use a message broker
These things have literally had the issue of "shooting messages around a network" sorted for years
I mean, can't you just send a notification message to the other servers once you are back online?
Also, for a "fake player", yea, that's viable, but you're going to need to code that fake player, as bungee doesn't have anything built in for that
BungeeCord has protocol module I think.
That just implements the protocol
It doesn't have any magic in there that would let you connect a fake player
Maybe there's a library for fake players on the internet?
Not that I'm aware of, it's basically the stupid way to go about it anyways
You're literally adding an extra player for the server to deal with ticking, when you could just use a message broker...
dear zzzCat, can you explain what's a message broker?
But they needs additional application. I would like to keep everythink in one jar.
Basically, afaik, nobody has done something for that as it's generally the stupid way to go about it
I guess your """best""" option, would be to look at one of the protocol lib things, but, really, erm...
Basically, the standalone tools which give you the protocol and you get to write a client to do whatever you want
I think chcecking server status regullary isn't as bad as I thought.
you don't need an extra application for a proper messaging system
you can just use some peer2peer system and make the proxy plugin work as a master to help with discovering or something like that
But is any way to check is bungeecord connected to spigot server?
(or directly run a broker in a proxy plugin but why even do that?!?)
The bungee/plugin-messaging system is okayish for most use cases, idk why you want fake players
the bungee is connected to a server when there is a player online on it
plugin messages dont get delivered when there's no players online
Yeah, but how often do you need to send things to empty servers?
I mean, there are some general concerns with how the proxy uses messaging channels anyways
And they are putting load on sockets used by players
There are 0 reliability contracts, if a player disconnects at an inopertune time, etc
I think the pure sockets can be faster than bungeecord
I wanted to use something like this at some point https://github.com/spagnuolocarmine/p2ppublishsubscribe but decided to just use redis for it for now as I already had it running lol
How this system works?
magic
(DiscordBot) https://zeromq.org/ -- ZeroMQ: "ZeroMQ (also known as ØMQ, 0MQ, or zmq) looks like an embeddable networking library but acts like a concurrency framework. It gives you sockets that..."
Hey, sorry if I am asking in the complete wrong section, but am I doing this wrong?
I suggest using the official resources provided by the developers of the software instead of some random tutorial
My tutorial was on spigotmc btw
90% of stuff on spigotmc is trash
anyone got a good tutorial?
in fact 90% of spigot(mc) is trash
cheers
oh yeah, the bungeecord wiki needs updating lol
Same problem. says its not found
what happens if you run maven manually?
By run you mean?
run teh package task via the sidebar or directly via a terminal
yeah, sometimes intellij caching fucks up
Any one know what could cause this to be stuck downloading?
It is doing stuff, just give it the time it needs
Has anyone experienced issues with intellij minecraft plugin? Seems like graddle can't resolve the waterfall-api jar
has nothing to do with intellij, just means you haven't set up your repos right in graddle
When ./gradlew build works, then restart and invalidate caches. IJ has a problem since early 2019.
and people laugh at me for running an 2018 version 👀
I use whatever is suitable for the project
Could not determine the dependencies of task ':BungeeCord:shadowJar'.
> Could not resolve all dependencies for configuration ':BungeeCord:runtimeClasspath'.
> Could not resolve net.md-5:bungeecord-api:1.15-SNAPSHOT.
Required by:
project :BungeeCord
project :BungeeCord > project :Common
> Could not resolve net.md-5:bungeecord-api:1.15-SNAPSHOT.
> Unable to load Maven meta-data from http://minevolt.net/repo/net/md-5/bungeecord-api/1.15-SNAPSHOT/maven-metadata.xml.
> Could not get resource 'http://minevolt.net/repo/net/md-5/bungeecord-api/1.15-SNAPSHOT/maven-metadata.xml'.
> Could not GET 'http://minevolt.net/repo/net/md-5/bungeecord-api/1.15-SNAPSHOT/maven-metadata.xml'.
> Connect to minevolt.net:80 [minevolt.net/73.64.241.253] failed: Connection timed out: connect
> Could not resolve net.md-5:bungeecord-api:1.15-SNAPSHOT.
> Unable to load Maven meta-data from http://repo.maven.apache.org/maven2/net/md-5/bungeecord-api/1.15-SNAPSHOT/maven-metadata.xml.
> Could not get resource 'http://repo.maven.apache.org/maven2/net/md-5/bungeecord-api/1.15-SNAPSHOT/maven-metadata.xml'.
> Could not GET 'http://repo.maven.apache.org/maven2/net/md-5/bungeecord-api/1.15-SNAPSHOT/maven-metadata.xml'. Received status code 501 from server: HTTPS Required
My build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.4'
}
}
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
group = 'net.modrealms'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
jcenter()
maven { url "https://jitpack.io/" }
maven { url "http://minevolt.net/repo"}
maven { url "http://repo.spongepowered.org/maven/" }
maven { url "http://repo.maven.apache.org/maven2" }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
maven { url "http://files.minecraftforge.net/maven" }
}
dependencies {
compileOnly 'net.luckperms:api:5.2'
compileOnly 'org.spongepowered:spongeapi:7.3.0'
compile 'com.googlecode.json-simple:json-simple:1.1.1'
compile 'org.mongodb:mongo-java-driver:3.6.0'
compile 'xyz.morphia.morphia:core:1.4.0'
compile 'net.md-5:bungeecord-api:1.15-SNAPSHOT'
compile 'org.apache.commons:commons-lang3:3.3.2'
compileOnly 'org.projectlombok:lombok:1.18.8'
compile 'net.dv8tion:JDA:4.2.0_211'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
}
shadowJar {
baseName 'chat'
exclude 'docs'
exclude 'GradleStart**'
exclude '.cache'
exclude 'LICENSE*'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
minimize()
}
artifacts {
archives shadowJar
}
}
please don't paste huge ass things into discord
it also tells you the issues in the log output
Well, it failed to connect to it, so, yea, probably, either that or something on your end
For the second one, it tells you, use https
Yea thanks, i got it all working now
How to disable all commands without /login for a time?
There's the chat event
so before the command is parse the chat event is called?
I guess it's cancelable
So basically you need to keep canceling the chat event until they use /login
I know how event works, but I thought the event is only called for normal chat messages.
it's called for all chat packets
"Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.2.1:shade (default) on project waterfall-bootstrap: Execution default of goal org.apache.maven.plugins:maven-shade-plugin:3.2.1:shade failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-shade-plugin:3.2.1:shade: java.lang.AbstractMethodError: Receiver class com.github.edwgiz.maven_shade_plugin.log4j2_cache_transformer.PluginsCacheFileTransformer does not define or inherit an implementation of the resolved method abstract processResource(Ljava/lang/String;Ljava/io/InputStream;Ljava/util/List;)V of interface org.apache.maven.plugins.shade.resource.ResourceTransformer."
I get this error when trying to compile Waterfall
[ERROR] Child module M:\Github\Repo\Waterfall\Waterfall-Proxy of M:\Github\Repo\Waterfall\pom.xml does not exist```
Why can't I compile it?
even using WSL to compile via bash gives me./waterfall: line 2: $'\r': command not found ./waterfall: line 3: syntax error near unexpected token `$'in\r'' '/waterfall: line 3: `case "$1" in
Would need to see the build output, make sure that you actually cloned the waterfall repo vs the zip download, etc
I mean, I used git clone
windows 
I wonder how many people have had issues with building waterfall in the past because they didn’t use unified line endings
i know that Plugin Messaging Channel need player connection between bungeecord and paper server.
But net.md_5.bungee.api.connection.Server::sendData did not require any player connection by parameter. the reason why?
it just picks the first player connected to that server to send the data (or, queues it if nobody is on)
I see.
what is different between ServerInfo::sendData and Server::sendData ?
ok. ServerInfo::sendData call Server::sendData.
Server seems not stable. It will change frequently by player.
Hi, long story short, when I try to run ./waterfall rb to test one of my patches it deletes all content of BungeeCord-Patches dir
why is that happening?
even when I try to do rebuild on clean waterfall clone it delets everything
Well, that's what rb does, it zaps the entire argument and rebuilds the patches
scripts/rebuildPatches.sh: line 51: cd: /mnt/m/Github/Repo/Waterfall/Waterfall-Proxy: No such file or directory
Is your issue
here we go again, snapshot 20w45a is out
thats a first tho
Glory from 20w45a. You can now force a custom resource pack. Deactivating it in the server list entry will kick you immediately instead
wish they just let the server handle the behavior when declining
(and have the default be kick)
that way you could send someone to a hub server for example
oof
time to write another feedback post -.-
oh wait, it's an optional setting ¯_(ツ)_/¯
"A dedicated server can enforce custom resource packs by setting require-resource-pack in server.properties"
I wonder if they properly stop the esc bypass lol

They do. If you don’t accept it buy any vanilla means you get kicked.
I already made a mod to bypass it but still
Glory from 20w45a. You can now force a custom resource pack. Deactivating it in the server list entry will kick you immediately instead
this will kill a bunch of plugins
they'll continue to exist to serve older client versions
I’m interested as to how PS and Via will translate forced resource packs
Cc @vestal trellis
you will just immediately be kicked if you deny
(but still have the normal "Download resourcepack?" buttons if you have it set to default/prompt)
@lag not really, my plugin can do a lot more (bungee support, per server support, region support) as well as not just kick the player ;D
although it's nice that there now is a better interface
Hello everyone!
Does anyone know how I can run a command on one server from another server?
For example I have a server1 and a server2, I type on server1 /runcommand server2 say Hello world and it run /say Hello on the server2
I was thinking of using the BungeeMessagingChannel but I couldn't find a function to send a command...
you'd send a message
You'd also have a plugin listening for said message to run the command that's sent
The below is ocassionally returning null... Is this normal?
player.getServer().getInfo().getName()```
'returning null'?
Sorry i should be clearer
I am occasionally getting a NullPointerException when calling player.getServer().getInfo().getName()
and i haven't experienced this before
as, the player always has to be in a server right?
Oh - I am looking at the stack trace. It's a PlaceHolder - BungeeTabListPlus is running it as a BungeeTask - so the player might not have actaully been put in a server yet...
Seem i just needed to write it out to understand the error
I got the perfect solution for you
Debugging software with a rubber ducky
.debugging
Thank you. I appreciate the advice
and not the sarcy responses some other communities give...
it means a lot ❤️
james090500: ProxiedPlayer#getServer returns null if the player isn't connected to a server yet (e.g. on join to the proxy) ;)
🌮
What kind of taco-irc conspiracy is going on here 👀
moved all the bridged channels to esper
just double checking with the best food ever
spigot irc has registration limits, and generally being on spigot's irc network may hurt us in the future
rest of MC is on esper
plus mbax is here 
I mean what
;p
https://github.com/Xernium/Waterfall/tree/1.17-changes-pre here we go again
Hey, so I am hosting a Minecraft Network Server. I was wondering that is there anyway a player can see the IPs of my backend servers with some kind of networking tool or something?
as long as the ports for your backend servers are closed, nobody can see the IPs of them
This just literally answered a question I had lol.
it's an enumeration of some of the keys that can be used in a translatable chat component
they will be translated to the corresponding key the player has configured in keybinds
like E for INVENTORY
myes
Is it possible to disable BungeeCords default modules like find or glist so I can implement custom versions of it using the same command.
Registering a find command overrides BungeeCords find command, but my glist command gets overwritten by BungeeCords version.
use, modules.yml or whatever it was, just remove everything in there
you can also just register the commands a millisecond after your plugin loaded
Ah nice. Many thanks 🙂
that fully depends on whatever plugin you use
Does bungee/waterfall overwrite PlayerInfo packet?
Is bungeecord-side PreLoginEvent async?
no
But, it uses the intents/callback system, so you can always hop off the network thread
Oh, good lead -> what is the intent system
You, erm, register an intent and release it once you're done
that's covered in the bungee dev docs iirc
event.registerIntent, event.completeIntent
Forking "Travertine" and when building i run into an error any clue why?
[ERROR]
[ERROR] The project io.github.waterfallmc:waterfall-parent:1.16-R0.4-SNAPSHOT (G:\devs\Some CheatBreaker Bungee\Travertine\Travertine-Proxy\pom.xml) has 1 error
[ERROR] Non-resolvable parent POM for io.github.waterfallmc:waterfall-parent:1.16-R0.4-SNAPSHOT: Could not find artifact io.github.waterfallmc:waterfall-super:pom:dev-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
Bungee/Travertine/Waterfall-Proxy-Patches/*.patch' for reading: No such file or directory
Something did not apply cleanly to Travertine-Proxy.
Please review above details and finish the apply then
save the changes with rebuildPatches.sh
/g/devs/Some CheatBreaker Bungee/Travertine/Travertine-Proxy /g/devs/Some CheatBreaker Bungee/Travertine
@bleak current the waterfall sub-module isn’t present or invalid. Re-clone your repository with the recursive parameter git clone --recursive REPO or git submodules init
oh ok
let me test.
It didnt work, all files are here.
./scripts/applyPatches.sh: line 31: cd: $'/g/devs\n.\nBungee/Travertine/Travertine-Proxy': No such file or directory
Resetting Travertine-Proxy to Waterfall-Proxy...
Your branch is up to date with 'origin/master'.
fatal: ambiguous argument 'upstream/upstream': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Applying patches to Travertine-Proxy...
fatal: could not open '/g/devs
.
Bungee/Travertine/Waterfall-Proxy-Patches/*.patch' for reading: No such file or directory
Something did not apply cleanly to Travertine-Proxy.
Please review above details and finish the apply then
save the changes with rebuildPatches.sh
/g/devs/Some CheatBreaker Bungee/Travertine/Travertine-Proxy /g/devs/Some CheatBreaker Bungee/Travertine
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[WARNING] 'parent.relativePath' of POM io.github.waterfallmc:waterfall-parent:1.16-R0.4-SNAPSHOT (G:\devs\Some CheatBreaker Bungee\Travertine\Travertine-Proxy\pom.xml) points at io.github.waterfallmc:travertine-super instead of io.github.waterfallmc:waterfall-super, please verify your project structure @ line 6, column 13
[FATAL] Non-resolvable parent POM for io.github.waterfallmc:waterfall-parent:1.16-R0.4-SNAPSHOT: Could not find artifact io.github.waterfallmc:waterfall-super:pom:dev-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13
@
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project io.github.waterfallmc:waterfall-parent:1.16-R0.4-SNAPSHOT (G:\devs\Some CheatBreaker Bungee\Travertine\Travertine-Proxy\pom.xml) has 1 error
[ERROR] Non-resolvable parent POM for io.github.waterfallmc:waterfall-parent:1.16-R0.4-SNAPSHOT: Could not find artifact io.github.waterfallmc:waterfall-super:pom:dev-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
try building it in a directory tree which does not contain spaces
waterfall and travertine scripts are quite crap and lack double quotes in many places, leading to vague errors like those
ah
fair enough
this is a really small thing but if I opened an issue would the dev team consider making the build server for waterfall lowercase instead of capital so that it's consistent with paper? i.e. waterfall.jar and papermc.io/ci/job/waterfall instead of Waterfall.jar and papermc.io/ci/job/Waterfall
no
the build server is going away
automated access to downloads is expected to be done through the downloads api, see #announcements
hey
how can i access to javadoc of Waterfall 1.16-R0.1-SNAPSHOT ?
.g waterfall javadocs
(phoenix616) https://papermc.io/javadocs/waterfall/ -- Overview (Waterfall-Super dev-SNAPSHOT API): "Packages. Package, Description. io.github.waterfallmc.waterfall · io.github.waterfallmc.waterfall.event · io.github.waterfallmc.waterfall.exception."
btw. why are you depending on both, paper and waterfall at the same time? using different modules would be the cleaner solution
i depend of paper and waterfall because i work with a lib who need to be compatible with paper and Waterfall servers
^ that doesn’t conflict with that
https://www.spigotmc.org/wiki/create-your-first-bungeecord-plugin-proxy-spigotmc/#setting-up-your-project i'm confused on that part The IDE will open and show you a file called pom.xml. We will now add some content to this file. Add the following lines to it, before </project>:
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
What exactly are you confused on? Isn't the pom.xml being opened, doesn't it have </project> in it, etc.?
like pasting it
Pasting what?
If you don't use something like mcdev, you'll need to fill out the pom yourself
well im using eclipse
Looking at the tutorial seems like Eclipse generates a dependencies part for you. So assuming that's still the case, remove everything in <dependencies> to </dependencies> and replace it by the code in the tutorial.

ok i did that and it shows error
Might I suggest you use IntelliJ Idea if you’re not dead-set on using eclipse, it will save you a lot of pain. There are also plugins to IntelliJ that make it very easy to set up projects for most minecraft plugin or mod loaders
Eclipse isn’t easy to handle, especially not with build systems. Sometimes that makes it perfect, but that’s more often than not NOT the case
Yeah, IJ is fairly capable to pick up any other projects.
ok
^keep in mind IJ is paid, but you can get a free student licence quite easily @astral oasis
community edition is free ;)
i know
don't even need to use UE, doesn't give anything extra for minecraft-related stuff
something apparently mangled the player list
What's all this business https://hasteb.in/carikehu.rb
trying to do stuff on ServerSwitch, ServerConnect events
private
Yea, bukkit doesn't care, pretty sure bungee does
it do be like that sometimes
can you fix it?
should I use h2 or sqlite for a small plugin?
Also, how should I implement it (I'm using maven).
I'm not familiar with sql at all
h2
depends on whether or not you want to read it with other languages
java only
I'm interested in making a fork of waterfall (continuing Billy's avalanche patches, not adding anything else), but I can't for the life of me figure out how to update Waterfall upstream. Any chance there's some documentation on how forks of MC software works that I could look at to learn how to maintain Waterfall upstream?
fork travertine
use the scripts in there, upstream is basically, ./trav p, ./trav up, ./trav rb (once it patches)
ooh alright tysm :)
bruh when i pasted some thing into pom.xml it shows error
Description Resource Path Location Type
Test cannot be resolved to a type AppTest.java /elixions/src/test/java/com/mattrolol/elixions line 15 Java Problem
The import org.junit cannot be resolved AppTest.java /elixions/src/test/java/com/mattrolol/elixions line 3 Java Problem
The import org.junit cannot be resolved AppTest.java /elixions/src/test/java/com/mattrolol/elixions line 5 Java Problem
The method assertTrue(boolean) is undefined for the type AppTest AppTest.java /elixions/src/test/java/com/mattrolol/elixions line 18 Java Problem
probably messed up your pom and removed the junit dependency
is there the way to fix it?\
undo whatever you pasted into your pom and see why pasting that segment breaks your dependencies
check xml syntax, etc.
Looks like JUnit isn't defined as a test dependency.
Hello,
I currently make an server network and i want know how i can sync the data on cross the network.
Initially i have naively store all Account player on Redis, on bungee AND on minecraft server but this is cost too many RAM and make desync.
I have also try only store on Redis and access directly (no local cache) but this is make some latency.
So i currently change my system, but i want know if an better way exist.
My current reflection of my system:
- When player login to bungee : i pull account from Mongo, save it on Redis and only store necessary data on bungee player (like locale and group)
- When player login to minecraft server : i pull account from Redis and only store the necessary data (like on bungee)
- When player update data (like locale from bungee
SettingsChangedEvent) : I publish the change with the old and new data with Redis PUB/SUB, and listen it on spigot for change it on the player - When player leave minecraft server : Save the server data (like game stats) on Redis account
- When player leave bungee : Save the account from Redis to Mongo and set TTL to something like
1 hour
My infrastructure: I run the minecraft servers, bungee, Mongo and Redis on Kubernetes cluster.
So, my question is: My reflection is good or i can make an more optimized/clean way ?
Thanks by advance for your help.
There is no magical solution, all you can do is mix and match as needed; stuff that needs uber fast access must be in ram, stuff that needs uver fast access that must be kept in sync should generally be pushed back to the central store fast, anything that doesn't need to be fast but must be kept in sync, keep it in the db and just update as needed
if you ever find a way to store data across instances with 0 latency and is safe, don't tell us, you'll make a mint licensing it out
i have also ask this message on spigot discord, and the current "solution" is :
Store only pertinent data in Redis like game id, server id, locale balance and direct access to it (not store in server memory).
Store the locale (is used when i generate message) in player instance.
For game: store in server memory (from mongo at login) the stats like kills, death, ratio and save it in mongo when leave the game
Sync the data between redis and mongo on logout
What exactly is a "messaging-channel" is it basically the same to a port to socket?
Does essentially direct a specific-set* of traffic
sort of like certain lanes on the highway
Bungee Data -> Spigot Receiver
Spigot Date -> Bungee Receiver
a messaging channel is a registered channel under an active netty minecraft-protocol connection
is there main purpose to transfer strings through different connections?\
How to get player's mod list if they use Fabric?
@bleak current yes
@paper maple listen to the fabric register plugin channel messages
which channel should i listen?
Thank you. I will check.
Guys, can anyone tell me how programmatically I can force my plugin to start before everyone else?
I use the Proxy, Velocity
if this is for a proxy plugin, and you use velocity as your proxy, shouldnt you be asking in the velocity discord?
^ they're nice people over there, theyll help you out
proxi is my proxy

Hello,
is there a way to change the waterfall messages?
In Bungeecord there is a "messages.properties", which can be edited by extracting the .jar file.
But i dont won't to do that for every new version, so I simply wanna replace the messages with customs one in my code.
Thanks in advance! 🙂
within the bounds of the API? no
But, you don't gotta do that for each version
That file rarely ever changes, and any missing strings will be read from the one in the jar last I recall
So, just grab it, throw it in the proxy folder
Yeah that's true, but I will have to put it back into the jar with every update, which I could skip 😄
No, you don't
I have to Extract the file from the .jar file, and after editing it I will have to put it back into the jar, or am I wrong here?
So everytime I download the up-to-date .jar I would have to do that 
No, grab the file, edit it, save it in the same folder as you run waterfall in
Oh wow I didn't think of that. Thank you I will do it!
how does one list/find all servers under waterfall/bungee?
https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/#getservers
got it, thanks google gods
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
Request.send(plugin, sender, "GetServers");
public static void send(Plugin plugin, Player player, String type) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF(type);
player.sendPluginMessage(plugin, plugin.getName().toLowerCase()+":default", out.toByteArray());
}
so i'm trying to send a message to the bungee proxy to get all servers as a response, however the onPluginMessageReceived is never triggered
this.getServer().getMessenger().registerOutgoingPluginChannel(this, this.getName().toLowerCase()+":default");
this.getServer().getMessenger().registerIncomingPluginChannel(this, this.getName().toLowerCase()+":default", new BasicPluginMessageListener(this));
both are registered too
i'm not sure if i should see this happen on the bungee console
cuz nothing is appearing there
is it registered on the proxy too?
I just recall plugin messages being dumb because of the enforcement over places
hmm no i didnt add anything to bungee, i thought i wouldnt have to since its default messages
Plugin messages and the way the API works iirc was kinda dumb
is there an alternative to plugin messages then?
use a messaging service?
such as?
Spin up a java server in the background and let the plugins communicate that way
Ah, yea, you should just be able to register it on the proxy
sounds overkill
and then it should register it to the server
Well, messaging service would generally be along the lines of a proper messaging broker, rabbit, redis, etc
i just need to get a list of online servers, and get essentials warps from all servers, i really dont want to start messing with reddis and shit for that
Many hosts these days don't really give you the ability to have an extra server instance
Well, extra port
can something just work for once
like this?
yes
is there a way to list plugins on bungee?
welp, its in the logs but still not working
built in command? no
I just added my own /bplugins command to my core plugin ¯_(ツ)_/¯
so should the proxy show plugin messages sent to it?
no
sigh
Why would it show them?
Would be spammy af if it did
make your plugin listener log them
yeah well now i have no clue why its not working, cuz its sending and not receiving
yeah thats the thing
its not getting them
if it's not recieving then it's likely not registered somewhere or you're sending it the wrong place or something
this.getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL_NAME);
this.getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL_NAME, new BasicPluginMessageListener(this));
In onEnable
careful there
my BasicPluginMessageListener implements PluginMessageListener and implements the onPluginMessageReceived method, so that should be fine
since youre registering both ways you need to make sure the sender is instance of server
and not player
I mean, not registering both way means that your channel is exploitable if you are listening on the same name on the Paper side...
Well, you just need to make the plugin discard any plugin messages from the client
^
(and make it not send the message to clients either)
that really doesnt matter if i cant make it work in the first place
do try it with a normal event handler
on bungee i have this: this.getProxy().registerChannel(CHANNEL_NAME);
did you fix the thing we said in #waterfall-help as I somehow ended in there
the sending of the thing
oh yeah
player.sendPluginMessage(plugin, BungeeWideWarps.CHANNEL_NAME, out.toByteArray());
should this not be player then?
No
you need to send it to the server
right
You mean for player., that's fine
if you send it to the player it gets sent to the client
you hijack the players connection
You need to make your proxy listener
- ignore packets from the client
- cancel the packet from being sent to the client from the server
uhu, but i'm not getting the packet there yet.
so
plugin.getServer().sendPluginMessage(plugin, BungeeWideWarps.CHANNEL_NAME, out.toByteArray());
then?
does the exact same thing as before
reee
all packets are sent from the servers by a players connection
then i have no clue why i'm not receiving anything in the eventlistener
did you register the event?
isnt that what this.getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL_NAME, new BasicPluginMessageListener(this)); does?
no
bruh
wait, wut
That's on the server.
You're not wanting the server to recieve the message right now
You're wanting the proxy to recieve the message
wat wat
You're sending a message from the server
Where do you think a message sent from the server, is going to go?
to the proxy, and i assumed it would send back the response to the server?
you need to register a listener for the PluginMessageEvent on the proxy
i see
No, the proxy does nothing with plugin messages bar passing them through by default
not sure how you think the server proxy would know how to respond to your custom plugin message?
cuz its a built in message?
My thought process was:
Plugin sends message to proxy on channel x requesting "GetServers"
Proxy replies to plugin with the serverlist
plugin handles it
No, no, no
- if you want to use bungees own messaging stuff, e.g. GetServer, you use bungees own messaging channel
You can't just create your own channel and expect the proxy to hijack it
That would be dumb
oh
no
it's called the bungeecord messaging channel for a reason
ok, so change the channel name, register the event on the proxy for other channels?
yes
gotcha
also, should i cache such requests or are they fast and inexpensive enough to not worry?
They're sorta like broadcasts
I mean, with standard Bungee you can't even add or remove servers on runtime ¯_(ツ)_/¯
You send a packet, you get one at some point
fair
aight got it working, thanks a bunch
https://github.com/leonardosnt/BungeeChannelApi apparently this is a thing too
An easy way to work with the "BungeeCord Plugin Messaging Channel" (https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/) - leonardosnt/BungeeChannelApi
am confusion:
org.bukkit.plugin.messaging.ChannelNotRegisteredException: Attempted to send a plugin message through the unregistered channel 'bungeecord:warps'.
public static String CHANNEL_NAME = "bungeecord:warps";
//onEnable
this.getProxy().registerChannel(CHANNEL_NAME);
plugin is enabled on the proxy too
oh nvm forgot to register them on the client
bungee is weird
How do you send a plugin message to a specific server?
also i take it you cant get data from a server that doesnt have players?
HEY, i tried to fork (use the code and modify it) waterfall but waterfall is reseting somehow the code in the file:
C:\Users<user>\Documents\GitHub\Waterfall\Waterfall-Proxy\proxy\src\main\java\net\md_5\bungee\command\CommandBungee.jar
Does anyone knows how ti fix the reset of this file???
git reset --hard HEAD
will reset all the changes since the last commit
you have been warned
Does anyone knows how ti fix the reset of this file???
please articulate what you want to do, if not that
i want to change a specific file and recompile it WITHOUT a reset
but if i change the file somehow it gets a reset
probably some issue with whatever editor or environment you are using
i was changing the code with notepad and tried to compile it with git bash (./waterfall b) but ehh... ye it just reseted
https://github.com/Xernium/Waterfall/commit/064c5c99ca3bc2b45cc64b16a605e0cfd84d516d I suspect somewhere around the next snapshots is where the big changes will be
@ zzzCat, the disable entity meta rewrite patch is alright and works
the == conditions will only ever apply if its an integer instance. The tags in 1.16 will never be the same object so it can never reach the integer cast inside
I did confirm that when I did the 1.16 update for waterfall and I now remember
does the BungeeCord channel also only work when a player is on the server?
if thats the case, how does one obtain the id of a connected server?
i'll do it myself then
plugin channels use the player's network connection to transfer packets
so yes they require a player
id?
the proxy
api lol
anything more specific?
ik you can do out.writeUTF("GetServer"); but that requires a player to be online
on startup of the mc server
but i cant do that since there are no players online then
if i can obtain it from the proxy myself i can send it over my own connection
ah okay then ur out of luck
you'll need to either make ur own socket, use something like redis, or read from the bungee config file lul
i have my own socket
i just need a way to obtain the name associated with the connection ig
is there some way to know when the proxy is back online?
i'm using my own socket but if the proxy goes down so does the connection and i have no way of reinstating it other than restarting
i could trigger a timed connection attempt if the connection is lost, but its not ideal
like i said yesterday, spigot servers have no information about the proxy
Anyone know of any Bungee/Waterfall Prometheus exporters? (not sure if this is the right channel to ask this)
So why does teleporting to other servers work without other players online? I mean obviously it has to for anyone to ever connect. But how is it different from the other plugin messages
Because TCP requires a connection to be established to send data
the server does not have a means of opening a rando channel just for plugin messages
Fair enough
So the server switching just does the handshake again.
Yeah that makes sense now you say it lol
What's up with velocity : how does it compare to waterfall
@rough trout https://velocitypowered.com/wiki/users/what-does-velocity-do-for-me/
Velocity is different from Waterfall, but it's effectively the replacement for Waterfall.
There are many reasons why you should consider Velocity for your next proxy setup. At the same time, however, it is also important to tackle…
Waterfall is only around to satisfy the needs of legacy setups, if you are starting a server today you should use Velocity.
Ahh, i see. I've never used the API, how does it differ from that of the bungeecord api?
It's different but it's much better
sounds... interesting
@brittle panther yo. I looked at the source right now and I can’t think of a valid reason this should happen. I can’t think of anything that can invoke it either, would you mind assisting me in reproducing it? It might very well be something with the changes I made
I might also add, the version of ViaVersion that is installed on your instance is an old broken dev instance

The error if code only question is https://github.com/SpigotMC/BungeeCord/blob/master/chat/src/main/java/net/md_5/bungee/api/chat/TranslatableComponent.java#L179
Huh?
Oh, by the way, I already tried it with a newer ViaVersion.
@wide maple do you mind bringing this to DMs or do you want to stay in here?
Yeah. That is the piece of code that breaks it. Which is what made me think they might have changed something with TraslatableText in Fabric / Minecraft.
Okay. Now it is just saying multiplayer.disconnect.incompatible
@brittle panther try with this version of ViaVersion, the corresponding ViaBackwards to use is also linked on that site https://github.com/Xernium/ViaVersion/releases/tag/20w51a-fix01
@brittle panther did you try that already or no?
yeah,. Just tried it. Still same error.
Are you getting any errors when you try to connect to a 1.17 (20w51a) server on your test network?
@brittle panther add me as friend. This is gonna be somewhat lengthy
done
Does Waterfall support Java 15?
i have a waterfallserver runnning on my server, which has java 15, and it works great
depends on your plugins. Waterfall should be able to run on java 15
however your plugins may not be able to. The Via plugins are an example of that
Via shouldn't be running on the proxy anyways, and they work fine on paper with java 15
^
what packet is used while proxy plugin is sends a message to the player on bukkit server?
you mean a plugin message or..?
Are you trying to cancel or intercept a chat message that is displayed on the players client or an internal plugin channel server-proxy message?
Don’t call it channel if it’s a chat message. It’s just a message. People will get confused, the only channel there is in the minecraft protocol is either the register or plugin channel
Let me quickly check against the api
I checked and it looks like there is no API for interacting messages originating from the proxy or the server
Someone correct me if I’m wrong
But I don’t think there is an intended way to cancel chat messages from downstream
Ok, thanks
hey everyone I just want to do 2 bungeecord gateway for ddos protection. How can I connect bungeecord to bungeecord (or maybe tcp forwarding without leaking real ip address) I have 1 powerful non-ddos protection server and weak full ddos protection server and also I'm gonna connect directly that means I need first bungeecord too...
bungee in bungee is not supported
Don’t do that. That’s unsupported
use haproxy
Yea use something like HAProxy or even TCPShield if you need something against DDoS
thank you i will check HaProxy
bruhhhh, bungee-ception
I want to use the waterfall-api from the maven papermc repo but I'm unable to use it. Using paper-api or spigot-api works fine but with waterfall-api there is only the message Could not resolve io.github.waterfallmc:waterfall-api:1.16-R0.4-SNAPSHOT.
I’d advise you to clean your maven cache
what exactly is the ProxyQueryEvent
"This event will be posted whenever a Query request is received."
When does this actually get fired
nvm it's not useful
How do I go about sending a message to a ProxiedPlayer? I have a "broadcast" plugin that takes entries from config and broadcasts across all servers (sends message to all players)
proxiedPlayer.sendMessage(TextComponent.fromLegacyText(""))
Does this accept colour codes like &aGreen &bBlue?
(please note this is my first attempt at a bungee/waterfall plugin 😄)
it accepts § colour codes
to convert & codes to § codes, use ChatColor.translateAlternateColorCodes
I recommend taking a look at velocity, by the way. It has a much nicer API
on velocity you can use full components without being burdened by bungee-chat
thanks to adventure support
thanks! so would i do something like this?
proxiedPlayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', messageString)))
I have tried velocity before and had trouble getting it working, maybe i'll give it another shot in future
that will work, yes
i use TCPShield but pings are so high with 40 players, is this normal or are there any settings for ubuntu single connection unlimited data flow or sth like that :/
Hello, I have a question:
Is it possible to get a players skin texture with a bungeecord plugin? I don't mind extracting the data using reflections if thats required.
To a degree, yes
the packet for the player being added to the list is sent through the proxy, not sure if there is an event for that
but, you can get the json passed for that, you'd need to decode the json and grab the texture URL from it, however
Nice. Can you give me a little tip, where I can look for information on how to read that data, so I can figure out how to do this?
as I said, I got no idea if there is an event or not
easy option would be to register your own tab list rewriter thing, not sure where the API for that is but pretty sure there is one for that
But, the proxy doesn't store that info
I think I can start from there. Many thanks.
I have another general question. Are there truly asynchronous events?
I want to do some db querying when a player logs in and don't want to black the whole proxy for all other players, so I want to do this asynchronously.
But even my custom async event blocks the proxy for the whole duration its event handlers take.
So if one login takes 1 second, 10 logins will take 10 seconds and not just one.
If I use the scheduler the player connects even before the task has finished, which I don't want.
Is there a better was of doing this?
the async events are called on the relevant threads, you'd need to jump off the thread yourself, and then finish the intent
use the AsyncEvent registerIntent / completeIntent API
then you don't have to block the execution of the event, but can resume it asynchronously
And this will ensure that the player only connects, after the async stuff is finished?
So that the player isn't online on the server before the db was queried
Yes, the logic after the event only runs when you call completeIntent after all the intents are done
?
did you add the paper repo?
I got the async, non blocking event to work, thanks for the help there.
Is this also possible for normal Events like the ServerConnectedEvent?
I want to edit Values in redis in an ServerConnected Eventlistener, but don't want to block other players from connecting to server. But I also don't want the player to connect before the values are set in redis.
Is that possible?
Nope, you'd need to deal with it in an earlier event, basically
bungee does pretty much all the things in the event loop pretty much
in what cases does "Already connecting to this server" trigger? my plugin message is only sent once, but occasionally it'll trigger that message

