#waterfall-dev

1 messages · Page 2 of 1

wide maple
#

you cannot have overlapping method names with the same parameters in java

#

let alone the same signature

fair flame
#

I found it but now i have this error 'class' or 'interface' expected

#

.

wide maple
#

you dont need to ping me a second after you type that.

#

I was checking if the Command class is an interface

#

its not

#

show your whole code + line numbers + error

fair flame
#

Okey and how do i fix it? (I am not very good at coding thats why i have many questions)

wide maple
#

I cant help unless you read what I write.

fair flame
wide maple
#

What’s the name of your file

fair flame
#

The folder its in is a own folder and its called hub and the file is called Hub and its in the folder hub

wide maple
#

on your second-to-last line there’s an extra }

#

remove it.

fair flame
#

Now is all errors away

#

But when i tried to run it and get the java file i got the error Cannot Resolve symbol "Hub"

wide maple
#

that’s because you misspelled your class name. It should be “Hub”

#

if it still shows up then, delete the import and import it again

fair flame
#

ProxyServer.getInstance().getPluginManager().registerCommand(this, new hub.Hub(this));
Even if i set it to "Hub" ore "hub" its still not working and if i remove the import and add it again not working

wide maple
fair flame
#

How do you mean?

fair flame
sleek jackal
#

remove the .hub()

#

just new hub()

fair flame
# sleek jackal just new hub()

ProxyServer.getInstance().getPluginManager().registerCommand(this, new hub()(this));
Unexpected token
Not a statement
';' expected
')' expected

sleek jackal
#

remove the (this)

fair flame
#

But im gonna try if its working tommorow

fair flame
lean gobletBOT
#

well for one you are trying to save null to a file

short wedge
#

To get 1.7 working on waterfall we just needa do the protocols right?

wide maple
#

Velocity supports 1.7 out of the box if you don't want to deal with that

wide maple
short wedge
#

it's 1.19?

wide maple
#

Maybe they'll even release updates publicly again if you open an issue. Don't know/don't care

#

Not sure

#

Says last updated 2022?

short wedge
#

its 1.19

wide maple
#

I guess then

short wedge
short wedge
lean gobletBOT
#

use a supported client version? seeing as that's not really related to waterfall that's outside of the support we can provide

#

if you want 1.19.1+ support you will need to get them to update it/update it yourself I guess?

#

*1.19.3 I mean

wide maple
wide maple
# short wedge its 1.19

So Joshua must have seen that message because by some stupid miracle the fork just got updated.
Enjoy I guess

zenith grotto
#

in which occasion is this error thrown? im again working with scoreboard and packets. This time, with the ScoreboardScore packet

wide maple
#

That's all that that says

zenith grotto
#

i tried to see with the debugger but nothing is null, i'll check it again later

trail plume
#

Look at the source code

#

All we can see is that something in the scoreboard packet is null that shouldn't be

lean terrace
#

can custom channel registered multiple times?

channel registeration code is simple

        plugin.getServer().getMessenger().registerIncomingPluginChannel(plugin, BUNGEE_HOOK_CHANNEL_NAME, new BungeeListener());
        plugin.getServer().getMessenger().registerOutgoingPluginChannel(plugin, BUNGEE_HOOK_CHANNEL_NAME);

...
    private static final String CHANNEL_SUFFIX = "bungee_messenger";
    public static final String BUNGEE_HOOK_CHANNEL_NAME = "siglib:" + CHANNEL_SUFFIX;

SigLib.jar is a server custom library that we depend upon.

server A , server B, lobby all have SigLib.jar

so all server will try to register channel .
It works fine when server I stop and restart server A and B together

problem

sending data with custom registered channel happens 2 times or 3 times , not even sure of the pattern 

setup

server A , B , lobby all have SigLib in their servers 
all register same channel 

reproduction

proxy + server A, B , lobby are up
stop server A and restart
data sends 2 or 3 times in server A
lean terrace
wide maple
#

^ the player part:
If you have player 1 connected to server A
Then server A will be able to talk to the proxy
Server B which has no player connected to it will not

The plugin channels piggyback of the player connections: no player, no communication

Also: if you use serverA .sendmessage(...) on bungee
and you have both player 1 and player 2 connected to server A at the same time then the message will be sent twice: once for every player

proper gorge
#

@lofty ridge

lofty ridge
#

feel free to send a PR if you want

proper gorge
#

But there is already a PR

lofty ridge
#

merged

proper gorge
#

I've even created a new one without looking into already existing before but closed it just after doing that

wicked lantern
wicked lantern
#

mcheart Thanks

rotund hemlock
#

Is there a sample plugin to start coding form like in paper mc for waterfall?

wide maple
wicked lantern
sage bronze
#

Hey guys, why when i use ServerInfo#ping the first time it works but after that is always timeout

#

Im using this function to make sure the ping dont go long than 5 seconds:

public static void ping(ServerInfo info, Callback<ServerPing> callback) {
        CompletableFuture.runAsync(() -> {
            final CompletableFuture<Void> future = new CompletableFuture<>();

            info.ping((result, error) -> {
                callback.done(result, error);
                future.complete(null);
            });

            try {
                future.get(5, TimeUnit.SECONDS);
            } catch (final Exception e) {
                callback.done(null, e);
            }
        });
    }

But not sure if the ping have some sort of intenral delay, let me know

#

Even if i dont have that timeout of 5 seconds some time later i get "io.netty.handler.timeout.ReadTimeoutException"

trail plume
#

No, it just creates a socket and sends some crud over it and waits for a response

sage bronze
#

Because if players can still join the server and the first ping works there is something weird

#

I mean not sure how this could be about wrong address/ports

#

Could be that other plugins are messing somehow with that but is still weird

#

and sorry for the ping

potent lichen
wide maple
echo charm
#

How do I connect a running server to Waterfall? I mean, my server is not in the config, but I want to connect it with a WaterFall (with plugin)

ocean sequoia
# echo charm How do I connect a running server to Waterfall? I mean, my server is not in the ...

i created this a while ago not sure if it will work and i think i made it for bungeecord? not sure but try something similar to this

    public void addServer(String name, String ip, boolean restricted, String motd) {
        String[] args = ip.split(":");
        int port = Integer.parseInt(args[1]);
        ProxyServer.getInstance().getServers().put(name, ProxyServer.getInstance().constructServerInfo(name, new InetSocketAddress(args[0], port), motd, restricted));
    }```
ivory widget
#

Can i use kyori Adventure Component
importing via Gradle is no problem

#

but i cant find any use case in sendMessage for example

#

Or is there any other way to use Hex colors in Waterfall messages?

lean gobletBOT
#

not without the platform adapter

ivory widget
#

Cant have things just working ._.

lean gobletBOT
#

just use velocity

subtle radish
#

true

ivory widget
snow bolt
#

the fact that it's not bungeecord

ivory widget
#

sounds good to me

lean gobletBOT
#

with other words: pretty much everything beyond the base concepts and that it's for Minecraft

ivory widget
#

Just looked at the Documentation and i am already kinda scared tbh

ivory widget
#

Constantly getting :
Invalid ID for plugin dev.velocity.Velocity. IDs must start alphabetically, have alphanumeric characters, and can contain dashes or underscores.
When trying to build

#

Googled found nothing..
Any idea where i need to change stuff?

trail plume
#

it's defined in the annotation

#

it's basically the plugin name

ivory widget
#

@Plugin(
        id = "Velocity",
        name = "Velocity",
        version = BuildConstants.VERSION,
        description = "First Plugin",
        authors = {"HolyFire"}
)

This?

sleek jackal
#

lowercase

ivory widget
#

i havent changed anything in the build.gradle since i am using the Intellih Minecraft Plugin

#

oh Facepalm i forgor

ivory widget
turbid mural
#

Is it possible with the API to delay the join in the server and while player is waiting to join, a message in their client is sent?

Sort of like 2b2t that has a queue, where you don't left the server, but you are like stuck in the joining screen that gets updated with your queue position(this is an example of what I mean)

subtle radish
#

they do that with a limbo server

#

you cant stall making a connection to a backend server, and even if you could, the only thing the player would see would be the loading world screen or whatever

#

well you can stall it, but not for very long

turbid mural
#

to do things like checks and etc, is it better to use the HandshakeEvent?

chilly sequoia
#

Is there a way that Waterfall can catch Direct Messages?

trail plume
#

er, direct messages?

#

if you mean the commands, basically; yes; worse case, replace the commands on the proxy, or see if the chat event fires

bleak current
#

Hey! Not sure if this is the right channel but I plan on making my mini game server that runs paper and waterfall multi regional (united states and Europe) without needing to have excess lag from the proxy, is there a way to bypass this lag with waterfall or do I need velocity or something else.

snow bolt
#

it is a proxy

#

a proxy is an intermediary server between the minecraft client and minecraft server

#

it will always add latency

bleak current
#

But don't servers like hypixel have different servers in different regions?

snow bolt
#

no

bleak current
#

Oh

snow bolt
#

that is the only reason hypixel has been asking for a transfer packet

#

it is the only sane way of handling multi-region minecraft servers

bleak current
#

So if I manage to do this I'll be ahead of hypixel?

snow bolt
#

it's not possible

#

you're essentially asking if it's possible to remove the 100ms latency that occurs when crossing the ocean

#

i don't think that's physically possible yet

#

either you use a transfer packet which doesn't exist, or you split your network in two and host US & EU servers; doing this has a larger impact on your community than anything else

bleak current
#

Ok, thanks

#

Thought it was possible

snow bolt
#

perhaps one day in a future minecraft version

#

but realistically, no sane option unfortunately

bleak current
#

What if I do an insane way until it comes

snow bolt
#

it'd be one of the above two options

#

okay well option 3 is running a modded client, but at that point your possiblities are pretty endless anyways

bleak current
#

Alright thanks for all the info

tough tusk
#

0:52:23 [SEVERE] [CloudInTheCloud] <-> DownstreamBridge <-> [test] - encountered exception
java.lang.IllegalArgumentException: Objective _s28671 already exists in this scoreboard
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:220)
at net.md_5.bungee.api.score.Scoreboard.addObjective(Scoreboard.java:55)
I use this:
https://github.com/MegavexNetwork/scoreboard-library

lean gobletBOT
#

@remote oxide Velocity has an event for it

remote oxide
lofty estuary
#

Is it possible to customize what this says

trail plume
#

basically, you can customise everything after "Waterfall " inside of the waterfall config, thing it's like game_versions or something

bleak current
#

how can i create a docker-compose.yml with a waterfall proxy and paper servers?

snow bolt
#

not a waterfall-dev question

#

and you're also kinda on your own with that

#

either create your own docker image or use something like itzg/minecraft-server

#

there are no official docker images

bleak current
bleak current
ornate halo
#

does anyone know a good plugin for going between servers? like a one click type thing

bleak current
#

Citizens

#

Also it's an npc

boreal crown
#

Is there a way to check if a Plugin is on the Proxy AND enabled? Right now I'm unable to find any method that would allow me to check this...

lean gobletBOT
#

no

#

that concept doesn't exist in bungee

boreal crown
boreal crown
#

Any other way to check if a Plugin would be present (and working) then? Like what would be the best aproach if I soft-depend on one?

lean gobletBOT
#

just check if it's there

quick cargo
#

Hey! I was just wondering if there's any way of getting the entire waterfall project as a dependecy, because the "waterfall-api" artifact is not complete for all the things I need to do.

trail plume
#

you'd need to publish it to your own maven reposomehow

astral walrus
#

jitpack may also work

#

but you still shouldnt really do this, the API exists for a reason

trail plume
#

jitpack won't

quick cargo
quick cargo
bleak current
#

is it possible to send a player from one waterfall proxy to another waterfall proxy?

#

(ping me when u respond pls)

bleak current
#

k

wicked lantern
sleek jackal
#

what does redis have to do with that

trail plume
#

I mean

sleek jackal
#

if you mean a whole separate proxy then no, not possible

trail plume
#

you can do proxy in proxy to do that

#

ofc, such a layout is generally dumb and unsupported

steel gulch
#

minehut in a corner

gentle wren
#

Hello, does someone know a good plugin that sends you always on a different lobby server when joining?

wicked lantern
mental solstice
#

when doing commandSender.hasPermission(x), if the commandsender is actually the console, will it always return true or always return false (or null)

potent lichen
#

It will return true. Your question is actually a very good one.

barren cloud
#

How would I go about checking if a player is vanished, on PostLoginEvent ? It would have to somehow check with the initial server somebody logs into, right?

#

basically. I have join/leave messages turned off on the servers, and I have a join and leave just for when somebody joins and leaves the proxy.

#

but when people join vanished, I want to not show a login message.

onyx elm
#

If I have a Connection object and I call Connection#createArrayOf() and receive a SQLFeatureNotSupportedException, is that due to Waterfall using a JDBC driver that doesn't support that call or something else?

potent lichen
#

That is because the driver providing your Connection implementation does not support this method. That may be a JDBC driver shipped with Waterfall or whatever other JDBC driver you are using. Sometimes, the JDBC driver cannot support the method because the RDMS doesn't provide the underlying feature; other times, it is simply unimplemented.

onyx elm
#

I'm using HikariCP I haven't explicitly defined any other driver for JDBC

boreal crown
#

Is getServerInfo returning null for non-existing servers?

rustic oriole
potent lichen
#

Sometimes a JDBC url can be used with more than one driver. In this case, which driver is chosen depends on the specifics of the configuration and classloading at play.

wind dove
trail plume
#

no

#

that method just grabs the first player from the connected players list for that server and sends a packet over their connection

wind dove
#

could it be because the first server has 0 players online?

#

and it tries to send it to the first server with at least 1 player online?

#

...or could it be because I am sending it from inside a ServerSwitchEvent and it tries to send it through a player who may have already switched servers

#

actually I was wrong, the plugin message does not arrive twice, it just arrives at the wrong server

wind dove
trail plume
#

You need a cancellation server or whatever it was

#

they need to go somewhere

wind dove
#

so there's no way to prevent connections to a server without a cancellation server right?

trail plume
#

I mean, they need to be connected to something

#

if you want further understanding of the behavior, you'd need to look at the source code

wind dove
#

ok but isn't the event called before the new connection happens? (as it is cancellable)

trail plume
#

afaik yes

#

but idk what the logic for that event looks like

#

being frank, i'm highly out of tune with waterfall right now, and a lot of the event logic inside of bungee often rarely makes sense, especially around this stuff

wind dove
wind dove
#

it seems to be working now... maybe I should have tried it before - this does prevent me from connecting and does not throw any exception

onyx elm
# wind dove it seems to be working now... maybe I should have tried it before - this does pr...

isn't there a like ServerSwitchEvent that is intended for that type of functionality that you could use? Then you don't have to worry about where they go because you're cancelling the switch, meaning they should just stay where they already are. Be careful tho, as I'm pretty sure that event also fires when they initially connect in addition to whatever event fires only when they initially connect. Cancel a switch event when that situation occurs will actually disconnect them from the proxy. Also it's not ideal to mutate a cancelled event that you haven't uncancelled.

vocal tide
#

i wonder what happens in this discord server

#

<@&748618676189528155> ^

topaz vergeBOT
#

(645a84894b7232301e8fefbc) // @midnight karma (898711083567693834) has been banned by @mint heron (1098722699116810331)

vocal tide
#

huh, does sentinel not delete the message or is it just slow

#

thanks noah tho

mint heron
#

the latter

vocal tide
#

cafebabe > sentinel

gleaming trellis
barren cloud
#

Is there any way to check if a player has played before on join?

#

on the proxy

barren cloud
#

perhaps i could connect to a plugin on one of the servers on the network and check

#

i wonder if anything could go wrong there tho

trail plume
#

basically, no; the proxy doesn't care about users and so doesn't store any info about them; the only thing that does is the "last server rejoin" thing

pure vale
#

Is there a way to disable the inbuild server command (override it with my server command)?

trail plume
#

I mean, you can just register your own command in place of it?

#

or just disable the module if its your own server

pure vale
#

I registered my own, but the default still uses the bungeecord one. I also tried to remove the jar from the modules dir but it gets redownloaded instantly

pure vale
trail plume
#

in the modules.yml or whatever it was

#

remove it from there and delete the jar iirc

pure vale
#

oh what a shame. Thank you completely missed it

gusty swan
#

Hey, is there a way to check if the proxy is fully loaded? Also all plugins loaded and so on. Like a ProxyReadyEvent

boreal crown
#

Is there any kind of event to know when a new ServerInfo was added or one was removed?
Or a bit more precisely, is there a way to know about the known servers connected by a proxy?

trail plume
#

No

pure vale
#

Hey this is my plugin.yml:

name: BungeeCordPlugin
main: com.kinqdos.bungeecordplugin.Main
version: "1.0"
author: Kinqdos
depends:
  - LuckPerms
  - BungeeTabListPlus
  - WaterfallLib

But unfortunatly the depend und BungeeTabListPlus isnt working. My plugin always loads after btlp. I also tried depend but it makes no difference

sleek jackal
#

that’s how it works yes

#

your plugin will load after your depends

pure vale
#

Sry im dump. Is loadbefore was what im looking for.

gusty swan
#

Is the LoginEvent fired one after one like a queue or can 2 players login at the same time?

trail plume
#

Its either fired from the netty pipeline or from some thread pool thing, you'd need to look; but, like, multiple

winged thicket
#

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.github.waterfallmc</groupId>
<artifactId>waterfall-super</artifactId>
<version>dev-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>io.github.waterfallmc</groupId>
<artifactId>waterfall-parent</artifactId>
<version>1.19-R0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Waterfall-Parent</name>
<description>Parent project for all Waterfall modules.</description>
<url>https://github.com/WaterfallMC/Waterfall</url>
<inceptionYear>2015</inceptionYear>

I get some errors:

[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project io.github.waterfallmc:waterfall-parent:1.19-R0.1-SNAPSHOT (C:\Users\lebub\Documents\GitHub\FlameCord\FlameCord-Proxy\pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM for io.github.waterfallmc:waterfall-parent:1.19-R0.1-SNAPSHOT: Could not find artifact io.github.waterfallmc:waterfall-super:pom:dev-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
#

What should I?

civic stone
#

Is there a way to speed up how often servers are pinged for the %bungee_[server]% placeholder?

#

It seems my skyblock pings fast, but survival pings very slow

snow bolt
#

ask placeholderapi

vale bluff
#

Hey, when setting my Waterfall's MOTD via ProxyPingEvent#setDescriptionComponent I get this exception.
Does anyone know how to solve?

sinful basin
#

how did you create that component message?

vale bluff
#

Interesting, found this PR that has shown a workaround: https://github.com/KyoriPowered/adventure-platform/pull/39

    // Working
    serverPing.setDescriptionComponent(
            new TextComponent(ComponentSerializer.parse( GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize( lastPing.getMotd() )) ))
    );
    // Invalid
    serverPing.setDescriptionComponent(
            new TextComponent(BungeeComponentSerializer.get()
                    .serialize( MiniMessage.miniMessage().deserialize( lastPing.getMotd() )) ));
sinful basin
#

oh with adventure, interesting

cerulean kettle
#

Hi, someone with git experience, what does "Failed while enforcing releasability." means? I am trying to update Waterfall.

trail plume
#

Nothing to do with git

#

Some dependencies need updating to align with bungee

cerulean kettle
#

Sorry, I meant maven.

#

Working on it

#

I have no idea what is the hierarchy of dependencies I would really appreciate some help from someone experienced on it

#

seems latest log4j has an old version of slf4j

#

and bungee tries to use latest slf4j

#

similar issue with terminalconsoleappender

#

is excluding okay?

#

Done, updating pull request soon

cinder loom
lean gobletBOT
#

sure

bleak current
#

Wow bot

gentle burrow
#

bat

cinder loom
mystic parcel
#

TeamCity really hates the master branch today

#

I'll rebase my PR once the build passes

trail plume
#

it's apparently a maven bug

mystic parcel
#

fun

#

aaaaaaaaand

#

vagrant prawn
#

I skimmed over upstream BungeeCord changes, anyone know what the added portalCooldown int is? thonk

trail plume
#

The number of ticks until the player can use the portal again

#

according to wiki.vg; for the most part, it's irrelevant to the proxy, it's just info the server sends over to the client and so needs to be passed through

hoary relic
#

Hey I noticed the built-in commands have a specific permission to be able to use them, however, does that mean I need to use a third-party plugin like LuckPerms to actually set those permissions up?

trail plume
#

basically, yes

hoary relic
#

It's the PermissionFunction implementation correct?

trail plume
#

there is the perm system in config.yml, but you'd generally be dumb to use that one

#

idk what you're looking at

#

This is the waterfall channel

hoary relic
#

OMG i'm so sorry

#

💀

#

For both I'd need LuckPerms though right?

trail plume
#

Well, yea, if you want a sane system to manage perms, you want LuckPerms

hoary relic
#

TY

rotund hemlock
#

Should waterfall 1.20 be running on java 17 also?

sleek jackal
#

can

rotund hemlock
#

Good enough for me lol

sleek jackal
rustic oriole
#

When ip forwarding is enabled, UserConnection#getGamemode() always returns 0. This is probably because rewriting entries also reads and saves that data, but with ip forwarding the uuid already is online, so no rewriting/reading is done at all. Is this considered a won't-fix?

trail plume
#

Basically, idk if there exists any desire to change that stuff

#

idk why hes storing that

#

idk if there exists any desire to fix it, waterfall is a low priority given my potato pc and 200 other things on my todo list, but, if there was a PR idk if I'd be against pulling it

near tinsel
#

is there a way to tell when a player times out from the proxy? on the backend servers you can get the kick/quit reason and one of them is for being timed out, but I'm not seeing a way to tell that on waterfall

trail plume
#

afaik no, that stuff isn't really tracked

near tinsel
#

dang alright
is there an easy way to like read the logs to detect when it says they timed out there?

wicked lantern
halcyon cargo
#

Short question - does waterfall have an option for loading defined maven libraries, like in spigot/paper plugins?

trail plume
#

Yes, spigot added it to bungee

boreal crown
#

It's meant to get a list of server names from the config, iterate through it to find a server that is online and has players and then use a random player from it for the connection...

#

I think some caching would help here reducing API calls, but I fear it might have some downsides in the end (i.e. server is removed before cache expires so entry holds now outdated info)

trail plume
#

For my own use case where I needed info, I just made the backend servers broadcast updates or whatever

hexed rune
#

hi guys, since spigot discord is dead all the time, I'm searching for a method that prevents serverconnectevent for firing if connection fails.

example
1.16 client wants to connect to 1.19 server with /server command, for some weird reasons even if the connection fails the event (serverconnectevent) gets called and i need to prevent it since after that the proxy itself will handle it as a kick

steady wolf
#

ChatEvent. How can i get there the sender uuid?

wicked lantern
#

Any alive repository of bungeecord-protocol on maven?

#

I need 1.19 at least where "Property class" where introduced

#

Never mind, reflection

hexed rune
#

It's possible to see why an event gets cancelled?

trail plume
#

depends, for debugging, there might be a plugin for it, idk; otherwise, modify the event class

#

for stuff in an actual plugin, no

hexed rune
wicked lantern
hexed rune
#

it's like 5th time that i ask the same question.

why the hell is not possible to know IF the backend is fully started up

sleek jackal
#

becuase the server doesnt tell the proxy that

#

you can try to ping it but that won't tell you if it's fully started

#

only way is with your own plugin to my knowledge

hexed rune
#

i can't use channels since i need at least 1 player on spigot side

sleek jackal
#

then use something like redis

hexed rune
#

sockets are not an options since are so broken on backends

#

bloated

sleek jackal
#

lol

hexed rune
#

also too heavy for my server

sleek jackal
#

then another kind of message broker

hexed rune
#

like?

sleek jackal
#

¯_(ツ)_/¯

#

rabbitmq, zeromq

brazen hamletBOT
hexed rune
#

but why should i use those libraries that are not meant for what i need

#

i just need to connect a player ONLY if the backend is on

#

latebind got removed idk for what kind of a reason

sleek jackal
#

then try to ping it

#

if it's true, it'll be online

#

if it's false its offline

hexed rune
#

it is not

#

returns true when says "starting mc server on ip:port"

#

that's so wrong

sleek jackal
#

then you're out of luck

hexed rune
#

i even tried boostrap

sleek jackal
#

use your own plugin or stop complaining

hexed rune
#

i'm trying to make my own plugin lol

#

that's why i'm here

sleek jackal
#

and I told you multiple solutions

hexed rune
#

but there is NO way to know if backend is online

sleek jackal
#

use your own message broker

#

onEnable() {
sendRedimessage("server1 online")
}

onRedisEvent(Event) {
if (event.getMessage().equals("server1 online") server1 = true:

fierce trail
#
  • Complains about not getting solutions to question
  • Gets solutions
  • Complains about solutions
fierce trail
# hexed rune but there is NO way to know if backend is online

Thing is, you have to define “online”
As soon as the server says “listening on port xyz” is IS online.
If you want to wait till all the plugins are loaded or something, you gotta make something custom that will look for all that shit, and then you need to message the proxy and let it know

trail plume
#

late bind was added many dozens of years ago to mitigate a bug

#

that bug was patched, and so spigot dropped the latebind patch given that with the bug being fixed, it made little sense to maintain that patch given all the bugs that that patch introduced itself

#

Now, you have 2 options

  1. restore late bind yourself
  2. Use one of the many dozen workarounds and solutions which people used for almost a decade, given that latebind sucked, successfully
high birch
#

Dozens of years?

#

Damn

wicked lantern
#

@trail plume

It would be nice if a getter could be added to the "ChannelWrapper" field in the handlerboss.

I have had some problems and I would like to get the setCompressionThresold without really using reflection.

trail plume
#

I can't work on pretty much anything atm

wicked lantern
trail plume
#

that means going to my desktop where I have stuff setup

#

loading IJ

#

waiting 10 minutes while my machine shits the bed

#

and then doing the change before I can compile it and make sure that it doesn't magically blow up in stupid ways

#

before I get to rebuild patches, etc, etc

wicked lantern
#

I really meant what was your point of view and if it is worth it in your opinion, to make a pull request

trail plume
#

I mean, we rarely deal with internal utility methods unless theres a strong justification for it

wicked lantern
#

I would like to make it compatible with Waterfall, and forks without using reflection

wicked lantern
trail plume
#

Basically, I don't know

wicked lantern
#

I mean by this is fixed, but seems ass

wicked lantern
trail plume
#

yup

#

Like, between my health and such, I've hardly used the thing all too much in the past like, year or so

#

starting a test server my system load is pegged at like 200, opening IJ, etc, 80

wicked lantern
#

Yeah, IntellIJ takes a lot of ram and CPU

trail plume
#

the machine turns 8 years old this year, so, it's put up a google battle, i guess

wicked lantern
#

You didn't think about upgrading?

trail plume
#

don't have the funds to

wicked lantern
#

Since it could help you in the future I suppose

trail plume
#

I graduated with post viral fatigue into the pandemic, and so didn't have much options work wise given health + everywhere shutting down

wicked lantern
trail plume
#

finally slowly been getting better, and so I wanna get a proper job this year; but, now I'm waiting for a hospital appointment over my sight issues which is probably part of why I get headaches so frequently

#

So, pretty much as it stands right now, I can't see properly, and I don't have a computer able to work on much of anything atm

wicked lantern
#

I see, maybe with your experience you could do some Minecraft project slowly that will leave you income I guess in the meantime

trail plume
#

I have sight issues atm

#

like, keratoconus in my left eye, and my right eye isn't doing good, in part probs because I need new glasses, but, idk if theres much point throwing cash at that when imma need another new pair in a month or two anyways

wicked lantern
#

I don't know what to say really, good luck I guess with that

#

I will also make a couple of pull requests with some logic, if they are accepted that's good.

wicked lantern
sleek jackal
#

""sorry""

wicked lantern
sleek jackal
#

if you were sorry you wouldn't have pinged in the first place

wicked lantern
crimson swan
#

use a message broker like they suggested and maintain a proxy-side list of online backends

#

send heartbeat messages every 30s on the backend and subscribe to those on the proxy and append to the list

#

remove from the list when the keepalive passes

#

this is how any run of the mill concurrent system works

zealous crescent
#

Hey, I want to ask which event in BungeeCord API is called when player successfully switched server to another ? I see, there is ServerConnectedEvent & ServerSwitchEvent but I don't see difference between them

subtle radish
#

server connected is when the proxy connects the player to a server, server switch is when the player switches servers...?

zealous crescent
#

yeah I didn't read java docs

#

thx

subtle radish
#

it is generally recommended that you do read it

trail plume
#

you'd need to bundle adventure yourself, but, yes

trail plume
#

as said, you'd need to bundle all that stuff yourself

#

adventure platform, and the adventure serialisers you want

trail plume
#

yes

#

Not sure, you'd need to see the javadocs

lapis finch
#

When is the next update for waterfall scheduled?
Bungeecord has been updated a bunch since last months release of waterfall.

lean gobletBOT
#

whenever someone does an upstream update, anyone could open a PR for that

trail plume
#

I don't have a computer able to run even a small test setup, before the fact that my eyesight is janky, so, probs not for a while

unborn gust
#

how can I convert Component into BaseComponent?
Im doing proxy whitelist and it only supports basecomponents

trail plume
#

Pretty sure adventure has a serialiser for that

sleek jackal
#

wrong channel

hexed quarry
#

who needs help seting up Waterfall ?

royal sierra
#

Hey! I am trying to set a Scoreboard in the ConnectedServerEvent but I get the error in the attached image.```java
public void sendScoreBoard(ProxiedPlayer proxiedPlayer) {
new ScoreboardObjective("scoreboard", instance.getScoreboard().getString("title"), ScoreboardObjective.HealthDisplay.INTEGER, (byte) 1);
ScoreboardObjective objective = new ScoreboardObjective("scoreboard", instance.getScoreboard().getString("title"), ScoreboardObjective.HealthDisplay.INTEGER, (byte) 0);
proxiedPlayer.unsafe().sendPacket(objective);

    List<String> lines = instance.getScoreboard().getStringList("lines");
    ScoreboardScore score;
    int lineIndex = lines.size();
    for (String line : lines) {
        score = new ScoreboardScore(new TextBuilder(line).getColorized(), (byte) 0, "scoreboard", lineIndex);
        proxiedPlayer.unsafe().sendPacket(score);
        lineIndex -= 1;
    }

    ScoreboardDisplay display = new ScoreboardDisplay((byte) 1, "scoreboard");
    proxiedPlayer.unsafe().sendPacket(display);
}```
trail plume
#

Something in there should be a json string, Idr which, see the protocol docs

royal sierra
#

I looked at the code from other people and they did nothing different except the text

#

I got it now

#

I needed to transform the TextComponents to JSON

honest coral
#

how to make some code run 5 second later?

sleek jackal
#

scheduler

honest coral
#

how

honest coral
#

how to check if someone joins the proxy but not run the code if it's just going trough the servers and same for disconnect, full server disconnect not just the backends

royal sierra
#

What is the output of CommandSender::getName when I log it and execute the command as console

#

"CONSOLE"? "console"? Or is it something very different

rough wing
trail plume
#

See what events represent the player joining or leaving the proxy?

wicked lantern
#

I think he's trying to say about kick player to "lobby", i've answered on #waterfall-help

trail plume
#

Yea, I’m half confused on what they’re asking and so kinda just went back to dying

honest coral
trail plume
#

see the javadocs, too dizzy to look

#

there should be events for joining/quitting the proxy

honest coral
#

I found PlayerDisconnectEvent, but nothing more

trail plume
#

and there should be login events

#

or use the server connect event and see if they're already on a server

honest coral
#

i'll use login event

#

login event doesn't have a getPlayer()

#

postloginevent

trail plume
#

well, yea, those events are early on in the connection lifecycle

#

the best one for having a player is probably going to be the server connected event and seeing if they have a current server or not

honest coral
#

I got it working

#

but now my player leave

@EventHandler
    public void onPlayerLeave(PlayerDisconnectEvent event) {
        ProxiedPlayer player = event.getPlayer();

        Main.getInstance().getProxy().getScheduler().schedule(Main.getInstance(), () -> {
            if (!player.isConnected()) {
                try {
                    if (Main.getInstance().isInGroupDB(player.getUniqueId().toString())) {
                        Main.getInstance().setLogged(player.getUniqueId().toString(), false);
                        Main.getInstance().removeGroup(player, Main.getInstance().getUserGroup(player.getUniqueId().toString()));
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }, 5, TimeUnit.MINUTES);
    }

now even if you come back the server it will "logout"

#

player.isConnected() doesnt work

vagrant prawn
#

@honest coral
A few things:

  • You don't have to (but you can, it's not wrong) get the proxy instance from main, there is ProxyServer.getInstance()
  • It's recommended to use a more descriptive name than Main
  • Giving the listener class the Main instance via constructor or making a Main plugin = Main.getInstance() variable would be nicer
  • What are "groupDB", "setLogged" and "removeGroup"?
  • You could check if ProxyServer#getPlayer(uuid) == null
  • Is there a reason you're toString()-ing the UUID?
  • does removeGroup need the player instance or would the UUID be enough?
honest coral
bleak current
#

Hi, how do i make it so only when they're fully loaded in then run the command:

    @EventHandler
        public void onPlayerJoin(PostLoginEvent event) {
            ProxiedPlayer player = event.getPlayer();

            TaskScheduler scheduler = ProxyServer.getInstance().getScheduler();
            scheduler.schedule(this, () -> {
                player.sendMessage(ChatMessageType.CHAT, TextComponent.fromLegacyText("Teleporting to lobby..."));
                player.connect(getProxy().getServerInfo("lobby"));
            }, 1,TimeUnit.SECONDS);
        }
#

Or is there a better way to teleport someone to the lobby when they join?

subtle radish
#

pretty sure you can override it ever sending them to a server that isnt the lobby in the first place when they join

bleak current
#

I know about the force default server thing but I can’t put that on because I want the player count to show all backend servers

trail plume
#

That's ping pass through

#

Otherwise, use a reconnection handler or whatever the API called it

potent lichen
#

Just to get this straight. The channel in PluginMessageEvent is called "tag"? Right?

trail plume
#

apparently so

bright imp
#

HI, for an inventory sync system. Is a good aproach?

On server join -> get the inventory in the db in base64 and apply.. On the server leave store it in a reds cache and get it in new server at on playerjoin ?

astral walrus
#

dont use base64, save NBT as bindata

trail plume
#

No, that's not a good idea

#

because you join the new server before you leave the old one

#

idk where the line sits exactly

astral walrus
#

its not an easy line

#

*to determine

#

back when I wrote my datasync plugin, i just ended up putting a delay

#

when you join a server it waits for a certain amount of time, and it was usually enough

#

something like 5 seconds

#

(heavy modpack)

viscid terrace
#

Is adventure embedded in waterfall?

potent lichen
#

No

bright imp
trail plume
#

read what we've said

potent lichen
#

Well, this is actually a good question: how do I synchronize player inventories across multiple servers in a reliable and fault-proof fashion? Adding a simple delay for loading the inventory may be a solution that works most of the time. But surely I can imagine extreme situations which break such an approach. Increasing the delay might help, but that reduces quality of gameplay.

trail plume
#

er

#

bahahahahahahaaaa

#

Basically, you'd need to be able to tell the server "i'm about to do a transfer, put the player into a limbo state"

#

and then basically save their inv, etc; tell the proxy you're done

#

and then do the actual transfer

#

until then, literally all you've got is some form of messaging maybe, and praying

potent lichen
#

It definitely requires proxy coordination. I suppose limbo servers could be useful for more than cracked networks.

trail plume
#

well, limbo servers would be one hack around

#

the issue is the expectation that if the connection to the new server fails, you're already in a server

bright imp
#

The new server

gusty swan
# potent lichen Well, this is actually a good question: how do I synchronize player inventories ...

First create a database with the inventory contents and a boolean value. Lets call it inSync

On disconnect save the players stuff in the db and after this (extrem important) set inSync to false to tell other servers that the data was saved so the other server can safely load it back.

On join make some kind of task thats wait with loading until isSync is false. If its false, set inSync to true and after this load your data.

This will prevent other servers from loading your data until the other server where you came from has fully saved your data.

You can also do the same with some kind of distributed locking. Like hazelcast (https://hazelcast.com/blog/long-live-distributed-locks/) or else

astral walrus
gusty swan
gusty swan
#

And handling new players is trivival

Read from bottom to the top because i have no arrows pointing down on my mobile.

Load the data
^
Set inSync to true
^
If not insert with default values
^
Check if player exists in DB
^
Player Joins

subtle radish
#

V is an arrow pointing down

#

¯_(ツ)_/¯

gusty swan
frozen kelp
#

ive got some code that listens to the ServerSwitchEvent event and sends a plugin message to the server that the player joined and left. it works when there is another player in the server that is left but not when there is no one else in that server. when they leave a server with no other players in it then the plugin message is sent twice to the server they are joining somehow

player.getServer().sendData("BungeeCord", b.toByteArray()); // send to joined server
event.getFrom().sendData("BungeeCord", b.toByteArray()); // send to left server
frozen kelp
#

ended up just checking how many players were in the server being left to see if there was anyone in it

subtle radish
#

plugin messages are sent over a players connection between the proxy and the backend server. no players = no connection to send the message over

sharp apex
#

Can you do a blocking operation in the server connect event or would that block the whole waterfall thread?

trail plume
#

can't say without looking at code and such, but, generally, most bungee events block the network pipeline

sharp apex
#

Ye sigh already thought so

lean gobletBOT
#

I thought they all executed on the thread of the connection? thonk

languid lake
#

that'd be horrible if it did

trail plume
#

it happens on whatever thread somebody calls connect on

sleek phoenix
#

Hey, I have a question about plugin messaging, when you want to send plugin message on paper, the second param is channel, on bungeecord I registered channel "staffprotect:channel", does this mean in spigot in second param I have to specify "staffprotect:channel" or "BungeeCord"?

trail plume
#

you'd use your own channel

sleek phoenix
#

so staffprotect channel

#

okay

#

thanks

#

wait, if I have on bungee and on spigot listeners for plugin message, shouldn't I do, staffprotect:bungee and staffprotect:spigot? Because server from this was sent, could receive this also

sleek phoenix
#

A question, why field self in Configuration (package .net.md_5.bungee.config) is not exposed?

#

as there is no getKeys(true) - for getting deeper

trail plume
#

I mean, not our API

#

and they're youre channels, you can use the same name on either side or distinguish them

sleek phoenix
#

what

trail plume
#

what?

sleek phoenix
#

I did not understand second line

#

but nvm, I used snakeyaml, I have issues with writing comments there although

trail plume
#

was for your plugin message thing

sleek phoenix
#

oh

sleek phoenix
wicked lantern
sleek phoenix
#

and how would I get the values?

#

How would I register it

sharp apex
#

Well there is an example in the readme

#

You also have all the source you could take a look at

rugged sonnet
#

Is it possible without using a message channel to send a command from waterfall to a specific paper server? new with waterfall / bungee.

subtle radish
#

you need some way to tell the server to run a command

#

be that plugin messages or redis or a raw socket

#

or anything else really

lean gobletBOT
#

so apparently sending a plugin message in the ServerSwitchEvent breaks now on 1.20.2 :S

#

great

lean gobletBOT
#

seems to cause random errors due to the client still being in the configuration phase thonk

#

wait, can you not get the protocol/version of a player? thonk

lean gobletBOT
#

ah, via Player#getPendingConnection#getVersion, right

hexed rune
#

Who the hell coded the new api? Everything is broken

stray igloo
#

why this is happening when 1.20.2 player's getting kicked?

high hollow
#

Hello
is there an undeprecated way of changing waterfall servers at runtime?

trail plume
#

think that there is an add/remove server methods?

high hollow
#

yeah but it's deprecated

#

i think it's an abusive deprecation tho

trail plume
#

No

high hollow
#

:/

trail plume
random basin
#

please, update upstream, thanks

trail plume
#

heads spinning, currently cannot

dense laurel
#

Aren't there any volunteers that could help with maintaining Waterfall as well?
It doesn't seem fair that someone with health issues is having to do so much

trail plume
#

Nobody on the team wants to deal with it

#

Hence why we declared it was going to be considered end of life at some point soon like a year or two ago

dense laurel
#

Ah, well it seems like there is still demand for it. I hope someone would still step up to the task

trail plume
#

at the end of the day, the cost benefits of waterfall makes 0 sense for me these days, and theres little inclination for us to onboard somebody for the sole sake of playing maintanance of a piece of software which just isn't worth the headache these days when the effort can be placed elsewhere for much better pay off

#

I'm generally done with waterfall and the ecosystem surrounding it

#

any sizable effort into the project generally ends up going to waste or just incurs an excess amount of effort to deal with the rot of the software, i.e. the months of back and forth trying to remove aspects like entity metadata rewriting to improve mod support given how md didn't wanna get rid of it, only for him to effectively neuter the system after he finally clicked on that maintaining that mess was not worth the headache; lack of effort from plugin devs to work with me over improving stuff to try to clean up the rot, etc, etc; it's just not worth the time, stress, effort, etc

dense laurel
#

I would have thought maintaining Waterfall would still have required less effort than reinventing the wheel with Velocity

trail plume
#

Well, no

#

I mean, if you wanna bastardise maintaining to the level of "leaving it to effectively rot in the corner", sure, maintaining waterfall is trivial

#

actually fixing the years worth of issues in the thing is an entire different story, especially with the lack of backing of the project

compact topaz
#

are there some problems about creating sockets with waterfall?

#

because i've tried doing it with spigot and it runs fine the socket gets created i can read and write no problems, instead with waterfall my connection gets straight up refused

trail plume
#

a socket is a socket

#

waterfall has literally 0 bearing on that

mossy merlin
#

Is there any way I can use bungeecord-proxy or waterfall-proxy as artifactId in my pom.xml because I need to import:
net.md_5.bungee.connection.UpstreamBridge & net.md_5.bungee.netty.PacketHandler

sleek jackal
#

compile it urself

#

then publish to ur local

bright imp
lean gobletBOT
#

not really related to this channel but properly by checking if the data is fresh

#

yeah, they use a sync_complete column

bright imp
trail plume
#

I mean, we're not going to rip it apart for you

#

but they likely just wait until that boolean is set to true before allowing the connection to progress or something

austere canyon
#

[22:13:54 WARN] [Geyser-BungeeCord]: Downstream packet error! Invalid packet id: 104
i need help with that error
The geyser is configured correctly but it gives me that error and I use waterfall 1.20 since the geyser plugin folder is not generated in bungeecord

zealous crescent
#

Will boolean from callback return false if timeout exceeded or only when exception caught?

wicked lantern
#

It should

frigid hazel
#

I'm trying to make a Waterfall plugin with an authentication system. I have a working one using Paper, not Waterfall, but I was wondering how I could do something similar to: java @EventHandler public void onMove(PlayerMoveEvent event) { if (Authentication.codes.containsKey(event.getPlayer().getUniqueId())) { event.setCancelled(true); } }

#

I guess I could make a paper plugin + waterfall plugin communicate with each other, but I would really like to have everything on the waterfall plugin

trail plume
#

The proxy doesn't know about anything going on with player movement, etc

#

You'd need to use a packet listener, and deal with a whole host of potential caveats, etc

frigid hazel
trail plume
#

No

frigid hazel
#

damn lol

#

I know I shouldn't do this, but I've got no idea where to begin. Is this something close (ChatGPT wrote it)? ```java
public class MoveListener {

private final Map<UUID, String> codes = new ConcurrentHashMap<>();
private final Plugin plugin;

public MoveListener(Plugin plugin) {
    this.plugin = plugin;
    registerPacketListener();
}

public void registerPacketListener() {
    ProtocolManager manager = ProtocolLibrary.getProtocolManager();
    manager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.NORMAL, PacketType.Play.Client.POSITION) {
        @Override
        public void onPacketReceiving(PacketEvent event) {
            ProxiedPlayer player = plugin.getProxy().getPlayer(event.getPlayer().getUniqueId());
            if (player != null && codes.containsKey(player.getUniqueId())) {
                event.setCancelled(true);
            }
        }
    });
}

}```

#

If not, then I'll just use MySQL and have the proxy communicate with all the servers

trail plume
#

No

frigid hazel
#

Rip, okay. Communicating it is

trail plume
#
  1. ProtocolLib does not exist for waterfall/bungee, so, that one will obviously not work
#
  1. movement occurs on the client, and so you can't simply just cancel the movement packet
#
  1. what you're asking to do is an entire rabbit hole of concerns, i.e. you'd need to teleport the player back when they move, and so you're going to have to be able to get enough context to be able to do that
frigid hazel
#

yeahhh, that's not good

#

is MySQL the best way to communicate to paper plugins?

#

just have a bunch of queries to see if they're authenticated

trail plume
#

pub sub, plugin messages, etc, etc

frigid hazel
#

Hm, could you explain pub sub and plugin messages? Sorry

#

this is my first time doing proxy plugins haha

trail plume
#

See the bukkit wiki for plugin messages

#

for pub sub, google

#

oh, the paper docs also have an article going over plugin messaging

frigid hazel
#

Ooo, thank you! I'll take a look.

frigid hazel
#

I figured it out, thank you so much! That's a really cool feature

frigid hazel
#

Is there a way for the proxy to send a message to a plugin?

#

I can send a message from a plugin to proxy

languid lake
#

to a plugin on the server? Server#sendData

frigid hazel
bright imp
#

Hello, i am taking questionnement about inventory sync. How i can make perfect inv sync (because join event is called before leave event) so i can do? Use message borker and when the player join a server wait message broker?

trail plume
#

the only "perfect" solution would be a lot of a stateful headache

#

put player in limbo, save their inv, do server switch

bright imp
#

ah when the player make a command to server switch/beofre server witch save inventory and after teleport it?

trail plume
#

yes

bright imp
#

so i have to use a custom server manager for all my server changement request? or i can use a bungee/waterfall event/tool to wait until it's ready for tp?

trail plume
#

idk anybody who has implemented the system I've suggested

#

the way the system works doesn't really permit taking over the control flow too well, so it would only work if you bothered to manage all server transfers yourself and all that

#

most just end up tryna mangle it by delaying work on the new server, mainly wall time based, and praying that the server has saved it in time

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
#

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

bright imp
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
#

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