gChat for Velocity (unofficial) | A simple cross-server chat plugin

gChat for Velocity

A simple global chat plugin by @Luck, ported to Velocity.

Usage is exactly the same as the original plugin, but the API has been adapted to use Velocity classes instead of the BungeeCord ones.

Features

  • Global chat channel throughout your network
  • Placeholders to customize chat formatting
  • Multiple formats selected using weight
  • API for adding additional placeholders, or listening to chat events
  • Built-in LuckPerms support

Placeholders

Standard Placeholders

These placeholders are provided by gChat.

  • {username} or {name} - the players username
  • {server_name} - the name of the players current server
  • {uuid} - the players unique id
  • {display_name} - the players display name (note: on Velocity, this is your username)
  • {message} - the chat message being sent by the player

Plugin Hooks

gChat also provides hooks for the following plugins.

  • LuckPerms - gChat will hook with LuckPerms if it’s installed on the proxy, and allows you to use any of the placeholders listed here.

Configuration

# gChat Configuration

# If a player doesn't have permission for any of the formats, should the chat message be passed through to the
# backend server or just ignored.
passthrough: true

# if permissions are required to send/receive chat messages
require-permission:
  # if true, players will need to have the "gchat.send" permission to send messages
  send: false

  # the message to send if a player doesn't have permission to chat
  # will only be sent if the 'passthrough' option below is false
  send-fail: "&cYou do not have permission to use the chat!"

  # if true, players will need to have the "gchat.receive" permission to receive messages
  receive: false

  # if a player doesn't have permission to send a message, should it be passed through to the backend server?
  passthrough: true

# Defines the formats to be used.
formats:

  # a default format for everyone on the server
  everyone:

    # the priority of the format. higher number = higher priority.
    # if a user has permission for multiple formats, the one with the highest priority will be used.
    priority: 100

    # if this format requires a permission.
    # permissions are in the format: "gchat.format.<format name>"
    # for example: "gchat.format.everyone"
    check-permission: true

    # the actual format for the chat message
    format: "{luckperms_prefix}{name}{luckperms_suffix}{message}"

    format-extra:

      # the format for the message tooltip
      hover: ""

      # what should happen when the message is clicked?
      click:

        # type: can be either "none", "suggest_command", "run_command" or "open_url"
        type: "none"

        # the value to suggest or run.
        value: ""

  # another format without all the comments!
  staff:
    priority: 150
    check-permission: true
    format: "* {luckperms_prefix}{name}{luckperms_suffix}&c: &b&l{message}"
    format-extra:
      hover: |-
        &e{name} is a staff member!

        &6Feel free to message them any time, by
        &6clicking this message!
      click:
        type: suggest_command
        value: "/msg {name} "

Seems to be having a issue with actually pulling the prefix suffix etc, name just shows up white so for example instead of me being [Owner]Karagra: I am Karagra: tried everything in the config no luck

Thanks for letting me know - I hadn’t run into any issues so far.

Could you run /lpv verbose on, try sending a message then post the verbose output in chat/console along with your config?

https://luckperms.github.io/verbose/#Umjln3XEA6 That config was tested on a fresh LuckPerms and GChat install, only thing added to luckperms was the prefix for the default rank which was showing up in the tablist

That is a verbose trace from a Bukkit server, not Velocity. You need to use the /lpv command on proxy.

I’ve written a (still WIP) Discord bot to work alongside the gChat port called gcv-bridge - you can download it here and see the source code here. Currently, conversion between components and Discord markdown is incomplete (chat to Discord isn’t perfect; Discord to chat doesn’t get converted), but it’s more than functional for us right now.