#waterfall-dev

1 messages · Page 8 of 1

jaunty kindle
#

and the reason I ask proxy level is because we are using fabric for its server side performance mods

#

so some Citizens setup is not on the table

#

Commissioning to get this coded is on the table, but at the moment I just want to know how possible this is

#

(Fabric does support being under a proxy btw, there's a recent mod that allows this)

bleak current
#

post-coalchella people huh?

#

the pit or w.e it was called after that

jaunty kindle
#

its called Second Aether

#

its not that group

bleak current
#

anyway basically it's possible as long as person who gets the task is able to think and write code

#

of course there aren't premade solutions available

#

everything has to be done from scratch

#

however since you're sitting on fabric then nothing stops you from writing a decent solution - mappings are pretty decent and their toolchain is even better

jaunty kindle
#

The best, in order to reduce development time, would be to have as little server modding needed as possible and have most of the work be done proxy level

#

at least thats what I'd assume

#

Of course if a little is required to make the server's behave, thats fine

#

How difficult would it be/about how much would this go for

bleak current
#

moving it on proxy level makes things harder

jaunty kindle
#

It does?

bleak current
#

not significantly but you'd need to start implementing packets on proxy which aren't there already

#

vs you have full blown server already aware of all the packets

jaunty kindle
#

wouldn't a player statue that has packets communicated to it through server side have a lot more latency?

lean gobletBOT
#

tbh replicating all packets from all server to all players shouldn't be too hard

jaunty kindle
#

not all packets, selectively

bleak current
#

all movement related, whatever

jaunty kindle
#

for a single player

#

not the entire player base

bleak current
#

or everything what's needed to turn a player into puppet

#

you get the point

jaunty kindle
#

yeah

lean gobletBOT
#

oh, wait, I thought you wanted to display the full audience to everyone

#

so you just want to send the dj?

jaunty kindle
#

no, that is not necessary (full audience)

#

yes

lean gobletBOT
#

I assume you are aware of what Monstercat did once?

jaunty kindle
#

Its better if the full audience is not sent, for performance reasons

#

I am not aware of that

lean gobletBOT
#

they did basically just that, but it required a modded client

jaunty kindle
#

why would it require a modded client

lean gobletBOT
#

.g monstercat minecraft concert

#

(phoenix616) https://www.youtube.com/watch?v=S-carLXQfeA -- Monstercat Charity Minecraft Concert -- Day 1 - YouTube: "Jul 13, 2013 ... Buy games for half the price! Check it out here! https://www.g2a.com/r/boomey30 All credit goes to all the monstercat artists! Buy..."

Buy games for half the price! Check it out here! https://www.g2a.com/r/boomey30

All credit goes to all the monstercat artists! Buy their music here! http://www.monstercat.com/music

It's crazy to see what is possible in minecraft! Thank you again, monstercat for such a great ...

▶ Play video
#

for effects, music, direct joining. stuff like that

jaunty kindle
#

oh fancy lighting

lean gobletBOT
#

of course a lot more is doable with the vanilla client nowadays

jaunty kindle
#

music will be handled on a website

lean gobletBOT
#

eww

#

xD

jaunty kindle
#

and the light show will be guardian beams/ender dragon healing beams/beacons

#

probably particles too, but hopefully not too much because post 1.13 clients can't handle that many of those

lean gobletBOT
#

(phoenix616) Minebench 4. B-Day: "Let It Go"-Show - length 3m 51s - 23 likes, 1 dislike (95.8%) - 546 views - Moep.tv on 2015.06.21

jaunty kindle
#

this will all be pre-programmed as well

#

except for the artist's movements though that is

bleak current
#

anyway i'd implement it like this:

  1. so-called master server has the dj and a mod sends all the needed info over tcp to daemon which should broadcast all required data to slave servers
  2. slave servers connect to the daemon using mod, spawn the player and proceed processing movement etc
jaunty kindle
#

all the sets will be pre-recorded

lean gobletBOT
#

I'm actually thinking about automatically creating light shows for songs right now (with the goal of doing it in minecraft for now)

#

it's definitly an interesting concept ;D

bleak current
#

latency is practically near to zero

jaunty kindle
#

the light shows are all hard coded atm, and aren't specialized to the sets afaik

#

phoenix do you agree a server level system like zzikro is proposing would be the best?

lean gobletBOT
#

sounds like it should work

bleak current
#

that's one possible solution and perhaps the easiest

#

daemon uses widely known pub-sub pattern, O(n) where n=servers count send operation shouldn't be really bad either

jaunty kindle
#

(not being rude just trying to get as many eyes/opinions) phoenix do you think it would be easier than doing it on the proxy as well?

bleak current
#

yeah understandable, there are always multiple possible solutions :p

lean gobletBOT
#

I personally would just replicate the packets on the proxy but ¯_(ツ)_/¯

#

both versions have their benefits I guess

jaunty kindle
#

What would be the benefit of proxy level over the server mod?

bleak current
#

my vision is that if it's handled separately then you have greater control over spawning the dj

lean gobletBOT
#

(e.g. only replicating on the proxy would limit you to a setup where everywhere is connected to one proxy)

#

and the benefit over a server mod would be that you don't need to mod the server xD

jaunty kindle
#

The time table we're working with does not allow for that complex of a system

#

I believe we're only using a single proxy

bleak current
#

how much do you have time?

jaunty kindle
#

The festival is on March 28th/29th

bleak current
#

writing such system takes 1-2 days if you include testing, fixing etc

#

most of the time goes into server mod

#

and least into the broadcasting service

#

which is literally pub-sub thingy

jaunty kindle
#

They have a dev for the broadcast

bleak current
#

damn if someone paid for me for coming up with that idea...

#

:D

#

fuck

jaunty kindle
#

again this would be a fabric mod

bleak current
#

so?

jaunty kindle
#

So they wouldn't be working with a cushy API like bukkit or sponge

bleak current
#

it's rather good than bad

jaunty kindle
#

Oh cool

sly crown
#

advertising 👀

#

gonna ban yall

bleak current
#

no u

jaunty kindle
#

I asked

#

1.15

deft trail
#

waterfall - 1.8 -> 1.15
travertine - 1.7 -> 1.15

jaunty kindle
#

what?

#

Phoenix

#

would you be interested in setting this sort of thing up

#

(just trying to know our options, ziikro didn't say no)

#

is there a way to ping an IRC member?

#

(I assume thats what the bot is)

bleak current
#

just say their nick

jaunty kindle
#

phoenix616

#

( @bleak current like that yeah? )

bleak current
#

yes yes

jaunty kindle
#

k lol thanks

lean gobletBOT
#

feel free to shoot me a pm on spigot or an email directly (contact data is on my website)

jaunty kindle
#

Okay

lean gobletBOT
#

check if the origin server is null in the switch event

cyan garnet
#

I ended up using ServerConnectEvent and checking reason was plugin or command

lean gobletBOT
#

wouldn't neither work there though?

#

oh wait, I guess there is a third one or null?

#

well this is how I did it by checking the player server, apparently I used the connect event too: http://git.io/fj0sP

cyan garnet
#

Yeah, checking if the server is null there works as well 🙂

dusk crescent
#

Hey, anyone know how to add a forced host via code? 🙂

bleak current
#

you can replicate that logic yourself easily

#

by listening to server switch event

bleak current
#

I added bungeecord to gradle. Everything can be found fine but when i try to use BungeeCord import net.md_5.bungee.BungeeCord; it cannnot be found. why?

bleak current
#

did you include only api?

#

or what do you mean

bleak current
#

got it.

#

Anyone here experienced in gradle?
Like i am making a big core. and yes it already includes tons of code. But why is it already 13MB and putting all those packages & classess inside the jar?
https://i.insanemc.net/4pLVDR8Wi4.gif (used to code with maven. Gradle is new for me)

#

you ran into same issue with maven very likely as well

#

you usually need to exclude dependencies from being included into the fat jar

#

I've never had this issue before.

#

because usually dependencies declare their own dependency scopes wrong

#

or you've configured stuff wrongly

#

this is what i have atm in build.gradle

#

tldr triple check your dependency scopes

#

not enough information

#

run gradle dependency:tree

#

sec

cerulean kettle
#

Hey, im trying to find a way to get the source and apply patches properly. Im novice at this but i want to help out applying my patches with .patch files.

#

I have been like 2 years trying to figure this out without success.

#

I can't even get the source building with git bash. I don't know what im doing wrong.

#

I had to make a fork by modifying a decompiled source. So messy.

civic valve
#

have you uh

#

read the documentation

#

like the contributors doc

cerulean kettle
#

where is that?

#

i've never found docs

#

just "clone and compile with..."

civic valve
#

it's literally on the github

cerulean kettle
#

im new to github sorry

#

where can i find it?

#

I cant see any docs link in the gh page

civic valve
#

do you actually know java?

cerulean kettle
#

yeah

#

i've never worked with other people

#

or with repos

#

i just started like

#

some months ago

#

with basic maven stuff

#

and like ~1 year ago with java coding

civic valve
#

anyways look at the root directory

cerulean kettle
#

i was blinded by intellij, i was never able to completelly know how maven worked until i decided to get to vscode and have a raw look to it

#

Oh man

#

Thanks

#

If i knew this 2 years ago...

#

Im so relieved

#

So md files are basically docs right?

bleak current
#

@bleak current So i sort of got it. but not fully yet.

So it's now building without the things that was on the screen before.
But now it only adds manifest somehow. Do you know why?
https://paste.helpch.at/ebovijazax.cs

I am using btw multiple modules

civic valve
#

@cerulean kettle md stands for markdown

#

you can google what markdown is

cerulean kettle
#

Btw what if i want to modify a patch? Is this possible?

civic valve
warped loom
#

Wait LinsaFTW

#

I know you

#

You're the developer of ExploitFixer

#

Cool plugin and nice fixes

cerulean kettle
#

thanks, yeah, im trying to patch this bcord stuff

warped loom
#

Yeah I haven't figured out how to use the patches system as well lol I might ask as well

cerulean kettle
#

@civic valve But will this replace the existing patch? I dont really know how this commit system works really.

#

im so confused

#

I will better try and experience, i think its the best way to learn gb and thanks.

cerulean kettle
#

Btw is it normal that vscode is giving errors?

#

most of stuff is red like wrong syntax missing stuff

#

i have java red hat & maven extensions

#

but like the format of travertine is even wrong... there are final fields without being initialized... why is this like this?

cerulean kettle
#

ugh... its so hard to work with this

#

i have to fully recode some parts but theyhave a patch over and i have to start searching for the patches conflicting

#

isnt there a way to get the entire source and compile it directly with the patches included?

#

It seems it is ignoring the folder to take the patches from

#

oh i had to do git add . on the travertine-proxy folder not the main one

#

well its not resolving imports when trying to build with my patches. Weird.

#

maybe ill continue this another day.

cerulean kettle
#

yeah its basically not resolving my flamecord dependency

#

used to work before

cerulean kettle
#

Just if someone wants to help i would be really grateful. Thanks. I cant even compile vanilla BungeeCord because of random errors in the code even if following the docs. I don't know what to do.

trail plume
#

probs because lombok

civic valve
#

lombok ❤️

trail plume
#

.lombok

lean gobletBOT
#

[03:01:27] <gabizou> fuck you and the lombok horse you rode in on

cerulean kettle
#

ugh... isnt that for noobs?

trail plume
#

no, but it's just bleh

cerulean kettle
#

anyways, it doesnt seem to be a lombok issue, but final fields seems to give error "not initialized"

#

or maybe it is a lombok issue...

civic valve
#

lombok is really nice when the only people who use your code know exactly how lombok works

cerulean kettle
#

Or "constructor not found" there are like 500 checkstyle errors

trail plume
#

yes, because constructors are generated

#

you need a lombok plugin for your IDE

cerulean kettle
#

it would be nice to add this to the info, i thought it was just for maven

#

thanks

#

It works... you made my day

#

but now its like when compiling it shows errors but on the ide it doesnt

mossy zephyr
#

Hey zzzCat

lost latch
#

Is there a way to get the forced host that a player joined the proxy using?

lean gobletBOT
#

pretty sure there is a method to get the listener address the player connected to

#

I would assume getSocketAddress would contain the address used

lost latch
#

Would that give the subdomain used in the forced host? Or at least, be able to differentiate between a forced host and not

#

I thought the actual listener address would just be the IP of the interface used

lean gobletBOT
#

try it? or take a look at what the proxy itself uses for that I guess

#

might be PendingConnection#getVirtualHost actually

bleak current
#

Is there a way to get the forced host that a player joined the proxy using?

#

yeah that

lost latch
#

Nice, thank you

mint hearth
#

Hi, I need some help compiling Waterfall, I closed the repo from github, not sure what Clone this repo, but I cannot find Waterfall-Proxy module.

#

Maybe I did something wrong here: Clone this repo, run ./waterfall b from bash, get jar from Waterfall-Proxy/bootstrap/target/ ?

trail plume
#

you need to actually clone therepo with git

#

and then run the thing in git-bash or WSL or something

mint hearth
#

Thanks, got it, it will be great if this will be added in the readme file, I see others opened tickets asking this on github 👍

trail plume
#

I mean, it does?

#

Clone this repo

lost latch
#

IS there a method to check if a player is connected to a specific server on the network? I know there is ProxiedPlayer.IsConnected() but that returns true if the player is connected to any server on the network, I need to know if the player is connected to a specific server

dark perch
#

ProxiedPlayer have a method to get their server info

#

Use that

lost latch
#

Ah right

#

I'm assuming the GetName() method just returns the name of the server specified in waterfall's config.yml?

dark perch
#

Iirc, yes

#

Check Javadocs to be sure

dusk crescent
#

is p.getPendingConnection().getVirtualHost() returning the subdomain / ip with port the player tries to connect to? understanding that right?

lean gobletBOT
#

it should

stark narwhal
#

how can you talk as you were a bot, does it remove your message and then the bot post the content ? choque

dark perch
#

IRC bridge

stark narwhal
#

Hello guys, we are developping a waterfall plugin that modify the server MOTD depending on a ping request, but we already have a plugin that modify the MOTD, is there any way to "call" our plugin after the other one ? We tried to rename the plugin so ours is lower in the list (that's how forge load mods)

dark perch
#

Use the depend thing on your plugin yml

stark narwhal
#

i don't have a plugin yml

dark perch
#

bungee.yml?

stark narwhal
#

only waterfall.yml, config.yml, locations.yml

#

and a modules one

trail plume
#

set the priority of the event handler to a higher priority

stark narwhal
#

It works, thanks

signal pecan
#

I tried building Travertine (and Waterfall) but it keeps saying that the pom.xml file does not exist when it is clearly there. Am I doing something wrong when building? I am running 'mvn clean package' after I have cloned it.

trail plume
#

run the script, as per the readme

leaden kindle
#

Hello ! I have a problem with Bungee, someone can help me ?

upper fiber
leaden kindle
#

I have a plugin which change user's group on a server and I want to change the group on another server and I try to use plugin message channel but it doesn't work, I don't have errors but on the other server nothing append.

#

My plugin is in the both servers.

#

I tried to use another plugin on the proxy which listen the channel and send to a server the same info and in this server my plugin listen the channel. But the plugin on the proxy doesn't receive any message

lean gobletBOT
#

in order to send plugin messages to a server there needs to be a player on the sending and receiving server

upper fiber
#

Time for some fun with Databases 🙃 ||It's not as complicated as it seems at first||

warped loom
#

it is

lean gobletBOT
#

using databases for cross server communication

#

wat

warped loom
#

I hope that's not what he's doing

#

databases are meant to store huge quantites of data

leaden kindle
#

Oh ok, if has nobody on the server it doesn't work ?

lean gobletBOT
#

yeah, the plugin messaging channel between servers is just built ontop of the vanilla plugin messaging channel, it requires a player connection

outer cosmos
#

Time for some fun with Databases 🙃 ||It's not as complicated as it seems at first||
@upper fiber Did you look into PlotSquared 4? Hopefully they are releasing their v5 in the next month. Short: PS4 saves its flag in one row atm. 😄

lean gobletBOT
upper fiber
#

PS4 saves its flag in one row atm
Let's pretend nobody saw that @outer cosmos

errant jetty
#

is waterfall better protected then bungee? in terms of exploits and stuff

lean gobletBOT
#

there are some small performance improvements but I don't think there are any (known) exploits in bungee?

ember mulch
#

is it safe to do Async stuff in PostLoginEvent?

#

with registerIntent and such?

#

😮

lean gobletBOT
#

yes

ember mulch
#

nice 😮

dense ridge
#

What is the Repo from Waterfall

lost latch
#

Did waterfall remove the getFrom() method from ServerSwitchEvent that is used to get the server info of the server the player switched from?

#

I can see it in the bungee javadocs and not in the waterfall ones, and it obviously gives an undefined method error when trying to call it in waterfall

#

I'm trying to handle the event using both the server the player is connecting to using ProxiedPlayer.getServer and the server the player is connecting from. How can I do this in waterfall?

bleak current
#

waterfall hasn't done upstream merge yet

#

that's why

lost latch
#

Oh right, I didn't realise that change was recent in Bungeecord

#

Or was it?

sly crown
#

it is yea

lost latch
#

Ahh right

#

I'll just switch to bungee for now then

#

Oh wow, didn't see it was only 5 days ago on bungee haha, that's convenient. Glad I didn't start working on this any earlier

upper fiber
#

You can't send plugin messages without players online

#

You could use something like Netty or a DB

#

@lyric cipher

#

afaik thats's just not what plugin messages are made and thought for

sly crown
#

yea the whole point is that the servers on a network are all independent servers. they're not aware of each other

#

plugin channels just hijack server<->client connections to route a message server<->server, but still needs a client connection to do so

upper fiber
#

Plugin messages with no player online?

#

You could use something like Netty or a DB

sly crown
#

yea, use a message queue

#

most people use redis for that sort of thing

upper fiber
#

It is.
Because plugin messages won't work

shell lagoon
#

Could use sockets if you don't want to use a database.

sly crown
#

your options are pretty much a raw socket connection where you can send your own sort of messages, or a MQ that's actually designed for this like redis (or any other sort of pub/sub system really)

dense ridge
#

What is the Repo from Waterfall?

viral meteor
#

guys 🙂

p.getPendingConnection().getListener().getFallbackServer()

is deprecated what is the new thing from that

bleak current
#

2nd server in servers list

viral meteor
#

@bleak current ? in wich list ? prioritylist ?

bleak current
#

lemme see

#

yes

viral meteor
#

so its prioritylist.get(1) ?

#

xD

bleak current
#
    @Deprecated
    public String getFallbackServer()
    {
        return ( serverPriority.size() > 1 ) ? serverPriority.get( 1 ) : getDefaultServer();
    }
#

idk, is it?

#

perhaps then!

#

if you can't understand the code then you don't have any choice but

#

.try

lean gobletBOT
upper fiber
#

Is there a way to distinguish a "real" server join from a server join from one server to another?

sly crown
#

from the backend?

#

of course the proxy knows

upper fiber
#

Rather from paper

#

Just thought I'd ask here because it's not just paper, but 🤷‍♂️

sly crown
#

i mean the thing is basically that a server switch essentially makes the client leave one server and join another

upper fiber
#

So I'd have to do something like
Waterfall makes player switch servers -> notifies receiving server via something like redis -> server knows from redis
?

trail plume
#

basically, yes; or do it at the proxy level

sly crown
#

from what i understand yea, but i am not too familiar with the process tbh

upper fiber
#

Thanks

fervent geyser
#

I'm doing this with Redis, realtime info about everything, players and servers

trail plume
#

depends on the implementation and all that

#

waterfall doesn't even have a main thread, so... yea...

#

implementation of the library you're using

#

There is likely a handful of people in here that have actually played with rabbit

#

You'd be much faster and get concrete answers if you actually test the behavior yourself, or read the javadocs/google, etc

#

use a profiler or something

#

look at the code

spring bloom
#

it blocks main if it blocks main

warped loom
#

Are there some additional APIs with Waterfall? I thought the changes were only for the server

sly crown
#

there's a few yea

#

tho someone should probably merge upstream cough cough

bleak current
#

ping cat

sly crown
#

bungee doesn't have a main thread

#

you are fundamentally misunderstanding how bungee works

molten jackal
#

I need to be able to check what server someone switched from and to. However, the ServerSwitchEvent doesn't have a getFrom() method like in BungeeCord. Why is this? Is there some alternative I'm missing?

stable vigil
trail plume
#

Swedz, that method was basically only recently added to bungee, it'll be in waterfall once it builds

molten jackal
#

Oh my b

#

Didn't realize it was a new feature

#

As of right now, I'm dynamically adding servers like this:

public static ServerInfo addServer(String serverName, String motd, String hostname, int port, boolean restricted) {
    ServerInfo serverInfo = getInstance().getProxy().constructServerInfo(serverName, new InetSocketAddress(hostname, port), motd, restricted);
    return getInstance().getProxy().getConfig().addServer(serverInfo);
}

However I'm looking to get the servers to be retained over reboots. I don't see any save() (or similar) methods in the ProxyConfig class, so I'm not sure what to do.

Also, just now seeing that ProxyConfig is deprecated. What is the correct way to be doing this?

trail plume
#

that's how you do it

#

it's basically a "I can modify this at any time" type thing

molten jackal
#

Ok thats fine

#

How can I save the config?

grizzled thistle
#

Is there timings for waterfall or anything equivalent to it?

molten jackal
#

Afaik waterfall/bungee doesn't have a "tps" but you can do network testing using some other software

trail plume
#

no, bungee doesn't "tick"

deft trail
#

you can run spark on it

shadow schooner
#

What methods are available in waterfall that are not available in regular bungee? Anything related to forge?

harsh harbor
#

BungeeCord has very bad forge support, and so Waterfall

bleak current
#

modern forge is not supported at all yeah

stable vigil
#

what you guys think is the problem for that? the designing of bungeecord or the designing of forge?

stone fiber
#

yes

#

designed by two separate groups with their own ideas completely independent of each other

#

bungee has sort of gone into "if forge works that's great but we're not gonna put a lot of work into it" mode

#

waterfall is more open to that sort of thing but it's still work that needs to be done afaik

#

thats completely ignoring mods too which can throw a giant wrench in it depending on what they do so, it's a fun time

sly crown
#

z sounds like cat now

stone fiber
#

maybe Im just cat with a different username

#

it was cat all along

#

cat is everywhere

sly crown
#

that explains why cat is so tired all the time

ornate jasper
#

Hey, so I'm looking at the docs and I see two events for TabComplete: TabCompleteEvent and TabCompleteResponseEvent, If i wanted to control bungee tab responses i'd work with the former and if i wanted to work with paper server suggestions i'd use the last right

upper plinth
#

Is it possible to create a plugin for waterfall to intercept and modify the coordinates sent to the client with a fixed off-set per player (e.g X = X + 50,000 and Z = Z - 13,000)

sly crown
#

possible yes...but keep in mind there's a lot of oddities about how coords are sent between server and client

warped loom
#

you mean spawn join ?

sly crown
#

a lot of packets actually have relative coords

warped loom
#

I haven't understood his question

sly crown
#

pretty sure they literally just mean all coords in packets

upper plinth
#

Yeah

sly crown
#

so the player thinks they are in some other part of the world than they really are

upper plinth
#

The server knows the player’s real coordinates however is shown a different set of coordinates (passed through some reversible function)

#

Is what I’m trying to achieve

trail plume
#

you'd need to offset the entire world to the client

harsh harbor
#

yeah, including chunks

lean gobletBOT
#

c​hr​is​ti​an​do​bb​ie​: saw someone try that and they ran into some very odd issues even when changing all packets (or so they claimed)

sly crown
#

lmao imagine caring about performance and running on windows

bleak current
#

bruh

#

i mean theoretically....

#

.g zig cc

lean gobletBOT
#

(DiscordBot) https://ziglang.org/ -- The Zig Programming Language: "Zig is a general-purpose programming language and toolchain for maintaining ... zig build-exe --c-source hello.c --library c --verbose-cc zig cc -MD..."

trail plume
#

zig

bleak current
#

technically could be used to compile dlls

sly crown
#

i mean, yes you could

#

but in general even, aside from natives...

bleak current
#

windows is still 🤢

bleak current
#

does using player.sendMessage("hello"), via paper, trigger any waterfall events?

harsh harbor
#

No.

bleak current
#

😭

harsh harbor
#

Why would you need that?

brazen walrus
harsh harbor
bleak current
#

mother fuck

molten walrus
#

It’s kinda pretty

fervent geyser
#

w w wwhyyy

bleak current
#
@EventHandler
    public void onLogin(LoginEvent event) {
        if (event.getConnection() instanceof ProxiedPlayer) {
            ProxiedPlayer player = (ProxiedPlayer) event.getConnection();

            broadcastAll(String.format(
                    "&e%s joined the game.",
                    player.getName()
            ));
    }

This doesn't trigger, can't I use the LoginEvent? I use other events so the listener is registered.

trail plume
#

more than likely waaay too early if you want the connecting player to see it

bleak current
#

is there a recommended event for it?

trail plume
#

probably server connected event or something like that

bleak current
#

PostLoginEvent worked!

wind tapir
#

Where in BungeeCord/Waterfall is the server brand when the client pings there server stored?

trail plume
#

I don't think it is

wind tapir
#

What do you mean...?

#

1.8.x 1.9.x...1.15.x Waterfall

#

That ^^^^^^^^

bleak current
#

see how ping response is generated

wind tapir
#

I looked through 10 files and couldn't find it

#

😐

fervent geyser
#

ProxyPingEvent

wind tapir
#

Oh...

fervent geyser
#

Then modify the response

bleak current
#

iirc ping is handled in InitialHandler

wind tapir
#

Huh...

#

Barely a thing in there

#

Nothing to modify...

fervent geyser
#

Well it's Lombok

#

So you have getters and setters generated

dark perch
#

With IJ search for references

#

And thats it

wind tapir
#

iirc ping is handled in InitialHandler
Yeah, I found

public void handle(LegacyPing ping) throws Exception
    {
        this.legacy = true;
        final boolean v1_5 = ping.isV1_5();

        ServerPing legacy = new ServerPing( new ServerPing.Protocol( bungee.getName() + " " + bungee.getGameVersion(), bungee.getProtocolVersion() ),
                new ServerPing.Players( listener.getMaxPlayers(), bungee.getOnlineCount(), null ),
                new TextComponent( TextComponent.fromLegacyText( listener.getMotd() ) ), (Favicon) null );```
#

in InitialHandler.java

dark perch
#

If you want to change that, then listen for the packet and change the ServerPing object

wind tapir
#

But, that is legacy ping AND bungee.getName returns the value I want (but the ping still says Waterfall)

fervent geyser
#

That should be modifiable through ProxyPingEvent, nah?

dark perch
#

Again, look references on IJ

wind tapir
#

I'm not on IJ...

dark perch
#

Eclipse?

#

NetBeans?

#

NP++?

wind tapir
#

No, no, and no.

#

Notepad.exe

bleak current
#

InitialHandler does ping response yeah

wind tapir
#

(just kidding)

#

Not notepad xD

bleak current
#

handle(StatusRequest ...)

wind tapir
#

Atom ⚛️

bleak current
#

jesus christ

#

when do people learn that you cannot keep using dumb text editors for stuff

wind tapir
#

It isn't a dumb text editor...

#

It's a code editor.

bleak current
#

use atom for at most writing essays and nothing else

trail plume
#

it's a glorified text editor

fervent geyser
bleak current
#

it's a fucking shit in an electron wrapper

wind tapir
#

I have IJ.

#

I just don't open it when making small tweaks (or what should be a small tweak...)

bleak current
#

which lost in competition to another shit in electron wrapper called vsc

trail plume
#

VSC is awesome

#

I mean, if you're using it for mostly text-editor level stuff, it's awesome

#

actually using it...

#

god

wind tapir
#
    public void handle(StatusRequest statusRequest) throws Exception
    {
        Preconditions.checkState( thisState == State.STATUS, "Not expecting STATUS" );

        ServerInfo forced = AbstractReconnectHandler.getForcedHost( this );
        final String motd = ( forced != null ) ? forced.getMotd() : listener.getMotd();
        final int protocol = ( ProtocolConstants.SUPPORTED_VERSION_IDS.contains( handshake.getProtocolVersion() ) ) ? handshake.getProtocolVersion() : bungee.getProtocolVersion();

        Callback<ServerPing> pingBack = new Callback<ServerPing>()```
bleak current
#

well yes, definitely better than atom, np++ etc.

trail plume
#

I would rather be locked in a room with simple

bleak current
#

and has live share

#

otherwise... real ide

#

or emacs :^)

trail plume
bleak current
wind tapir
#

See code above

trail plume
#

Just, make sure you install evil-mode, gotta get a good text editor

wind tapir
#

I see supported versions, but everything seems to omit the Waterfall part...

#

Well where is it?

trail plume
#

further down

#

it literally just uses getName on the proxy instance

wind tapir
#

BRUH

#

I KNOW THAT

bleak current
#

watch your attitude

dark perch
#

Then do Ctrl + F

wind tapir
#

And guess what: getName() returns my proxy name

bleak current
#

pull out IDE already

wind tapir
#

And yet it still says Waterfall

dark perch
#

Then probably you didnt update the jar correctly

#

OR you are doing something wrong

bleak current
#

there's literally a method named getPingInfo in IH...

wind tapir
#

1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16 (Waterfall)

spring bloom
#

has mojanged started preleases yet

bleak current
#

no

wind tapir
#
    @Override
    public String getName()
    {
        return "HyperFall";
    }```
#

BungeeCord.java

#

Ping: 1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16 (Waterfall)

#

🤔

dark perch
#

Then probably you didnt update the jar correctly

bleak current
#

mvn clean and rebuild...

wind tapir
#

Um...

#

This is in my fork, and it's had like 40 commits.

bleak current
#

mvn clean

#

and rebuild

wind tapir
#

All which have been built with HyperFall version

#

Okay.

#

Lemme try

bleak current
#

that should've been one of the first things

wind tapir
#

Hold on, getting out of patch editing state.

#

Huh.

#

I can't mvn clean.

bleak current
#

¯\_(ツ)_/¯

wind tapir
#

Nevermind, cleaned the second time.

harsh harbor
#

hypefall

#

confused sounds

wind tapir
#

Yes lol.

bleak current
#

If I use PostLoginEvent and in its function I use getProxy().getPlayers(), does that include the joined player in the event?

smoky spindle
#

How do i compile Waterfall to get a sources-file for maven?

glass horizon
#

@bleak current yes

high lily
#

should be gasrise

bleak current
#

Hello, I decompiled the waterfall project and now I would start it but:

ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
ERROR StatusLogger Unrecognized format specifier [d]
civic valve
#

why would you decompile it

bleak current
#

because I want to add some functions

harsh harbor
#

you can add custom patches.

bleak current
#

how?

bleak current
#

l m a o

lean gobletBOT
#

the readme should contain the information necessary to do that

trail plume
#

if you wanna modify waterfall, look at travertine

bleak current
#

travertine?

trail plume
#

assuming you're not planning to create a PR, travertine basically has the magic to maintain patches over waterfall

civic valve
#

@bleak current what are you actually trying to do/change

bleak current
#

@bleak current what are you actually trying to do/change
@civic valveI want to add new commands, new modules and a RestAPI

#

why can't you do that with a plugin?

bleak current
#

are you decompiling and recompiling once again...?

#

don't do that

#

if you want to build a fork of waterfall, clone travertine, yeet out the patches it has and add your own

#

and change other branding

#

it's easy

trail plume
#

wut are you even?

#

if that's actually a real travertine jar and not one you've messed with, onedrive BS? assuming you clipped out your name from there, otherwise, god knows

brazen walrus
#
for (ProxiedPlayer player : getProxy().getPlayers()) {
  // some code
}

Stupid question, but is it safe to do this?
The code is called by a scheduler using getScheduler().schedule(...).

warped loom
#

I think so

#

also since it's a collection you can use the forEach() method btw

#
getProxy().getPlayers().forEach(player -> ...)

don't know if this has helped you 😁

bleak current
#

s t r e a m s

chilly coral
#

This one is not from stream api

bleak current
#

ah yes right nvm

fervent geyser
#

Offtopic question, what is better? forEach() method or classic foreach loop?

#

I heard that forEach is less memory friendly, that it creates new lambda everytime

chilly coral
#

forEach from Collection wraps the classic loop

bleak current
#

new lambda every time
first time yeah

chilly coral
#

forEach from stream api could be memory/cpu angry

fervent geyser
#

Just the Collection one, because I'm using that alot

chilly coral
#

I don't really know if the lambda thing could hurt performance

stable vigil
#

It is definitely slower than a classic for-each-loop but the performance difference is not noticable. It is fine to use it. Personally, I use it very often

fervent geyser
#

Thanks ❤️

signal mica
#

Is Waterfall Thread safe? I want to add and remove servers from different threads. I would like to avoid the async scheduler since it causes problems with other parts of my code.

warped loom
#

Waterfall does not have a main thread from what I've been told

surreal compass
#

Is there a waterfall equivalent for ServerCommandEvent on spigot? Or at least any event I can listen to if I want to parse console commands?

lost latch
#

So I need my plugin to load after LuckPerms so it can hook into their API, but softdepend doesn't really work from what I've tried, and depends: [LuckPerms] means the plugin won't load if LuckPerms isn't present. Any way I can do this?

warped loom
#

i think there is only a load-before in the plugin.yml

#

not a load-after

lost latch
#

Yeah, that's what softdepend tries to do on normal plugins iirc

#

Just doesn't work on bungeecord/waterfall, at all.

lean gobletBOT
#

it's softdepends, not softdepend

lost latch
#

Yeah sorry, that's what I've been trying

#

softdepends: [LuckPerms], plugin still loads before LuckPerms every time

lean gobletBOT
#

that's what softdepends means, load after

lost latch
#

Ahah, I meant loads before

#

I want my plugin to load after luckperms, by even with putting softdepends: [LuckPerms] it still loads before

lean gobletBOT
#

that's odd, it shouldn't do that

#

wait, it might be case-sensitive, try softDepends

lost latch
#

Yup! That was it, thank you so much

#

Dk why regular bukkit plugins are softdepend and bungeecord is softDepends

signal mica
#

A little "strange" question: Does each plugin run in its own thread? Or in other words: Will I run into problems when I change the classloader in my plugin?
My problem is that I need guava 28 but Waterfall only uses 21. To fix this I want to use some classloader magic

trail plume
#

no, they run on the network threads, basically

#

they can have their own threads by the scheduler, etc

#

you probably just wanna relocate guava and shade it in

signal mica
#

But how do I do this? I have guava extracted to my plugin but Waterfall will not magically load my dependencies. I could recompile the whole Proxy but I want to avoid that.

trail plume
#

use maven/gradle

#

they both have plugins which let you handle this type of stuff

signal mica
#

Okay, cool. I will try this then. Many thanks.

naive hound
#

Hello, does "depend: [LuckPerms]" guarantee that my plugin will stop before LuckPerms when server will be closing?

#

or what can guarantee it to me?

dark perch
#

afaik it only guarantee you load after the plugin

warped loom
#

isn't that load-before

#

depend will just make ur plugin not enable if that dependency isn't in the server.

naive hound
#

and how can I achieve that my X-plugin will start after Y-plugin and stop before Y-plugin?

wide maple
#

loadbefore and loadafter?

naive hound
#

thanks, I had "depend: [LuckPerms]" instead of "depends: [LuckPerms]"..

steel jungle
#

Can one re-connect a player to the server they're on with the API?

eager hill
#

Something like reconnecting while the backend server is down?

steel jungle
#

No, just like a relog.

#

I'm trying to add a /login-as <username> command for admins

#

and I thought it would be cool not to have to manually relog

lean gobletBOT
#

could just switch to the lobby and back, no idea if reconnecting works

molten jackal
#

Is there a way to get the max player limit of a paper/spigot server on the bungee/waterfall side of things?

#

Without having to send a custom plugin message to show that data, preferably.

#

I just found a way to do it with ServerInfo#ping() nvm 😂

bleak current
#

will I need to use a plugin to show player names on the server list again?

#

preferably write it myself, but I assume thats how I solve it?

bleak current
#

you can use ServerListPlus

full cloak
#

Is there any maven repo for waterfall available?

lean gobletBOT
#

it's in the normal papermc repo

full cloak
#

ah, okay. thx. maybe you could add the maven repo infos also to the github readme for waterfall 🙂

molten jackal
#

As of right now, I'm dynamically adding servers like this:

public static ServerInfo addServer(String serverName, String motd, String hostname, int port, boolean restricted) {
    ServerInfo serverInfo = getInstance().getProxy().constructServerInfo(serverName, new InetSocketAddress(hostname, port), motd, restricted);
    return getInstance().getProxy().getConfig().addServer(serverInfo);
}

However I'm looking to get the servers to be retained over reboots. I don't see any save() (or similar) methods in the ProxyConfig class, so I'm not sure what to do.

I never got an answer to this question 😐

bleak current
#

you can maintain your own servers storage

molten jackal
#

You mean like in my own file and have it load all the servers on boot? That would work, but working via the bungee config would keep everything in one place.

lean gobletBOT
#

as far as I can tell you'll have to save it manually

molten jackal
#
public static ServerInfo addServer(String serverName, String motd, String hostname, int port, boolean restricted, boolean save) {
    ServerInfo serverInfo = getInstance().getProxy().constructServerInfo(serverName, new InetSocketAddress(hostname, port), motd, restricted);
    ProxyConfig config = getInstance().getProxy().getConfig();
    config.addServer(serverInfo);
    if(save) {
        YamlConfig yaml = (YamlConfig) ProxyServer.getInstance().getConfigurationAdapter();
        try {
            Method method = yaml.getClass().getMethod("save");
            method.setAccessible(true);
            method.invoke(yaml);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
            ex.printStackTrace();
        }
    }
    return serverInfo;
}

Untested, hacky, and might work 😂

#

mmm wait

#

ugh nvm lol

#

ill just go the manual route

bleak current
#

your other option is to reroute whole configuration to your own configurationadapter

bleak current
#

Guys

#

ReadTimeoutException : null

#

i get this kick issue by like 30% of my players

trail plume
#
  1. this is the dev channel, not the help channel
#
  1. The exception literally says what happened, there was nothing to read in so long
bleak current
#

do you recommend me to use any startup flags on waterfall?

lean gobletBOT
#

just makge sure that you use g1gc, also such questions fit more into the help channel ;)

stark bone
#

I can import everything else fine

bleak current
#

because it's not in api

stark bone
#

OH of course it isn't

#

I think it just clicked

dark perch
#

Because you have the light theme

stark bone
#

When does ProxiedPlayer.getUniquieId() get populated?

#

Is it safe to call it during LoginEvent

#

I'm guessing PostLoginEvent tbh

lofty estuary
#

for some reason when im pinging a server the callback happens twice
once without a throwable then once with a trowable

#

anyone have an idea?

harsh harbor
#

ping callbacks are trash

#

nvm

#

@lofty estuary what throwable do you get

lofty estuary
#

Figured it out my own code was causing the throwable

#

Felt real dumb for a bit 😂

#

I'm guessing it's good practice to make sure it's the expected throwable and if not print stack trace

lean gobletBOT
#

j​am​es​09​05​00​: UUID should be available in the LoginEvent, only the PreLoginEvent states that it has no additional info about the player

brittle pilot
#

Can I include a default config.yml file fro my plugin with bungeecord like i can with spigot?

bleak current
#

yes

brittle pilot
#

How do I output it to the config dir? Or how do I access the file in the jar to be able to output it?

#

I have a config.yml in my resources dir, and its included in my pom.xml, but I don't see anything like bukkit's saveDefaultConfig

bleak current
#

.g bungeecord plugin configuration api

lean gobletBOT
#

(DiscordBot) https://www.spigotmc.org/wiki/using-the-bungee-configuration-system/ -- Using the Bungee Configuration System | SpigotMC - High ...: "Apr 20, 2019 ... The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy."

brittle pilot
#

Yes, I'm reading that. Am I missing something?

#

the bottom part huh

bleak current
#

yeah

#

it's basically saveDefaultConfig method implementation

brittle pilot
#

Yeah I missed this part, ty: getResourceAsStream("config.yml")

upper wharf
#

Hi guys, I'm searching something which I don't know if it is realizable (caused I haven't found it online). Do you think it is possible to put a Proxy server (like Socks5) between Waterfall and other servers ?

lean gobletBOT
#

probably

upper wharf
#

(Instead of Client-> Waterfall -> Server make Client -> Waterfall -> Socks5 -> Server)

#

Ok cool so now I've to found how to figure it out 😢 Thanks

trail plume
#

use a tunnel

upper wharf
#

Have I to do it plugin side /waterfall jar side or have I to connect through server?

trail plume
#

you'd need to setup some form of tunnel or something and connect to it like that

upper wharf
#

Okay thanks, I'm going to try that

high lily
#

What is the best way to identify a server on the proxy by id or something?

dark perch
#

Server name?

high lily
#

thank haha

#

does ServerSwitchEvent get fired on the first login switch into the first server?

harsh harbor
#

no each time you switch the server

#

read docs

sly crown
#

what the hell is that github issue

bleak current
#

wtf

#

that person is completely clueless how things work

#

...

#

jesus fuck

#

cat can you just ban that dude from the repos

#

the kid is unaware that ps is available on github

sly crown
#

doesn't include the license

#

he's breaking copyright laws!

#

wait

#

it does

#

lmao

#

does PS bundle the license?

#

and uh...is it really agpl

civic valve
#

following copyright in the mc community kekw

sly crown
#

is agpl gpl compatible or does it necessitate agpl

civic valve
#

i don't think it is

#

holy fuck block that guy

#

They've been banned from github before

#

banned name was marinaluisa2020

#

their whole github profile is begging for support

formal dirge
sly crown
#

"Before creating a public repository, learn basic quantum physics;"

#

this has to be a troll right

bleak current
#

no, a retard

sly crown
#

quantum physics?

#

alright ChemE major

bleak current
#

barty chem major? lol inb4 works for drug labor, cooking fancy drugs

weary grove
#

That guy has to be either incredibly dumb, a troll, or he is a deep cover parody of Deepak Chopra. Honestly I can't decide between these three.

stone fiber
#

he's doing the same thing over on the mcmmo repo right now

#

maybe he's just the first in a new line of mkultra test subjects

weary grove
#

what do i need a .onion site for? i thought the program was executing ddos attack using proxies provided by tor browser

#

But, alas, the tool does something different

Python-coded Tor DoS tool with slow-GET attack and GET flood that can't be filtered.

#

there is no way to learn if only 1 of the objects is learning; learning is reciprocal; that is why bill gates and elon musk did not put their children in ordinary school, teachers do not want to teach, teachers just want to repeat light data to earn food to survive;

#

This line convinced me he is definitely a crank, and not a garden-variety troll

#

i am coching, psicology, neuro scientist, and full stack developer in all plataform and language, and know all universe languages;

#

claims to be a "full stack developer in all plataform and language"
can't even do basic research on the MC protocol

#

Honestly, I'm convinced they're not a troll or severely misinformed - they're in need of psychiratic help

frigid anvil
#

❤️

harsh harbor
#

@frigid anvil I don't know if that PR is yours or not

#

but could not it be good if all exceptions parent class was not Exception

#

maybe ProxyException

wide maple
#

It’s not his PR

harsh harbor
#

is it yours?

wide maple
#

No the only PR to paper I have open currently is 1.16 snapshot support for Travertine. I need to move that to Waterfall

trail plume
#

No, that's somebody else

#

I mean, their dumcord nick literally shares their github nick

fringe aspen
#

all of the exceptions in the pr already have a root ProxyException class if you looked at the pr

harsh harbor
#

oh i see

#

my bad

chilly coral
#

Hey, i made my own waterfall fork using travertine as a base model and I was wondering when should I use the upstreamCommit script ?

trail plume
#

Whenever you're doing a commit that updates upstream

#

That script just creates a commit message, basically

chilly coral
#

Humm, ok so for example, if my fork is 6 commits outdated from waterfall, i do merge > patch> rebuild patches > upstream commit ?

trail plume
#

yes

#

it just creates those commit messages

chilly coral
#

Oke thanks zzz ❤️

weary grove
stone fiber
#

@trail plume any thoughts on that exception event PR?

trail plume
#

Not really looked at it yet, but the overall intent is good

grizzled thistle
#

AHH

#

finally

chilly coral
#

can this help with malformed packets attacks ?

bleak current
#

yes and no

sinful swift
#

Hi, i'm starting developing a Bungee/Waterfall plugin. I found out that i will need some kind of connection between bungeecord and bukkit server. I was looking for it but the only thing I found is Plugin Messaging Channel that (if i'm not wrong) only provides me sending packets to players.

trail plume
#

you send it to the player and the proxy intercepts it

sinful swift
#

What if there are no players on server?

trail plume
#

then that's just not gonna work

#

you'd need to look into an alternative system for that

sinful swift
#

Yes i'm asking for alternative system.

trail plume
#

e.g. opening your own http server or something, or using something like redis

sinful swift
#

redis?

bleak current
#

.g redis

lean gobletBOT
#

(DiscordBot) https://redis.io/ -- Redis: "Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures..."

bleak current
#

or rabbitmq even

#

whatever fits

#

if you need to do rpc mostly then http is fine

#

just pull up a http server

sinful swift
#

OK, thank you.

bleak current
#

using NanoHTTPD or Netty

#

Netty is harder but you'll get speed (gotta save nanoseconds smh) and don't have to bundle in another library

sinful swift
#

Are there any examles of usage of Netty with Bungee?

bleak current
#

explain?

#

you want to build http server using it or tap into minecraft pipeline?

sinful swift
#

Nevermind I think I will do it myself. Thank you for helping me very much.

bleak current
#

there isn't much related to bungee itself with netty

#

you'll simply use netty api, build up your own Bootstrap and handlers

#

and that's it

sinful swift
#

Also it is my first Bungee plugin, so i'm not sure if I will realy need it. Can bungeecord/watefrall do something in spigot server? (eg. set block to air, change players gamemode)

#

My question may seem very stupid

fervent geyser
#

Not really

trail plume
#

no, their state is entirely seperate

fervent geyser
#

With some way around, everything is possible tho feelsRareMan

trail plume
#

you'd need to send a message to the server to do something to the world, etc

sinful swift
#

that meens i will need to use netty

#

Thank you

fervent geyser
#

I am using Redis for that tbh

sinful swift
#

I need to send single "messages" to spigot servers

#

will redis be good for that?

fervent geyser
#

pub/sub? 😄

runic tundra
#
ProxiedPlayer player = (ProxiedPlayer) event.getWhoClicked();
                    ServerInfo target = ProxyServer.getInstance().getServerInfo("survival");
                    player.connect(target);
#

Error:

#

[12:32:41 ERROR]: Could not pass event InventoryClickEvent to Hub v1.0-SNAPSHOT
java.lang.NoClassDefFoundError: net/md_5/bungee/api/connection/ProxiedPlayer
at com.castve.hub.Hub.onClick(Hub.java:71) ~[?:?]

#

Line 71:ProxiedPlayer player = (ProxiedPlayer) event.getWhoClicked();

bleak current
#

don't mix and match bungee/bukkit api

fervent geyser
#

You are using bungee API on the spigot server

runic tundra
#

So How do I use the plugin on a spigot server then?

#

How do I connect them via gui

trail plume
#

use the plugin messaging channel

runic tundra
#

paper*

#

Oh?

trail plume
#

.g bungee messaging channel

lean gobletBOT
#

(DiscordBot) https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ -- Bukkit & Bungee Plugin Messaging Channel | SpigotMC - High...: "Dec 21, 2018 ... The anatomy of a Plugin Message Packet is as such: The name of the "channel" (also named "tag" in BungeeCord) the plugin message..."

sinful swift
#

:)

fervent geyser
#

@sinful swift To be honest, I use Redis for everything, paired with GSON it's just awesome and easy to do

sinful swift
#

GSON?

fervent geyser
#

Google library for JSON

sinful swift
#

Oh

#

I think i will try Netty

#

it sounds cool ;)

fervent geyser
#

😇

weary grove
lean gobletBOT
#

inb4 everything breaks

bleak current
#

"please test your PRs next time" reverts

#

hmm, (random of ["entity meta rewriting", "holding spacebar to leak the memory and get bungee killed by kernel", "...", ...]) broke

civic valve
#

It's the same guy lmao

bleak current
#

i know, hence i said that

#

:p

#

hey, what event should I use to get the total player count whenever a player connects?

random comet
ornate jasper
#

Great event

bleak current
#

the whole map gets nuked

#

/nuke everyone do it

grizzled thistle
#

@bleak current for the entire bungeecord network use getProxy().getOnlineCount()

bleak current
#

yeah but I want to update a counter whenever a player connects/disconnects and i don't know what event to use

harsh harbor
#

it is updated automatically

#

you don't need to manage online count manually

bleak current
#

not for showing in minecraft 8029_Pepe_Invalid

trail plume
#

PostLogin is the first event after that will be incremented

#

like, right bang after it

bleak current
#

and for disconnections?

harsh harbor
#

PlayerDisconnectEvent

bleak current
#

perfect thanks

high lily
#

do async tasks run on their own thread pool?

trail plume
#

yes

high lily
#

so runnning sync db querries should be fine in there

#

sync as in on that thread

trail plume
#

Yes

high lily
#

was ganna use taskchain but that simplifies that

trail plume
#

taskchain won't work for waterfall

high lily
#

oh ye forgot about that one

#

does paper async tasks also run in a thread pool?

harsh harbor
#

Yes

trail plume
#

yes

#

At the end of the day, you gotta shove those tasks somewhere

#

it's either use a pool or manage your own threads, which, like...

high lily
#

ye I was wondering if they just dedicated like 1 thread

bleak current
#

hey

#

i tried using PlayerDisconnectEvent to update my player counter but it's not updated in that event

#

is there any other event where it's updated?

chilly coral
#

you can just do -1

#

i think the player is not yet removed from the player list

#

totally other thing, but i just noticed that UserConnection#connect method line 264 does not use the serverConnectTimeout value of the config

#

i'll try to PR but i'm quite noob at patches

bleak current
#

you can just do -1
true lmao

weary grove
#

Just realized that with my Netty bump patch I didn't include a comment lol

#

doesn't matter, it wound up in Bungee anyway, and the patch was temporary/emergency

chilly coral
#

What is the cycle for a PR to be approved ?

bleak current
#

when cat has time and energy to merge basically

chilly coral
#

Ok 👌

warped loom
#

cat has no energy, sad cat

bleak current
bleak current
#

1000% cat irl

#

neat emote tbfh

chilly coral
#

lol 😂

bleak current
#

i assume this question has been asked before, is it possible for a future feature to have an update folder for Waterfall plugins too?

#

i tried to pr that

#

that didn't go too well

#

so no

#

"it's insecure, we shouldn't promote plugins to self update themselves"

#

told by md5, who was surprised that same feature exists in bukkit too

#

yeah thats a shame, i use it a lot on my minecraft instances

#

oh well, ty for testing tho

#

you can reimplement that feature pretty easily though

#
if [ -d plugins/update ]; then
    find plugins/update -name "*.jar" | while read -r f; do
        b="$(basename "${b}")"
        if [ -f plugins/"${b}" ]; then
            mv -v "${f}" plugins/"${b}"
        fi
    done
fi
#

using a shell script

#

untested, might work

#

might not

#

ah yea true, ty m8

thorny holly
#

wizman, why //outline not work with polygonal regions

sly crown
#

does walls work

#

why tf is this question here

#

lmao

thorny holly
#

cause i don't wanna get on your discord lol

#

ah walls works

lean gobletBOT
#

at least use #general, lol

thorny holly
#

i didn't even realize this was waterfall

proper rampart
#

I'm trying to make one addon plugin but can't find a way to disable my plugin if the dependant plugin isn't installed. Bukkit has getServer().getPluginManager().disablePlugin(this); but bungee doesn't. How can I do this?

#

I've tried java public void onEnable() { if (this.getProxy().getPluginManager.getPlugin(depend) == null) return; else { // do stuff } }

chilly coral
#

There is a built-in dependency system

#

In the bungee.yml

proper rampart
#

It works for bungee too? I didn't even consider that, thought it only worked on spigot.

#

Thanks.

chilly coral
#

It works but in my memories, i think it is depend instead of depends

#

May be wrong

proper rampart
#

from intellij

#

let me check really quick

fervent geyser
#

It is depend

proper rampart
#

okay, thanks

lean gobletBOT
#

depend is for Bukkit ;)

proper rampart
#

well

#

thanks

chilly coral
#

I knew there was a difference x)

lean gobletBOT
#

no

sly crown
#

he deleted

lean gobletBOT
#

that was 5 hrs ago smh

#

can you please just freaking remove delete permission from normal users?

#

like seriously, that's one of the worst features of discord right after message editing without history

#

ok, well, actually: right after their stupid permissions system which doesn't allow revoken that shit. like wtf

#

I guess the solution would be to crete a bot that removes and reposts all the messages. lmao

round cloud
stone fiber
#

fix what

#

if by fix you mean "revert this thing I dont like"

#

I doubt it, but maybe cat will bite

lean gobletBOT
#

imo there is no need for that to begin with, it would be better for people needing more functionality to actually PR that functionality to the API

round cloud
#

It's not about what I like, BPM (from developer of ProtocolSupport) works fine since 2015 without change, and now the bungeecord founder just have an idea, that he could merge 1 year old PR what has no other change than make some class private, because it's really bad that some plugin can edit bungeecord plugin manager.. someone could reload the plugin :O that's terrible, if he has 100 players on his server, he need to restart whole bungeecord, because reloading is bad, there could be some plugin that may not works well with reload (you would restart server anyway if the plugin failed to load)

stone fiber
#

yeah see Im still on the "no this is stupid lets not revert it" side

#

and your rambling response doesnt really convince me otherwise

#

but Im not the waterfall guy so it may still happen

lean gobletBOT
#

"works fine" it fucking hacks internal code

round cloud
#

And why do you think this is stupid? Maybe if you had your core server logic in bungeecord plugin with very often updates and a lot of players on your server, you would see it from a other side

stone fiber
#

If your core logic is replacing the entire plugin loader, your core logic is broken

weary grove
#

Well, "plugin managers" are all terrible, they leak memory and a lot of plugins don't tolerate getting arbitrarily unloaded and reload, same reason why it's not recommended to use /reload

lean gobletBOT
#

als why tf are you pushing updates "very often", that sounds like you are not testing at all

#

and if you really want to update stuff often: use your own module loader

weary grove
#

I mean, pushing updates often is literally what continuous deployment is

#

It's not a bad thing, if you do it correctly

lean gobletBOT
#

well imo you can't do it correctly but ¯_(ツ)_/¯

weary grove
#

We use a full CI/CD flow at Mineteria. Trust us, you can do it.

sly crown
#

never trust a tux

lean gobletBOT
#

so how do you reload plugins without restarts?

round cloud
#

Ok, but I'm plugin developer, and I don't want to restart my entire network to load newer version of the plugin, my bungeecord uses just a max of 1GB of ram and I never had ram leak, even on my minigames server I often reload my plugins because of a new features, and I also never had a leaked ram

weary grove
#

We usually do one a day but in some cases (emergencies) we will do up to 3

lean gobletBOT
#

also why not wait a day/week until the normal, schedules restart?

round cloud
#

I dont have restarts at all

weary grove
#

We don't reload plugins. We just spin up new servers and let the old ones shutdown.

lean gobletBOT
#

uses 1GB

round cloud
#

My servers have uptime up to 30 days, and bungeecord up to 1 year

lean gobletBOT
#

claims he doesn't leak

#

wat

#

bungee can run fine with 512MB, hell I've used 256 before without plugins and no issues xD

weary grove
#

We have the ability to gate things such that only part of the server can get new servers up - this is very useful as we can target emergency bugfixes where they're needed

round cloud
#

Depends how many plugins, players, and so on, but 1GB is usage of my whole docker container, bungeecord have maybe about 500MB less, because there is whole linux

weary grove
#

Still, unless your plugins are designed to tolerate reloads, it's not advisable. Now perhaps you use largely your own plugins - great, then this works for you. You also have the ability to remove the "dumb feature" from Waterfall yourself!

round cloud
#

Yes, but I want to know if my PR would pass, because a lot of people are just negative about this and they don't know why

trail plume
#

We've already had a feature request sitting around for something that would negate the specific usecase there

#

it's very rare that we find justification to revert an upstream change, and tbqh, I'd much rather have proper API for the behavior people are tryna aim for

#

not that bungees plugin system is even great for this type of thing

round cloud
#

I never had a problem with a plugin reload in bungee or spigot, the one problem I can think of is when I reload a dependency of some plugin or when the plugin has player register and he register players only via join event

trail plume
#

never had a problem

#

highlights one area in which plugins often derp this

#

reloading plugins on the proxy is even worse, because it's literally never expected that a plugin would reload, so they're never designed for it

round cloud
#

Yes, why would I reload plugin what can't handle a reload, or it's dependency to some other plugin

trail plume
#

what is and isn't reloadable is not clear to end users

round cloud
#

If it failed, I would restart server anyway

#

But most of the time, I don't need to restart the server

trail plume
#

But, as I've said, I'm not fond of the idea of just blindly reverting PRs because somebody isn't happy that their hack no longer works

#

If there is enough demand for it, maybe

fervent geyser
#

Would be cool to have something like onReload()

trail plume
#

But, I would sooner have proper API for the task

#

already does

#

there is the reload event

round cloud
#

It's not like everyone updates a bungee, I haven't updated it since 2020 maybe, just now and now I found it was changed month ago, so I downgraded the bungee

lean gobletBOT
#

yeah, plugins that support it listen for the /greload command and do their shit there

round cloud
#

It's about the BPM works perfectly last 5 years without any modifications, and now someone mark class like private, because he don't know what to do and he want to make some commits on github

lean gobletBOT
#

doesn't work perfrectly

#

claims it works perfectly

trail plume
#

md opted to make the change

lean gobletBOT
#

if you care that much just revert the change and be done with it? lmao

round cloud
#

I never said that, @lilac crystal

trail plume
#

Yes, some rando kid shoved it up, but, md agreed with the behavior

round cloud
#

BPM = BungeePluginManager, plugin by the ProtocolSupport developer @real cave

lean gobletBOT
#

two stupidly hacky plugins, yes

trail plume
#

Basically, I've stated my opinion on it

lean gobletBOT
#

with known issues xD

round cloud
#

So I stay on build from january, and I'll wait for some proper api (there was nothing wrong with current), and I send PR to BPM

trail plume
#

there was nothing wrong with current

#

Yes, there was

round cloud
#

And what?

lean gobletBOT
#

have fun with all the bugs that are in your old version

trail plume
#

That class could have been argued to be final the entire time

fervent geyser
#

(the old netty version for example)

sly crown
#

nullping kekwhyper

trail plume
#

This is not the first case where md felt he shoulda made something final but didn't until a few years later

#

Either way, that's my view, I have very little inclination to revert that commit, if somebody wants to create a PR to implement proper API for the functionality there, we can look into it

round cloud
#

But the onEnable() and onDisable() method is enough, plugin reload just do onDisable(), loads the plugin again, and call the onEnable() method, or you want to have plugin reloading built in in Waterfall?

trail plume
#

or you want to have plugin reloading built in in Waterfall

#

Well..

round cloud
#

I can do that, but there would be experts that will say that not every plugin can be reloaded, and my PR would be denied

trail plume
#

That would be proper API if the feature was... erm... built into the API...

#

We've already approved the feature for a proper API on our issue tracker

#

There is just been pretty much 0 interest for somebody to actually build/implement such API

round cloud
#

Maybe that was the md5 intention manythink

trail plume
#

approved for waterfall

#

i have heavy doubts that md would consider such a pr, but 🤷‍♂️

round cloud
#

But the functionality would be the same as it is now with BPM plugin, there will be nothing else than call onDisable, reload the plugin can call onEnable

trail plume
#

Not really

#

It would be much easier to do in the proxy itself

#

proper events could be added so that plugins can deal with such state changes more gracefully, etc

#

So, yea, the sole intent is the same, to un/re/load plugins

#

The implementation on the other hand would be much more universal and viable for devs to actually pick up on if they want if there is actually proper API for the job

round cloud
#

Or, you can do for cycle in the onEnable what would add players to player register (if there is any), that's the only problem why some plugins can't be reloaded, and there is very few of them

#

Because developer should be aware that onEnable should be called not only when server is starting

trail plume
#

That's false

#

Bungee doesn't have reloading support built in

#

Nor does bungee even provide the means for them to handle this stuff safely

real cave
#

Docs ain't specify when plugin enables either.

round cloud
#

Adding onReload method and telling everyone he needs to implement that would break a lot of plugins what works well with current reloading, and no one would add that method

real cave
#

So you should be expecting for plugin to be enabled any time.

trail plume
#

The lack of reload support is an ecosystem limitation

#

API doesn't garauntee jack bar they'll start at some point, in the real world for plugins, that's on startup before the connection listeners have even been registered

real cave
#

There is no problem to update BungeePluginManger to those changes tho.

#

Just need to find some free time.