#waterfall-dev
1 messages · Page 8 of 1
so some Citizens setup is not on the table
Commissioning to get this coded is on the table, but at the moment I just want to know how possible this is
(Fabric does support being under a proxy btw, there's a recent mod that allows this)
anyway basically it's possible as long as person who gets the task is able to think and write code
of course there aren't premade solutions available
everything has to be done from scratch
however since you're sitting on fabric then nothing stops you from writing a decent solution - mappings are pretty decent and their toolchain is even better
The best, in order to reduce development time, would be to have as little server modding needed as possible and have most of the work be done proxy level
at least thats what I'd assume
Of course if a little is required to make the server's behave, thats fine
How difficult would it be/about how much would this go for
moving it on proxy level makes things harder
It does?
not significantly but you'd need to start implementing packets on proxy which aren't there already
vs you have full blown server already aware of all the packets
wouldn't a player statue that has packets communicated to it through server side have a lot more latency?
tbh replicating all packets from all server to all players shouldn't be too hard
not all packets, selectively
all movement related, whatever
yeah
oh, wait, I thought you wanted to display the full audience to everyone
so you just want to send the dj?
I assume you are aware of what Monstercat did once?
Its better if the full audience is not sent, for performance reasons
I am not aware of that
they did basically just that, but it required a modded client
why would it require a modded client
.g monstercat minecraft concert
(phoenix616) https://www.youtube.com/watch?v=S-carLXQfeA -- Monstercat Charity Minecraft Concert -- Day 1 - YouTube: "Jul 13, 2013 ... Buy games for half the price! Check it out here! https://www.g2a.com/r/boomey30 All credit goes to all the monstercat artists! Buy..."
Buy games for half the price! Check it out here! https://www.g2a.com/r/boomey30
All credit goes to all the monstercat artists! Buy their music here! http://www.monstercat.com/music
It's crazy to see what is possible in minecraft! Thank you again, monstercat for such a great ...
for effects, music, direct joining. stuff like that
oh fancy lighting
of course a lot more is doable with the vanilla client nowadays
music will be handled on a website
and the light show will be guardian beams/ender dragon healing beams/beacons
probably particles too, but hopefully not too much because post 1.13 clients can't handle that many of those
my server did a similar show (for one song) once but it was all pre-programmed: https://www.youtube.com/watch?v=Q85AdF8mNAo
Show von Spargelbauer7 zum 4. Geburtstag des deutschsprachigen Minecraft-Servers Minebench.de
Homepage: https://minebench.de
MC-Server: s.minebench.de
Song:
Let It Go 'Frozen OST' Club Mix (Tiësto, Allure - Pair Of Dice - GINJO Mash Up)
https://www.youtube.com/watch?v=Xjmrg...
(phoenix616) Minebench 4. B-Day: "Let It Go"-Show - length 3m 51s - 23 likes, 1 dislike (95.8%) - 546 views - Moep.tv on 2015.06.21
this will all be pre-programmed as well
except for the artist's movements though that is
anyway i'd implement it like this:
- so-called master server has the dj and a mod sends all the needed info over tcp to daemon which should broadcast all required data to slave servers
- slave servers connect to the daemon using mod, spawn the player and proceed processing movement etc
all the sets will be pre-recorded
I'm actually thinking about automatically creating light shows for songs right now (with the goal of doing it in minecraft for now)
it's definitly an interesting concept ;D
latency is practically near to zero
the light shows are all hard coded atm, and aren't specialized to the sets afaik
phoenix do you agree a server level system like zzikro is proposing would be the best?
sounds like it should work
that's one possible solution and perhaps the easiest
daemon uses widely known pub-sub pattern, O(n) where n=servers count send operation shouldn't be really bad either
(not being rude just trying to get as many eyes/opinions) phoenix do you think it would be easier than doing it on the proxy as well?
yeah understandable, there are always multiple possible solutions :p
I personally would just replicate the packets on the proxy but ¯_(ツ)_/¯
both versions have their benefits I guess
What would be the benefit of proxy level over the server mod?
my vision is that if it's handled separately then you have greater control over spawning the dj
(e.g. only replicating on the proxy would limit you to a setup where everywhere is connected to one proxy)
and the benefit over a server mod would be that you don't need to mod the server xD
The time table we're working with does not allow for that complex of a system
I believe we're only using a single proxy
how much do you have time?
The festival is on March 28th/29th
writing such system takes 1-2 days if you include testing, fixing etc
most of the time goes into server mod
and least into the broadcasting service
which is literally pub-sub thingy
They have a dev for the broadcast
again this would be a fabric mod
so?
So they wouldn't be working with a cushy API like bukkit or sponge
it's rather good than bad
Oh cool
no u
waterfall - 1.8 -> 1.15
travertine - 1.7 -> 1.15
what?
Phoenix
would you be interested in setting this sort of thing up
(just trying to know our options, ziikro didn't say no)
is there a way to ping an IRC member?
(I assume thats what the bot is)
just say their nick
yes yes
k lol thanks
feel free to shoot me a pm on spigot or an email directly (contact data is on my website)
Okay
check if the origin server is null in the switch event
I ended up using ServerConnectEvent and checking reason was plugin or command
wouldn't neither work there though?
oh wait, I guess there is a third one or null?
well this is how I did it by checking the player server, apparently I used the connect event too: http://git.io/fj0sP
Yeah, checking if the server is null there works as well 🙂
Hey, anyone know how to add a forced host via code? 🙂
I added bungeecord to gradle. Everything can be found fine but when i try to use BungeeCord import net.md_5.bungee.BungeeCord; it cannnot be found. why?
got it.
Anyone here experienced in gradle?
Like i am making a big core. and yes it already includes tons of code. But why is it already 13MB and putting all those packages & classess inside the jar?
https://i.insanemc.net/4pLVDR8Wi4.gif (used to code with maven. Gradle is new for me)
you ran into same issue with maven very likely as well
you usually need to exclude dependencies from being included into the fat jar
I've never had this issue before.
because usually dependencies declare their own dependency scopes wrong
or you've configured stuff wrongly
this is what i have atm in build.gradle
tldr triple check your dependency scopes
not enough information
run gradle dependency:tree
sec
Hey, im trying to find a way to get the source and apply patches properly. Im novice at this but i want to help out applying my patches with .patch files.
I have been like 2 years trying to figure this out without success.
I can't even get the source building with git bash. I don't know what im doing wrong.
I had to make a fork by modifying a decompiled source. So messy.
it's literally on the github
im new to github sorry
where can i find it?
I cant see any docs link in the gh page
do you actually know java?
yeah
i've never worked with other people
or with repos
i just started like
some months ago
with basic maven stuff
and like ~1 year ago with java coding
i was blinded by intellij, i was never able to completelly know how maven worked until i decided to get to vscode and have a raw look to it
Oh man
Thanks
If i knew this 2 years ago...
Im so relieved
So md files are basically docs right?
@bleak current So i sort of got it. but not fully yet.
So it's now building without the things that was on the screen before.
But now it only adds manifest somehow. Do you know why?
https://paste.helpch.at/ebovijazax.cs
I am using btw multiple modules
Btw what if i want to modify a patch? Is this possible?

Wait LinsaFTW
I know you
You're the developer of ExploitFixer
Cool plugin and nice fixes
thanks, yeah, im trying to patch this bcord stuff
Yeah I haven't figured out how to use the patches system as well lol I might ask as well
@civic valve But will this replace the existing patch? I dont really know how this commit system works really.
im so confused
I will better try and experience, i think its the best way to learn gb and thanks.
Btw is it normal that vscode is giving errors?
most of stuff is red like wrong syntax missing stuff
i have java red hat & maven extensions
but like the format of travertine is even wrong... there are final fields without being initialized... why is this like this?
ugh... its so hard to work with this
i have to fully recode some parts but theyhave a patch over and i have to start searching for the patches conflicting
isnt there a way to get the entire source and compile it directly with the patches included?
It seems it is ignoring the folder to take the patches from
oh i had to do git add . on the travertine-proxy folder not the main one
well its not resolving imports when trying to build with my patches. Weird.
maybe ill continue this another day.
Just if someone wants to help i would be really grateful. Thanks. I cant even compile vanilla BungeeCord because of random errors in the code even if following the docs. I don't know what to do.
probs because lombok
lombok ❤️
.lombok
[03:01:27] <gabizou> fuck you and the lombok horse you rode in on
ugh... isnt that for noobs?
no, but it's just bleh
anyways, it doesnt seem to be a lombok issue, but final fields seems to give error "not initialized"
or maybe it is a lombok issue...
lombok is really nice when the only people who use your code know exactly how lombok works
Or "constructor not found" there are like 500 checkstyle errors
it would be nice to add this to the info, i thought it was just for maven
thanks
It works... you made my day
but now its like when compiling it shows errors but on the ide it doesnt
Hey zzzCat
Is there a way to get the forced host that a player joined the proxy using?
pretty sure there is a method to get the listener address the player connected to
I would assume getSocketAddress would contain the address used
Would that give the subdomain used in the forced host? Or at least, be able to differentiate between a forced host and not
I thought the actual listener address would just be the IP of the interface used
try it? or take a look at what the proxy itself uses for that I guess
might be PendingConnection#getVirtualHost actually
Is there a way to get the forced host that a player joined the proxy using?
yeah that
Nice, thank you
Hi, I need some help compiling Waterfall, I closed the repo from github, not sure what Clone this repo, but I cannot find Waterfall-Proxy module.
Maybe I did something wrong here: Clone this repo, run ./waterfall b from bash, get jar from Waterfall-Proxy/bootstrap/target/ ?
you need to actually clone therepo with git
and then run the thing in git-bash or WSL or something
Thanks, got it, it will be great if this will be added in the readme file, I see others opened tickets asking this on github 👍
IS there a method to check if a player is connected to a specific server on the network? I know there is ProxiedPlayer.IsConnected() but that returns true if the player is connected to any server on the network, I need to know if the player is connected to a specific server
Ah right
I'm assuming the GetName() method just returns the name of the server specified in waterfall's config.yml?
is p.getPendingConnection().getVirtualHost() returning the subdomain / ip with port the player tries to connect to? understanding that right?
it should
how can you talk as you were a bot, does it remove your message and then the bot post the content ? 
IRC bridge
Hello guys, we are developping a waterfall plugin that modify the server MOTD depending on a ping request, but we already have a plugin that modify the MOTD, is there any way to "call" our plugin after the other one ? We tried to rename the plugin so ours is lower in the list (that's how forge load mods)
Use the depend thing on your plugin yml
i don't have a plugin yml
bungee.yml?
set the priority of the event handler to a higher priority
It works, thanks
I tried building Travertine (and Waterfall) but it keeps saying that the pom.xml file does not exist when it is clearly there. Am I doing something wrong when building? I am running 'mvn clean package' after I have cloned it.
run the script, as per the readme
Hello ! I have a problem with Bungee, someone can help me ?
If you tell us the problem @leaden kindle
A waste of conversational bandwidth, be it spoken or digital.
https://www.urbandictionary.com/define.php?term=metaquestion
I have a plugin which change user's group on a server and I want to change the group on another server and I try to use plugin message channel but it doesn't work, I don't have errors but on the other server nothing append.
My plugin is in the both servers.
I tried to use another plugin on the proxy which listen the channel and send to a server the same info and in this server my plugin listen the channel. But the plugin on the proxy doesn't receive any message
in order to send plugin messages to a server there needs to be a player on the sending and receiving server
Time for some fun with Databases 🙃 ||It's not as complicated as it seems at first||
it is
I hope that's not what he's doing
databases are meant to store huge quantites of data
Oh ok, if has nobody on the server it doesn't work ?
yeah, the plugin messaging channel between servers is just built ontop of the vanilla plugin messaging channel, it requires a player connection
Time for some fun with Databases 🙃 ||It's not as complicated as it seems at first||
@upper fiber Did you look into PlotSquared 4? Hopefully they are releasing their v5 in the next month. Short: PS4 saves its flag in one row atm. 😄

PS4 saves its flag in one row atm
Let's pretend nobody saw that @outer cosmos
is waterfall better protected then bungee? in terms of exploits and stuff
there are some small performance improvements but I don't think there are any (known) exploits in bungee?
yes
nice 😮
What is the Repo from Waterfall
Did waterfall remove the getFrom() method from ServerSwitchEvent that is used to get the server info of the server the player switched from?
I can see it in the bungee javadocs and not in the waterfall ones, and it obviously gives an undefined method error when trying to call it in waterfall
I'm trying to handle the event using both the server the player is connecting to using ProxiedPlayer.getServer and the server the player is connecting from. How can I do this in waterfall?
it is yea
Ahh right
I'll just switch to bungee for now then
Oh wow, didn't see it was only 5 days ago on bungee haha, that's convenient. Glad I didn't start working on this any earlier
You can't send plugin messages without players online
You could use something like Netty or a DB
@lyric cipher
afaik thats's just not what plugin messages are made and thought for
yea the whole point is that the servers on a network are all independent servers. they're not aware of each other
plugin channels just hijack server<->client connections to route a message server<->server, but still needs a client connection to do so
It is.
Because plugin messages won't work
Could use sockets if you don't want to use a database.
your options are pretty much a raw socket connection where you can send your own sort of messages, or a MQ that's actually designed for this like redis (or any other sort of pub/sub system really)
What is the Repo from Waterfall?
guys 🙂
p.getPendingConnection().getListener().getFallbackServer()
is deprecated what is the new thing from that
2nd server in servers list
@bleak current ? in wich list ? prioritylist ?
lemme see
yes
@Deprecated
public String getFallbackServer()
{
return ( serverPriority.size() > 1 ) ? serverPriority.get( 1 ) : getDefaultServer();
}
idk, is it?
perhaps then!
if you can't understand the code then you don't have any choice but
.try
Is there a way to distinguish a "real" server join from a server join from one server to another?
i mean the thing is basically that a server switch essentially makes the client leave one server and join another
So I'd have to do something like
Waterfall makes player switch servers -> notifies receiving server via something like redis -> server knows from redis
?
basically, yes; or do it at the proxy level
from what i understand yea, but i am not too familiar with the process tbh
Thanks
I'm doing this with Redis, realtime info about everything, players and servers
depends on the implementation and all that
waterfall doesn't even have a main thread, so... yea...
implementation of the library you're using
There is likely a handful of people in here that have actually played with rabbit
You'd be much faster and get concrete answers if you actually test the behavior yourself, or read the javadocs/google, etc
use a profiler or something
look at the code
it blocks main if it blocks main
Are there some additional APIs with Waterfall? I thought the changes were only for the server
ping cat
bungee doesn't have a main thread
you are fundamentally misunderstanding how bungee works
I need to be able to check what server someone switched from and to. However, the ServerSwitchEvent doesn't have a getFrom() method like in BungeeCord. Why is this? Is there some alternative I'm missing?
maybe do it like here described: https://www.spigotmc.org/threads/serverswitchevent-get-source-and-destination.82657/ but i dont know whether it is "stable"
Swedz, that method was basically only recently added to bungee, it'll be in waterfall once it builds
Oh my b
Didn't realize it was a new feature
As of right now, I'm dynamically adding servers like this:
public static ServerInfo addServer(String serverName, String motd, String hostname, int port, boolean restricted) {
ServerInfo serverInfo = getInstance().getProxy().constructServerInfo(serverName, new InetSocketAddress(hostname, port), motd, restricted);
return getInstance().getProxy().getConfig().addServer(serverInfo);
}
However I'm looking to get the servers to be retained over reboots. I don't see any save() (or similar) methods in the ProxyConfig class, so I'm not sure what to do.
Also, just now seeing that ProxyConfig is deprecated. What is the correct way to be doing this?
Is there timings for waterfall or anything equivalent to it?
Afaik waterfall/bungee doesn't have a "tps" but you can do network testing using some other software
no, bungee doesn't "tick"
you can run spark on it
What methods are available in waterfall that are not available in regular bungee? Anything related to forge?
BungeeCord has very bad forge support, and so Waterfall
modern forge is not supported at all yeah
what you guys think is the problem for that? the designing of bungeecord or the designing of forge?
yes
designed by two separate groups with their own ideas completely independent of each other
bungee has sort of gone into "if forge works that's great but we're not gonna put a lot of work into it" mode
waterfall is more open to that sort of thing but it's still work that needs to be done afaik
thats completely ignoring mods too which can throw a giant wrench in it depending on what they do so, it's a fun time
z sounds like cat now
maybe Im just cat with a different username
it was cat all along
cat is everywhere
that explains why cat is so tired all the time
Hey, so I'm looking at the docs and I see two events for TabComplete: TabCompleteEvent and TabCompleteResponseEvent, If i wanted to control bungee tab responses i'd work with the former and if i wanted to work with paper server suggestions i'd use the last right
Is it possible to create a plugin for waterfall to intercept and modify the coordinates sent to the client with a fixed off-set per player (e.g X = X + 50,000 and Z = Z - 13,000)
possible yes...but keep in mind there's a lot of oddities about how coords are sent between server and client
you mean spawn join ?
a lot of packets actually have relative coords
I haven't understood his question
pretty sure they literally just mean all coords in packets
Yeah
so the player thinks they are in some other part of the world than they really are
The server knows the player’s real coordinates however is shown a different set of coordinates (passed through some reversible function)
Is what I’m trying to achieve
you'd need to offset the entire world to the client
yeah, including chunks
christiandobbie: saw someone try that and they ran into some very odd issues even when changing all packets (or so they claimed)
lmao imagine caring about performance and running on windows
(DiscordBot) https://ziglang.org/ -- The Zig Programming Language: "Zig is a general-purpose programming language and toolchain for maintaining ... zig build-exe --c-source hello.c --library c --verbose-cc zig cc -MD..."
Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
zig
windows is still 🤢
does using player.sendMessage("hello"), via paper, trigger any waterfall events?
No.
😭
Why would you need that?
You can use https://github.com/Exceptionflug/protocolize if you want to catch the packet
It’s kinda pretty
w w wwhyyy
@EventHandler
public void onLogin(LoginEvent event) {
if (event.getConnection() instanceof ProxiedPlayer) {
ProxiedPlayer player = (ProxiedPlayer) event.getConnection();
broadcastAll(String.format(
"&e%s joined the game.",
player.getName()
));
}
This doesn't trigger, can't I use the LoginEvent? I use other events so the listener is registered.
more than likely waaay too early if you want the connecting player to see it
is there a recommended event for it?
probably server connected event or something like that
PostLoginEvent worked!
Where in BungeeCord/Waterfall is the server brand when the client pings there server stored?
I don't think it is
see how ping response is generated
ProxyPingEvent
Oh...
Then modify the response
iirc ping is handled in InitialHandler
iirc ping is handled in InitialHandler
Yeah, I found
public void handle(LegacyPing ping) throws Exception
{
this.legacy = true;
final boolean v1_5 = ping.isV1_5();
ServerPing legacy = new ServerPing( new ServerPing.Protocol( bungee.getName() + " " + bungee.getGameVersion(), bungee.getProtocolVersion() ),
new ServerPing.Players( listener.getMaxPlayers(), bungee.getOnlineCount(), null ),
new TextComponent( TextComponent.fromLegacyText( listener.getMotd() ) ), (Favicon) null );```
in InitialHandler.java
If you want to change that, then listen for the packet and change the ServerPing object
But, that is legacy ping AND bungee.getName returns the value I want (but the ping still says Waterfall)
That should be modifiable through ProxyPingEvent, nah?
Again, look references on IJ
I'm not on IJ...
InitialHandler does ping response yeah
handle(StatusRequest ...)
Atom ⚛️
jesus christ
when do people learn that you cannot keep using dumb text editors for stuff
use atom for at most writing essays and nothing else
it's a glorified text editor
Here, save some nerves -> https://www.jetbrains.com/idea/download/
it's a fucking shit in an electron wrapper
I have IJ.
I just don't open it when making small tweaks (or what should be a small tweak...)
which lost in competition to another shit in electron wrapper called vsc
VSC is awesome
I mean, if you're using it for mostly text-editor level stuff, it's awesome
actually using it...
god
public void handle(StatusRequest statusRequest) throws Exception
{
Preconditions.checkState( thisState == State.STATUS, "Not expecting STATUS" );
ServerInfo forced = AbstractReconnectHandler.getForcedHost( this );
final String motd = ( forced != null ) ? forced.getMotd() : listener.getMotd();
final int protocol = ( ProtocolConstants.SUPPORTED_VERSION_IDS.contains( handshake.getProtocolVersion() ) ) ? handshake.getProtocolVersion() : bungee.getProtocolVersion();
Callback<ServerPing> pingBack = new Callback<ServerPing>()```
well yes, definitely better than atom, np++ etc.
I would rather be locked in a room with simple

See code above
Just, make sure you install evil-mode, gotta get a good text editor
I see supported versions, but everything seems to omit the Waterfall part...
Well where is it?
watch your attitude
Then do Ctrl + F
And guess what: getName() returns my proxy name
pull out IDE already
And yet it still says Waterfall
there's literally a method named getPingInfo in IH...
1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16 (Waterfall)
has mojanged started preleases yet
no
@Override
public String getName()
{
return "HyperFall";
}```
BungeeCord.java
Ping: 1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16 (Waterfall)
🤔
Then probably you didnt update the jar correctly
mvn clean and rebuild...
that should've been one of the first things
¯\_(ツ)_/¯
Nevermind, cleaned the second time.
Yes lol.
If I use PostLoginEvent and in its function I use getProxy().getPlayers(), does that include the joined player in the event?
How do i compile Waterfall to get a sources-file for maven?
@bleak current yes
should be gasrise
Hello, I decompiled the waterfall project and now I would start it but:
ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
ERROR StatusLogger Unrecognized format specifier [d]
why would you decompile it
because I want to add some functions
you can add custom patches.
how?
l m a o
the readme should contain the information necessary to do that
if you wanna modify waterfall, look at travertine
travertine?
assuming you're not planning to create a PR, travertine basically has the magic to maintain patches over waterfall
@bleak current what are you actually trying to do/change
@bleak current what are you actually trying to do/change
@civic valveI want to add new commands, new modules and a RestAPI
why can't you do that with a plugin?
if you wanna modify waterfall, look at travertine
@trail plume travertine also gives me a mistake: https://hastebin.com/gidaleduwo.bash
are you decompiling and recompiling once again...?
don't do that
if you want to build a fork of waterfall, clone travertine, yeet out the patches it has and add your own
and change other branding
it's easy
wut are you even?
if that's actually a real travertine jar and not one you've messed with, onedrive BS? assuming you clipped out your name from there, otherwise, god knows
for (ProxiedPlayer player : getProxy().getPlayers()) {
// some code
}
Stupid question, but is it safe to do this?
The code is called by a scheduler using getScheduler().schedule(...).
I think so
also since it's a collection you can use the forEach() method btw
getProxy().getPlayers().forEach(player -> ...)
don't know if this has helped you 😁
This one is not from stream api
ah yes right nvm
Offtopic question, what is better? forEach() method or classic foreach loop?
I heard that forEach is less memory friendly, that it creates new lambda everytime
forEach from Collection wraps the classic loop
new lambda every time
first time yeah
forEach from stream api could be memory/cpu angry
Just the Collection one, because I'm using that alot
I don't really know if the lambda thing could hurt performance
It is definitely slower than a classic for-each-loop but the performance difference is not noticable. It is fine to use it. Personally, I use it very often
Thanks ❤️
Is Waterfall Thread safe? I want to add and remove servers from different threads. I would like to avoid the async scheduler since it causes problems with other parts of my code.
Waterfall does not have a main thread from what I've been told
Is there a waterfall equivalent for ServerCommandEvent on spigot? Or at least any event I can listen to if I want to parse console commands?
So I need my plugin to load after LuckPerms so it can hook into their API, but softdepend doesn't really work from what I've tried, and depends: [LuckPerms] means the plugin won't load if LuckPerms isn't present. Any way I can do this?
Yeah, that's what softdepend tries to do on normal plugins iirc
Just doesn't work on bungeecord/waterfall, at all.
it's softdepends, not softdepend
Yeah sorry, that's what I've been trying
softdepends: [LuckPerms], plugin still loads before LuckPerms every time
that's what softdepends means, load after
Ahah, I meant loads before
I want my plugin to load after luckperms, by even with putting softdepends: [LuckPerms] it still loads before
that's odd, it shouldn't do that
wait, it might be case-sensitive, try softDepends
Yup! That was it, thank you so much
Dk why regular bukkit plugins are softdepend and bungeecord is softDepends
A little "strange" question: Does each plugin run in its own thread? Or in other words: Will I run into problems when I change the classloader in my plugin?
My problem is that I need guava 28 but Waterfall only uses 21. To fix this I want to use some classloader magic
no, they run on the network threads, basically
they can have their own threads by the scheduler, etc
you probably just wanna relocate guava and shade it in
But how do I do this? I have guava extracted to my plugin but Waterfall will not magically load my dependencies. I could recompile the whole Proxy but I want to avoid that.
Okay, cool. I will try this then. Many thanks.
Hello, does "depend: [LuckPerms]" guarantee that my plugin will stop before LuckPerms when server will be closing?
or what can guarantee it to me?
afaik it only guarantee you load after the plugin
isn't that load-before
depend will just make ur plugin not enable if that dependency isn't in the server.
and how can I achieve that my X-plugin will start after Y-plugin and stop before Y-plugin?
loadbefore and loadafter?
thanks, I had "depend: [LuckPerms]" instead of "depends: [LuckPerms]"..
Can one re-connect a player to the server they're on with the API?
Something like reconnecting while the backend server is down?
No, just like a relog.
I'm trying to add a /login-as <username> command for admins
and I thought it would be cool not to have to manually relog
could just switch to the lobby and back, no idea if reconnecting works
Is there a way to get the max player limit of a paper/spigot server on the bungee/waterfall side of things?
Without having to send a custom plugin message to show that data, preferably.
I just found a way to do it with ServerInfo#ping() nvm 😂
will I need to use a plugin to show player names on the server list again?
preferably write it myself, but I assume thats how I solve it?
you can use ServerListPlus
Is there any maven repo for waterfall available?
it's in the normal papermc repo
ah, okay. thx. maybe you could add the maven repo infos also to the github readme for waterfall 🙂
As of right now, I'm dynamically adding servers like this:
public static ServerInfo addServer(String serverName, String motd, String hostname, int port, boolean restricted) { ServerInfo serverInfo = getInstance().getProxy().constructServerInfo(serverName, new InetSocketAddress(hostname, port), motd, restricted); return getInstance().getProxy().getConfig().addServer(serverInfo); }However I'm looking to get the servers to be retained over reboots. I don't see any save() (or similar) methods in the ProxyConfig class, so I'm not sure what to do.
I never got an answer to this question 😐
you can maintain your own servers storage
You mean like in my own file and have it load all the servers on boot? That would work, but working via the bungee config would keep everything in one place.
as far as I can tell you'll have to save it manually
public static ServerInfo addServer(String serverName, String motd, String hostname, int port, boolean restricted, boolean save) {
ServerInfo serverInfo = getInstance().getProxy().constructServerInfo(serverName, new InetSocketAddress(hostname, port), motd, restricted);
ProxyConfig config = getInstance().getProxy().getConfig();
config.addServer(serverInfo);
if(save) {
YamlConfig yaml = (YamlConfig) ProxyServer.getInstance().getConfigurationAdapter();
try {
Method method = yaml.getClass().getMethod("save");
method.setAccessible(true);
method.invoke(yaml);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
ex.printStackTrace();
}
}
return serverInfo;
}
Untested, hacky, and might work 😂
mmm wait
ugh nvm lol
ill just go the manual route
your other option is to reroute whole configuration to your own configurationadapter
Guys
ReadTimeoutException : null
i get this kick issue by like 30% of my players
- this is the dev channel, not the help channel
- The exception literally says what happened, there was nothing to read in so long
do you recommend me to use any startup flags on waterfall?
just makge sure that you use g1gc, also such questions fit more into the help channel ;)
Anyone know why I can't seem to import InitialHandler?
I can import everything else fine
because it's not in api
Because you have the light theme
When does ProxiedPlayer.getUniquieId() get populated?
Is it safe to call it during LoginEvent
I'm guessing PostLoginEvent tbh
for some reason when im pinging a server the callback happens twice
once without a throwable then once with a trowable
anyone have an idea?
Figured it out my own code was causing the throwable
Felt real dumb for a bit 😂
I'm guessing it's good practice to make sure it's the expected throwable and if not print stack trace
james090500: UUID should be available in the LoginEvent, only the PreLoginEvent states that it has no additional info about the player
Can I include a default config.yml file fro my plugin with bungeecord like i can with spigot?
yes
How do I output it to the config dir? Or how do I access the file in the jar to be able to output it?
I have a config.yml in my resources dir, and its included in my pom.xml, but I don't see anything like bukkit's saveDefaultConfig
Sorry, I'm new to Java. Do I just use something like this https://stackoverflow.com/questions/3861989/preferred-way-of-loading-resources-in-java and save it in getDataFolder?
.g bungeecord plugin configuration api
(DiscordBot) https://www.spigotmc.org/wiki/using-the-bungee-configuration-system/ -- Using the Bungee Configuration System | SpigotMC - High ...: "Apr 20, 2019 ... The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy."
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
Yeah I missed this part, ty: getResourceAsStream("config.yml")
Hi guys, I'm searching something which I don't know if it is realizable (caused I haven't found it online). Do you think it is possible to put a Proxy server (like Socks5) between Waterfall and other servers ?
probably
(Instead of Client-> Waterfall -> Server make Client -> Waterfall -> Socks5 -> Server)
Ok cool so now I've to found how to figure it out 😢 Thanks
use a tunnel
Have I to do it plugin side /waterfall jar side or have I to connect through server?
you'd need to setup some form of tunnel or something and connect to it like that
Okay thanks, I'm going to try that
What is the best way to identify a server on the proxy by id or something?
Server name?
thank haha
does ServerSwitchEvent get fired on the first login switch into the first server?
what the hell is that github issue
wtf
that person is completely clueless how things work
...
jesus fuck
cat can you just ban that dude from the repos

the kid is unaware that ps is available on github
doesn't include the license
he's breaking copyright laws!
wait
it does
lmao
does PS bundle the license?
and uh...is it really agpl
following copyright in the mc community 
https://github.com/ProtocolSupport/ProtocolSupport it's actually agpl 
is agpl gpl compatible or does it necessitate agpl
i don't think it is
holy fuck block that guy
They've been banned from github before
banned name was marinaluisa2020
their whole github profile is begging for support

"Before creating a public repository, learn basic quantum physics;"
this has to be a troll right
no, a retard
barty chem major? lol inb4 works for drug labor, cooking fancy drugs
That guy has to be either incredibly dumb, a troll, or he is a deep cover parody of Deepak Chopra. Honestly I can't decide between these three.
he's doing the same thing over on the mcmmo repo right now
maybe he's just the first in a new line of mkultra test subjects
look at this https://github.com/whitepacket/Stinger-Tor/issues/4
i am trying run online but stinger.py look this error https://repl.it/repls/FrankBurlywoodMalware but here ok https://repl.it/repls/SpotlessAllContent what do i need a .onion site for? i thought th...
what do i need a .onion site for? i thought the program was executing ddos attack using proxies provided by tor browser
But, alas, the tool does something different
Python-coded Tor DoS tool with slow-GET attack and GET flood that can't be filtered.
there is no way to learn if only 1 of the objects is learning; learning is reciprocal; that is why bill gates and elon musk did not put their children in ordinary school, teachers do not want to teach, teachers just want to repeat light data to earn food to survive;
This line convinced me he is definitely a crank, and not a garden-variety troll
i am coching, psicology, neuro scientist, and full stack developer in all plataform and language, and know all universe languages;
claims to be a "full stack developer in all plataform and language"
can't even do basic research on the MC protocol
Honestly, I'm convinced they're not a troll or severely misinformed - they're in need of psychiratic help
❤️
@frigid anvil I don't know if that PR is yours or not
but could not it be good if all exceptions parent class was not Exception
maybe ProxyException
is it yours?
No the only PR to paper I have open currently is 1.16 snapshot support for Travertine. I need to move that to Waterfall
No, that's somebody else
I mean, their dumcord nick literally shares their github nick
all of the exceptions in the pr already have a root ProxyException class if you looked at the pr
Hey, i made my own waterfall fork using travertine as a base model and I was wondering when should I use the upstreamCommit script ?
Whenever you're doing a commit that updates upstream
That script just creates a commit message, basically
Humm, ok so for example, if my fork is 6 commits outdated from waterfall, i do merge > patch> rebuild patches > upstream commit ?
yes
it just creates those commit messages
Oke thanks zzz ❤️
@trail plume I have created the PR for bumping Netty https://github.com/PaperMC/Waterfall/pull/489
@trail plume any thoughts on that exception event PR?
Not really looked at it yet, but the overall intent is good
can this help with malformed packets attacks ?
yes and no
Hi, i'm starting developing a Bungee/Waterfall plugin. I found out that i will need some kind of connection between bungeecord and bukkit server. I was looking for it but the only thing I found is Plugin Messaging Channel that (if i'm not wrong) only provides me sending packets to players.
you send it to the player and the proxy intercepts it
What if there are no players on server?
then that's just not gonna work
you'd need to look into an alternative system for that
Yes i'm asking for alternative system.
e.g. opening your own http server or something, or using something like redis
redis?
.g redis
(DiscordBot) https://redis.io/ -- Redis: "Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures..."
or rabbitmq even
whatever fits
if you need to do rpc mostly then http is fine
just pull up a http server
OK, thank you.
using NanoHTTPD or Netty
Netty is harder but you'll get speed (gotta save nanoseconds smh) and don't have to bundle in another library
Are there any examles of usage of Netty with Bungee?
Nevermind I think I will do it myself. Thank you for helping me very much.
there isn't much related to bungee itself with netty
you'll simply use netty api, build up your own Bootstrap and handlers
and that's it
Also it is my first Bungee plugin, so i'm not sure if I will realy need it. Can bungeecord/watefrall do something in spigot server? (eg. set block to air, change players gamemode)
My question may seem very stupid
Not really
no, their state is entirely seperate
With some way around, everything is possible tho 
you'd need to send a message to the server to do something to the world, etc
I am using Redis for that tbh
pub/sub? 😄
ProxiedPlayer player = (ProxiedPlayer) event.getWhoClicked();
ServerInfo target = ProxyServer.getInstance().getServerInfo("survival");
player.connect(target);
Error:
[12:32:41 ERROR]: Could not pass event InventoryClickEvent to Hub v1.0-SNAPSHOT
java.lang.NoClassDefFoundError: net/md_5/bungee/api/connection/ProxiedPlayer
at com.castve.hub.Hub.onClick(Hub.java:71) ~[?:?]
Line 71:ProxiedPlayer player = (ProxiedPlayer) event.getWhoClicked();
don't mix and match bungee/bukkit api
You are using bungee API on the spigot server
use the plugin messaging channel
.g bungee messaging channel
(DiscordBot) https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ -- Bukkit & Bungee Plugin Messaging Channel | SpigotMC - High...: "Dec 21, 2018 ... The anatomy of a Plugin Message Packet is as such: The name of the "channel" (also named "tag" in BungeeCord) the plugin message..."
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
:)
@sinful swift To be honest, I use Redis for everything, paired with GSON it's just awesome and easy to do
GSON?
Google library for JSON
😇
And just like that, upstream pulls in 4.1.49.Final https://github.com/SpigotMC/BungeeCord/pull/2823
inb4 everything breaks
"please test your PRs next time" reverts
hmm, (random of ["entity meta rewriting", "holding spacebar to leak the memory and get bungee killed by kernel", "...", ...]) broke
i know, hence i said that
:p
hey, what event should I use to get the total player count whenever a player connects?

Great event
@bleak current for the entire bungeecord network use getProxy().getOnlineCount()
yeah but I want to update a counter whenever a player connects/disconnects and i don't know what event to use

not for showing in minecraft 
PostLogin is the first event after that will be incremented
like, right bang after it
and for disconnections?
PlayerDisconnectEvent
do async tasks run on their own thread pool?
yes
Yes
was ganna use taskchain but that simplifies that
taskchain won't work for waterfall
Yes
yes
At the end of the day, you gotta shove those tasks somewhere
it's either use a pool or manage your own threads, which, like...
ye I was wondering if they just dedicated like 1 thread
hey
i tried using PlayerDisconnectEvent to update my player counter but it's not updated in that event
is there any other event where it's updated?
you can just do -1
i think the player is not yet removed from the player list
totally other thing, but i just noticed that UserConnection#connect method line 264 does not use the serverConnectTimeout value of the config
looks like this: http://p.tomcraft.fr/d3d750.png
should be like this: http://p.tomcraft.fr/50f3.png
i'll try to PR but i'm quite noob at patches
you can just do -1
true lmao
Just realized that with my Netty bump patch I didn't include a comment lol
doesn't matter, it wound up in Bungee anyway, and the patch was temporary/emergency
What is the cycle for a PR to be approved ?
when cat has time and energy to merge basically
Ok 👌
cat has no energy, sad cat

lol 😂
i assume this question has been asked before, is it possible for a future feature to have an update folder for Waterfall plugins too?
i tried to pr that
that didn't go too well
so no
"it's insecure, we shouldn't promote plugins to self update themselves"
told by md5, who was surprised that same feature exists in bukkit too
yeah thats a shame, i use it a lot on my minecraft instances
oh well, ty for testing tho
you can reimplement that feature pretty easily though
if [ -d plugins/update ]; then
find plugins/update -name "*.jar" | while read -r f; do
b="$(basename "${b}")"
if [ -f plugins/"${b}" ]; then
mv -v "${f}" plugins/"${b}"
fi
done
fi
using a shell script
untested, might work
might not
ah yea true, ty m8
wizman, why //outline not work with polygonal regions
at least use #general, lol
i didn't even realize this was waterfall
I'm trying to make one addon plugin but can't find a way to disable my plugin if the dependant plugin isn't installed. Bukkit has getServer().getPluginManager().disablePlugin(this); but bungee doesn't. How can I do this?
I've tried java public void onEnable() { if (this.getProxy().getPluginManager.getPlugin(depend) == null) return; else { // do stuff } }
It works for bungee too? I didn't even consider that, thought it only worked on spigot.
Thanks.
okay, thanks
it is depends on Bungee https://github.com/SpigotMC/BungeeCord/blob/master/api/src/main/java/net/md_5/bungee/api/plugin/PluginDescription.java#L38
depend is for Bukkit ;)
I knew there was a difference x)
no
he deleted
that was 5 hrs ago smh
can you please just freaking remove delete permission from normal users?
like seriously, that's one of the worst features of discord right after message editing without history
ok, well, actually: right after their stupid permissions system which doesn't allow revoken that shit. like wtf
I guess the solution would be to crete a bot that removes and reposts all the messages. lmao
Hi, what do you think about this https://github.com/SpigotMC/BungeeCord/pull/2688, do you think you can fix it in waterfall?
fix what
if by fix you mean "revert this thing I dont like"
I doubt it, but maybe cat will bite
imo there is no need for that to begin with, it would be better for people needing more functionality to actually PR that functionality to the API
It's not about what I like, BPM (from developer of ProtocolSupport) works fine since 2015 without change, and now the bungeecord founder just have an idea, that he could merge 1 year old PR what has no other change than make some class private, because it's really bad that some plugin can edit bungeecord plugin manager.. someone could reload the plugin :O that's terrible, if he has 100 players on his server, he need to restart whole bungeecord, because reloading is bad, there could be some plugin that may not works well with reload (you would restart server anyway if the plugin failed to load)
yeah see Im still on the "no this is stupid lets not revert it" side
and your rambling response doesnt really convince me otherwise
but Im not the waterfall guy so it may still happen
"works fine" it fucking hacks internal code
And why do you think this is stupid? Maybe if you had your core server logic in bungeecord plugin with very often updates and a lot of players on your server, you would see it from a other side
If your core logic is replacing the entire plugin loader, your core logic is broken
Well, "plugin managers" are all terrible, they leak memory and a lot of plugins don't tolerate getting arbitrarily unloaded and reload, same reason why it's not recommended to use /reload
als why tf are you pushing updates "very often", that sounds like you are not testing at all
and if you really want to update stuff often: use your own module loader
I mean, pushing updates often is literally what continuous deployment is
It's not a bad thing, if you do it correctly
well imo you can't do it correctly but ¯_(ツ)_/¯
We use a full CI/CD flow at Mineteria. Trust us, you can do it.
never trust a tux
so how do you reload plugins without restarts?
Ok, but I'm plugin developer, and I don't want to restart my entire network to load newer version of the plugin, my bungeecord uses just a max of 1GB of ram and I never had ram leak, even on my minigames server I often reload my plugins because of a new features, and I also never had a leaked ram
We usually do one a day but in some cases (emergencies) we will do up to 3
also why not wait a day/week until the normal, schedules restart?
I dont have restarts at all
We don't reload plugins. We just spin up new servers and let the old ones shutdown.
uses 1GB
My servers have uptime up to 30 days, and bungeecord up to 1 year
claims he doesn't leak
wat
bungee can run fine with 512MB, hell I've used 256 before without plugins and no issues xD
We have the ability to gate things such that only part of the server can get new servers up - this is very useful as we can target emergency bugfixes where they're needed
Depends how many plugins, players, and so on, but 1GB is usage of my whole docker container, bungeecord have maybe about 500MB less, because there is whole linux
Still, unless your plugins are designed to tolerate reloads, it's not advisable. Now perhaps you use largely your own plugins - great, then this works for you. You also have the ability to remove the "dumb feature" from Waterfall yourself!
Yes, but I want to know if my PR would pass, because a lot of people are just negative about this and they don't know why
We've already had a feature request sitting around for something that would negate the specific usecase there
it's very rare that we find justification to revert an upstream change, and tbqh, I'd much rather have proper API for the behavior people are tryna aim for
not that bungees plugin system is even great for this type of thing
I never had a problem with a plugin reload in bungee or spigot, the one problem I can think of is when I reload a dependency of some plugin or when the plugin has player register and he register players only via join event
never had a problem
highlights one area in which plugins often derp this
reloading plugins on the proxy is even worse, because it's literally never expected that a plugin would reload, so they're never designed for it
Yes, why would I reload plugin what can't handle a reload, or it's dependency to some other plugin
what is and isn't reloadable is not clear to end users
If it failed, I would restart server anyway
But most of the time, I don't need to restart the server
But, as I've said, I'm not fond of the idea of just blindly reverting PRs because somebody isn't happy that their hack no longer works
If there is enough demand for it, maybe
Would be cool to have something like onReload()
But, I would sooner have proper API for the task
already does
there is the reload event
It's not like everyone updates a bungee, I haven't updated it since 2020 maybe, just now and now I found it was changed month ago, so I downgraded the bungee
yeah, plugins that support it listen for the /greload command and do their shit there
It's about the BPM works perfectly last 5 years without any modifications, and now someone mark class like private, because he don't know what to do and he want to make some commits on github
md opted to make the change
if you care that much just revert the change and be done with it? lmao
I never said that, @lilac crystal
Yes, some rando kid shoved it up, but, md agreed with the behavior
BPM = BungeePluginManager, plugin by the ProtocolSupport developer @real cave
two stupidly hacky plugins, yes
Basically, I've stated my opinion on it
with known issues xD
So I stay on build from january, and I'll wait for some proper api (there was nothing wrong with current), and I send PR to BPM
And what?
have fun with all the bugs that are in your old version
That class could have been argued to be final the entire time
(the old netty version for example)
nullping 
This is not the first case where md felt he shoulda made something final but didn't until a few years later
Either way, that's my view, I have very little inclination to revert that commit, if somebody wants to create a PR to implement proper API for the functionality there, we can look into it
But the onEnable() and onDisable() method is enough, plugin reload just do onDisable(), loads the plugin again, and call the onEnable() method, or you want to have plugin reloading built in in Waterfall?
I can do that, but there would be experts that will say that not every plugin can be reloaded, and my PR would be denied
That would be proper API if the feature was... erm... built into the API...
We've already approved the feature for a proper API on our issue tracker
There is just been pretty much 0 interest for somebody to actually build/implement such API
Maybe that was the md5 intention 
approved for waterfall
i have heavy doubts that md would consider such a pr, but 🤷♂️
But the functionality would be the same as it is now with BPM plugin, there will be nothing else than call onDisable, reload the plugin can call onEnable
Not really
It would be much easier to do in the proxy itself
proper events could be added so that plugins can deal with such state changes more gracefully, etc
So, yea, the sole intent is the same, to un/re/load plugins
The implementation on the other hand would be much more universal and viable for devs to actually pick up on if they want if there is actually proper API for the job
Or, you can do for cycle in the onEnable what would add players to player register (if there is any), that's the only problem why some plugins can't be reloaded, and there is very few of them
Because developer should be aware that onEnable should be called not only when server is starting
That's false
Bungee doesn't have reloading support built in
Nor does bungee even provide the means for them to handle this stuff safely
Docs ain't specify when plugin enables either.
Adding onReload method and telling everyone he needs to implement that would break a lot of plugins what works well with current reloading, and no one would add that method
So you should be expecting for plugin to be enabled any time.



