#waterfall-dev

8550 messages · Page 9 of 9 (latest)

bright imp
#

i'have forget how that's work but just the proxy can transfert player betwwen server? (so spigot plugin can't?)

#

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?

frigid hazel
#

Could anyone answer this perhaps?

#

It's probably very basic, but I've tried a few things and can't figure it out hahaha

bright imp
#

you need a player to send plugin message

frigid hazel
#

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?

trail plume
#

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

bright imp
trail plume
#

I mean, sending data to the player would send it to the player, and not the server they're connected to

bright imp
#

what is limb?

trail plume
#

i.e. remove them from the world

frigid hazel
#

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

bright imp
frigid hazel
#

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

trail plume
#

or you represent that state using a boolean in whcih you message over the network

frigid hazel
#

Yeah, I think that's kinda what I'm thinking

trail plume
#

plugin messages are not transactional, etc

frigid hazel
#

then a bit of regex

bright imp
bright imp
trail plume
#

without modifactions to the server, no

bright imp
#

and for your limb I have to stop him from being able to interact with his inventory so what is the best way?

trail plume
#

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

bright imp
#

do you know how most plugins work? or the most populate methode?

trail plume
#

as I said, they just wait for some period of time on the new server and pray that the data saved in time

bright imp
#

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?

trail plume
#

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

frigid hazel
#

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

bright imp
#

what is the timeout-time for a client before give up login?

trail plume
#

you have like 30 seconds from connection to in the world, more or less

#

with a whole host of dozen caveats, etc

bright imp
trail plume
#

the client has to login

#

recieve chunks

#

respond to the keepalive packet in time or it gets dc'd, etc

bright imp
#

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)

trail plume
frigid hazel
bright imp
wicked lantern
quaint musk
wicked lantern
hidden ivy
#

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?

trail plume
#

Basically, you can't

potent lichen
#

If you can't use Velocity, you'll have to adapt SignedVelocity to BungeeCord.

wicked lantern
#

I think its not proper say switch to velocity here. Probably he haves already build a sytem around it

trail plume
#

Not aware of any "similar stuff"

wicked lantern
wicked lantern
#

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

wind dove
#

is it possible to choose the player used to send a plugin message to the backend servers?

trail plume
#

Doesn't the API expose the players server connection?

reef minnow
#

is the locale loaded (via ProxiedPlayer#getLocale) already present in the LoginEvent?

lean gobletBOT
#

I don't think so

#

afaik the player settings packet is only sent after the player joined the game

trail plume
#

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

reef minnow
#

it looks like it is loaded in the PostLoginEvent

lean gobletBOT
#

most likely only works in 1.20.2 if you care about older versions

reef minnow
#

is there a better event i could listen to?

#

idealy an async event

lean gobletBOT
#

aren't all events async on bungee/waterfall? or are they synced in a queue?

#

but SettingsChangedEvent would be the one

potent lichen
#

Not all are AsyncEvent in a way that enables the intention system. But I believe they are asynchronous in that sense.

lean gobletBOT
#

ah, right, I always forget about that system

potent lichen
#

The path to firing events from EventBus is unsychronized, so they could totally fire in parallel, I think.

lean gobletBOT
#

unfortunately the SettingsChangedEvent on bungee is extremely basic compared to other event APIs

reef minnow
#

is the first SettingsChangedEvent (on waterfall) called after the AsyncPlayerPreLoginEvent on the paper side?

trail plume
#

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

reef minnow
#

ah i see

soft scroll
#

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)

trail plume
#

I mean

#

try disabling tab list rewriting in the waterfall config if you've not got it disabled already

soft scroll
#

the proxy also doesn't have any plugins

trail plume
#

No idea then

soft scroll
#

new reason to migrate to velocity just dropped!!! /j

trail plume
#

make sure metadata rewriting is disabled too

#

i guess

soft scroll
#

let me try

trail plume
#

it's generally down to some oddball desync between the identity somewhere

#

shits been going on for years

soft scroll
#

nope, also doesn't work

trail plume
#

glhf

soft scroll
#

(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)

trail plume
#

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

soft scroll
#

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

trail plume
#

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

wind dove
trail plume
#

Eeeerrr

#

doesn't that send a packet to the player?

wind dove
#

I think so; I need a method to send a plugin message to one of the backend servers through a player's connection

trail plume
#

Yes, so, get the Server from the player and use that

wind dove
#

but doesn't that send the message through a random player? I need to choose which player to use to send the message

trail plume
#

No

wind dove
#

so even if two players are connected to the same server they will have two different Server instances?

trail plume
#

yes

wind dove
#

that makes sense then

languid lake
#

cat so smart

rustic rain
#

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

wicked lantern
languid lake
#

I disagree.. mostly

wicked lantern
wet zephyr
#

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 🙂

wicked lantern
rugged grove
#

is there a waterfall version that supports 1.8.8?

chilly coral
#

latest

wind dove
# trail plume Yes, so, get the Server from the player and use that

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)

trail plume
#

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

wind dove
#

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)

trail plume
#

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"

random salmon
brazen hamletBOT
random salmon
#

i have this issue

#

this is from my scoreboard.. only on new waterfall version

wicked lantern
#

Yes, this a known bug on BungeeCord that if you register more than one scoreboard team fucks up

random salmon
#

ah

#

will be fixed?

wicked lantern
#

No promises, but I can investigate to see why, what I did see is that it's a pain in the ass

random salmon
#

hum..

wicked lantern
#

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

random salmon
#

for now I will use the old version of waterfall

wicked lantern
#

That doesn't fix nothing

random salmon
#

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

trail plume
#

That's two seperate issues

halcyon cargo
#

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

wicked lantern
#

Use switch event and set it again i guess

halcyon cargo
#

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

lavish cypress
#

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?

trail plume
#

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

lavish cypress
#

uhh where's the contrib guide

trail plume
#

might still be on the paper repo, moreso an older branch before we moved to gradle

lavish cypress
#

thx

lethal summit
#

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

sleek jackal
#

bad build

lethal summit
#

i tried it also with 1.20 r0.2

sleek jackal
#

where are you downloading it from

#

oh wiat is this maven

lethal summit
#

maven yeah

sleek jackal
#

figure out why your thing isn't replacig the netty var

lethal summit
#

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

wicked lantern
#

I moved to gradle waterfall

mint heron
#

@trail plume one sec, will update the readme too since that is still on 1.19

#

done

storm egret
#

hello does anyone have version 1.18.2 of waterfall?

trail plume
#

latest supports 1.8+

mint flame
#

Is there a version of ServerKickEvent which fires for kicks originating from the proxy? (i.e Connection#disconnect)

trail plume
#

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?

mint flame
#

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.

trail plume
#

because all the disconnectevent knows is that the connection is dead

hollow path
#

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.

subtle radish
#

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

hollow path
#

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?

trail plume
#

it's lombok

hollow path
#

Oh no

hollow path
# trail plume it's lombok

Could you help me though with adding the custom config parameter?

In which class should I implement it?

trail plume
#

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

rustic hawk
#

How can I download the source of waterfall 1.16.5 to my pc?

trail plume
#

I mean, normal people would just grab the latest version

rustic hawk
#

but i need the one from 1.16.5

trail plume
#

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

rustic hawk
trail plume
#

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

rustic hawk
#

Ok, I'll have a look. Thank you

trail plume
#

There was a few out there, I don't have any links though

rustic hawk
#

👍 Thanks for u help

thorn zenith
#

so if i already have texture and signature of player skin, how to set it for player

limber pecan
#

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?

languid lake
#

you can check the sender type

#

i.e. where it's coming from

limber pecan
#

I obviously don't know enough about this, but you mean it's not an issue?

languid lake
#

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

limber pecan
#

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?

languid lake
#

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

limber pecan
#

Aha, that clears up my understanding. Thanks!

Yeah, I always thought the client was middleman, as the client is required.

languid lake
#

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

limber pecan
#

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)

dense oasis
#

Why do I no longer see an MOTD in the client from 1.20.3 when I set it in the ProxyPingEvent?

warm spoke
#

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?

trail plume
#

within the bounds of the API? no

#

with a packet library? sure

halcyon cargo
#

How to kick proxiedplayer with adventure component kick message? I can't see any method in Audience

trail plume
#

basically, you can't

#

I think adventure has a bungee serialiser you can use, however?

halcyon cargo
#

I see, thanks!

bleak current
#

Does anyone have an idea how to fix this?

trail plume
#

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

bleak current
#

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?

trail plume
#

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

bleak current
#

And can I correct that for example the query is sent from socks?

trail plume
#

no idea

bleak current
#

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....

bleak current
#

Does anyone have any ideas?

whole salmon
#

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.

trail plume
#

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

sharp glacier
#

Does PlayerJoinEvent get called when changing servers?

trail plume
#

You mean on the backend servers? yes, the backends don't know or care that the player just jumped from another server

stable river
#

how to cancel runlater

stable river
# stable river 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
    }
trail plume
#

and?

#

if you're storing them in a Map, then just get it from the map and cancel it?

stable river
trail plume
#

yes

stable river
#

And how to cancel.

trail plume
#

remove(#UUID).cancel()

#

maybe wanna add a null check, but, yea

stable river
trail plume
#

Map#remove returns the old value

stable river
stable river
# trail plume remove(#UUID).cancel()
        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) ~[?:?] ``` 😐
languid lake
#

the return value of "java.util.Map.remove(Object)" is null

stable river
#
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?

trail plume
#

outside of "reproduce without plugins", eeeer

#

I mean, looks like you're sending a message to a dead connection

stable river
#

how

#

if (p != null)

trail plume
#

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

stable river
#

How do I fix it?

trail plume
#

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

stable river
#

ye

#

online

trail plume
#

them still being in the list means effectively nothing

#

I have no idea how you're logic works

stable river
#

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

subtle radish
#

literally has "[no-ping]" in his name gdskull

civic stone
#

is there an ignoreCancelled for listeners in waterfall?

lean widget
#

How to make a fork of waterfall

trail plume
#

fork travertine and then work out how all the scripts work, etc

lean widget
#

What is travertine

trail plume
#

an old fork of waterfall

lean widget
#

Ok

subtle radish
#

first you should probably consider if you can do whatever your trying to do with a plugin

lean widget
#

bruh

timber lichen
#

sometimes i have this error can someone help me plz
most time on the first join
then i can join without problems

trail plume
#

Known bungee cord issue

#

Literally all you can really do is endure that you don’t have duplicate team names across servers

trail plume
#

Scoreboards

timber lichen
#

permission ranks?

trail plume
#

Read the error

timber lichen
#

is that what you mean

#

?

trail plume
#

All I can do is point to the error

timber lichen
trail plume
#

You have a plugin in your server creating scoreboard teams

timber lichen
#

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

trail plume
#

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

timber lichen
#

i rly dont now what team is mean

trail plume
#

It’s literally a Minecraft feature

#

The scoreboard commands

timber lichen
#

ok i try somthing thx mate

plucky lava
plucky lava
#

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\":\" ```
trail plume
#

Something is messing with packets and borking the data

#

Generally outdated plugins but Maoshrug

timber lichen
#

i use now citizens and i no longer have the issue

plucky lava
#

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"

eternal fulcrum
#

can anyone help with waterfall i want to direct connect to a server withoutgoing through hub

dusty lintel
#

Its that easy

eternal fulcrum
#

lol

grizzled beacon
plucky lava
#

Nope still getting it :/

#

What plugins u running

dusty lintel
#

Change the jar

languid parrot
#

Hii ! how to make a waterfall fork? i really want to make one.

dusty lintel
#

What do you mean by "how to make a waterfall fork"

boreal crown
#

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.

boreal crown
#

thanks

languid parrot
#

like adding things in the original waterfall

lean gobletBOT
#

well either fork it like normal or look at how Travertine did it

boreal crown
#

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

lean gobletBOT
#

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?

cosmic burrow
#
            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);```
cosmic burrow
#

still need help

trail plume
craggy oasis
#

What is the linux command to update the waterfall.jar to the latest version?

sleek jackal
#

rm waterfall.jar
wget newwaterfall.jar
java -jar newaterfal.jar

#

get the url from the website

craggy oasis
#

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

trail plume
#

you would need to parse the API responses

daring shardBOT
trail plume
#

or if you're doing it manually just right click the download button and copy the link

craggy oasis
#

How would I find what the correct API calls are to update the waterfall.jar through a .sh file?

cosmic burrow
#

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

trail plume
#

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

cosmic burrow
#

2 server paper with 1 same plugin

trail plume
#

so, you have 2 servers and 2 players connected through the proxy, each to different servers?

cosmic burrow
#

yes

trail plume
#

then it should work

cosmic burrow
#

not work

#

I don't know how to explain it so it can be understood

trail plume
#

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

cosmic burrow
#

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));
        }
    }```
trail plume
#

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 MahiruShrug

cosmic burrow
trail plume
#

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

craggy oasis
#

Is it possible to use waterfall to 'send' players to a Fabric server amidts other servers?

craggy oasis
#

I guess not haha

craggy oasis
#

Bump?

austere nova
#

I would recommend using Velocity, the bungeecord environment has almost no support for mods environments

craggy oasis
#

how similar are waterfall and velocity

#

Got a lot of my network going on waterfall

trail plume
#

same concept, different APIs, etc

craggy oasis
#

Anything else to note regarding the two?

trail plume
#

I mean, with a question as open as that, no

craggy oasis
#

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

trail plume
#

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

craggy oasis
#

Ah is waterfall outdated

trail plume
#

waterfall is currently EOL

craggy oasis
#

Oh?

trail plume
#

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

craggy oasis
#

I see that on the website it says that Velocity is much faster

#

In what ways is it much faster?

trail plume
#

It's built from th ground up from our years of knowledge on netty and around how it works

craggy oasis
#

Does Velocity not support Fabric 1.20.4

trail plume
#

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)

austere nova
wooden path
#

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.

trail plume
#

you'd need to handle that yourself

thick sedge
#

where i can find waterfall-proxy for maven?

trail plume
#

We don't publish that, you'd need to publish it yourself or find a public maven repo that does

topaz vergeBOT
#

(65f9bd9b2d5bd6481a0648ce) // @sacred coral (@thinker369 / 933208620550737930) has been banned by @trail plume (126975485493248000)
Reason: Quick-banned for sending a message in #waterfall-dev

cosmic burrow
#

how to disable waterfall command tab?

lean gobletBOT
#

don't grant the permission afaik

cosmic burrow
#

set to false?

#

my player don't have permission

lean gobletBOT
#

if the commands are granted by default you would need to set them to false, yes

lean gobletBOT
#

yes

cosmic burrow
#

but i still can access it

#

is there any Event API like PlayerCommandSendEvent in bungeecord or waterfall?

lean gobletBOT
#

pretty sure the ChatEvent catches that

#

Are you sure /skin is a command from the proxy?

cosmic burrow
lean gobletBOT
#

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

cosmic burrow
#

ok thats work

#

is waterfall still keep send PluginMessage after there any player join?

vestal cedar
#

What? Do you mean if it will send a plugin message after no player is online?

lavish parcel
#

Hey, is there any timeout implemented on ServerInfo#ping?

honest coral
#

does a waterfall plugin work on bungeecord?

#

oh they probably wont

spiral mountain
#

Last tf

visual hinge
#

No, me last

chilly token
#

no, me

austere nova
#

Si.

steady pagoda
indigo basin
#

goodbye waterfall.

vale ibex
#

Last

torpid rampart
#

nope, you are not the last.

#

Also goodbye waterfall.

vale ibex
#

Dang it

steady pagoda
#

👋

torpid agate
#

Rest in Peace

peak geode
#

why?

#

is this part of "end of life"?

trail plume
#

you tried to connect waterfall to a server in online mode

peak geode
#

oh

chilly oracle
#

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

sleek jackal
bleak current
#

someone know how fix this?

trail plume
#

don't crosspost.

bleak current
#

ok?

atomic ridge
#

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:

trail plume
#

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

plucky lava
#

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

trail plume
clear plume
#

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")

trail plume
#

Use your own channel, don’t try to hijack somebody else’s

clear plume
#

But I listen to PluginMessageEvent and I can receive messages like this:

#

minecraft:brand -> [B@4c8d14c2

trail plume
#

yes, and?

clear plume
#

I'm worried about whether the custom channel can be controlled by the client sending plug-in messages?

trail plume
#

You just validate the sender

#

if the sender is not whatever bungee represents is a server connection, then ignore it

clear plume
#

Do this? :
val a: Connection = event.sender if (proxy.servers != a) { return }

trail plume
#

wat

#

check the sender in the event

#

see if it's an instance of whatever bungee considers a server connection

clear plume
#

Do this? :
val a = event.sender as? ServerInfo ?: return if (!(proxy.servers.values.contains(a))) { return }

trail plume
clear plume
#

Thanks

#

val a = event.sender as? Server ?:return if (!proxy.servers.values.contains(a.info)) return

trail plume
#

There is 0 reason to check that it's registered

clear plume
#

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?

trail plume
#

yes

clear plume
#

Thanks

primal root
#

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

trail plume
#

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

upbeat plaza
#

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

sleek jackal
#

wrong channel, also not the place for that