#waterfall-dev
1 messages Β· Page 11 of 1
π
that procedure is simple
- update submodule
- apply patches
- regenerate patches
- script generates a commit message
and that's it
sexy profile pic you got there mikro
thanks
How do I add a custom no permission message for a command? Should I do the permission checking myself?
you can set the permission-message in the plugin.yml or via Command#setPermissionMessage
oh wait
waterfall, nvm
yeah bungee
You can't, basically
you could deal with the perm check yourself, but, then the command would show to people who don't have it
hm ok
Hello, there is a way to get premium and crack in the same time ?
yes
get a cheap account from alt bin and use remaining money to get crack from local reseller
no but like funcraft
(a french network)
if i'm premium, i don't get password thing and if i'm crack, i get password thing
if they did it then there's definitely a way
you answered your own question then
because i don't find the event
go ask them
i'm here for that
idk how they did that
it's supported
because there is "online-mode" in bungee
but how i can get if the player is a crack or a premium
ask them if they're crack, if yes then apply some tape and hope they'll be ok
yes but how i know that
ask nicely
yes sorry
you're not gonna get support with offline mode here anyway
why is offline mode not supported jw?
what is "jw" ?
just wondering
ah yes (sorry i'm french)
why is offline mode not supported jw?
@jade wedge a lot of bugs can happen with it
plus it's supporting cracked accounts
we're not really a fan of pirates here
offline mode is not illegal
if offline mode was illegal, i was certainly never purchase minecraft
yeah it's not illegal
if cracked accounts were illegal, mojang would have done something about it ages ago lol
but yeh i get that
and all of the french network is offline ^^
FunCraft is offline
no
because the EULA accept this
it's one the biggest network in the world
You are legally allowed to run offline mode servers yes
you are not allowed to crack the game
offline mode's intended use is to be able to have servers work over LAN
and never have a problem with mojang
you're misunderstanding
have you tried googling your question already?
yes
but nobody do like funcraft
because if i'm premium, i don't have to type password in funcraft
i want to do the same
because such system is hard to pull off decently
if you want to lose some features, such as players not being able to change their username
or just see how your plugins start blowing up
go use FastLogin
good luck
no, i just want to know if a player is online or not
how
oh
i think i got a solution
a french network called samagames close recently
and crack was allowed
and the source code was opened
whatever floats your boat
thanks

i found that https://wiki.vg/Authentication
but there is no way to get this in bungee api ?
yes
@scarlet anchor samagames was a premium server
yes my bad
why isn't travertine just merged into waterfall?
because sod maintaining that proto patch in waterfall
being able to say "screw it, I'll deal with travertine later" is such a blessing
huh ok makes sense
Hey guys, writing a little plugin at the moment, but not sure how to access my config YML. Anyone able to help me out?
Pretty sure YamlConfiguration.loadConfiguration is what you're looking for
and of course you need to save your config file to the filesystem
when I'm implementing it into an event listener, do I have to pass my plugin with the call for registering the listener?
"implementing it into an event listener"
what does that mean?
do I have to pass my plugin with the call for registering the listener
Yes
Alrighty
I am disconnecting player but he is not getting any disconnect message
ahh sorry I did a mistake worked now
How would I set a colour for the MOTD, where I can change the colour?
iirc there is a ServerListPingEvent or something like that
I set the MOTD on a ProxyPingEvent,
I can set a simple text Component, however the colour eg &4 doesn't work for me. What's the correct usage within a string to change that aspect's colour?
you can set the color via the component
by .setColor?
yes
I suggest using the ComponentBuilder though, it makes creating formatted messages a bit easier especially if you want multiple colors
(or convert from the legacy color codes with TextComponent#fromLegacyText)
What's the current colour code format?
but there are also libraries that improve that format and add their own twist e.g. by xml or markdown inspiration (MiniMessage and MineDown)
the current format is json encoded chat components
so, if I were to have something like this:
"&9A Minecraft Server&r\n&4Here is another line"
Would my best bet to be to split on & then parse that into a component builder?
Just built waterfall from sources, which jar should I use?
OOP
never mind
i didnt read 
Cβooβlcβalβ: you could translate the color codes to the legacy ones witht eh chatcolor method and then use fromLegacyText
is there an "easy" command to follow upstream version change ?
because when i do ./waterfall merge in my own fork to follow waterfall update and that the version changed, the first patch with POM changes cannot by applied and i do it manually each time
use travertime as a waterfall fork base
thats what i do
./travertime up
should pull changes
then do ./travertime p
then
./travertime rb
that's what ./waterfall merge does
for exemple: currently my fork (travertine based) is at version 1.16-R0.3-SNAPSHOT
if i do ./waterfall merge, it updates submodules to a Waterfall at version 1.16-R0.4-SNAPSHOT
then when it starts applying my patches, the first one is the POM changes (like this one: https://github.com/PaperMC/Waterfall/blob/master/BungeeCord-Patches/0001-POM-Changes.patch)
at this point, the script fails and require me to resolve conflicts manually
i think i missed a step for this kind of situation
maybe cat or a maintainer could tell me their magic tricks
you should do it like travertine then
no, really
that's what i do
hum, did you only switched to gradle ? x)
no
definitely
π©
Hello, where is the waterfall maven?
pretty sure it's in the general paper repo
i don't find it
Hi, is there any way to modify Query response? I am using multiple travertines (waterfall fork) and I want to merge player amount also on query response
If not then please - add special feature to do easy modify query responses with waterfall.
It will give some new possibilities to your awesome project and this change may push some bungee users to your fork just because of this small change c:
query protocol is one of the most abused parts in bungee and its forks
wouldn't recommend turning it on nowadays
Some very popular server lists still use it and due to that lots of server owners are forced to have it turned on :/
Yeah, we got attacked/ddosed on that port. Sadly some serverlists need it and don't even support specifying a different port π
Damn.. I would like to drop all udp packets but problem is that I will stop exist on 1/3 server lists in my country π¦
Thats why I am asking for extra query api :c
Don't they only use that for player count and motd?
Yep, I have messaged lists owners but most of them simply do not really care about moving from query to ping
The problem is that they are 1, 3 and 6 in google result in my country if you type "minecraft server" π
german lists are also like that
So thats the problem - server lists. Until they will be very high in google search results, users like me can not disable query. Maybe moving query to separate .jar as server that does ping to specific port when someone query that port will be good idea?
the worst one at least supports querty port rerouting
if you have a separate jar, that still suffers. At best it would be a separate server
You can use ProxyQueryEvent... but TBH you shouldn't enable query if you can help it
ProxyQueryEvent does not have any own method or I just can not search?
https://papermc.io/javadocs/waterfall/index.html?io/github/waterfallmc/waterfall/event/ProxyQueryEvent.html
This event will be posted whenever a Query request is received.
probably failed delombok
F U C K L O M B O K
just going to say it, Velocity is proudly Lombok-free
so we have real javadoc
bUT thAt mAKeS pORtiNg coDE frOm mY cUStoM 4000$ flAMeCurD forK hardEr
"flamecurd" π
I enraged the Australian nutcase again https://github.com/SpigotMC/BungeeCord/pull/2908#issuecomment-665508911
and we land stuck with a messy/incomplete solution rather than the issue remaining open and a proper solution being created.
I decided it'd be better to strike the concilatory tone than be mean
man whole bungee is messy/incomplete solution
and zero and perhaps negative interest from him to make it any better
what a fucking perfectionist came out from him now
Contributing is not supposed to be an exercise where you drop by, make the code the maintainer's problem because its convenient for you and then disappear forever
That's the optimal solution, but reality is that even the key persons in projects can vanish without further notice. We've been suffering from that quite often
I could have, if I wanted to, just unloaded on him, but I felt it'd be better to try and be civil
I've never seen any project like requesting that, though. They may only reject PRs because it's a too large maintenance burden, but they never except contributor maintenance
yeah that doesn't help anybody, unfortunately. Occassionally I also need to do the Torvalds, but in this case...
who uses java 7 in 2020, lul
Oh, he raised it to Java 8... in 2018 https://github.com/SpigotMC/BungeeCord/commit/02a65e34cffd1bfb4777298d6e9334676c24edf6#diff-ae3d9336fffefe8131224e3f6a3f0ace
The only reason for the bump was because Mojang forced it
Btw, why FlameCord is bad in your opinion? I saw you laught at it but I do not understand why - want just to know :x
"flamecurd" π
@weary grove
well starting with the fact that they sell such things instead of working with the community
the author of FlameCord has produced some truly awful patches to exploits and sell those "patches" instead of contributing them
I have produced higher-quality patches for free in Velocity
I have produced higher-quality patches for free in Velocity
@weary grove
They are implemented into WaterFall? Or its your own fork :x?
Velocity isn't a fork of BungeeCord, let alone Waterfall
It's not a fork, so I have the liberty to implement features BungeeCord and Waterfall will never see in a million years
I first time hear of something called "Velocity". It is separate project?
but that one patch has been pulled into waterfall
Yes, it was my patch that was pulled in
Where can I find source of this project? :x
And it is not bungeecord fork :o?
It's not a BungeeCord fork, period
electroniccat, who maintains Waterfall for the most part, is all but urging people to use Velocity instead, and for good reason
This project is really that good? It is not in testing (ready for normal use)? I mean, if I would like to use it, do I have some risk of crashes or something like this?
It's been ready for normal use for over a year now.
I see it has lots of same classes as waterfall
Any similarities you see are merely coincidential. Peek inside, it's very different.
Well, time to try it π Is there any wiki how to create plugin for it?
The documentation isn't in good shape right now, but there's an effort to improve it.
So maybe some example of other plugin?
https://docs.velocitypowered.com/en/latest/developers/creating-your-first-plugin.html and https://jd.velocitypowered.com/1.0.0/ are the best resources for now.
For a very simple plugin: https://github.com/VelocityPowered/BungeeQuack/blob/master/src/main/java/com/velocitypowered/bungeequack/BungeeQuack.java
More complex: https://github.com/NuVotifier/NuVotifier/tree/master/velocity/src/main/java/com/vexsoftware/votifier/velocity
Why is it better than bungeecord? Is there a major reason to move?
performance is better, the API is better, security is much better, ...
Ok, I see :x
Time to start moving into it. Thanks a lot for sacrifice of your time for someone random π
Ah, I have one more question
Does it support any mc version?
1.8-1.16.1 for current stable version, 1.7.2-1.16.1 for the latest development version
1.7 - 1.16 is what I need. Thanks! dev versions are complied or I have to complie them myself?
Note that 1.1.0 has a lot of API changes but still compatible with 1.0.x: https://jd.velocitypowered.com/1.1.0/
Btw, didnt you create redisbungee? I remember your nickname from somewhere :x
if you have any more questions, please ask them in the Velocity Discord as this is not the right place to ask them
Yes, I made RedisBungee and I both liked it and also really regret it.
IRL problems, lack of motivation
Damn, I have reported bug on github with channel register. Due to this small mistake it is impossible to get information from spigot plugin point from redis :c
late 2014 through late 2017 were a very terrible time for me IRL
well, too bad
RedisBungee is dead
Do not use it, it's not supported
There are no alternatives :c
And I sure as hell won't support RedisBungee for you
In the past I thought about reviving it, but I've decided it's better for me to focus on Velocity and work towards proper multi-proxy support in Velocity instead.
Velocity has multi-proxy feature?
It doesn't have that yet. In the future, yes, but not on the immediate horizon.
it has a very cool api tho, i really enjoy writing a plugin im working on, unlike my experience w bungee
Well, it would be very nice if it would have it :x
General gist is that velocity is a much better option if you're starting up, and worth looking into switching; You see, being a fork it means that we're limited by upstream, literally every change also induces massive headaches because bungee just doesn't have the API that people need so people often go crazy with hacks to pull stuff off
I literally had to revise a "simple" patch multiple times because plugins where messing around with stuff
Main problem with Velocity is the community size and plugins amount created by them. Lets say I want to switch to Velocity right now. I am using just few plugins, RedisBungee, Motd-related plugin and MultiLobby. There is lots of work and testing to do before switching. Thats the problem when you create separated project from start :x
at the end of the day, a project like velocity wouldn't be viable without that split
It was partially me which kinda like, lit the fire up his arse to actually pull it off lol
we're working on it, several people (me included) not involved with velocity's development but rather growth are putting time into making it viable for server owners ^^
Tux does contrib stuff back to velocity, either directly or sometimes just throwing stuff on my backburner which I need to sorta catch up on without sheer death; Many of the improvements I've had over the years have often had a "oh shit, but the plugins"
Maybe try to add tons of most used external features into in that project to make it more comfortable to switch? Like multiproxy, nice motd & server list formating options and so on
Throwing all that stuff into the core project doesn't work too well
At the end of the day, the power of these projects is in their ability to give you power to do what you want
So maybe split if for modules or something?
"multiproxy" is literally nothing, you just spin up proxies which do stuff
Now, what do you want? player count sync? Well, which techs do you support?
by multiproxy - I mean sum of player count in ping/query listeners
It makes much sense to let the community dev those tools where they can actually account for users whims fast, without basically making velocity essentially act as multiple large projects together
That's how you end up with stuff like CMI
Yeah thats true but this project leaks of community members who would like to create plugins like this so it would be great idea to implement all this things to core just at beginning to raise community :x
I really enjoy your projects, they are awesome and very valuable. I am just giving you ideas to progress it
velocity's not in its beginning stages, that was 1-2 yrs ago
and We Are Working On Itβ’
but it's not great to implement that in the core
It's easy to see why you'd thing it would
but, that's essentially two projects in one
For example, how do you get that information across proxies?
The issue is that a "simple" feature for shading counts across servers is actually complex when you get to it, you can easily end up with another huge cludge of a project to maintain in your existing project that it just falls into the corner
For example, how do you get that information across proxies?
@trail plume Open special port/channel on one proxy and set all data in configuration on all rest
That's a bad setup
That literally defeats a fair chunk of the gains of multi-proxy setups
So maybe move calculations into other server like redis?
I do not know. I have no experience with things like this :c
be glad, synchronising shit is the most annoying part of this game
However most likely you are over-optimizing, velocity should work fine with large player counts
heck, check into velocity discord for real-world pictures
that how much it handled
630+ players
By the way, is somewhere maven repo & dependeny information for travertine?
check papers nexus
So maybe move calculations into other server like redis
And then somebody wants you to shove it into rabbitmq, or, somebody just wants to be able to hack it together on their existing infra with mysql, etc
Where can I find data for it?
The issue is as I said, you make a project into two projects; It's much easier to just let the community deal with that
I'd honestly be surprised it they didn't have something like that already, or, somebody didn't figure "Oh, I could do with that myself" and run off on it
And then somebody wants you to shove it into rabbitmq, or, somebody just wants to be able to hack it together on their existing infra with mysql, etc
@trail plume
So maybe give possibility for Velocity to be something like redis server if this feature will be enabled and it will just store player amounts and counts and listen for inside packets
V
/ | \
V V V
xD
if its necessary, its happened already
And that's just stupid too
once again, you literally kill the entire gains of multi-proxy
but one Velocity in this case will not have opened port so you will have a gain
please just try it first, find its limits before asking how to expand them
There are some plugins Iβm going to work on to make Velocity more useful
Iβm making an announcement plugin and will be porting over a hub balancer
I started adding compatibility in to my resource packs plugins but no adventure was a bummer :S
so I had to halt that xD
ban will probably never leave development :')
I added adventure to my dev branch lol
well that's not in the repo yet π
or is there a dev repo that I could use
(maven)
there is yeah
good to know
not home tho, so check docs i guess?
hello do you know why the waterfall api jar only goes in classes and not sources https://read-my-man.ga/i6Qg7ElFBt.png
Download Sources and Documentation
Sounds like this is intended for Paper and not Waterfall. Regardless, 1.12.2 is no longer supported.
Oh, I sent that in the wrong chat. I guess I'll move the message.
Is the Waterfall plugin messaging channel the same as Bungeecord? As in, player.sendPluginMessage(this, "BungeeCord", out.toByteArray());
yes
May I ask can waterfall run forge?
waterfall is a proxy
so what to combine waterfall to use with when I want to use waterfall with forge?
waterfall can be put in front of any server, if you want ip/uuid forwarding then it needs to support that. either natively (sponge) or via a mod
What mod?
fabric has one, I would assume one exists for forge servers as well
Can anyone just kindly tell me what is the mod for forge servers for running waterfall?
Phoenix can you please tell you the fabric one at least if you don't know the forge one at least
.g fabric proxy mod
(phoenix616) https://www.curseforge.com/minecraft/mc-mods/fabricproxy -- FabricProxy - Mods - Minecraft - CurseForge: "Fabric mod for support forward player data(UUID, skin, real ip...) from proxy ... Install. put jar into mods; start server; edit..."
.g proxy mod
(DiscordBot) https://httpd.apache.org/docs/2.4/mod/mod_proxy.html -- Apache Module mod_proxy: "The forward proxy is activated using the ProxyRequests directive. Because forward proxies allow clients to access arbitrary sites throughΒ ..."
.g forge proxy mod
(DiscordBot) https://mcforge.readthedocs.io/en/latest/concepts/sides/ -- Sides - Forge Documentation: "A very important concept to understand when modding Minecraft are the two sides: client and server. There are many,Β ..."
phoenix can you tell me the sponge plugin as well? or it include inside sponge?
sponge has support for bungee's forwarding built in
the proxy supports all clients from 1.8 to latest
okay thanks phoenix please tell me how to use forge with waterfall without using sponge or fabric thank you
Its my first time making a server, so I'm not really knowledgable
So I was wondering where to find the version of waterfall for 1.12.2
the latest version
the latest version
@potent lichen
is it the one I can find here: https://papermc.io/downloads#Waterfall
yes
#366?
yes
what do you mean?
Like im making a bungee plugin
And i need to get a servers Status like, Killed Stopped Restarting Starting
how can i do this?
best you can do is ping it and see it's up
if you need to track state, that would depend on how you're running it, etc
Well what im trying to do is make it so it Tells someone with the permission that the server has gone down that its restarting if its been killed or stopped. Sorry this is my first plugin
The proxy quite simply can't know that
you need to ping periodically
there is no way to track if it's starting/stopping, best you can check is "is it responding to pings"
So if it doesn't respond then its stopped / killed / restarting
Okay this wont work I understand.
my second idea but bigger, would be to make a plugin like deluxe tags but with Bungee / waterfall support and MySQL i have no idea how to do this. if someone can dm me and help me through it that would help.
have you made at least a Bukkit plugin before? If you have no idea what you're doing I would suggest to start smaller
Is it possible to make the LivingEntity.damage method Not call the EntityDamagedByEntity event
nvm
Why does it say waterfall 1.15.2
I installed the newest version
It doesn't say on the download page for which version it is
waterfall is not mc version specific
latest works from 1.8 to 1.16.1
if you need 1.7 go with Travertine
Oh?
But then how do I tell it which versions players should be able to join with
For some reason it wouldn't let me join my server with 1.16.2
I don't have viaversion
waterfall is not 1.16.2 compatible yet (not even BungeeCord)
the version check is forwarded to the backend server (aka paper/spigot...)
sometimes waterfall even updates before bungeecord
I don't have internet, so, unless somebody PRs it, probs not gonna happen, don't feel like tethering for that
https://github.com/PaperMC/Waterfall/pull/560 @trail plume if you want

fixed
wow, md removed entity rewriters for 1.16+
@chilly coral we both know that since I hard-wired 1.16 to always resend join-game its become redundant
yeye
so good on him in that regard
a step in the right direction
@trail plume beep boop about my pr (soon pls i have need for it this weekend)
might as well just fork..?
Iβll do the 1.16.2 update for both waterfall and travertine in about an hour if nobody else objects

should I adjust the POM on Waterfall with https://github.com/PaperMC/Waterfall/pull/561 ?
I'll hold off with Travertine until this is merged
we don't publish the modules changed, so i don't reckon that'd be necessary
I'll head to the gym in a few @trail plume if nothing else I'll do Travertine after if you dont have objections
aight off to the gym. I'll be back in 2h roughly
If ProxyServer.getInstance().getProtocolVersion() is deprecated what should be used to get the protocol version?
what do you need ?
the protocol version of the proxy makes no sense
the proxy knows almost every release protocols
Thats a good point, i guess the protocolVersion of the client would work
guess I am now doing Travertine
@bleak current https://github.com/SpigotMC/BungeeCord/blob/master/api/src/main/java/net/md_5/bungee/api/connection/PendingConnection.java
PendingConnection#getVersion()
should work. Same on Waterfall.
Ye i ended up going with that one cheers π
Where can I find in waterfall code version name? Is it possible at all to change it this way? I want to change version supported by my server.
I'm thinking about "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.x (Waterfall)"
waterfall.yml has a setting for that
:P
Ah, I didn't know that, much thanks
How do I cancel Bungee from sending players to certain servers when it receives a plugin message
I need to intercept and send the player to a different server
@bleak current Maybe with ServerSwitchEvent ?
I can help one second
I did this
you want the ServerConnectEvent
the ServerConnectEvent#getTarget method will give you the target ServerInfo
you can also get a reason with ServerConnectEvent#getReason
but doesnt changing the target involve re-triggering the event
No sir
I made my own server designator using purely the ServerConnectEvent
using ServerConnectEvent#setTarget(ServerInfo) it will change the destination for that event
do note cancelling the event when they are joining with reason JOIN_PROXY you need to call ProxiedPlayer#disconnect
@molten jackal it isn't working, but I'm not quite sure why
I'll send gitlab repo in a sec, need to push some other stuff
I think the culprit is
String address = document.getString("address").split(":")[0];
int port = Integer.parseInt(document.getString("address").split(":")[1]);
event.setTarget(getProxy().constructServerInfo(
document.getString("uuid"),
new InetSocketAddress(address, port),
"motd",
false
));
Since I might need to add the constructed serverInfo to getProxy().getServers()
Actually, I just figured out the issue. It wasn't anything with bungee, my servers just didn't care to tell the database that they had been shutdown, so it just kept trying to send me to nonexistent servers
mongodb 
it's pretty great for data you don't care about
really?
I guess a dynamic server registry counts as data you don't care about
I've found it to be robust
I've found it to be a disaster.
Okay, well it does get messy from time to time, but once you learn the ropes you can clean up the extra objects and also you learn to stop creating them in the first place
MongoDB needs to be left behind in 2012 where it belongs.
Ok then what do you use
PostgreSQL.
SQL may be archic but I'm not going to complain about 50-year-old technology that "just works"
true, but I bet your server doesnt run debian
Security issues? Googles "mongodb security issues"
Β―_(γ)_/Β―
Oh, I see... all the open, exposed MongoDB databases with poor authentication.
yes
mine is not
because unlike most minecraft server owners
I'm over the age of 5
Insecure defaults are a pretty bad mark in my book
Ooo like the meow thingy?
Also, SQL injections are bad, but NoSQL injection attacks also exist.
The class of attacks is actually quite generic.
because of the "drivers"
idk why they call them that they are really just API's but whatever
something something google search proves you wrong
umm no
that article explains issues in your code that cause injection vulnerabilities
at that point they are just RCE's
oof that's a sad spelling mistake to make
Q&A discussion discussing the merits of No SQL and relational databases.
Basically, security-wise, MongoDB ends up no better than any regular, boring relational DB.
In some regards, it's probably worse.
but it's fast as hell!
am switching all my projects to /dev/null/!!!!
I don't deny that MongoDB is appropriate for some use cases, mostly there where data loss is acceptable
you never write anything in mongodb
this is like bsd peeps saying "omg ext4 will lose your data use zfs" when ext4 hasn't lost my data
not the same
mongo doesn't write data until after the query completes
where as mysql will block the query until its saved
so you know when you complete a mysql query, your data was stored
mongodb writes it later
while storing everything in memory for perf
I don't use mongo because it's new (and also it's really not at this point), I use it because I hate tables and like how it stores data. It is fast enough, it is good enough and it has features that I like. Enjoy your tables, but I am going to enjoy programming.
What it boils down to is that for years, MongoDB prioritized performance and marketing over actually storing your data.
This is consistent, do your own research on this if you don't believe me.
That's fine. Performance is important in a lot of cases, and honestly when was the last time you shut down your server? So I think I will stick with mongo. I haven't lost data even in the case of a sudden power outage, and that seems pretty robust to me.
Laziness is never a valid technical reason IMO, but whatever. Personally, I think a lot of the usecases MongoDB serves today could be done better with practically any relational DB.
@bleak current I shut down one of my servers a month ago for a migration. It happens more commonly than you think, power loss, networking issues, all of this stuff has to be accounted for.
yes
but
like I said
twice I've lost power
no data
I've restarted like 5 times in the past month
but still
Squealing over the uptime command is useless other than acquiring cool internet guy points.
Okay, that's pretty reductionist.
okay, I'm just going to stop arguing. I like mongo because of what makes it mongo. not what makes it "good"
please let me know if you have actual proof of data loss
https://nakedsecurity.sophos.com/2017/01/11/thousands-of-mongodb-databases-compromised-and-held-to-ransom/
https://www.bleepingcomputer.com/news/security/new-meow-attack-has-deleted-almost-4-000-unsecured-databases/
Want more?
umm that's a security issue
This ties into another point: MongoDB had awful security problems for a long time.
Insecure, unsafe defaults was the price paid in 2010-2013 to get a bad product into users' hands, and we suffer for it.
dude
Now, in fairness to MongoDB
thats like saying routers stink because dumb people keep default passwords
routers are a great tool
when used right
The software has matured, catastrophic data loss bugs are far less likely now than they were then.
But the history is not confidence-inspiring.
okay well you and I both know that bugs get patched
thats how they work
oh
hypixel uses mongo
Yeah, they're dumb for using it, but whatever.
yeah dumb
They're Hypixel, they can make it work.
just like google and facebook
They have money to do it.
its almost like all these successful companies are using newer technologies... weird...
it's almost like, they're not that bad?
??
idk I'm probably just some 7 year old who knows nothing
Β―_(γ)_/Β―
It's almost like "they had a specific need to solve", they wrote some technical papers about it, and then people saw those papers, and drew the wrong conclusion
I have a specific need to solve
I don't want tables
it's a chronic illness, really
I have that too
Thankfully, relational DBs solved that a long time ago.
No
file systems solved that one
but we arent using thos now are we
sometimes stuff from the 1990s is worth leaving in the 1990s
I wonder how you're able to boot up Discord to chat with me... 
You had to load the client from a file system, no?
Or maybe you use the browser... how'd you load the browser? Magic?
I've actually gathered a wealth of information on why MongoDB is awful, I'm just too lazy to dig it up.
just because it's old doesnt mean it's bad, just because it's new doesn't mean its bad
And just because Google and Facebook needed to eschew relational databases for certain use cases doesn't mean relational databases are automatically a stupid, antiquated concept.
Point is, I believe in picking the right tool for the job, and I've concluded MongoDB is never the right tool.
Okay well that's like saying that SQL is never the right tool
Which I don't do by the way. It does have it's uses.
no, false equivalence
But, in my object-oriented language, I like having object-oriented (document-oriented I guess) databases
omg yeah false equivalence
okay
well whatever
you guys are just trying to be toxic at this point
And therein lies the impedence mismatch. MongoDB bills itself as a table-less, schema-less database.
I only am here because I actually thought mongo had an issue
with data integrity
and it really does not
so I'm going to keep using it
thanks for nothing
simmer down
The problem is that instead you get implicit schemas, and by the time you have to tame that, it's too late.
someone disagreeing with you doesnt make them toxic
yeah but completely trashing on mongo with no agreement is pretty toxic
but.. this is waterfall-dev
Also, ORMs exist for relational DBs too.
I trust Tux's experience over yours any day
"I disagree with what you say therefore it's toxic"
I guess you could look at it like that
If your data genuinely has no structure, and it's not at all important to you, MongoDB is the right tool for the job. The problem is that my data often has structure and is very important to me.
but my data has no structure, and is important
I think that mongo is the right tool for that
since my data is mostly just attached to players or servers
so it makes sense to just use documents
We attach a lot of data to players and servers, and we successfully model those relations on a relational DB.
True
But documents make it easier to think about and view that data
It's like how all JS objects can be immediately saved as JSON
Furthermore, relational DBs have since grown support for JSON and querying JSON documents.
but... that's not how they are designed
It's clearly useful to store unstructured data in a relational DB.
thats a more hacky-patchy way
it is baked into mongo's every substance
and that's why I like it
because it thinks how java thinks (and C#, and javascript, and python, and every other OOP language)
Again, schema-less really means implicit schemas.
honestly
I don't like that mongo is schema-less
Because like you say
implicit schemas
And also, having learned about software engineering, I can assure you OOP is not "schema-less"
Yes
exactly
thats why I dislike the schema-less ness
it fits much better with JS
however, it still works aside from a few minor headaches here and there
In fact, schemas are extremely common in OOP. They can be fluid during the development and evolution of an application, but that doesn't really invalidate my point: SQL schemas can be fluid and evolve too.
In my opinion, schema-less headaches are much better than converting all your objects into tables
serialization is not fun, ever
I hope you can at least agree with that
In my opinion, the headache inherit in planning and setting up a proper schema for your data greatly outweights the complexity of trying to retrofit those updates on later. This has bitten me so many times.
Serialization is not fun, that's why so many people have invested in writing wrappers so we can do less of that manually.
good point, good point
For my closing argument, I would just like to say, if SQL is the "default" for you, then why can't Mongo be the default for me?
I think MongoDB excels in specific use cases, you always have to consider if it's the right tool for the job as with anything.
For example if you want to log a data set that you have no control over and that changes regularly, mongo can be pretty useful.
When you are designing something structured I think SQL generally is better.
Agreed
Yes it holds whether they are started, player count, IP, etc.
All stuff that needs to be constantly updated
Honestly I was thinking of using Redis but that wouldn't be good if I restarted my DB but not my servers
It needs some persistence
I'd say it depends, I think I'd personally prefer SQL in that specific case probably.
Really? Why exactly?
Well it sounds like you have complete control over the schema, which I feel is where SQL excels. There is a level of development burden in that when you change things, but I think it's worth it.
When I say mongo is good, I'm thinking if you're ingesting a huge API that regularly has breaking changes and you don't want the headache of maintaining an accurate schema.
I kind of have control over the schema, but like you said I actually change it quite frequently
I try to release new minigames every 1-2 weeks so if the minigame has, for example, a rejoining feature I need to store a list of the players that should be re-sent to it even if the game is already started
and I add these extremely frequently
You can use it in that case, I generally feel that choice is mostly about if you care about data consistency and historic data.
historic data?
So if you're not just storing one row per server for example, and want history, that can be a difficult thing to maintain in a schemaless model.
huh... I see how it would be difficult to maintain, but it definitely wouldn't be too difficult to implement
Correct, mongo is easy to implement.
That's one of it's strengths, because it doesn't have a schema.
especially with the whole minigame every 1-2 weeks π¬
it gets hard to fix bugs sometimes... so I like to just not have them in the first place
Even if you don't use SQL in a project it is however (in my opinion) important to learn how to manage schema changes in it, you can actually apply them to NoSQL programmatically
Anyway
yes?
do you have a question about waterfall π
we really need a #database channel
Nah I was saying anyway because I was talking too much about db's in a waterfall channel π
okay
how can i travertine scripts to pull ?
any idea guys?
SQL is my favourite. Far better than MongoDB
guys help me please
yes i saw but was not the same name so "maybe" not the same person π€·ββοΈ
mega 
but fair
linsaftw is the same guy who maintains this shitty flamecord claiming it's magical and fixes everything
it could be, but not verry ethic to sell it imo
who?
How would one check offline player permissions on BungeeCord?
yeah I know
Would depend on the perm plugin
I was considering a PermissionCheckEvent and implementing CommandSender
Well, I'm convinced LP wouldn't be happy with that
Does connection#getSocketAddress() returns a domain or an ip?
so i dont understand waterfall, after you are sent to a subserver, can plugins on that server import classes from the waterfall jar?
@near hamlet it returns a socket address. If I recall correctly you can call getAddress and then getHostName on that value for a string version of the ip
@dry pulsar waterfall is a completely separate program from spigot. So no. Unless you were to shade waterfall into your spigot or plugin but your really donβt want to do that
@molten jackal I want to get the hostname which is used from the user to connect. Is it possible?
Yes
Can you tell me how?
I did lol
@molten jackal (sorry for pinging) Is it possible to get the subserver to connect in the LoginEvent
Bro is this Flamecord developer really serious? he says he cant update because he doesnt know how to use git
wtf
fork of tavertine that "fixes exploits"
Bro is this Flamecord developer really serious? he says he cant update because he doesnt know how to use git
smh
but the lead developer doesnt know how to use git
ok

I mean
He's literally stuck at step 3
At this point, the literal only help you could give him is a tutorial on git...
considering he's the lead developer for the proxy, how else did he make updates???
He started it himself
you can be lead of a pile of shit if you lay the foundation yourself
then how he even finished the thing if he cant even make a commit
sanity would have been to use one of the travertine fork things which are already based on travertine
Is it bad that I used interactive three-way merging to do the 1.16.2 update on Travertine? Took total about 4 minutes

I mean, I generally use git on the CLI and then just do the rest in my IDE
Never been fond of 3 way as you don't often get to see the full context
Not an issue for me, Iβm used to that. Always use it to resolve merge conflict at work
if only i was actually CODING stuff and not just making a translation for a single plugin, maybe i would have a use in git lol
only caveat is to find an option which works
Heck, I've abused apatch more times that I probably should have
Thatβs the reason I use i3w
I've had cases where I've looked at a patch and figured "fuck that"
fired up apatch and it just ran over it and cleaned it up with literally 0 issues
I've had smaller patches where it just... oh god....
As long as it works itβs game
this is why id trust cat to "fix exploits" instead of some fork
not rly a option if you have been using a bunch of bungee plugins for years
If theyβre open source I can port them
I really have a burning hatred for bungeecord
Which plugins?
theyre private ones
Ah, too bad then
Downfall of being a fork is having to maintain upstream
a lot of stuff I've pushed off due to a mixture of health and "that's probs gonna break some plugins"
Is it possible to get the subserver to connect in the LoginEvent
Could be great to have a byof for travertine or waterfall
But it could help Flamecord's dev so dunno if its worth it lol
byof was forked out of my own personal needs
Not like there isn't already forks of travertine out there for this
Not our job to teach tooling like "welcome to git"
we need to stop forking everything
there are valid reasons for forking
e.g. I literally ripped out the entire chat system in my fork
Is there a way to use Brigadier with Waterfall/BungeeCord API? Paper has already a module for that, is there something like that on Waterfall?
I am using this code (https://hasteb.in/ewexakid.java) to make it so if X server shuts down, all players are redirected to an optimal limbo server. The selecting of the target server and determining the kicked from server work as intended, debug messages are as expected. However when the event is cancelled, the player is not sent to the target server, is left on the old server (which is offline now!) and they time out. I used this code on 1.15.2 and worked as intended. Has something changed that I'm unaware of, or is this a bug? I am using Waterfall build #370 (latest as of right now).
If you read my message I choose an optimal limbo server to send them to. This means: 1) it is online 2) it has the least amount of players on it already 3) it is hooked into my server manager.
I figured out my issue. It had to do with my server designator code. I was not sending the player to a correct server in the instance of shutting down the server like stated before
how is this a waterfall development issue?
how this is a waterfall issue
wrong section(
how to set a custom uuid with waterfall when u connect a player to a paper server ?
Why, what are you trying to do
i want to have a database for premium and crack player, but if i take username for key, i can have problem with premium player, and if i take uuid in key, i have a problem with crack player if i don't set an uuid at paper connection with waterfall
ok cool
it's "username" in my language
why would you have problems w/ offline players by using uuids?
they still have uuids
on each bungee connection ?
oh well now i understand the issue
We don't support offline mode here
yeah, it's so nice to say bullshit when u have an option "online-mode" in waterfall
what is your issue again?
i want to have a database for premium and crack player, but if i take username for key, i can have problem with premium player, and if i take uuid in key, i have a problem with crack player if i don't set an uuid at paper connection with waterfall
@warm shell
both offline and online players have UUIDs
wait le what
it's not random ?
offline mode uuids are taken by adding a prefix to the player username and then using the digest of the resulting string
and that becomes the UUID
oh
look it up, the exact algorithm is up somewhere
ok, i go check it, a lot of people say it's random on the internet, it's why i haven't checked
so if i join 2 different offline-mode servers
my uuid will be the same between the two?
if they were 100% random
then every offline mode server would have to store a massive file that maps every known username to its uuid
i dont understand why tho
you get a uuid, you find the file with that uuid, and that file has the username
it needs to match the UUID you gave him last time
because his data is identified by that UUID
oh now it makes sense
online mode servers do have to pull the UUID for each username from a "massive file"
because they are random
that massive file happens to be either usercache.json or mojang's API
the uuid on online mode are random only on the account creation, no ?
yes
but on PlayerJoinEvent servers have to check the username to see what uuid they have
because its actually random
yeah ok i see
servers aren't given the UUID, they have to go look that up themselves
they get the players username though
so, we need to check if the player is premium (for database purpose) or store the uuid created with the username if the player is not premium
just use the uuid
no bells or whistles required
unless you want to implement username changes for offline mode players
i want to implement auto connect for premium player
i said exactly that?
servers aren't given the UUID, they have to go look that up themselves
the easiest way to do that is to use a separate auth server
how ?
oh god my messages are delayed
so let's say you have your regular offline mode server
now, you start a bungeecord proxy
that points to that server
you set online mode to true in bungee, and enable ip forwarding
then, you write a plugin on the bungee server and on the backend server
that automatically logs in the player if they are coming from the proxy
you set online mode to true in bungee, and enable ip forwarding
wait what
because if they are coming from the proxy, they are premium and have been authenticated against mojang's auth servers
and for offline player ?
offline players connect to the backend server directly
wait
i want to have the same ip for offline and online player
not easily doable
but they still have to pass the proxy
you see, in order to check whether a player is premium or cracked
you need to ask them to auth against the mojang auth servers
which will cause a cracked player to disconnect
understandable
we can't "cancel" that ?
the disconnection is handled on the client
because the client has to contact mojang's auth servers as well for the auth process
and mojang boots the client out and the client disconnects
so, the sanest solution is to just have two ports/ip's; one for cracked, one for premium
besides, doing that will let you register on premium-only server lists
because the other ip "is premium"
bungee is a proxy
the player only connects the proxy for the auth
and either gets kicked because they're cracked
they can player with each other, a same server can be connected on multiple proxy
or is funneled into the backend server
where they are auto logged in and then play with the other players
is it possible to set online mode to false, and use a plugin trick to check if a player is crack or not and set the mojang uuid is it's a premium account ?
yeah
you will have to have the backend server in offline mode
and then communicate with the bungeecord server to figure out the player's actual online mode UUID
and use that
how i give the mojang uuid
set it using the player profile in asyncprelogin event
how ?
using java
there is no "set uuid" on asyncplayerprelogin bungee
oh, it's on spigot ?
on the backend
and the method is on the profile, not the event
the event just exposes the profile
what do u mean by profile ?
lmao i was using https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/player/AsyncPlayerPreLoginEvent.html
declaration: package: org.bukkit.event.player, class: AsyncPlayerPreLoginEvent
it make sense now
there's a plugin i mentioned that can do just that
yeah, but i prefer to keep a hand on what my server is doing lmao
he's asking how to implement this, not what plugin to use
k
i implemented it myself as well, there's nothing wrong with making your own solutions for things
so, i need to send a message from bungee to paper and change the profile if it's a premium account ?
myes
or paper alone can do it ?
well, you need to contact the proxy to know if it's a premium player
you can't ask the player, because that'll kick the player if they're cracked
just making sure that the player is connecting from the proxy is enough
because if they are, they are for sure premium
they is a method on bungee to see if it's a premium account ?
no
you need to see if the player is connecting from the proxy
the player connecting through bungee and not getting kicked means they are a premium player
because if they are, that means they passed the authentication
if they are cracked, they will be kicked before they get to your backend server
but i want to only have one ip for the premium and the cracked
well
like already discussed
not reasonably possible
to do that you need to dive deep into packet fucknuggetry and the network protocol
and figure out a smart way to tell a premium and a cracked player apart
tbh; just use fastlogin at that point
hm, ok, i have idea of how doing it now
@wide maple I don't know when you will be online, but can I ask you some questions about the changes in 1.16 that affected my AutoReconnect plugin? I will probably sleep sometime soon though, and I'm guessing it's very early in the morning for you when I am sending this, so idk what would be best.
@sturdy nymph generally- If you switch servers you will need to resend a joingame that is a mirror of the joingame packet form the server. If youβre just reconnecting to the same server you can send a respawn packet instead but ONLY if you kept track of the current dimension and the registry that was in the succeeding login packet from the server stays the same and ONLY if there is more than one dimension which you tracked and ONLY if you fake switch to that first and back will this be correct
Here itβs like this:
Login: Server sends LoginSuccess
Proxy: copies and relays LoginSuccess
...
All good.
Or: Reconnect
Server sends LoginSuccess;
Proxy: Check if the received registry has the exact same contents as the one which was present previously
Proxy if false; Relay LoginSuccess
Proxy if true:
Check if registry contains two or more dimension types;
If false: relay LoginSuccess
If true: Send a respawn packet to the dimension the player is not in currently, send the entire clear status packets bungee sends, send a respawn packet to the dimension the client is supposed to be in;
...
All okay then
^ this only all applies for 1.16+
Also: world names and biome registry is part of the connection client registry
So either always relay LoginSuccess
Or go with the difficult route
Which forces you to parse and compare the registries
Bungeecord does not do that. I implemented it in velocity but md_5 refuses to use this
Is an idea if we can make a anti netty exploit for Waterfall? π
Bungeecord API is not secure
@wide maple what I ended up doing in 1.16.1 and before, is I realized people could kinda "no-clip" in a sense, because all the plugin does is send keep alive packets until they can be reconnected to the server, so I respawned them in a new dimension and never sent chunk data so that they would be floating in a void, unable to explore the world and maybe see something they weren't supposed to.
So in the 1.16.2 testing I was doing, I looked at that switching branch you made and I sent a login packet with a single custom dimension and I respawned them in there while they wait for the server to come back online.
Because BungeeCord doesn't actually bother tracking anything, as you said, it just sends another login packet for the reconnected server once it comes back online.
That should be good enough to at least avoid the issues you talked about, correct?
For context, if you've ever been on Hypixel, this plugin does something very similar to their limbo, but I didn't bother sending the chunk data like they did, and you end up floating in a void instead, while waiting for the original server to come back online.
There is no "netty exploit"
There was an issue in netty where an exception ended up hurting much more than it needed to, but this is literally "process exposed on the internet"
Making the logic more robust to deal with this is ideal, but, at the same point, we don't wanna be throwing more exceptions for this, nor can we mess with the netty pipeline too much because plugins are fun
its ok babe
Hey anyone know how to set up Waterfall?
just like BungeeCord
ok
Hi guys, how can I send TextComponent to player in Waterfall?
i dont have the .spigot().sendMessage()
the normal sendMessage takes components
okay... this works
i was wishing to send pure string message + multiple TextComponent in one sendMessage
nvm i think i will have to split them π
thank you
just use the component builder
thanks for the suggestion, i will take a look π
Hey, just wanted to make sure of something before I dive into Waterfall. The Waterfall API is similar to the Bungeecord API, same as Paper, right?
it extends bungeecord, yes
hi. does anyone know how i can get if a server on my waterfall network is online through a plugin? i've tried querying the plugin messaging channel with various things but all work regardless of the server's state, so i'm kinda lost
use the ping method
hello, how can i do the plugin message channel?
i dont really see resources / tutorials on how to do it... most of them are outdated
cause i want to change a player's server with a spigot plugin
thanks!
The APIs for it literally haven't changed in years
the only change i notice is the channel name
changed to something like "namespacedkey:name"
i did this too and no errors, but not moving to other servers
public static final String CHANNEL = "BungeeCord"; private JavaPlugin javaPlugin; public BungeeServerAdapter(JavaPlugin javaPlugin) { this.javaPlugin = javaPlugin; } @SuppressWarnings("UnstableApiUsage") public void send(Player player, String server) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); out.writeUTF(server); player.sendPluginMessage(javaPlugin, CHANNEL, out.toByteArray()); }
That's not needed for the BungeeCord channel, md hacked that requirement out
My snippet should work. At least it works in production 1.16.1
Mobile formatting is a little bad.
My snippet should work. At least it works in production 1.16.1
Mobile formatting is a little bad.
@outer cosmos thanks, can I send u a DM for more details of my code?
No, do it here so everyone can help when I'm at sleep and everyone learns something.
okay
But I tried some channel name like yours, it doesnt work
does it has to be BungeeCord?
(Im using Watrefall)
For bungeecoord/waterfall integrated functions like sending players to other servers, yes.
its still not working somehow :/
here is my code:
main class of the plugin:
https://pastebin.com/ARecLnSr
BungeeListener class:
https://pastebin.com/rEB3XTTC
CommandExecuter class:
https://pastebin.com/kvHJbQnq
btw i registered the command "connect"
Edit: I deleted most of the codes and do it again. IT WORKS NOW
thanks for help!!! ><
You can use PluginMessage only if there is at least one player connected to the server
Your plugin is likely null.

