#waterfall-dev
8550 messages · Page 9 of 9 (latest)
ah with plugin message maybe?
if is that i have to be sure that i manage all request for bungee changement and allow the player to send the plugin message after that i'hve save the inventory ?
ah yes i think to connect plugin send plugin message from the player's client and he send connect to proxy but if a plugin make send pluginmessage i can't knwo (please confirm) so i have to be sure that all plugin message conexion will be managed by my plugin (like this methode:
save inventory: when is good
send plugin message
but there are a risk if player'inventory got changee after inventory save?
Could anyone answer this perhaps?
It's probably very basic, but I've tried a few things and can't figure it out hahaha
you need a player to send plugin message
I think I just need a Server, not sure how to get that though
Perhaps I can do player.getServer()...
or is there a better way to predefine servers?
if you want to get the server somebody is on in order to send a message to them then yea, that is how you'd get it
I asked myself the same question as you some time ago but I don't remember the answer (the difference between server.sendata and player.senddata) but what I'm sure of is that you're obliged to have a co player
That's why you'd try to put them in some form of limbo on the source server, in order to minimise the risk something modifies it
I mean, sending data to the player would send it to the player, and not the server they're connected to
what is limb?
i.e. remove them from the world
I'm trying to do something like player.getServer().sendData()
Basically I need to send a request to the bungee, check if they're authenticated, if so, it sends True or something
ah start chargemnt dispaly?
this could be way too slow though :P
Would it be too slow? I need to cancel an event if they're not authenticated, like a move event or something like that
or you represent that state using a boolean in whcih you message over the network
Yeah, I think that's kinda what I'm thinking
plugin messages are not transactional, etc
I was just gonna listen for "UUID: True" if they're authenticated from the bungee
then a bit of regex
doc are not 'clarity" about that so i'hve askd md_5 about it. server.sendata don' have difference but it choose a random player and if there are no online player the request will be queed (and player.send data will be lost)
i can make a player leave his world?
without modifactions to the server, no
and for your limb I have to stop him from being able to interact with his inventory so what is the best way?
I mean, there is no best way to do this
I don't know anybody who has dealt with this in the more "perfect" of manners
do you know how most plugins work? or the most populate methode?
as I said, they just wait for some period of time on the new server and pray that the data saved in time
ah okay because on player leave i can get inventory but a simple problem with communciation and duplication bug.
I think i have to do it;
but you know if its possible to make a player inventory'iinvulnerable?
No, it's not
hence why I keep saying limbo
but, there is a reason those plugins do the "just wait and pray that the data saved in time"
Some add some locking mechanism to try to reduce the risks, but, given the lack of a proper communication system, stuff gets screwy
Like, theres so many unsolved issues here, that really, glhf
Hmm, what I'm thinking may not be the most effective way of doing it. I'll quickly go through what I'm thinking of doing.
I'm going to hook a Discord bot into the proxy plugin and handle the authentication command, codes, and all that in the proxy plugin. Everytime a user joins/moves, it will check to see if they're authenticated, if they are, it doesn't do anything. If they aren't authenticated, it cancels the event.
To check if they're authenticated, I was going to do a message from the spigot plugin with something like "Check: UUID" and to respond to that, I would do something like "True: UUID" (if authenticated).
I'm aware this would be much easier on just a lobby spigot plugin instead of network-wide, but I would like for the option to allow people to join any server they want, not through the lobby using subdomains. If it's not a feasible option, then I'll probably just revert back to what I had prior to trying to do this.
Keep in mind, authentication is only used by staff, so it's not going to be running for every single player
else using player prelogin event (check database and add date of last modif so if date is greater than x kick the player)
what is the timeout-time for a client before give up login?
you have like 30 seconds from connection to in the world, more or less
with a whole host of dozen caveats, etc
What ? Dozen caevats? What is ?
the client has to login
recieve chunks
respond to the keepalive packet in time or it gets dc'd, etc
So using playerasyncprelogin event i have 20/30 sec to get the new inveotrh on the db ? (I check if the data is refreshed every 5 seconds and ar 25 i kick the player)

Any thoughts on what I should do?
How i have to take it ?
Do you have any idea why getHost() is deprecated? It is from the InetSocketAddress
Hey I am getting this error when I try to join my 1.20.1 server from the latest version of waterfall, any one know the issue? https://paste.learnspigot.com/uhinodosur.lua
(Ping if you reply)
Your plugin "bungeepackfix" seems to be outdated or broke, it's trying to use a method that does not exist
So there is this weird problem, when i cancel a ChatEvent proxy-sided, when the player the cancelled message was from sends another message they get kicked because of an invalid chat signature... any ideas on how to fix this?
Basically, you can't
Switch to Velocity then install SignedVelocity.
If you can't use Velocity, you'll have to adapt SignedVelocity to BungeeCord.
There is already similar stuff
I think its not proper say switch to velocity here. Probably he haves already build a sytem around it
Not aware of any "similar stuff"
There is a spanish discord where it exists
You must use redis i guess
It's a system that is used to store stuff on table hashes
If you don't know, probably you'd like to use some plugin that does this
is it possible to choose the player used to send a plugin message to the backend servers?
Doesn't the API expose the players server connection?
is the locale loaded (via ProxiedPlayer#getLocale) already present in the LoginEvent?
I don't think so
afaik the player settings packet is only sent after the player joined the game
No, LoginEvent is fired long before the client sends that info
in 1.20.2, it's sent before you join the world, before that, it's sent sometime after
it looks like it is loaded in the PostLoginEvent
most likely only works in 1.20.2 if you care about older versions
aren't all events async on bungee/waterfall? or are they synced in a queue?
but SettingsChangedEvent would be the one
Not all are AsyncEvent in a way that enables the intention system. But I believe they are asynchronous in that sense.
ah, right, I always forget about that system
The path to firing events from EventBus is unsychronized, so they could totally fire in parallel, I think.
unfortunately the SettingsChangedEvent on bungee is extremely basic compared to other event APIs
is the first SettingsChangedEvent (on waterfall) called after the AsyncPlayerPreLoginEvent on the paper side?
Yes, once again, far after login
pre 1.20.2, the client sends it just after you get the join game packet
1.20.2 sends it in the configuration phase, idk how md mapped that to existing events, my care for WF/Bungee is at all all time low, so, I never tracked that down
but, it's 100% not going to be tied to the login events
ah i see
Something that I found out: Why Paper's setPlayerProfile doesn't work if you are connected to the server via Waterfall? I'm trying to change a player's skin with it and, while the code works if I connect directly to the server or if I'm using Velocity, it doesn't work if I'm using Waterfall
This also doesn't work in BungeeCord, so this actually isn't a Waterfall issue but an upstream issue, but I was curious about why it doesn't work
(inb4 just use velocity instead of using waterfall lol, maybe this will convience me to migrate to Velocity once and for all)
I mean
try disabling tab list rewriting in the waterfall config if you've not got it disabled already
didn't work 
the proxy also doesn't have any plugins
No idea then
let me try
it's generally down to some oddball desync between the identity somewhere
shits been going on for years
glhf
(first server is Waterfall, second server is Velocity)
tbh, considering that Waterfall is EOL (sort of)
I could migrate to Velocity (if I migrated all of my plugins)
I mean, there comes a level of "somebody would need to look into what is going on"
chances are it's losing something somewhere or something is being rewritten
would need to see what bungee is doing
and, I generally have 0 inclination for that somebody being me

now it makes sense why those skin changer/restorer plugins need to be installed on Bungee/Waterfall level: it is because something somewhere in Bungee causes it to bork so they need to change the skin on the proxy level
because I was wondering about why tf these plugins do all sort of weird crazy stuff when you can just do player.setPlayerProfile
Well, yea, there is a bunch of logic in bungee which has caused issues for years
disabling the tablist & entity metadata rewriting should disable most of that, but, eeeer
if you mean ProxiedPlayer.unsafe().sendPacket(DefinedPacket), it is not working apparently
I think so; I need a method to send a plugin message to one of the backend servers through a player's connection
Yes, so, get the Server from the player and use that
but doesn't that send the message through a random player? I need to choose which player to use to send the message
No
so even if two players are connected to the same server they will have two different Server instances?
yes
that makes sense then
cat so smart
So I wrote a plugin to link up the "portals" of ancient cities in my survival server with previous seasons/versions of my survial so ppl can explore the previous seasons. However sometimes when players travel trough portals (or join the survival from the hub) they get kicked with the following message:
Internal Exception: io.netty.handler.codec.DecoderException: java.io.IOException: Packet 0/22 (PacketPlayInLook) was larger than I expected, found 16 bytes extra whilst reading packet 22
This only happens when using portals (and npc's for some reason), but not when using /server. Does anyone know what I did wrong?
This is the waterfall part of the plug-in: https://pastebin.com/DNQZarVX
nvm I updated waterfall and it seems to fix the issue, should have tested that beofre posting
my cat is dumb btw
I disagree.. mostly
Why
Any idea what the error below would be caused by?
[18:43:30 INFO]: [/**.**.**.**:62207] <-> InitialHandler has pinged
[18:43:35 INFO]: [/**.**.**.**:62209] <-> InitialHandler has pinged
[18:43:39 INFO]: [.TimoDerKoenig|/**.**.**.**:0] <-> ServerConnector [juesc] has connected
[18:43:39 WARN]: [.TimoDerKoenig|/**.**.**.**:0] <-> ServerConnector [juesc] - could not decode packet! io.netty.handler.codec.DecoderException: java.lang.UnsupportedOperationException: Packet must implement read method
Not entirely sure where to start digging; seeing it mostly happen on waterfall (by what we can tell so far) - any clues on where to start debugging? thanks 🙂
Try on a vanilla enviorment and without plugins
is there a waterfall version that supports 1.8.8?
latest
apparently the plugin messages are not always sent using this method; I started noticing it today but just because I wasn't able to test it out completely
the fact is that I need to send a plugin message just when a player disconnects and so I cannot use their connection to send it because they are no longer online.
so I tried the method you suggested using the Server instance of another player but it still does not always send it (or, better, it sends it but the Bukkit server never receives it)
I mean, that logic has been buggy for years afaik
there is a reason why we generally suggest using anything but plugin messages if you wany reliable messaging
I see, but I would avoid implementing a new messaging method for just a plugin message whose purpose is to send a message to a player (but I cannot do it directly from the proxy)
...isn't there any other method (not covered by API, maybe?) to choose which player to use to send the message? in this way the message should always arrive (I hope, at least)
Yes, you literally get that player and use their server connection
the exact same as in the first place
There is no reliable mechanism for sending messages which isn't "go and actually use a reliable mechanism for sending messages"
message.txt by @random salmon: https://pastes.dev/ylLtizhl4Y
Yes, this a known bug on BungeeCord that if you register more than one scoreboard team fucks up
No promises, but I can investigate to see why, what I did see is that it's a pain in the ass
hum..
Its a bungeecord bug, you cant really swap to servers with duplicated boards as far i know.
Try to make your plugins use different scoreboard names on same server
for now I will use the old version of waterfall
That doesn't fix nothing
You can use packet-based plugins, for example https://github.com/ShieldCommunity/SternalBoard
my problem does not occur when I try to swap servers, but when I try to join the server..
i will leave now.. thanks and bye
That's two seperate issues
Hi! I want to create persistent bossbar using adventure, but when the player changes the server - bossbar disappears. I tried re-adding player to bossbar viewers in server connect events, nothing changed
Code is really simple - only bossbar initialisation and adding viewers to it
Use switch event and set it again i guess
Yeah, the thing is switch event has method getFrom(), which i don't need in this case, but does not have something like getTo()
Maybe i can get the server player has connected using player#getServer
Because I want to exclude one server from displaying bossbar
Server connect event is also fired when changing server, but maybe that's not the good option for that
Hi! I’m a student and pretty much new to git, could anyone give me a demo of how to make a patch-based fork of Waterfall?
Clone the travertine repo and then delete all the patches bar the first one
outside of that, see the contrib guide and note that this tooling is pretty much pure abuse
uhh where's the contrib guide
might still be on the paper repo, moreso an older branch before we moved to gradle
oh found it here https://github.com/PaperMC/Paper/blob/ver/1.9.4/CONTRIBUTING.md
thx
Failed to collect dependencies at io.github.waterfallmc:waterfall🫙1.19-R0.1-SNAPSHOT -> io.netty:netty-transport-native-unix-common🫙${netty.version}: Failed to read artifact descriptor for io.netty:netty-transport-native-unix-common🫙${netty.version}: The following artifacts could not be resolved: io.netty:netty-transport-native-unix-common:pom:${netty.version} (absent): Could not transfer artifact io.netty:netty-transport-native-unix-common:pom:${netty.version} from/to papermc (https://papermc.io/repo/repository/maven-public/): status code: 400, reason phrase: Bad Request (400) -> [Help 1]
why bad request
bad build
i tried it also with 1.20 r0.2
maven yeah
figure out why your thing isn't replacig the netty var
i solved it by using waterfall-native & waterfall-config somehow xd dunno why waterfall normal doesnt work like before. in the repo is also the jar missing
I moved to gradle waterfall
hello does anyone have version 1.18.2 of waterfall?
latest supports 1.8+
Is there a version of ServerKickEvent which fires for kicks originating from the proxy? (i.e Connection#disconnect)
wouldn't that just be the general disconnect event? unless you mean you closed on the servers connection, in which case, er, I'd imagine, same event?
The disconnect event doesn't include the reason afaik. For context I wrote a logging utility plugin and I want to add logging for proxy kicks including their reason.
because all the disconnectevent knows is that the connection is dead
I have a problem with the ProxyConfig.java interface located in bungee.api:
I want to add a custom parameter to the config.
If I see this correctly, there are two configs: one from Waterfall itself (waterfall.yml) and the one from bungee.
My issue is that I need to read the property in the BungeeCord.java file.
There is a getConfig() method which returns an object from the ProxyConfig interface.
Which one?
There is the Configuration.java from bungee and the WaterfallConfiguration.java from (obviously) Waterfall.
Neither of them implement all the methods from the ProxyConfig interface.
Where should I put my custom config option?
The compiler currently nags me about this error:
[ERROR] /home/thorben/Dokumente/Development/Waterfall/Waterfall-Proxy/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java:[10,8] io.github.waterfallmc.waterfall.conf.WaterfallConfiguration is not abstract and does not override abstract method isWaitingForPlayersEnabled() in net.md_5.bungee.api.ProxyConfig
I am unsure on how to proplery add a new config option.
I personally dont mind if its in the waterfall.yml or config.yml, however, the bungeecord class itself needs to be able to read this value.
are you trying to add a config option to bungeecord.yml or waterfall.yml?
if you are making a plugin, just use your own file
I want to change the behaviour of the disconnect when the server closes.
It should wait until every player has left the server, so no one gets kicked while e.g. playing a game.
Via HAProxy I can dran the bungee proxies so no new connections get added, and all existing ones should not be terminated. The proxy should wait until thers no connections anymore.
I dont think I can cancel or override the end command of bungee with my own logic and stop the server arbitrarily via a plugin?
Therefore I want to edit the "independentThreadStop" method of bungee so it waits for shutdown until noone has connections over the proxy.
And to switch the behaviour, I want to add a new config option named "wait_for_player_disconnects" in either waterfall.yml or config.yml, though I think it fits best in waterfall.yml.
I also dont understand why the getTimeout, getUUID dont have any implementations, at least according to IntelliJ.
It complains that the WaterfallConfiguration.java doesnt implement the getTimeout() method, but Waterfall still compiles just fine?
Where does the implementation come from? DI?
it's lombok
Oh no
Could you help me though with adding the custom config parameter?
In which class should I implement it?
No
it's pretty much at the point of basic java
define it in the interface, and define it in the config class that implements it
the waterfall class is there for reading from the waterfall config, the super is there for reading from config.yml
How can I download the source of waterfall 1.16.5 to my pc?
I mean, normal people would just grab the latest version
but i need the one from 1.16.5
Otherwise you would need to clone the repo and find a commit for that version to check out
Why?
If you wanna pretend you don't support newer versions, use a plugin
I don't think there is one, I was looking for one earlier
I mean, there is
You would need to go up the history yourself, however, we've never bothered to pin old versions
Go do a blame on the pom changes patch for the version line I guess
Ok, I'll have a look. Thank you
Do you know one?
There was a few out there, I don't have any links though
👍 Thanks for u help
so if i already have texture and signature of player skin, how to set it for player
Are plugin messages safe to use. Like to send data between a server and a proxy, you need a player as middleman. Can't a player just generate its own pluginmessages and send that to the proxy?
I obviously don't know enough about this, but you mean it's not an issue?
it's safe to use if you consider where the message is coming from
if you just want to communicate server <-> proxy but the message sender is a ProxiedPlayer then you'll want to discard it
Okay, so just do some instance checks...
But I don't understand how this can be achieved, doesn't the information have to go through a player to communicate between server and proxy?
it uses the socket connection between the proxy and the server that the proxy is proxying for a client, but for that to exist a client has to be connected to the proxy; if it only stays between the server/proxy connection, it isn't sent to the client
Aha, that clears up my understanding. Thanks!
Yeah, I always thought the client was middleman, as the client is required.
the proxy is the middleman, forwarding packets between server/client, but as it can intercept them you can do extra stuff with them as well before it gets forwarded
Oh... Yeah, true.
(I now remember this is exactly why I wasn't didn't think about this earlier on, as the proxy is the middleman it can modify malicious packets sent from client to server and so on)
Why do I no longer see an MOTD in the client from 1.20.3 when I set it in the ProxyPingEvent?
hello, is it possible with waterfall/the bungeecord api to intercept all chat messages going to the client? it doesnt seem to be possible, is there some kind of workaround that doesn't involve using doing it on the server?
How to kick proxiedplayer with adventure component kick message? I can't see any method in Audience
basically, you can't
I think adventure has a bungee serialiser you can use, however?
I see, thanks!
Does anyone have an idea how to fix this?
well, you hit the API rate limit
so the answer generally is "don't"
as for how you don't depends on the nature of your setup, etc
This is the only thing that pops up for me when connecting players to the bungeecord server. There is no way this limit could be unattainable?
mojang sets the API limits
if you're hitting them the only general solution is to start load balancing proxy instances, or basically proxy the requests to mojang through something that will load balance
And can I correct that for example the query is sent from socks?
no idea
22:34:46 [SEVERE] Error authenticating xxx with minecraft.net
java.lang.IllegalStateException: Expected HTTP response 200 OK, got 429 Too Many Requests
Only problem is that currently there are no people on the server and no connections....
Does anyone have any ideas?
I feel dumb.
yea no idea how to fix this
PluginMain is in the jar
did a clean, didn't fix it
wait I know what I did wrong
Actually, nevermind.
Any ideas?
once again, work out why you're hitting mojangs API limits and then address that
if using a shared host, only real advice would be don't
Does PlayerJoinEvent get called when changing servers?
You mean on the backend servers? yes, the backends don't know or care that the player just jumped from another server
how to cancel runlater
public void addPlayerOffline(ProxiedPlayer player){
OfflinePlayers.add(player);
sendPartySysMassage(" " + player.getName() + " offline 5 Minutes to kick for Party");
ScheduledTask scheduled = Plugin.getProxy().getScheduler()
.schedule(Plugin, new PlayerOffline(this, player),1, TimeUnit.MINUTES);
}
public void removePlayerOffline(ProxiedPlayer player) {
OfflinePlayers.remove(player);
// runlater cancel
}
i need For every player 
MAP<uuid,ScheduledTask> Like this?
yes
And how to cancel.
Excuse me, I'm a beginner in JAVA.
Map#remove returns the old value
ty 😁
at me.st.crew.LPParty.Party.removePlayerOffline(Party.java:157) ~[?:?]
at me.st.crew.Events.OnPlayerJoin.onPlayerjoin(OnPlayerJoin.java:29) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] ``` 😐
^^
the return value of "java.util.Map.remove(Object)" is null
java.lang.NullPointerException: Cannot invoke "net.md_5.bungee.protocol.MinecraftEncoder.getProtocol()" because the return value of "io.netty.channel.ChannelPipeline.get(java.lang.Class)" is null
at net.md_5.bungee.netty.ChannelWrapper.getEncodeProtocol(ChannelWrapper.java:51) ~[MainServer.jar:git:Waterfall-Bootstrap:1.20-R0.2-SNAPSHOT:dce3b8b:558]
at net.md_5.bungee.UserConnection.sendPacketQueued(UserConnection.java:195) ~[MainServer.jar:git:Waterfall-Bootstrap:1.20-R0.2-SNAPSHOT:dce3b8b:558]
at net.md_5.bungee.UserConnection.sendMessage(UserConnection.java:562) ~[MainServer.jar:git:Waterfall-Bootstrap:1.20-R0.2-SNAPSHOT:dce3b8b:558]
at net.md_5.bungee.UserConnection.sendMessage(UserConnection.java:517) ~[MainServer.jar:git:Waterfall-Bootstrap:1.20-R0.2-SNAPSHOT:dce3b8b:558]
at net.md_5.bungee.UserConnection.sendMessage(UserConnection.java:505) ~[MainServer.jar:git:Waterfall-Bootstrap:1.20-R0.2-SNAPSHOT:dce3b8b:558]
at net.md_5.bungee.UserConnection.sendMessage(UserConnection.java:484) ~[MainServer.jar:git:Waterfall-Bootstrap:1.20-R0.2-SNAPSHOT:dce3b8b:558]
at me.st.crew.LPParty.Party.sendPartyMassage(Party.java:46) ~[?:?]
at me.st.crew.Commands.PartyCmd.PartyChat(PartyCmd.java:304) ~[?:?]
at me.st.crew.Commands.PartyCmd.execute(PartyCmd.java:80) ~[?:?]```
public void sendPartyMassage(String msg, ProxiedPlayer player){
for (ProxiedPlayer p : members) {
if (!mute.contains(p)) {
if (p != null)
p.sendMessage(Plugin.sendMessage(player,msg));
}
}
}
how?
outside of "reproduce without plugins", eeeer
I mean, looks like you're sending a message to a dead connection
that's not how that works
if you store a connection object and the player DCs, it doesn't magically turn into a null value
How do I fix it?
well, are you storing old connection objects or not?
if yes, generally, don't do that; or, at the very least, check if they're still online
them still being in the list means effectively nothing
I have no idea how you're logic works
ok ty
public void removePlayerOffline(ProxiedPlayer player) {
OfflinePlayers.removeIf(p -> p.getUniqueId().equals(player.getUniqueId()));
members.removeIf(p -> p.getUniqueId().equals(player.getUniqueId()));
members.add(player);
if (owner.getUniqueId() == player.getUniqueId()){
setOwner(player);
}
if (timePlayerOffline.containsKey(player.getUniqueId())) {
timePlayerOffline.remove(player.getUniqueId()).cancel();
}
}
I think I fixed it.
ye fixed @trail plume
literally has "[no-ping]" in his name 
is there an ignoreCancelled for listeners in waterfall?
How to make a fork of waterfall
fork travertine and then work out how all the scripts work, etc
What is travertine
an old fork of waterfall
Ok
first you should probably consider if you can do whatever your trying to do with a plugin
bruh
sometimes i have this error can someone help me plz
most time on the first join
then i can join without problems
message.txt by @timber lichen: https://pastes.dev/SJHpeafgaT
Known bungee cord issue
Literally all you can really do is endure that you don’t have duplicate team names across servers
what are team names?
Scoreboards
i dont understand
i have a scoreborad but what team names?
permission ranks?
Read the error
i change now my bungee ranks to some other and idk but now the error is gone
is that what you mean
?
idk what i have to do
and why is this exists
Team npc-§8§4§a§0§0§0§4§3
i dont have a team npc?
You have a plugin in your server creating scoreboard teams
i have to give this a other name on every server
Fallback:
title: "&8<-&ao&8-> &bPromi&6Games &8<-&ao&8->"
lines:
- "&6Zeit:&f %localtime_time_HH:mm:ss%"
- "&r "
- "&6Rang:&f %vault_group%"
- "&r "
- "&6Clan:&f %simpleclans_clan_name%"
- "&r"
- "&6Online:&f %bungee_total%"
- "&r "
- "&6Sterne:&f %vault_eco_balance%"
?
so Fallback1 2 3
That is causing issues with server transfers because they’re using duplicate team names across server instances
I cannot tell you what you have on your server that is breaking it outside of it being scoreboard related
All I can tell you is what the error means and point you to the name of the team that it is upset about
i rly dont now what team is mean
ok i try somthing thx mate
or similarly sometimes it's this
first one came with this error
Just realized I'm not using waterfall
using bungee
I will try with waterfall
Okay if i use waterfall i get this...
i cant even see the back to server list button
starts with
[Render thread/WARN]: Client disconnected with reason: Internal Exception: io.netty.handler.codec.DecoderException: net.minecraft.ResourceLocationException: Non [a-z0-9_.-] character in namespace of location:
then its a long ass component tostring
seems to be from a tab-related packet
?
why is the location a component?
[Render thread/WARN]: Client disconnected with reason: Internal Exception: io.netty.handler.codec.DecoderException: net.minecraft.ResourceLocationException: Non [a-z0-9_.-] character in namespace of location: {\"extra\":[{\"color\":\"gray\",\"text\":\"\\n\"},{\"bold\":true,\"color\":\"white\",\"text\":\"MIDNIGHTSKY\\n\"},{\"color\":\"gray\",\"text\":\"\\n\"},{\"strikethrough\":true,\"color\":\"#0099FF\",\"text\":\" ```
Something is messing with packets and borking the data
Generally outdated plugins but 
for my server was the problem fancy npcs plugin
it was after i create the first npc but the name was not "Team npc-§7§a§o§c§f§c§f§4" that npc do not exist,
the name was my ingame name
i use now citizens and i no longer have the issue
Yeah Im getting this for some reason
With these plugins
Proxy-1.0-SNAPSHOT does nothing with packets
And also if a player times out then for some reason they don't get disconnected from proxy which is weird
so they get a "already connected to this proxy"
can anyone help with waterfall i want to direct connect to a server withoutgoing through hub
Don't include the server on bungee
Its that easy
lol
It happens to me too, did you find a solution?
Change the jar
Hii ! how to make a waterfall fork? i really want to make one.
What do you mean by "how to make a waterfall fork"
So.... How do I properly setup plugin messaging in BungeeCord with a custom channel identifier?
Like listen for incoming ones and sending own back?
There are no docs for BungeeCord that seem to cover the proxy side... Only the Server side.
thanks
i want to like make a fork of it of it's code but edited you know that's called fork
like adding things in the original waterfall
well either fork it like normal or look at how Travertine did it
Does the proxy modify the player (connection) in any way?
I try to figure out the cause of an error in DecentHolograms and so far the only common thing I could find from all the reports is, that the servers run under a BungeeCord/Waterfall proxy.
The error in question: https://paste.helpch.at/zikamujade.swift
The first line of the plugin the stacktrace mentions: https://github.com/DecentSoftware-eu/DecentHolograms/blob/main/src/main/java/eu/decentsoftware/holograms/api/nms/PacketListener.java#L33
that error cannot be caused by a proxy
that sounds more like a case where the plugin is simply not compatible with the server version
(as far as I can tell it should work though, I use similar code even behind a proxy without issues)
is this happening on every join? because I think if the player leaves before it was fully joined (which could happen more often on a proxy) then maybe that could cause the the handler to be missing?
public void execute(CommandSender commandSender, String[] strings) {
getLogger().info("Command Executed!");
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF( "pumpkincore:main" );
out.writeUTF( "Hello World" );
ProxiedPlayer p = (ProxiedPlayer) commandSender;
p.sendData("pumpkincore:main", out.toByteArray());
}```
is this right how to send plugin message in waterfall?
it not sending anything in my paper server...
i have register the channel in waterfall plugin
public void onEnable() {
instance = this;
getProxy().registerChannel("pumpkincore:main");```
then register this in paper plugin
public void onEnable() {
// Some Condition
if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
this.getLogger().info("We need Vault!");
getServer().getPluginManager().disablePlugin(this);
return;
}
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "pumpkincore:main");
this.getServer().getMessenger().registerIncomingPluginChannel(this, "pumpkincore:main", new PrivateMessage());
and this my PluginMessageListener in paper plugin
public class PrivateMessage implements PluginMessageListener {
@Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] messages) {
System.out.print(channel);
Pumpkincore.getInstance().getLogger().info("DEBUG: "+channel);
if (!channel.equalsIgnoreCase("pumpkincore:main")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(messages);
String subchannel = in.readUTF();
String senderName = in.readUTF();
String ggwp = in.readUTF();
player.sendMessage(Component.text("You received a private message from: " + senderName + ", "+ggwp));
}
}
there no output from
System.out.print(channel);
Pumpkincore.getInstance().getLogger().info("DEBUG: "+channel);```
after use this waterfall command #waterfall-dev message
still need help
Because you're sending the plugin message to the client, not to the server
i see
What is the linux command to update the waterfall.jar to the latest version?
rm waterfall.jar
wget newwaterfall.jar
java -jar newaterfal.jar
get the url from the website
wget https://api.papermc.io/v2/projects/waterfall/versions/1.20 That's what I figured out so far
I don't really know where I can find the URL on the website
you would need to parse the API responses
or if you're doing it manually just right click the download button and copy the link
How would I find what the correct API calls are to update the waterfall.jar through a .sh file?
if I send data from waterfall plugin
it will send to all server?
i want to make global player chat
so i have 2 server
1 paper plugin and 1 waterfall plugin
so i send data
event.getPlayer().sendPluginMessage(getInstance(), "pumpkincore:main", out.toByteArray());```
from paper plugin with AsyncChatEvent
after that waterfall plugin will send it back to all servers
like this
if (!event.getTag().equalsIgnoreCase("pumpkincore:main")) {
return;
}
ProxiedPlayer sender = (ProxiedPlayer) event.getReceiver();
for (Map.Entry<String, ServerInfo> entry : ProxyServer.getInstance().getServersCopy().entrySet()) {
String serverName = entry.getKey();
ServerInfo serverInfo = entry.getValue();
ProxyServer.getInstance().getLogger().info("ServerName: "+serverName);
serverInfo.sendData("pumpkincore:main", event.getData());
}```
it was successfully sent to waterfall and then returned to the paper plugin but only 1 origin server could receive it
plugin messaging requires hijacking a players connection
if you only have 1 server with players on it, then only it will be able to send/recieve such messages
i have 2 server and all server have 1 player online
2 server paper with 1 same plugin
so, you have 2 servers and 2 players connected through the proxy, each to different servers?
yes
then it should work
You would need o check your listener setup on the backend
I don't really see how that could fail if you acually have 2 servers with players on logged in, they should both get the message
this my listeners
public void onPlayerChat(AsyncChatEvent event) {
event.setCancelled(true);
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("PublicChat");
out.writeUTF(event.getPlayer().getName());
out.writeUTF(JSONComponentSerializer.json().serialize(event.message()));
event.getPlayer().sendPluginMessage(getInstance(), "pumpkincore:main", out.toByteArray());
}
@Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player sender, @NotNull byte[] messages) {
if (!channel.equalsIgnoreCase("pumpkincore:main")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(messages);
String subchannel = in.readUTF();
if (subchannel.equals("PublicChat")) {
Player fromPlayer = Bukkit.getPlayer(in.readUTF());
Component message = JSONComponentSerializer.json().deserialize(in.readUTF());
Component chatRenderer = chatRenderer(fromPlayer, message);
Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage(chatRenderer));
}
}```
I mean, that is never going to work as intended
fromPlayer will always be null on other servers
check logs, but, you probably wanna try printing out what is being recieved in that handle, but, idk
on he surface idk how the other server wouldn't get anything, I'd just expect whatever your chatRenerer method does to blow up, but 
so i just need to change Player to OfflinePlayer right?
idk your logib, but, yea, you'd nee to always have an offline player, also noting that you probably want to send the UUID, not the name, or figure out a better way to handle that so that you're not causing lookups
Is it possible to use waterfall to 'send' players to a Fabric server amidts other servers?
I guess not haha
Bump?
I would recommend using Velocity, the bungeecord environment has almost no support for mods environments
same concept, different APIs, etc
Anything else to note regarding the two?
I mean, with a question as open as that, no
Haha i meant like
Roughly positive/negative things to note about the two? Or when switching from Waterfall to Velocity
Also how much work would switching be? The thing I am mostly worried about is the whole message channel thingy that bungeecord has that I would need to rewrite and figure out again
I mean, it's an entirely new stack which is still in development vs a piece of software which basically hasn't been developed in 10 years
it doesn't cater to java 6
how much that impacts you is going to depend on what you're doing
Ah is waterfall outdated
waterfall is currently EOL
Oh?
I had some setbacks on working on stuff due to health issues, but, I'm especially done with waterfall because theres little you can do without causing issues for plugins in order to actually try to improve it in any meaningful manner
after my last project resulted in weeks of constant changes in order to appease plugins, never again
I see that on the website it says that Velocity is much faster
In what ways is it much faster?
It's built from th ground up from our years of knowledge on netty and around how it works
Does Velocity not support Fabric 1.20.4
proxies and mods generally do not work together well
velocity has some extra support for stuff which can help, but, overall, YMMV, and you are somewhat on your own
wheeen .5 comes, theres some stuff I can work on to maybe improve compatability, but, it does require some help from 3rd parties to support fully potentially
(annnd last time we tried reaching out re modding stuff, nobody replied bar our existing discussion with forge, soooooo)
Fabric is fully supported
Is there a way to add more channels to the list of registered channels that gets sent to a player when they join the proxy?
ProxyServer.registerChannel doesn't appear to affect the channel list that is sent to the client.
you'd need to handle that yourself
where i can find waterfall-proxy for maven?
We don't publish that, you'd need to publish it yourself or find a public maven repo that does
(65f9bd9b2d5bd6481a0648ce) // @sacred coral (@thinker369 / 933208620550737930) has been banned by @trail plume (126975485493248000)
Reason: Quick-banned for sending a message in #waterfall-dev
how to disable waterfall command tab?
don't grant the permission afaik
if the commands are granted by default you would need to set them to false, yes
in my luckperms?
yes
but i still can access it
is there any Event API like PlayerCommandSendEvent in bungeecord or waterfall?
pretty sure the ChatEvent catches that
Are you sure /skin is a command from the proxy?
yes, i have delete all command list from backend server with PlayerCommandSendEvent e.getCommands().clear();
also not sure anymore if this is actually done automatically on the proxy, there might be a requirement to manually filter it out with the ProxyDefineCommandsEvent
ah, wait, I thought you meant the pre command event. Yeah the ProxyDefineCommandsEvent is the equivalent to that
ok thats work
is waterfall still keep send PluginMessage after there any player join?
What? Do you mean if it will send a plugin message after no player is online?
Hey, is there any timeout implemented on ServerInfo#ping?
Last 
No, me last
no, me
Si.

goodbye waterfall.
Last
Dang it
👋
Rest in Peace
you tried to connect waterfall to a server in online mode
oh
hi, I'm looking for a plugin that when my server crashes redirects me to the limbo server and when it comes back online it redirects the players back to the primary server, do you have any advice? if so, ping me
someone know how fix this?
don't crosspost.
ok?
hello, i have a same problem
I added a waterfall to my server and everything worked during temporary testing when I ran waterfall using screen as root. However, when I dockerized waterfall, I'm getting this error.
My problem probably lies either in the startup, the Dockerfile, or the Docker Compose file.
waterfall config.yml:
docker-compose:
and dockerfile:
Because containers are isolated, their local host is their own
You’d need to communicate over the docket interface, see their guides for recs, etc
Trying to debug/sort out an issue but just trying to learn more about how bungee/waterfall work:
What is the upstream bridge?
is upstream the client or the server
If I want to use a plugin channel, is it safe to use "BungeeCord", or is it equally safe to use "custom:channel"?
proxy.registerChannel("custom:channel")
Use your own channel, don’t try to hijack somebody else’s
But I listen to PluginMessageEvent and I can receive messages like this:
minecraft:brand -> [B@4c8d14c2
yes, and?
I'm worried about whether the custom channel can be controlled by the client sending plug-in messages?
You just validate the sender
if the sender is not whatever bungee represents is a server connection, then ignore it
Do this? :
val a: Connection = event.sender if (proxy.servers != a) { return }
wat
check the sender in the event
see if it's an instance of whatever bungee considers a server connection
Do this? :
val a = event.sender as? ServerInfo ?: return if (!(proxy.servers.values.contains(a))) { return }
Thanks
val a = event.sender as? Server ?:return if (!proxy.servers.values.contains(a.info)) return
There is 0 reason to check that it's registered
So if it is sent by the client, then event.sender will be ProxiedPlayer, and if it is sent by the server, will it be Server?
yes
Thanks
Hi there,
I am having an issue with development of my bungee plugin where it says the following, Cannot invoke "java.util.List.isEmpty()" because the return value of "net.md_5.bungee.api.plugin.PluginDescription.getLibraries()" is null
But I haven’t set the field not was it an issue before the 1.20.5/6 update
spigot doesn't use nullability annotations in bungee properly
and so, if it's null now, it's null now
the thing is just loaded using snake, so, some level of "good luck" there
can someone
make a minecraft plugin which creates a custom encahnt for 1.20.1 and the enchant is called-
Shoot 3 + 1 arrow per level at the charge you shot at
wrong channel, also not the place for that
