#waterfall-dev
1 messages · Page 3 of 1
thanks
i want to like make a fork of it of it's code but edited you know that's called fork
like adding things in the original waterfall
well either fork it like normal or look at how Travertine did it
Does the proxy modify the player (connection) in any way?
I try to figure out the cause of an error in DecentHolograms and so far the only common thing I could find from all the reports is, that the servers run under a BungeeCord/Waterfall proxy.
The error in question: https://paste.helpch.at/zikamujade.swift
The first line of the plugin the stacktrace mentions: https://github.com/DecentSoftware-eu/DecentHolograms/blob/main/src/main/java/eu/decentsoftware/holograms/api/nms/PacketListener.java#L33
that error cannot be caused by a proxy
that sounds more like a case where the plugin is simply not compatible with the server version
(as far as I can tell it should work though, I use similar code even behind a proxy without issues)
is this happening on every join? because I think if the player leaves before it was fully joined (which could happen more often on a proxy) then maybe that could cause the the handler to be missing?
public void execute(CommandSender commandSender, String[] strings) {
getLogger().info("Command Executed!");
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF( "pumpkincore:main" );
out.writeUTF( "Hello World" );
ProxiedPlayer p = (ProxiedPlayer) commandSender;
p.sendData("pumpkincore:main", out.toByteArray());
}```
is this right how to send plugin message in waterfall?
it not sending anything in my paper server...
i have register the channel in waterfall plugin
public void onEnable() {
instance = this;
getProxy().registerChannel("pumpkincore:main");```
then register this in paper plugin
public void onEnable() {
// Some Condition
if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
this.getLogger().info("We need Vault!");
getServer().getPluginManager().disablePlugin(this);
return;
}
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "pumpkincore:main");
this.getServer().getMessenger().registerIncomingPluginChannel(this, "pumpkincore:main", new PrivateMessage());
and this my PluginMessageListener in paper plugin
public class PrivateMessage implements PluginMessageListener {
@Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] messages) {
System.out.print(channel);
Pumpkincore.getInstance().getLogger().info("DEBUG: "+channel);
if (!channel.equalsIgnoreCase("pumpkincore:main")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(messages);
String subchannel = in.readUTF();
String senderName = in.readUTF();
String ggwp = in.readUTF();
player.sendMessage(Component.text("You received a private message from: " + senderName + ", "+ggwp));
}
}
there no output from
System.out.print(channel);
Pumpkincore.getInstance().getLogger().info("DEBUG: "+channel);```
after use this waterfall command #waterfall-dev message
still need help
Because you're sending the plugin message to the client, not to the server
i see
What is the linux command to update the waterfall.jar to the latest version?
rm waterfall.jar
wget newwaterfall.jar
java -jar newaterfal.jar
get the url from the website
wget https://api.papermc.io/v2/projects/waterfall/versions/1.20 That's what I figured out so far
I don't really know where I can find the URL on the website
you would need to parse the API responses
or if you're doing it manually just right click the download button and copy the link
How would I find what the correct API calls are to update the waterfall.jar through a .sh file?
if I send data from waterfall plugin
it will send to all server?
i want to make global player chat
so i have 2 server
1 paper plugin and 1 waterfall plugin
so i send data
event.getPlayer().sendPluginMessage(getInstance(), "pumpkincore:main", out.toByteArray());```
from paper plugin with AsyncChatEvent
after that waterfall plugin will send it back to all servers
like this
if (!event.getTag().equalsIgnoreCase("pumpkincore:main")) {
return;
}
ProxiedPlayer sender = (ProxiedPlayer) event.getReceiver();
for (Map.Entry<String, ServerInfo> entry : ProxyServer.getInstance().getServersCopy().entrySet()) {
String serverName = entry.getKey();
ServerInfo serverInfo = entry.getValue();
ProxyServer.getInstance().getLogger().info("ServerName: "+serverName);
serverInfo.sendData("pumpkincore:main", event.getData());
}```
it was successfully sent to waterfall and then returned to the paper plugin but only 1 origin server could receive it
plugin messaging requires hijacking a players connection
if you only have 1 server with players on it, then only it will be able to send/recieve such messages
i have 2 server and all server have 1 player online
2 server paper with 1 same plugin
so, you have 2 servers and 2 players connected through the proxy, each to different servers?
yes
then it should work
You would need o check your listener setup on the backend
I don't really see how that could fail if you acually have 2 servers with players on logged in, they should both get the message
this my listeners
public void onPlayerChat(AsyncChatEvent event) {
event.setCancelled(true);
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("PublicChat");
out.writeUTF(event.getPlayer().getName());
out.writeUTF(JSONComponentSerializer.json().serialize(event.message()));
event.getPlayer().sendPluginMessage(getInstance(), "pumpkincore:main", out.toByteArray());
}
@Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player sender, @NotNull byte[] messages) {
if (!channel.equalsIgnoreCase("pumpkincore:main")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(messages);
String subchannel = in.readUTF();
if (subchannel.equals("PublicChat")) {
Player fromPlayer = Bukkit.getPlayer(in.readUTF());
Component message = JSONComponentSerializer.json().deserialize(in.readUTF());
Component chatRenderer = chatRenderer(fromPlayer, message);
Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage(chatRenderer));
}
}```
I mean, that is never going to work as intended
fromPlayer will always be null on other servers
check logs, but, you probably wanna try printing out what is being recieved in that handle, but, idk
on he surface idk how the other server wouldn't get anything, I'd just expect whatever your chatRenerer method does to blow up, but 
so i just need to change Player to OfflinePlayer right?
idk your logib, but, yea, you'd nee to always have an offline player, also noting that you probably want to send the UUID, not the name, or figure out a better way to handle that so that you're not causing lookups
Is it possible to use waterfall to 'send' players to a Fabric server amidts other servers?
I guess not haha
Bump?
I would recommend using Velocity, the bungeecord environment has almost no support for mods environments
same concept, different APIs, etc
Anything else to note regarding the two?
I mean, with a question as open as that, no
Haha i meant like
Roughly positive/negative things to note about the two? Or when switching from Waterfall to Velocity
Also how much work would switching be? The thing I am mostly worried about is the whole message channel thingy that bungeecord has that I would need to rewrite and figure out again
I mean, it's an entirely new stack which is still in development vs a piece of software which basically hasn't been developed in 10 years
it doesn't cater to java 6
how much that impacts you is going to depend on what you're doing
Ah is waterfall outdated
waterfall is currently EOL
Oh?
I had some setbacks on working on stuff due to health issues, but, I'm especially done with waterfall because theres little you can do without causing issues for plugins in order to actually try to improve it in any meaningful manner
after my last project resulted in weeks of constant changes in order to appease plugins, never again
I see that on the website it says that Velocity is much faster
In what ways is it much faster?
It's built from th ground up from our years of knowledge on netty and around how it works
Does Velocity not support Fabric 1.20.4
proxies and mods generally do not work together well
velocity has some extra support for stuff which can help, but, overall, YMMV, and you are somewhat on your own
wheeen .5 comes, theres some stuff I can work on to maybe improve compatability, but, it does require some help from 3rd parties to support fully potentially
(annnd last time we tried reaching out re modding stuff, nobody replied bar our existing discussion with forge, soooooo)
Fabric is fully supported
Is there a way to add more channels to the list of registered channels that gets sent to a player when they join the proxy?
ProxyServer.registerChannel doesn't appear to affect the channel list that is sent to the client.
you'd need to handle that yourself
where i can find waterfall-proxy for maven?
We don't publish that, you'd need to publish it yourself or find a public maven repo that does
(65f9bd9b2d5bd6481a0648ce) // @sacred coral (@thinker369 / 933208620550737930) has been banned by @trail plume (126975485493248000)
Reason: Quick-banned for sending a message in #waterfall-dev
how to disable waterfall command tab?
don't grant the permission afaik
if the commands are granted by default you would need to set them to false, yes
in my luckperms?
yes
but i still can access it
is there any Event API like PlayerCommandSendEvent in bungeecord or waterfall?
pretty sure the ChatEvent catches that
Are you sure /skin is a command from the proxy?
yes, i have delete all command list from backend server with PlayerCommandSendEvent e.getCommands().clear();
also not sure anymore if this is actually done automatically on the proxy, there might be a requirement to manually filter it out with the ProxyDefineCommandsEvent
ah, wait, I thought you meant the pre command event. Yeah the ProxyDefineCommandsEvent is the equivalent to that
ok thats work
is waterfall still keep send PluginMessage after there any player join?
What? Do you mean if it will send a plugin message after no player is online?
Hey, is there any timeout implemented on ServerInfo#ping?
Last 
No, me last
no, me
Si.

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

💩
woa
how can I block tab completion on 1.12 and 1.13 with waterfall?
please don't, blocking tab completion is annoying as fuck to users :/
I'm going to PR something to Waterfall, specifically tuning one Netty setting to hopefully bring down memory usage which can help with shared hosting and Docker
I've had it in Velocity for a while and it works fine
@lofty ridge i'm just catering to my user base, they want it so they can't have their commands seen
l33t script kiddies gonna see they have bungeetablistplus or something
but i agree it's annoying
I literally just added an event in waterfall for that last night for 1.13
owo
@trail plume out of curiousity, are the Varint21FrameDecoder and prepender just making sure the packet length is written to every packet, and that every packets length is less than or equal to the remaining buffer size?
Yup
tyvm
@trail plume what do I need to provide for event.getCommands().remove()?
The name of the command is the key
thanks ❤
huh, when I try to send data over the WDL|CONTROL channel, i get this error
@frigid kelp plugin messaging channel ?
yes, the plugin messaging channel is WDL|CONTROL
player.sendData("WDL|CONTROL", packet);
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
i am a plugin messaging channel pro as i am able to open books from it 😄
doesn't help, it seems that the error is related to the channel having | in its name
there says literally everything about registering the channel ... @frigid kelp read
The channel should be lowercase and should contain ":". i don't have the priviledge of doing that though
and from the wording, it would seem that this is a recommendation, rather than a requirement
while i hadn't registered the channels, registering them did literally nothing to help
@trail plume sorry for bothering, but do you have any idea why this might be? 👀
@frigid kelp it is a requirement
else it will throw IllegalArgumentException
i tested it before with doing AnnouncementsEverywhere for my plugin, but then it throw an exception that the channel should contain : and should be lowercase
1.13 uses an identifier format for plugin channels
i think it is ([0-9a-z_-]*:)?[0-9a-z_/.-]*
https://wiki.vg/Plugin_channels/World_downloader Regarding channel names: 1.13 has necessitated namespacing the channels, i.e. wdl:init, wdl:control, wdl:request instead of WDL|INIT, WDL|CONTROL, WDL|REQUEST. Support for both channel names has been backported to 1.12, and it will automatically select whichever channels are supported. If targetting older MC versions, make sure to listen and respond on both sets of channels.
@main plume so I can just use wdl:control and 1.12 will pick it up?
Probably if the client is updated
Or just check if the player is 1.13+ and send the identifier format
i'm just checking if the protocol version is <= 1.12 now, thanks 😛
@trail plume Are Javadocs currently being generated as part of the build process for WF?
There is a big issue in Contributing.md from Waterfall: https://github.com/PaperMC/Waterfall/blob/master/CONTRIBUTING.md#formatting - There is a missing ` behind reason (second point)
If so, which command? mvn javadoc:aggregate ?
already fixed @marble flint
Thanks 😄 - didn't want to create a pr^^
@ornate bloom javadoc:jar
not for waterfall currently
I'm trying to get javadocs generating from the delombok'd source. Got it mostly working
Using sourceDirectory like that will change your IDE's source dir, won't it?
Was trying to avoid that.
I was using sourcepath in the maven-javadoc-plugin
That's why it's basically set at the top and then inside the configuration for delombok
It appears to be working fine, IDE seems to be happy with it
Oh, was expecting IDE to complain about duplicate classes.
This is what I've got so far: https://gist.github.com/Byteflux/e10931d901118c62569e53f364b18850
yet another reason to hate lombok, too
:p
also, remember that you can use maven profiles
:p
When I run javadoc:aggregate, it fails because of missing @return's, even though it has -Xdoclint:none
you have it wrong
you want
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
(outside of executions)
Nah, that's wrong for the version of javadoc I'm using
o.O
The version of the plugin Waterfall uses is not properly compatible with Windows
So I'm using 3.x
Not properly compatible on Windows when using a modern version of Maven, I mean.
Looks like that's a valid option according to docs, will try that
I just fixed a nice issue I had by linking bin/javadoc -> jre/bin/javadoc on my mac, javadocs plugin was nooot happy
damn, same issue. still getting doclint related issues: https://i.imgur.com/WwlgfAf.png
Those need to be fixed anyways, hm
wait wtf
is the 2.10.3 in there the maven-javadoc-plugin version?
I have <version>3.1.0</version> configured >_>
current version is 3.1.0
Yeah, and that's what it says in the pom, since I changed it to that. But the output there suggests it isn't using what I've configured?
In which case, kashike's old doclint additionalparams method might work...?
Tried running mvn in the api folder?
Oh, it's done in Waterfall-Proxy, I thought it was API
I was actually running it from Super, running in Waterfall-Proxy produces the same result, though. Except this time it's actually using the right javadoc plugin version 😛
So at least this time it uses the correct plugin version: https://i.imgur.com/ijTTZnl.png
There's a failOnError option, which also... doesn't work lol
So javadoc is exiting with 1, maybe the options aren't getting passed in correctly
Oh, look at the paths, they aren't the path to the delombok'd sources.
So none of my configuration is working
oh my god, I think it worked
gonna do a clean build and try again
no, it simply generated from the normal sources, and now I'm getting duplicate class errors in IJ, too lol
what a pain
Maybe we can just delete the delombok'd stuff automatically as part of the javadoc generation
Yours might actually work in a profile fine
Hm, yeah it might.
Gonna read up on profiles real quick
Oh, looks like IntelliJ by default automatically detects generated sources, so maybe we can break that detection.
Duplicate class issue aside, using a separate profile, seems javadoc:javadoc works. Just need to get it all aggregated.
javadoc:aggregate doesn't work for some odd reason 😛
LOL, found something where someone is using maven-antrun-plugin to generate the aggregated javadocs from the generated sources.
@trail plume Got it working with this: https://gist.github.com/Byteflux/8e73d5a0efec23f06e11a076523e8075
Kinda ugly, but works.
Only one issue, it shows @NonNull annotations twice in the docs
if IDEs can work with that, it's annoying, but it's more useful than bungees
Maybe using a new maven-javadoc-plugin would fix it, or maybe there's a configuration to deduplicate.
Will check some more, but it's progress.
Hm, I don't think I even need to use the aggregate goal there since I'm explicitly specifying each source path. Let's see...
Nice, yup. Didn't need to use the aggregate goal. The whole reason I'm specifying each path is because the normal aggregate behavior doesn't even work for me lol.
@trail plume I can PR this, but do we want to aggregate everything? I think Bungee's aggregated docs only has the API dependencies.
We only really care about the API, especially given that lombok would be kicking us across the board otherwise
Cool, only thing that sucks is we gotta specify each source path explicitly, but whatever.
Also if people want the javadocs for the non-API stuff, the jars are still there.
Man, I was really overcomplicating this, I thought there was more than just the one artifact that needed to be documented, and went down the whole aggregation rabbit hole lol.
When in reality it's just the one API artifact lol
Feel like an idiot, but whatever >_>
@trail plume Alright, good to go. I went down an unnecessary rabbit hole with aggregation when it was totally unnecessary lol.
If we ever want to generate docs for more than just the API artifact, at least I know how to do it now.
I actually have another small POM change that probably should be made, but it's a separate issue, can do it after that one gets accepted.
Just trying it, and at least the javadoc site isn't working
wait where can i access waterfall jd?
They're not currently published, that's what I need to look into the PR for
then what was the method to set config backend?
i don't have ide around
basically i want to make a pr which lets me to set waterfall's config
because currently it's hardcoded to use waterfall.yml
i'm thinking about 3 possible ways:
- use the backend/provider what you can set via bungee api and prefix keys with
waterfall_(that's what i'm doing) - different method to set the backend/provider for waterfall specific
- deprecate the current setter, add enum which has bungee/waterfall config values and add a new method to set the backend but first parameter is that enum value
are we somewhere with the waterfall JDs that I need to be poked into publishing them or not yet
I tried the PR and it didn't work, but I get a feeling that I just used the wrong command now
all good, mostly I wanted to make sure it wasnt all done and I was just not paying attention
@trail plume What command were you running? I put the changes into the deployment profile alongside where the sources and javadocs configuration, so it runs under that profile.
I assume the typical build process for WF deployment is: mvn clean install -P deployment
That would build the docs as well as the sources jar
Docs would be in Waterfall-Proxy/api/target/site/apidocs
Actually, might be in Waterfall-Proxy/api/target/apidocs, without the site
ah, that got it, I was calling javadoc manually, guess that was derping it
If calling it manually, think you need to do mvn javadoc:jar -P deployment
but yeah it should all happen automatically as part of the deployment build process if you do clean package or clean install or clean deploy or whatever.
With the deployment profile.
Oh, what was the other change that you wanted to make after?
The "WaterfallMC" link at the bottom in the JD points to github.com/WaterfallMC
I assume it grabs that somewhere from the pom
ah, probably
So was figuring that would be a good opportunity to just update the POM to point to the right places now that WF is properly under PaperMC
electroniccat is gonna go rogue and fork waterfall back out
lol
BungeeCord apparently has 2 separate links to javadocs lol
One to the api artfact's javadocs, and one to the chat artifact's
I could make that aggregated if we wanted.
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
Well, it didn't blow up
yay
I thought I moved the IRC notif to #waterfall apparently not
byte cant no
you can add his GH name to the perms at the top of the proj and he'd be able to
Just let me know if you guys wanted to aggregate more JDs with the API's docs, I know how to do that now. Most of the time was spent learning how to do that because I thought that's what we wanted 😛
Seems like BungeeCord intends api and chat to be documented
If we wanted, it would look like this: https://gist.github.com/Byteflux/d93084b6ba0c07d67bd1dc510208e842 and the aggregate api + chat docs would be in Waterfall-Proxy/target/site/apidocs
I mean, if it's that easy to do, I'm wondering if it kinda doesn't make sense not too, only reason I didn't really care about aggregation was the whole potential of others being a pain
I'll probably also look into fixing the javadocs and maybe bumping the javadoc plugin, wondering why doclint doesn't like to be disabled though o.O
Yeah it really is that easy, I can make a PR for you to try out if you want
wrt doclint, probably just need to fix whatever it wants us to fix
If you wanna submit a PR for it go for it, api and chat are the major ones, I can't really see anything of consequence
Cool, doing that now
done 😄
Oh wait
I messed up 1 thing, I forgot to do inherited => false lol
That makes the aggregated javadocs execution run for each module if I dont
Gonna force push to the feature branch
Alright, fixed. PR should be good now.
Would it be worth delomboking the sources jar? I have no idea, I assume it doesn't matter if you have the Lombok plugin for your IDE.
Actually, it's just a sources jar, doesn't matter any way. Lol
Wish I knew why @NonNull occurs twice in the JD >_>
Made another small change to the PR. The doctitle defaults to ${project.name} ${project.version} API so for the aggregated docs it was showing Waterfall-Parent 1.13-SNAPSHOT API, fixed it to show as Waterfall instead of Waterfall-Parent.
Fuck me there's a windowtitle too lol
Same issue 😛
y u do dis javadoc
I do kinda wanna look into creating some dev scripts or something, saying that, I might get into playing with docker some more and see if I can get something decent working there
here @bleak current
I've transcribed for you
#!/bin/bash
MEM="256M"
EXTRA_ARGS=${EXTRA_ARGS:=""}
JAVA=${JAVA:="java"}
if [ ! -f Waterfall.jar ]; then
curl -L -o Waterfall.jar https://papermc.io/api/v1/waterfall/1.13/latest/download
fi
if [ ! -z "${JREBEL}" ]; then
EXTRA_ARGS="${EXTRA_ARGS} -agentpath:/home/mark/.IntelliJIdea2018.1/config/plugins/jr-ide-idea/lib/jrebel6/lib/libjrebel64.so"
fi
if [ ! -z "${MIXIN_DEBUG}" ]; then
EXTRA_ARGS="${EXTRA_ARGS} -Dmixin.debug=true -Dmixin.debug.verbose=true -Dmixin.dumpTargetOnFailure=true -Dmixin.checks=true -Dmixin.hotSwap=true"
fi
if [ ! -z "${LOG_DEBUG}" ]; then
EXTRA_ARGS="${EXTRA_ARGS} -Dlog4j.configurationFile=log4j2_dbg.xml"
fi
if [ ! -z "${LCL_DEBUG}" ]; then
EXTRA_ARGS="${EXTRA_ARGS} -Dlegacy.debugClassLoading=true -Dlegacy.debugClassLoadingFiner=true -Dlegacy.debugClassLoadingSave=true"
fi
if [ ! -z "${ORION_PRELOAD}" ]; then
EXTRA_ARGS="${EXTRA_ARGS} -Dorion.allowPreloadLibraries=true"
fi
${JAVA} ${EXTRA_ARGS} -Xms${MEM} -Xmx${MEM} -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions \
-XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 \
-XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 \
-XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -XX:+AlwaysPreTouch \
-Dcom.mojang.eula.agree=true \
-jar ./Waterfall.jar \
${@}
if [ -f .dorestart ]; then
echo "*** Restart requested ***"
rm .dorestart
exec ./launch.sh
fi
:D
damn lol
idk how long i've used this script though
i remember intellij 2017.4.2 or something
or .2.4 or w.e how it was
as i was updating the jrebel agent path manually there
oh well i miss jrebel, sad that they killed free plans
Dcom.mojang.eula.agree=true
waterfall
So, we do need to look into bumping the javadocs plugin down the line, guess I'll work on the javadocs and fix them for doclint sometime
(Looks like they moved the javadoc bin at some point, and the older plugin doesn't expect/handle that)
When I get some more time I can maybe help look into bumping it
Oh nice the PR was merged. Yay, hosted Waterfall API docs coming soon? 😃
Hopefully, we should be ready to with that when you can Z
@ornate jasper i simply copied that from my server launch script and replaced jar file name :p
there are other stuff which don't make sense: mixins, orion (paper mixin loader), legacylauncher debug flags etc.
@trail plume I'm mostly looking at updating the Paper one to use the new API and changing the implementation of it so the server-portion defines how rather than hardcoding it in the API
nothing really user-facing
so /waterfall can be a thing with little worry from me about "how it matches"
🔠 🌮 so that
can 
all I remember is electronic wanting to hold off on a waterfall command to see what i did with paper's
and my thing was Im not actually changing anything about how the user uses it
but idk if that was the question or not so I was waiting for another reply
I feel like I'm missing part of the conversation 
Yea, I was mostly wondering if something fancy would pop out of it, but being able to create a heap dump in waterfall would be handy, and the fact that waterfall doesn't have a way to check if there are any updates just feels dumb
@trail plume is there another repo to get bungeecord-chat? sonatype repo is throwing a bad gateway rn
Could use the paper repo, should be cached there
url?
tyvm good sir
Hi guys. I have a question. Is there a way to passthrough the packet using method net.md_5.bungee.protocol.Protocol.GAME.TO_CLIENT.registerPacket<DefinedPacket>?
I'm trying to make bungee gui plugin, but as far as I get it, using that method make every packet of that id, even from spigots, go through the my subclass of DefinedPacket
Basically, I want to catch and read/write packets that's relevant to my bungee gui plugins, but let others untouched.
ATM I use
Protocol.GAME.TO_CLIENT.registerPacket<DefinedPacket>(
PacketOpenWindow::class.java,
map(ProtocolConstants.MINECRAFT_1_8, 0x2D),
map(ProtocolConstants.MINECRAFT_1_9, 0x13),
map(ProtocolConstants.MINECRAFT_1_13, 0x14)
)```
to register, and
```java
player.unsafe().sendPacket(new PacketOpenWindow(BUNGEE_WINDOW_ID, windowType, windowName, size));``` to send packet
Honestly better off generally using a packet plugin for dealing with all that stuff
Which ones?
Like viaversion? Well, we have to have it on spigots, and I'm not sure if there is a way to make via on both bungee and spigots working together properly.
Quick google suggests that all of the tools for that broke \o/
But yea, that looks about right for registering packets
The thing is: my code from above looks into every PacketOpenWindow that comes from the person, and you have to implement public void read(ByteBuf buf) method... But I want to passthrough packets that's unrelated to my bungee gui plugin
good luck with the gui plugin lol
minecraft inventory handling is a major pain in ass
I'm looking for thing like"if this PacketOpenWindow or PacketSetSlot is related to bungee gui, process it. If it's not, pass it through"
i hacked MCProtocolLib on top of bungee and got a whole set of other needed packets
well you need to inject your own packet handler into netty pipeline
You're going to have to read it if you use bungees mechanism
(You'll also need to write the write method too)
Basically, if I want to go that way, I have to inject, right?
You're going to need to read part of the packet to check if it's relevant to you or not anyways
kinda outdated
but might help
But what will happen if I check and then put that part to where it was and don't read anything else?
mikroskeem, thanks, I'll take a look at that.
it's for 1.12 and won't work with 1.13 so be careful :p
Well, once you have the packet and worked out you don't care, you can technically skip the bytes, but that would involve adding logic inside of your packets to check if it cares, which 👎
Wait, you mean if my read method will be empty, packet will be processed as usual?
if your read method is empty is will throw an exception
and i'm not sure if i need to inject other versions as well somehow - bungee supports 1.8-1.13 while i inject only one version
But what if I'll override it with empty method or one that just skips all the data?
Bungee checks that the packet has been fully read after it's been processed, at minimum you'd need to read that entire stream
Thanks
Ah, btw, I think I've found a bug
Protocol.GAME.TO_CLIENT.registerPacket<DefinedPacket>(
PacketSetSlot.VV8_12_2::class.java,
map(ProtocolConstants.MINECRAFT_1_8, 0x2F),
map(ProtocolConstants.MINECRAFT_1_9, 0x16)
)
Protocol.GAME.TO_CLIENT.registerPacket<DefinedPacket>(
PacketSetSlot.V13_0::class.java,
map(ProtocolConstants.MINECRAFT_1_13, 0x17)
)```
and I've got windows property packet (0x16 in 1.13) caught by ``PacketSetSlot.VV8_12_2``
Also, come to think of it, you'd need to create a copy of the packet buffer and basically write it back in the write method
Don't do that
Bungee will basically map all protocols between your current mapping and the next (or, to the end of the protocol versions)
There should be a set of read/write methods which take the protocol version, then you'll write the version specific stuff in there
(and basically if/else the correct data for the correct proto version)
I mean, that code says that PacketSetSlot.VV8_12_2 has to trigger when 1.9 client sends 0x16. But it triggers when 1.13 sends 0x16 as well
Because that's how that method works
You're registering a packet for 0x2F for 1.8-1.8.8, and 0x16 from 1.9-latest
Bungee requires those to be a single class
test
bop it
beep, boop, beep, boop ?
.$mgmt chan config #waterfall-dev -l true -c true
Config change for '#waterfall-dev' on 'spigot'
Old values: logs | commands | reminders | seen
New values: logs | commands | reminders | seen
why bungeecord dev community is so small ?
because there's more spigot servers than bungeecord proxies, and probably because you can do 'cooler' stuff with spigot
It's a proxy, it does proxy things
The API is also much more obtuse than bukkits, e.g. use of lombok means that the bungee docs are incomplete, that with how much can actually be moved over to the proxy without too much effort, seals the deal, really
People cant live outside the API.
It's much more convenient, other than where needed, to live on the server
@grizzled thistle with the plugin messaging channel you are able to send a message to do the 'cooler' stuff with spigot, but bungeeside
I'm aware
I never said bungeecord was uncool, I use it. I was just trying to give a explanation to why people might not use it as much as spigot.
@trail plume you can delombok bungeecord, but then merging would be a pain
We've already got delombok'd javadocs here
well that's none of paper's business :p
But the fact that bungees api docs doesn't have them means that stuff is missing from the docs
it's your responsibility to keep up ;)
And that's pretty much the downside of patches, if something around them changes the patch fails to apply and needs to be merged manually
also cat did you notice my issue?
opinions?
We'd need to break up Configuration into some form of delegation to the Bungee/Waterfall configs
Also not fond of the idea of an enum for stuff like that as it seem kinda messy
@mental dagger your reply was unneeded, you do realize it sends an email to every repository watcher?
hmmm
delegation... how would that look like?
so i can spam ur mail
Well, I think it's delegation
More, existing Configuration object calls out to another object
i mean yeah idea but implementation-wise?
Being that WaterfallConfig currently extends bungee
convo derail reee
We'd need to at the very least move WaterfallConfig off to its own thing vs extending bungees
yeah
because everyone who forks has to make previous fork's config class abstract
and that's what i'm not quite fond of either
hmm
why not implement json configs
gson is inside bungeecord, its not a bad idea
people struggle with yaml
well, yaml and json
We're not switching to a less human friendly format.
yaml and json
The API mikro is planning would let you do that with a plugin
that's what i'm kinda doing myself
wait, bungeecord current;y has configuration adapters
yes
and the only one is a YamlConfiguration
yes
hmm if we do one more ? a JsonConfiguration for example
might as well make a plugin what does this for you
PropertiesAdaptor ¯_(ツ)_/¯
actually, bungee doesn't allow you to register ur configuration adapter
it just haves YamlConfiguration and thats it
also i think you're missing a point completely
i'm speaking of proxy-specific configs
yeah ik
i am not talking about this rn
what if
we abstract ConfigurationAdapter with the needed get methods and then do a addAdapter method
no wait that will break things, nvm
I don't see how that makes sense
tell me when ivan makes sense lol
If you wanna work with gson, work with gson
i mean, allow ppl to register their own configuration adapters, not just the bungee offer
You don't need to register them
json isn't that hard, just format it pretty and give the variables good names, people should be able to figure it out
also
ConfigurationProvider.getProvider(YamlConfiguration.class).load(file);
replace YamlConfiguration with one you want to use
also gson is the best, love that shit, I use it all the time
and that's like... it?? :D
And honestly, ConfigurationProvider is just stupid
you don't need to register them
lol
going back to old topic - there's one way too
hey, you don't need to use ConfigurationProvider with bungee configs
you need to implement ConfigurationAdapter interface
and needed get*(String key, T def) methods
you don't need to use bungee api at all to create config files? :D
how ?
if you want json, use the gson library?
i mean yaml
if you want yaml, stick to what bungee offers
or use snakeyaml directly?
and how do i save, load and things with gson ?
i should make my own serializable of file ?
gson has more fluent api
can't you read O_o
for short: to save, take object and call Gson#toJson
then store serialized contents to the file
to load: Gson#fromJson
supply class and stream/file
so i need my own serializable of config ..
not sure what you mean by this exactly
but that's what gson kinda is meant for - object mapping?
gonna show u example with chat
that's custom serializer
you don't really need that
but if you're going to redesign config class structure at some point then you'd need atleast a custom deserializer
where can i find waterfall javadocs/
I don't think Z750 got to publish them yet, not sure if he noticed by nudge
I noticed Im just spiraling trying to get everything done and that was a casualty
I will do it soon
When you do get around to it, it'll be the docs in Waterfall-Proxy/target and not the ones in any of the modules
"yay he finally did it totally didnt take like a week wow so good"
thank you thank you
youre not wrong
links in #404345080917262369 are broken now
there's always something with you people
:dansgame:
...now that I think about it, there's a better way to implement this. It's called a "binary search tree" and TreeMap/TreeSet is the canonical Java implementation. Also, insertions are not O(n) but more like O(n log n)... ¯_(ツ)_/¯
tbh if you want a lower memory footprint but high sppeds i'd just use an open addressing solution
unless you want the sorted aspect
I don't believe we would care about sorting it, we just don't want the memory suckage caused by Maximvdw's shitty but viral plugins
what's the set storing?
I believe it's scoreboard team players
oh
What features that waterfall have more than bungeecord ?
shouldn't a BST insert be O(lg n) ~= O(h)
how'd you go from O(n) to O(n lg n)
that's even worse
array backed
gross? wtf?
the set is array backed for memory efficiency
no it's not
the set he linked is
thought he was talking about java's treeset/treemap
no that's log n for sure :>
I still think you can get away with an open addressed table and basically have the same memory efficiency
if the backed array in the current set isn't always trimmed to size at least
we could also get away with burning leaves for fuel efficiency
ur retarded
thanks
Is there a way to see what player was used to send a plugin message from Bukkit?
i'm seeing getSender() in the event but it returns ServerConnection...
see the reciever
@ornate jasper can't explain, just see my code
if (!event.getTag().equalsIgnoreCase("ae:announcements")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
String subChannel = in.readUTF();
if (subChannel.equalsIgnoreCase("TestReceived")) {
if (event.getSender() instanceof Server) {
Server server = (Server) event.getSender();
ServerResponce.addResponce(server.getInfo().getName(), true);
return;
}
if (event.getSender() instanceof ProxiedPlayer) {
ProxiedPlayer sender = (ProxiedPlayer) event.getSender();
ServerResponce.addResponce(sender.getServer().getInfo().getName(), true);
}
}
}```
Yes, reciever should be the users connection
@sly crown Sorry for any confusion! A BST insert is O(log n) (assuming a balanced tree), I should know this because I had to implement it for a college project. I was talking about the bizarro LowMemorySet in Waterfall. More specifically, why does it still exist?!?
TBH I'd rip it out and replace it with a fastutil collection... it would exhibit better performance and fastutil won't allocate as much waste compared to HashSet and friends.
Is there a way to check what ip the player tries to join using ProxyPingEvent? I am trying to check if which subdomain they ping, e.g. Survival.server.com or server.com or play.server.com
^ + getVirtualHost on the PendingConnection
ah ok
Also by blocking call, do you mean that the ping doesnt return anything to the client?
blocking as in it will take time due to io
what kinda time we talkin about?
expect seconds
It will basically contain whatever they used to connect
will it slow the response to the client?
if they connected with an IP address however, getHostName will take a moment as it will preform a reverse lookup
Well, yea...
If the response is blocked when the server needs to go look some stuff up, the client won't get the response until it's done
ah ok
wat r u doing with the name anyways
i want to make a maintenance mode that shows players in the motd depending on what ip they try to connect on
but i may just make it general
I think he was asking what the target server's host was, not the player's?
oh the target server's
ye but if it takes seconds then it may get annoying to ppl
The vhost shouldn't be blocking
oh
vhost isn't ye
that info is got from handshake packet
😮 and that returns the serverip that they try to ping? e,g, survival.server.com?
getHostName may block if they connected with an IP address vs a host
well you don't need to check using getHostName really
The vhost could be an IP, sure
if purpose is to respond certain message on certain hostname
Yeah, just ignore any unknown vhost
ok
Pretty sure we're talking about the Server Address in this packet: https://wiki.vg/Protocol#Handshaking
mfw it sends that
So it can probably be any value, just need to validate it on your end which values you want to act on and how.
is it bad then that it sends? :p
Bungee uses vhosts to send players directly to specific servers if you tell it to
I mean, they don't need it
Can be good
It's handy that they do, but 🤷
imagine if they removed that one day
for no reason
imagine the whining that comes from this
😮 could i also use .getPort for this?
Probably, it's part of the handshake
ok cool
You just need to remember that custom clients can send whatever they want
oh?
It should not be considered trustworthy, as far as I know.
hmm
oh true and i block the ports to public cause proxy connection
i am thinking something like this
if(event.getConnection().getVirtualHost().isUnresolved()) return;
String s = event.getConnection().getVirtualHost().getHostName();
if(s.equals("survival.server.com"))...
Does this cover the unknown virtual hosts?
Well, yes I guess, since you're "validating" the input. Just don't blindly trust it, is all.
mfw
But let's say you have survival.server.com and creative.server.com which point to two different IPs, a player could still technically connect to the IP of creative.server.com while sending the vhost of survival.server.com.
But if that doesn't matter then whatever.
oh
to my understanding, isUnresolved will potentially always return true
always, unless its a known virtual host?
Yeah it would be silly for Bungee to resolve it
As that would be potentially blocking
Looking at the code as it's an unresolved host, it will actually just return the hostname that was passed to it
oh ok
What Bungee does: this.virtualHost = InetSocketAddress.createUnresolved( handshake.getHost(), handshake.getPort() );
I'd cache the lookup result I guess at this point
There's also no functional need for Bungee to resolve it.
It's not even used in Minecraft
Bungee only uses the name to send players directly to a server
If configured to.
And for that it doesn't need to resolve it
I dont think it matters if they try to connect survival and with creative ip cause when its under maintenance it will block joining altogether
It won't block
i will be blocking the join event
private String getHostName() {
if (hostname != null)
return hostname;
if (addr != null)
return addr.getHostName();
return null;
}
that other hostname call can be blocking?
All it's going to do is return back the string that was used as the hostname
what type is it
huh :>
As you can see, when Bungee creates it: this.virtualHost = InetSocketAddress.createUnresolved( handshake.getHost(), handshake.getPort() );
So getHostName() on virtualHost won't use the blocking one, ever.
Bungee doesn't care if it's a host or an IP address, it's just going to create an unresolved INetSocketAddress, of which getHostname will just return whatever the host was
Is it best to cancel PreLoginEvent or LoginEvent?
Uh
The earlier the better? Depends on what information you need
PreLoginEvent won't be complete in terms of certain information available to you.
But if it's enough, then sure
Looks like even basic things like UUID aren't available in PreLoginEvent
Since it happens before authentication
just checking perms
but does that mean it will handle requests made by offline clients?
It's fired whenever a client sends a login request packet
LoginEvent is probably what you want most of the time.
Thx a tonne 🙂
Looks like my user handling code in my plugin uses that too
nice
with that "[Proxy] proxy is restarting!" message, is there a way to change it?
Yes, grab the messages.properties from the jar and modify it
You should be able to shove it in the folder where the proxy is ran from and it shooould just read it
ah ok cool, was just worried that i'd have to do this every time i update waterfall xD
No you do it once. You copy the file into your server folder
Ok awesome
Does Waterfall have a better feature than PluginMessageChannel ?
Nope, use redis or rabbitmq
Does it harder to code than PluginMessageChannel ?? I will create matchmaking system of Arena Manager
not gotten to toying with it yet, but it's basically the same concept
they're both harder than plugin messaging
but more reliable
if you can make sure that rabbitmq or redis runs properly
<repositories>
<repository>
<id>waterfallmc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.github.waterfallmc</groupId>
<artifactId>waterfall-api</artifactId>
<version>1.13</version>
<scope>provided</scope>
</dependency>
</dependencies>
``` how to use ? <version> for 1.13.2 I don't see any information in waterfall github
1.13-SNAPSHOT is for 1.8 - 1.13.2 but dont send bossbars on 1.8
check the protocol version before sending bossbars cuz they dont work on 1.8
@tall pike
Yep My server allow 1.9-1.13.2 Thanks
how come waterfall uses patches? and not just a normal fork
easier to maintain, tbh
hmm
isnt a git-generated patch set essentially equivalent to a new branch? not going to terrorize you all with this, sorry lol
It basically makes it easier to maintain the patches, as they'll always be distinct patches, vs having to merge stuff in consistently and making stuff like removing features if ever needed much more work than needed, which as upstream is always making changes conflicting with ours, it just keeps stuff clean
ahhhh that makes sense
and yes, we basically just rebase over any upstream changes
otherwise it'd just be a collection of thousands of commits. makes sense 👍
linux does it (managed patch sets) lol
i will show myself out.
Yes, but the level of co-ordiation that project takes is crazy, and they basically have people dedicated to dealing with "PRs" to merge in those changes into their respective trees
yea, had to try to fight up that stream once 🤦
for my super important patch about better device tree support for this i2c chip that.... literally nobody cares about lol
does upstream apply waterfall changes lol
occasionally they will, so the patch is removed from waterfall
or the patch is changed to improve the upstream feature
I'm trying to make a fork of Waterfall, but how would I go about making the first patch with all of the pom changes?
Using Waterfall as a submodule
Tag if you have an answer
see Travertine
@feral parrot
you can use that freely as a base of your fork of waterfall
because that's what travertine essentially is
Ok, thanks! Wasn't sure.
use the --author flag with --amend or just edit the patch manually once you've rebuilt the patches (and then patch/rebuild patches)
I forgot about Google, thanks tho
When developing a plugin for Bungee/Waterfall, should I run database queries async or does it not matter?
you shouldn't think of a proxy as minecraft
there isn't a "world loop" thread
various things may happen in various places
don't block things that shouldn't block :^)
can anybody explain why this is a safe/sane choice here?: https://github.com/SpigotMC/BungeeCord/blob/d591d0ed291e11772b612c3b247c5b053a5eb037/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java#L24
I understand the allocator (via ByteBuf::copy) is probably going to give you a new buffer thats aligned with... page boundaries or something, and thus probably give you some extra capacity needed for varint rewrite. but seems like an unsafe assumption?
cause to me... it looks like the varint entity ID rewriting has just been skating by for years based on the fact that it usually gets some extra bytes (ByteBuf capacity) on the end of the new "copy" buffer
copy creates a brand new ByteBuf with the contents, vs a "sliced" view reference
I'm not a pro in netty related stuff, but I'd imagine that if we started trying to write to a sliced view, it would end up blowing up outside of there
yea, the slice puts a hard 'capacity' on it
@lyric oak It has a lot to do with Netty's pipeline handling. The received ByteBuf has to be properly released, otherwise you will have a memory leak. Another related factor is entity mapping, which has to write new VarInts, which can be 1-5 bytes. It's tricky to get it right.
the copy... is technically just something "as large" as the original, or bigger. and judging by how the entity remap packet rewriter works, it looks like it relies on it being slightly larger
It has nothing to do with the size. Netty ByteBufs are dynamic.
hmm actually thats write, ByteBuf::copy would probably produce something expandable
Aside from the ByteBufs you get from Unpooled.wrappedBuffer(), which are fixed size, your standard ByteBuf can be expanded (or shrunk) to any size
idk why, but i imagined ::copy would call one of the ByteBufAllocator allocators with maxCapacity set
still feels like undefined behavior lol nothing in the ByteBuf::copy docs says it'll be an expandable buffer
but also not sure what allocator bungee is actually using, so... i resign lol
i just hate the bungee rewriter 😦
yes, been allll up and down the netty docs lately
last few years actually (more so lately).
But to answer your immediate question, this is how BungeeCord does it. It's using the standard Netty pooled ByteBuf implementation: https://github.com/netty/netty/blob/4.1/buffer/src/main/java/io/netty/buffer/PooledDirectByteBuf.java#L391
You may be interested in https://www.velocitypowered.com, which is my project.
ahh so it does set maxcapacity
and its the maxcap of the buffer it came from 🤔
that makes sense.
hacking in PE support on my waterfall branch, ran into issues with buffers that couldnt expand (also ran into this with PS bungee PE support). raknet in both of those cases was producing sliced buffers already, they have a much smaller maxCap
Velocity doesn't do any entity ID remapping (Waterfall recently gained this feature, too, behind a config option) but Velocity has it integral to the design.
So it's allowed me to do some optimizations.
yea did run into that, would be great to get rid of that remap logic 😦 seems so goofy to have to do all of that, so glad to see theres a way out (resending Login right?)
yea, working with the PS team on their PE branch (coming along rather nicely, actually)
I tried that... no luck, but the NukkitX people are picking up my work on this. https://github.com/voxelwind/voxelwind/tree/master/server/src/main/java/com/voxelwind/server/network
but also doing my own weird hacking with PS bungee, raknet, and now my waterfall branch for some reason lol
hrmmm
i do actually have it in production, with PS bungee and PS (mcpenew branch). actually works!
but using the PS bungee plugin was causing some weird issues with some plugins. you cant quite hack-into the right bungee event flow using a plugin, so figured it'd be best just to hack it into bungee/waterfall
our PC network couldn't be moved over to MCPE with ProtocolSupport
we'd need to go from the ground up, really
yea its definitely not the... "end all" of MCPE options 😦 but its an interesting option depending on the kind of content for your network
our players are just happy to have a decent survival experience without realms lol
which would be nice, we could eliminate some technical debt
(despite the bugs and client crashes)
getting rid of tech debt is always nice lol
but... working on PS PE, im racking up more than ever now lol
minet?
yep
ohh right, i think i saw you in the discord there
i think, in too many discord now... they just blur together. (this is the r/admincraft discord right?)
This is the PaperMC Discord.
😛
It also happens I'm in the admincraft one, too.
yea think i first ended up in the paper one from there, now im just... in some sprawling mess of chats now
well anyways, sure you'll see me lurking around while i finish my waterfall fight lol depending on how this goes, might try to get native PE protocol baked into here (currently we're still relying on the spigot ip-forwarding stuff, and the ProtocolSupport encapsulation protocol)
its still the same protocol, just whether or not we connect over TCP or UDP. I just dont have a good raknet client built and tested yet lol
ah yes, they have the fabled slice() instead of copy() 😄
i have run into velocity before... forgot what the changes were tho
(lol and heres my MinecraftEncoder https://github.com/yesdog/Waterdog/blob/waterdog/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java#L40) the PE rewriter i wrote does everything "in place", so i just wanted the extra header bytes anyways
(and thats the distro repo, still need to settle on a set of patches for my waterfall fork)
(current development diff from mainline waterfall: https://github.com/yesdog/Waterdog/compare/0ff26a0fb6b82b251a0eaae990b6bb7d33c4ee32...waterdog?expand=1) loootttsss o' code 😄
is velocity a fork, or just a total rewrite?
It is a total rewrite
With waterfall, I might actually splice that if entity remapping is disabled, I recall tempting to do it, but not 100% sure if I did
Hm, apparently I didn't
k
there're something wrong with Travertine
when i'm using Travertine
(If i use BungeeCord252 it works fine)
@night grotto @trail plume @lofty ridge
🗡





Kicking players who using 1.7 client
(when i'm using Travertine
FIXXX PLEASSEEEEE
you know there are like 3 listed rules right
in this guild where we allow just about everything
- Please do not ping project staff, contributors, or notable persons directly. Ask your questions to the channel flat out.
If you're going to be an ass and ping everyone, at least have the decency to fetch the minimal amount of information needed instead of expecting us to spend the next 20 minutes trying to fetch information out of you so that we can even begin to diagnose your issue.
big oofers
So If I am using AuthMeBungee dev build and AuthMe dev build, should I use Waterfall dev build? @trail plume
I mean, all versions are technically dev builds...
But, I can't exactly shove any recommendations for you on versions for plugins which have literally nothing to do with me
i remember that waterfall had asm event executors patch (in disabled patches folder however)
why was it disabled?
or removed rather
in java 1.8+ its only marginally faster than reflection with it practically auto generating classes in the jvm just like ASM, don't know if this is why though.
In fact, the auto-generation is done by ASM
@bleak current I believe the actual reason was because it did not play nice with plugins. Obviously, Waterfall has to take great pains to ensure compatibility with BungeeCord (just like Paper does for Spigot), so it had to be backed out.
I think that's the case, since I was around for the patch's removal 😉
I recall some story like that around it, tbh
Think I got the story told by jamie or somebody
hey all, got a quick licensing question. So, I have a waterfall fork right now, and i have another github repo that houses the resulting modified bungeecord. The second repo is distributed under the original md_5 license, and the waterfall fork keeps the original MIT license. Does publishing the source for the resulting build (the second repo) violate the terms of the Waterfall MIT license?
ugh, writing it out, i realize how lazy im being. ill just keep the patch fork
If you're managing a waterfall fork, you'd be better off forking travertine and keeping your patches in there
oh interesting
why travertine specifically? the 1.7 support is nice i suppose
the... not having hundreds of patches hanging around is nice too
It has all the tooling there to maintain your own fork of waterfall without having to merge patches and stuff
yea thats pretty nice. plus im getting another free version out of it lol lots of conflicts in the same areas, which i... think is good
hmm not sure which way i want to go
works fine with travertine still, after... resolving the many Protocol class conflicts
https://github.com/yesdog/Waterfall/tree/travertine/Waterfall-Proxy-Patches there we go. now its got PE support. Vanilla Bedrock Alpha server, 3rd party servers, and ProtocolSupport PE encapsulation
only ~3000 loc 😢
and i didnt check if it broke 1.7 java lol
anyways, is there anything about hosting the 'patched' BungeeCord repo that would violate the waterfall license? i think its still fine with the md_5 license (and ill eventually get rid of that repo probably)
what
nice @lyric oak
fyi you don't need to actually use travertine patches
see my fork
.g mikrocord
(DiscordBot) http://www.stofflexikon.com/mikrocord/741/mikrocord.html -- Mikrocord bei stofflexikon.com: "Alle Informationen über Mikrocord im Stofflexikon. ... Mikrocord. ---> siehe auch Feincord,Babycord. Cord bei stoffe.de · Ma · MAC · Madapolam ·..."
Alle Informationen über Mikrocord im Stofflexikon
.g mikroskeem microcord
(DiscordBot) No results found.
OK
@lyric oak may i borrow your patch? :p
why is this needed
also @lyric oak indeed, it's not needed to use patches like Waterfall or Travertine - they're used as a workaround to maintain upstream changes more easily
might be worth mentioning that native libraries do not work with this patch at all
i don't know how netty bytebufs work really but basically something tries to get memory address of bytebuf and then throws an error
@bleak current i remembered in the middle of the night that i forgot to do the 'ensure direct buffer' checks for encryption
going to try and get that fixed quick. and sure! can definitely use the patch, thats one reason i still wanted a fork with the patch available
can you also answer to my "why is this needed" question? :p
also is there a way to detect somehow whether backend server is in online mode or not
bungee throws loud error about this generally
[14:53:47 INFO]: [CPT MarkV] disconnected with: Kicked whilst connecting to lobby: This server is in online mode, but no valid XUID was found (XBOX live auth required)
that's what i got
actually uh
yeah never mind, "kicked whilst connecting to lobby" implies that proxy verified the online mode fine
that one line is needed because the PE cipher key comes in longer than whats needed for the IV. only need the first 8 bytes, PC does just 8, PE does... 16 i think
and yea, the backend servers always need to be offline still. if you're using ProtocolSupport PE, it'll use TCP and the normal IP forwarding stuff
(for vanilla and.... nukkit etc, just need to put them in normal offline mode)
of course, i simply forgot that i had my backend server on online mode
and then restarted proxy/server 4 times until i realized that
yea its actually... very similar flow to java
added bonus of- you can use XUIDs in offline mode still which is neat
can you also make prometheus support optional?
e.g as a separate module or something
yep
definitely still lots of cleanup to do
and... getting my repo situation situated still >.<
also, its currently doing the PE "server transfer" for server transfers right now. its capable of doing it the normal way, but theres some things i need to clean up to get it to work with vanilla to. will make it optional either way, there's no other way to reload resource packs and all that
(entity remapping and all that is already done and functional)
yeah noticed
i installed mcpe on my phone to test it out
https://github.com/mikroskeem/MikroCord/blob/master/Waterfall-Proxy-Patches/0023-Waterdog.patch here's my applied patch btw
if interested
tbh it applied more cleanly than i expected
especially Protocol class
yea, theres not really a "ton" of modification, just lots of new files and new lines
going to break the patches down into 3 parts too. the "waterdog" renaming, the "modified" part, and "additions" part
hmm yea, that part might be tricky, but its at least pretty easy to fix the conflicts
ah, i see
hmm ill make some issues on my fork lol feel free to add any new ones if they come up
i think the cleanup might take longer than the debugging 😭
i'd like to fix that bytebuf issue rn
but i have no idea how
i have minimal knowledge about netty lol
you could just tell me what to add where
if it's 5-10 line change
but eh, you decide :p
christ, broke something else. yea let me get you a gist
