MultiChat - The essential BungeeCord-Sponge chat management system

This is a discussion topic for the Ore project, MultiChat. View the full project on Ore for downloads and more information.


MultiChat - Sponge Bridge

The essential BungeeCord chat management system has now arrived for Sponge!
Want to link together multiple sponge servers using BungeeCord? Now you can adjoin their chats, send private messages, make group chats, talk to other staff members, create announcements, bulletins and so much more!

Simply drop this JAR file into your sponge server’s “mods” folder, and also into your BungeeCord server’s “plugins” folder and you are good to go!

Find our main thread at: https://www.spigotmc.org/resources/multichat.26204/

4 Likes

Works out of the box! Great plugin.
Requests: Add Prefix and Suffix support.

Hi there! Glad it all works for you :slight_smile:

By prefix support do you mean the ability to set them from the plugin? If so, yes it is something I could look into.

But if you mean the ability to use the prefixes you have set On sponge then this feature should already be there haha. So if you are having issues with that feel free to drop me a message and I’ll try and figure out what could be going wrong, I’m guessing it’s probably down to the plugin setting the prefixes but it could be configuration.

Once again, thanks! And enjoy!

Hi!

Thanks for the fast and kind respons. We don’t get that around here very often =/

Yes that is exactly what I have been looking for, A cut and dry chat system for bungee! You are the only DEV I have seen so far to offer that, now what I was requesting was plugin prefix support VIA Luckperms or/and other permission plugins. As of now the only thing I have seen all require VAULT and only support Bukkit permissions, which is not supported by Sponge obviously. It can be very confusing, stressful and overwhelming for server/website DEVS like myself.

Let me know if we can work on something? =]

-Thanks!

Hi,

I’m so happy you put out this plugin! It’s going to help me so much.

One small request though, can you make it so their are custom server prefixes?
Here’s an example if I’m not making any sense.
any message from the survival server would say [Survival][Rank][Name]:message
and any message from say the creative server would say [Creative][Rank][Name]:message

Thanks!

1 Like

I’m very glad I can be of service!

It’s very interesting you should say that as I tested the plugin with LuckPerms exactly when I was making the sponge bridge, and I tested prefixes and it worked fine. I have built in support for LuckPerms prefixes right into the plugin, a couple of things you should check:

In the config file for MultiChat is the “fetch_display_names” part (which probably still talks about spigot even though it now works for sponge too…) set to true? If so then it should get the prefixes from your Sponge server, and should work with luckperms :slight_smile:

If it isn’t working, then that is very odd, and I will right away go and investigate!

Hi there,

This is definitely something I will look into!

I can’t promise it will be ready in the next release but I will work towards support for something like this :slight_smile:

Actually. Something clicked in my mind.

Are you using LuckPerms for bungeecord or the local sponge specific one?

If it is for bungeecord then you will actually need to turn off the “fetch_display_names” part!

Sounds great!

I’m out with family for thanksgiving atm. I shall take a look into this tonight and I will get back too you.

Your a trooper. Thanks a ton =]

Finally returned home from stuffing my face with turkey and pie!
I have put about an hour with the settings and I still cant seem to get the Prefix from Luckperms to show in chat. I know for a fact that I set Luckperms up correctly as it shows the prefix if I disable Multichat.

Is there a config handle that I dont know about? Example %Prefix% %Suffix%
I feel like that should be a thing lol =P

Mmm, okay. So, is the luckperms you are using the BungeeCord version or the Local sponge version? Or both I guess. But the real thing I need to know is where you are setting the players prefixes. If you are setting them on the bungee luck perms then turn off the “fetch_display_names” bit of the multichat config. (i.e. set it to false) If you are setting the prefixes on the local sponge versions then “fetch_display_names” needs to be true. At the moment I haven’t distinguished between prefix/suffix in the config and just refer to the entire [Prefix]Name[Suffix] as their display name, but this is definitely something I can separate out :slight_smile:

If that doesn’t work could you send me the MultiChat config file, along with a brief overview of how your bungeecord network is set up (i.e. what servers exist) and what kinds of prefixes luckperms is using, i.e. per group, per player etc.

I hope that my first paragraph solves the issue but if not then I shall have to do some hunting! Just seems odd as I managed to get it to work with LuckPerms when I tried :confused:

Thanks a lot :thumbsup:

Sorry I sent a reply but forgot to actually click the reply button so I don’t know if it will notify you. I’m guessing it will anyway but I thought I’d send this in case not :stuck_out_tongue:

Its taken me this long to realise that this feature pretty much already exists, I just forgot about it!

Take a look at this section of the config!

You can use things such as "[%SERVER%][%DISPLAYNAME%]: "
(Displayname includes any prefixes or suffixes that have been set)

##############################################################

# USES STANDARD MINECRAFT '&X' COLOUR/FORMAT CODES
# %NAME% = The name of the sender
# %DISPLAYNAME% = The display name of the sender
# %SERVER% = The server of the sender

#Global Chat Format
#Will display as [FORMAT] [MESSAGE]

globalformat: "&f%DISPLAYNAME%&f: &d"

##############################################################

hey there, any chance to get the sponge downloads up again?

Hey while Sponge are updating their plugin section, the old system ORE was replaced with a forum which is hard to host my files from. MultiChat is an all in one plugin, so the same JAR file works on Sponge, Spigot and BungeeCord. So you can just download it from spigot here: https://www.spigotmc.org/resources/multichat.26204/ :smiley:

Thanks, I’ll grab it there for now.
Ore wasn’t replaced, it’s just out of staging you can find it here now https://ore.spongepowered.org/

Aha, I didnt realise they had released the full version of ore yet! Thanks, I shall open up a page on that ASAP.

Hey I was wondering if you could help me out. I keep receiving these errors and it disconnects players and won’t let them join. It’s occurring on multiple servers all connected to BungeeCord (waterfall) and all different kinds of servers. Do you know what this is about?

 [15:49:54] [Netty Epoll Server IO #13/ERROR] [FML]: There was a critical exception handling a packet on channel MultiChat
java.util.NoSuchElementException: No value present
        at java.util.Optional.get(Optional.java:135) ~[?:1.8.0_45-internal]
        at com.olivermartin410.plugins.MultiChatRawDataListener.handlePayload(MultiChatRawDataListener.java:24) ~[MultiChatRawDataListener.class:?]
        at org.spongepowered.mod.network.SpongeRawChannel.handlePacket(SpongeRawChannel.java:91) ~[SpongeRawChannel.class:1.10.2-2202-5.1.0-BETA-2078]
        at org.spongepowered.mod.network.SpongeRawDataInboundHandler.channelRead0(SpongeRawDataInboundHandler.java:50) ~[SpongeRawDataInboundHandler.class:1.10.2-2202-5.1.0-BETA-2078]
        at org.spongepowered.mod.network.SpongeRawDataInboundHandler.channelRead0(SpongeRawDataInboundHandler.java:36) ~[SpongeRawDataInboundHandler.class:1.10.2-2202-5.1.0-BETA-2078]
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[SimpleChannelInboundHandler.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) ~[AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) ~[AbstractChannelHandlerContext.class:?]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) ~[DefaultChannelPipeline.class:?]
        at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?]
        at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.func_148833_a(FMLProxyPacket.java:100) [FMLProxyPacket.class:?]
        at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:149) [eo.class:?]
        at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:51) [eo.class:?]
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:?]
        at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:446) [NetworkDispatcher.class:?]
        at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:269) [NetworkDispatcher.class:?]
        at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:73) [NetworkDispatcher.class:?]
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:?]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163) [ByteToMessageDecoder.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:?]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163) [ByteToMessageDecoder.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:?]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163) [ByteToMessageDecoder.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:?]
        at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150) [ReadTimeoutHandler.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:?]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:?]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.epollInReady(EpollSocketChannel.java:722) [EpollSocketChannel$EpollSocketUnsafe.class:?]
        at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:326) [EpollEventLoop.class:?]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:264) [EpollEventLoop.class:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [SingleThreadEventExecutor$2.class:?]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45-internal]

mmm, I cant say Ive ever seen anything like that before. I haven’t used waterfall myself so I dont know if that could make a difference… I shall have a look into it to see if there is anything obvious :slight_smile:

Thank you very much I appreciate it.