EasyChat [1.7 - 1.18] - channels, filters, chat bubbles, JSON + HEX, cross-channel messages... icon

EasyChat [1.7 - 1.18] - channels, filters, chat bubbles, JSON + HEX, cross-channel messages... -----

chatlennge evrrrything



logo-wall.png

Hey John! Can you hear me through this wall?
...


Features
  • chat channels
    - formatting, colors, hover text (JSON-formatting support)
    - HEX colors support (MC 1.16+)
    - per-channel cooldowns
    - per-channel ban and mute lists
    - password-protected and permissions-protected channels
    - local channels
    - configurable hear-through-walls distance for local channels
    - click actions
    - auto-join, auto-subscribe
    - link worlds to channels
    - exclude channels in certain worlds
    - optional channel join/leave notifications

    chanlist.png

    password.png

    walls.png walls2.png


  • cross-channel messaging
    - customizable prefixes to send messages into different channels (normally, players can only talk in 1 channel)
    - subscribe to all the channels you want to hear all the messages from (or just some)
    - focus on single channel only through /isolate, restore your previous channel and subscriptions when ready


    prefixes.png


  • single global chat
    when you don't feel like setting up trillions of channels
    ... can still be JSON-formatted, muted & cooldowned

  • broadcasts & private messaging
    - JSON-enabled server-wide announcements
    - custom-formatted private messages through /tell and /msg


    tell.png

  • chat bubbles (MC 1.11.2+)
    - RPG servers will love this!
    - disable chat and only show chat bubbles on top of your players heads for a more immersive RPG / LARP playstyle

    [​IMG]

  • :cool: commands spy
    - see all commands run on the server by your players
    - disallow spying on some commands for your moderators but keep spying on all commands yourself

    chatspy.png

  • :cool: global chat spy
    - see all chat from all channels, even private messages by subscribing to the global @global_spy (or @ spy for short) channel!
    - only players with the right subscription (ec.channels.spy.subscribe) will be able to subscribe!

  • :devilish: rewrite & filter chat, run commands
    - replace swear words and phrases to troll the trolls!
    - run commands when a player says configured phrase

    - set up auto-responder for common phrases (create a small chat bot)

    text-replace.png

  • custom join, leave & first-join messages
    ... includes silent-join & silent-leave, so no message is shown when a player joins/leaves the server (if they have correct permission)

  • move to chat feature
    - disallow chat messages and commands unless a player moves at least a little after they join the server
    - allow certain commands to be run even before the player moves (such as /login or /register)

    - module is disabled by default and needs enabling in config!

  • mention sound notification
    - play a customizable sound effect when a player is private messaged or notified in chat via a customizable chat character, such as @
    (@ Zathrus_Writer)

  • MOTD
    - customized Message of the Day, loaded from a text file
    - different MOTD files for new players and returning ones
    - write anything
    you like, including colors and placeholders (for details, see format of Global channel in default config below)
    - show MOTD on player join as well as via /ec_motd (or /motd) command
    - do you use Essentials for motd already? not to worry! simply disable this module in EasyChat's config and redirect the /motd command to essentials in your commands.yml file!
    Code (YAML):
      # the aliases and icanhasbukkit parts should already be in commands.yml file
    aliases
    :
      icanhasbukkit
    :
     - version $1-
      motd
    :
     - essentials:motd

  • server rules (via /rules)
    - customized server rules, loaded from a text file
    - write anything
    you like, including colors and placeholders
    - shown via /ec_rules (or /rules) command

    - do you use Essentials for rules already? not to worry! simply disable this module in EasyChat's config and redirect the /rules command to essentials in your commands.yml file!
    Code (YAML):
      # the aliases and icanhasbukkit parts should already be in commands.yml file
    aliases
    :
      icanhasbukkit
    :
     - version $1-
      rules
    :
     - essentials:rules

  • MySQL support
    - set up your initial configuration in config-file.yml

    - change the backend value in config.yml to "db"
    - update config-db.yml file with your MySQL details
    - either restart server or simply do /ec_reload
    - your configuration will be automatically transferred into the DB
    - from this point, you need to edit your config inside the DB, local config files will be ignored
    - you can still use all of the mute and ban commands and your DB config will update mutes and bans automatically

  • DiscordSrv compatibility
    - set up your channels and link them with Discord through the amazing DiscordSrv server plugin
    - your chat will always appear in the right channels in MC and Discord
    - this module is disabled by default and you need to enable it manually in the EasyChat config (it would just nag you if you hadn't DiscordSrv plugin installed)

    [​IMG]

  • colored or color-less console logging
    - see your players chatting in console along with their colorful prefixes and groups
    ... or turn of all colors for console and avoid super-garbled console logs

  • conscise configuration
    - sample configuration with several predefined channels
    showing all features
    - heavily commented (comments in main config file will be stripped on subsequent plugin loads)

    config.png

  • translations
    all the text in EasyChat is translatable and you can easily create your own translation files and even use color codes in them (and you're welcome to contribute these files back to the project, of course!). You will find an EasyChat/languages folder in your server's plugins directory where you can put new language files in the following format: [lang_file_prefix]-[EC_version].properties

  • international characters
    are supported in EasyChat configuration from MC 1.9+, since earlier versions did a poor job supporting these


In Progress:
  • BungeeCord support
  • Global Chat to communicate between any number of your servers
  • Local Chat if you wish to only see the messages of people on 1 server
  • Private Messaging between any number of your servers
  • Group Chats that your players can make and customise to socialise with their friends
  • Network Join and Quit messages
  • Execute commands over all your servers at once!
  • cross-server broadcast
  • use & chat colors in chat by players, based on their permissions (easy to implement, needs some performance testing to make sure cached permissions can be used)


Using EasyChat (as a player)
  1. discover available channels via /ch or /join
  2. type /ch [channel_name] or /ch [channel_shortcut] to switch into that channel (players can only be active in 1 channel)
  3. if a channel requires password to join, its name will be prefixed with a $ sign in channels listing. To enter such channel, type /ch [channel_name] [password]
  4. to subscribe (listen to) channels in which you are not currently active, use /sub <channel_name> [password]
  5. to unsubscribe from a channel to which you have previously subscribed, type /unsub <channel_name> (typing /unsub without any parameters will list channels you are subscribed to)
  6. if you are subscribed to many channels but you need to isolate and read chat from only a single one for a a moment, use /isolate <channel_name> [password]. This will put you into that channel and temporarily (if enabled) stop all other subscriptions you currently have. To restore your previous channel and subscriptions, type /isolate without any parameters (if enabled on the server).
  7. send messages into different channel by using prefix.
    Example: if Help channel has a prefix ?, type ?Help me to send the text "Help me" into channel Help
    Please note: channels that have no prefix in channels listing don't have this functionality enabled by the server admin
  8. send private messages to players through /tell [player] [message]
  9. ignore unwelcome players through /ignore [player_name], unignore them in the same way
  10. you may discover that in local chat, noone is around to hear you (or they can't hear you through walls). You will always be notified of this along with information which global channel to join if you want to talk globally.
  11. if you want to talk through a wall in local chat and the other player doesn't hear you, try to get as close to the wall as possibe and instruct the other player to do the same, then try again.
  12. you can notify other players with a sound effect by sending them a private message or mentioning them in chat ( @some_player_name )


Using EasyChat (as a moderator)
  1. use /mute [channel_name] [player_name] to mute a player in channel (players with permissions will still be able to talk even when muted)
    use /unmute [channel_name] [player_name] to unmute a player in channel
  2. use /eban [channel_name] [player_name] to ban a player from channel (players with permissions will still be able to join that channel even when muted)
    use /eunban [channel_name] [player_name] to unban a player from channel
  3. use /mute [channel_name] to mute a channel completely, pausing all chat in it (players with permissions will still be able to talk even when a channel is muted)
  4. to broadcast a message to all players on the server, regardless of the channel they are in, use /say [message]
  5. you may be seeing commands being run on the server by players, if you have permission for it. These are displayed in gray italics in chat.
  6. if you have the permission, you can join password-protected channels without a password by simply typing /join [channel_name]
  7. if you have the permission, you can subscribe to a global chat spy channel via /subscribe @global_spy command


List of commands
  • /ec_join <channel> [password] - Joins a channel (with a password if one is required).
    • permission: ec.join_channel
    • default permission restriction: enabled for everyone
    • aliases: join, ch

  • /ec_subscribe <channel> [password] - Subscribes to a channel, so you can hear messages from it while chatting in a different channel.
    • permission: ec.subscribe_channel
    • default permission restriction: enabled for everyone
    • aliases: subscribe, sub

  • /ec_unsubscribe <channel> - Unsubscribes from a channel.
    • permission: ec.unsubscribe_channel
    • default permission restriction: enabled for everyone
    • aliases: unsubscribe, unsub

  • /ec_isolate <channel> - Puts you into a single channel, pausing (or cancelling - based on server settings) all your subscriptions. Brings everything back when used without a parameter (and if enabled on server).
    • permission: ec.isolate
    • default permission restriction: enabled for everyone
    • aliases: isolate, focus

  • /ec_say <message> - Broadcasts a message to all players on the server.
    • permission: ec.say
    • default permission restriction: OPs only
    • aliases: say

  • /ec_tell <player> <message> - Sends a private message to another player.
    • permission: ec.tell
    • default permission restriction: enabled for everyone
    • aliases: tell
  • /ec_ignore <player> - Ignores or un/ignores a player.
    • permission: ec.ignore
    • default permission restriction: enabled for everyone
    • aliases: ignore

  • /ec_rules - Shows server rules.
    • permission: ec.rules.show
    • default permission restriction: enabled for everyone
    • aliases: rules


  • /ec_motd - Shows Message of the Day.
    • permission: ec.motd.show
    • default permission restriction: enabled for everyone
    • aliases: rules


  • /ec_ban <channel> <player> - Bans player from accessing a channel.
    • permission: ec.ban
    • default permission restriction: OPs only
    • aliases: eban

  • /ec_unban <channel> <player> - Un-bans player from a channel.
    • permission: ec.unban
    • default permission restriction: OPs only
    • aliases: eunban
  • /ec_mute <channel> <player> - Mutes player in channel.
    • permission: ec.mute
    • default permission restriction: OPs only
    • aliases: mute

  • /ec_unmute <channel> <player> - Un-mutes player in channel.
    • permission: ec.unmute
    • default permission restriction: OPs only
    • aliases: unmute

  • /ec_mutec <channel> - Mutes a channel.
    • permission: ec.mutec
    • default permission restriction: OPs only
    • aliases: mutec

  • /ec_unmutec <channel> - Un-mutes a channel.
    • permission: ec.unmutec
    • default permission restriction: OPs only
    • aliases: unmute
  • /ec_version - Shows current EasyChat version.
    • permission: ec.showversion
    • default permission restriction: OPs only
    • aliases: -none-

  • /ec_reload - Reloads EasyChat configuration
    • permission: ec.reload
    • default permission restriction: OPs only
    • aliases: -none-

  • /ec_debug - Turns debugging for EasyChat on or off.
    • permission: ec.debug
    • default permission restriction: OPs only
    • aliases: -none-


Additional permissions
  • ec.subscribe - Parent permission for subscribe and unsubscribe commands.
    default permission restriction: enabled for everyone
    child nodes auto-enabled by this permission:
    • ec.subscribe_channel
    • ec.unsubscribe_channel
  • ec.mention-sound-notification - Allows receiving sound notification when private messaged or mentioned in chat.
    default permission restriction: enabled for everyone
  • ec.notifynewversion - Allows for chat notifications on player join when a new version of EasyChat is available for download.
    default permission restriction: OPs only
  • ec.showversion - Allows displaying current EasyChat version via ec_version.
    default permission restriction: OPs only
  • ec.bypass.muted - Allows talking in muted channels.
    default permission restriction: OPs only
  • ec.bypass.player.muted - Allows talking in channels where the player is muted.
    default permission restriction: OPs only
  • ec.bypass.player.banned - Allows joinning channels from which the player is banned.
    default permission restriction: OPs only
  • ec.bypass.cooldown - Allows ignoring messages cooldowns in channels.
    default permission restriction: OPs only
  • ec.bypass.password - Allows joining password-protected channels without using a password.
    default permission restriction: OPs only
  • ec.bypass.command-spy-commands - Allows seeing commands that are excluded from the list of commands to spy on with the command spy module.
    default permission restriction: OPs only
  • ec.bypass.move-to-chat - Allows sending chat and commands before a player has moved on the server and the move-to-chat module is active.
    default permission restriction: OPs only
  • ec.bypass.channel-join-leave-notification -
    Suppresses join and leave channel notifications for this user.[I][I][I][I]
    [U]default permission restriction[/U]: [I]OPs only[/I][/I][/I][/I][/I]
  • ec.commandspy - Allows receiving info about commands run by other players.
    default permission restriction: OPs only
  • ec.channels.spy.subscribe - Allows subscribing to the global Spy channel.
    default permission restriction: OPs only
  • ec.silent.join - Suppresses the join message when player joins the server, essentially hiding them joining the server.
    default permission restriction: OPs only
  • ec.silent.leave - Suppresses the leave message when player leaves the server, essentially hiding them leaving the server.
    default permission restriction: OPs only
  • ec.bypass - Parent permission for all following bypass permissions in EasyChat.
    default permission restriction: OPs only
    child nodes auto-enabled by this permission:
    • ec.bypass.muted
    • ec.bypass.player.muted
    • ec.bypass.player.banned
    • ec.bypass.cooldown
    • ec.bypass.password
    • ec.bypass.command-spy-commands
    • ec.bypass.move-to-chat
    • ec.bypass.channel-join-leave-notification

Default Configuration
Code (YAML):

# a list of all EasyChat modules and their settings
# you can turn each of them off by setting its "enabled" option to false
modules
:
  # turns on or off a detailed technical information mode
  # useful if you're trying to see what's wrong with the plugin
  # or if you've been asked to provide a chat output with debug data
  # use the "enabled" option to allow the /ec_debug command
  # use the "debug-mode-active" option to actually turn debug mode on or off in order to display the technical info in chat
  debug-mode-command
:
    enabled
: false
    debug-mode-active
: false

  # enables or disables use of the /ec_join (or /join, /ch) command
  join-channel-command
:
    enabled
: true
    # lists all channels available to the player if no parameters are given to this command
    available-channels-listing
: true

  # enables or disables use of the /ec_subscribe (or /subscribe, /sub) command
  subscribe-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_unsubscribe (or /unsubscribe, /unsub) command
  unsubscribe-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_isolate (or /isolate, /focus) command
  isolate-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_ban (or /eban) command
  ban-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_unban (or /eunban) command
  unban-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_mute (or /mute) command
  mute-in-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_unmute (or /unmute) command
  unmute-in-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_mutec (or /mutec) command
  mute-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_unmutec (or /unmutec) command
  unmute-channel-command
:
    enabled
: true

  # enables or disables use of the /ec_ignore (or /ignore) command
  ignore-channel-command
:
    enabled
: true

  # allows to reload EasyChat via /ec_reload command
  reload-easychat
:
    enabled
: true

  # allows displaying EasyChat version via /ec_version command
  get-easychat-version
:
    enabled
: true

  # Message of the Day (MOTD)
  # Displayed when a player joins the server as well as through the /motd (or /ec_motd) command.
  # You can change MOTD in file motd.txt and motd-first-join.txt
  # If default MOTD files are not in the plugin data folder, type /ec_motd to auto-generate them.
  # You can use same placeholders that are used for channels (see Global channel's format setting for details).
  motd
:
    enabled
: true

  # Rules for the server.
  # Displayed through the /rules (or /ec_rules) command.
  # If default rules.txt file is not in the plugin data folder, type /ec_rules to auto-generate it.
  # You can use same placeholders that are used for channels (see Global channel's format setting for details).
  rules
:
    enabled
: true

  # enable this module to require your players to move before they can chat
  # or run commands (with the exception of commands listed in allowed-commands list)
  move-to-chat
:
    enabled
: false
    allowed-commands
:
     - login
      - register

  # allows players mentioned in chat or sent a private message
  # to be notified via a custom sound effect
  mention-sound-notification
:
    enabled
: true
    use-for-private-messages
: true
    mention-character
: "@"
    # sound names can be found on the following websites, based on your MC version:
    # MC 1.8.8 and lower: https://jd.bukkit.org/org/bukkit/Sound.html
    # MC 1.9 and higher: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Sound.html
    sound
: BLOCK_NOTE_BLOCK_PLING
    sound-private-message
: BLOCK_NOTE_BLOCK_PLING

  # allows checking for updates to EasyChat on Spigot in a defined time interval
  # or during plugin startup
  # outputs new version messages into console as well as informs players with permission
  # "ec.notifynewversion" when they log in
  check-for-updates
:
    enabled
: true
    # set this to -1 if you only want to check for EasyChat updates once,
    # usually when the server starts (or when EC is reloaded)
    check-for-updates-every-seconds
: 7200

  # DiscordSrv support, false by default - set to true to allow EasyChat
  # to forward messages to the correct DiscordSrv channels and make sure
  # you set up config.yml in the DiscordSrv plugin's folder, so that channel names
  # match your channel names defined in EasyChat configuration
  discordsrv-plugin-compatibility
:
    enabled
: false

  # custom join and first join messages
  custom-join-message
:
    enabled
: false
    format
: "{DISPLAYNAME} &ejoined the game"
    format-first-join
: "{DISPLAYNAME} &ejoined us for the first time. &dWelcome home!"

  # custom leave message
  custom-leave-message
:
    enabled
: false
    format
: "{DISPLAYNAME} &eleft the game"

  # chat channels configuration
  # you can leave this default configuration intact
  # and simply disable the channels module if you don't want any channels
  # in your chat and all you want it the vanilla chat experience
  # please note: other plugins may still adjust your chat to their formatting
  #              if you set them up to do so even when this module is disabled
  channels
:
    enabled
: true
    # name of the default channel to be used for all players when they join the server
    default-channel-name
: Global
    # there is a "/ec_isolate <channel_name>" which will unsubscribe a player from all other channels
    # they may be subscribed to (listening to) and will only show chat from the selected channel
    # ... this option will remember their subscription choice before they decided to isolate their chat
    #     and will work as a switch, so upon the next /isolate command, that player will have all their
    #     previous subscriptions restored
    isolate-command-remembers-subscriptions
: true
    setup
:
      # a "simple" global channel, the name "Global" is arbitrary, you can pick any name for the channels you create
      # these names are used in commands to auto-complete channel names to join/subscribe to/unsubscribe from
      Global
:
        # when switching between channels, a player can type either "/join Global" or simply "/join G"
        # if this option is omitted from channel setup, no shortcut will be used for the /join command
        shortcut
: G
        # optional color code to use for this channel name when informing players about this channel being muted,
        # disabled etc.
        # you can use custom HEX colors (MC 1.16+) in the form of: &#808000 (which is olive color)
        color
: "&2"
        # whether or not users should be auto-subscribed to this channel as soon as they join the server
        # default: false
        auto-subscribe-newcomers
: false
        # a character (or set of characters) which can be used at the beginning of a chat message to send
        # that single message into this channel even if the player is currently talking in a different one
        # for example, being in a Local chat but writing "!Bye everyone :)" will send that message in Global channel
        # default: "" (i.e. not used)
        one-time-channel-msg-character
: "!"
        # optional channel join and leave notifications to show all players in that channel
        # that a player has joined/left - displayed when switching channels via /ec_join (or /join)
        # default: false
        channel-join-leave-message
: true
        # chat format - you can build your chat line
        # word-by-word, characted-by-character
        # and give each of them a JSON property,
        # such as hover text, command to run on click,
        # text copy into clipboard or text to fill into chat
        # on click
        #
        # usable placeholders in formatting are:
        # {PLAYERNAME} - real nickname of the player, usually for use in commands
        # {DISPLAYNAME} - required Vault to show prefix/suffix! name of the player that may come colorized and prefixed from other plugins, such as a permissions plugin
        # {GROUP} - requires Vault! group of the player (usually contained in {DISPLAYNAME} but available if your perm plugin doesn't add group prefix to nicknames)
        # {WORLDNAME} - name of the world where the player currently resides
        # {CHANNEL_NAME} - gets replaced by full channel name (can be pretty long)
        # {CHANNEL_SHORTCUT} - gets replaced by the channel shortcut
        # {MESSAGE} - the actual message the player sent
        # ${translation-key} - any translation key from language file will be replaced by its value (example: "${motd.welcome}")
        # %PLACEHOLDERAPI_VARIABLE% - you can use any PAPI variables available on your server
        #
        # usable JSON properties are:
        # hover - displays a text that hovers over the JSON chat part
        # click - action that runs when a player clicks on this chat part
        #         available options:
        #         - suggest: enters a text into player's chat, suggesting them to type it (usually a command they may run)
        #         - command: runs the command listed when player clicks on the JSON chat part
        #         - url: opens the given URL in player's browser
        #         - clipboard: copies this JSON chat part into the clipboard (MC 1.15+)
        # insertion - when the text is shift-clicked by a player, this text is inserted in their chat input and it does not overwrite any existing text the player was writing
        #
        # the formatted end result for the Global channel will be: &d[P]&2[G]&f{DISPLAYNAME} &f> {MESSAGE}
        format
:
          # the actual text shown on chat, including any color formatting
          "&d[P]"
:
            # message that follows mouse when the player moves mouse over this chat part
            hover
: "&bclick to promote this user into VIP"
            click
:
              # command to run when a player clicks on this chat part
              command
: "/lp user {PLAYERNAME} promote vip"
          "&2[{CHANNEL_SHORTCUT}]&f"
:
            hover
: "&2Global"
            click
:
              # text to fill into chat when a player clicks on this chat part
              suggest
: "/isolate Global"
          "{DISPLAYNAME}"
:
            click
:
              suggest
: "/me "
          " &f> "
:
            # if you want this to be a simple (optionally colored) text without any JSON properties,
            # set the no-json option here to true
            "no-json"
: true
          "{MESSAGE}"
:
            hover
: "&bclick to copy into clipboard"
            # when a player clicks on this chat part, it will be copied into the clipboard
            click
:
              clipboard
: true
        # text format for chat bubbles above player heads
        # does not support JSON attributes or text replacements (other than {MESSAGE}), only color and formatting codes
        # set to "" or remove from channel setup completely to disable chat bubbles for this channel
        # default: ""
        chat-bubble-format
: "&e{MESSAGE}"
        # if you want to text sent in chat and show it only as a chat bubble in this channel,
        # set this to true
        # setting this to false or removing it completely from channel setup will show messages both,
        # in chat and in chat bubble (if chat bubbles are enabled)
        # default: false
        hide-chat-only-show-chat-bubbles
: false
        # how many blocks around the player can text in this chat channel be heard
        # usually used for local chat channels
        # set to 0 or remove from channel setup completely to create a global chat channel
        # default: 0
        distance
: 0
        # if a talking player is behind a wall from solid blocks, this will set how many blocks from that wall
        # can text in this channel be heard
        # - this is ignored if "distance" is set to 0, since that makes a channel global
        # - set this to -1 or remove this option completely if you don't want this feature active for this channel
        # - setting this value to 0 will stop players behind a wall hearing other players' messages from this channel
        # - setting it to 5 will make players up to 5 blocks away from a wall hear text from this channel
        # - if you set distance to 5 and this value to 10, their messages will still only be heard up to the master
        #   radius distance of 5
        # default: -1
        hear-over-solid-blocks-distance
: -1
        # disable this channel in the following worlds
        # this option can be removed from a channel setup if not used
        # default: []
        do-not-use-in-these-worlds
:
         - world27
          - MyCrazyWorld
        # if this is set to true, the "do-not-use-in-these-worlds" option will be used to say in which worlds
        # is this chat actually ENABLED
        # set it to false to return the normal functionality of the "do-not-use-in-these-worlds" option
        # this option can be removed from a channel setup if not used
        # default: false
        do-not-use-works-as-whitelist
: false
        # permissions a player has to have in order to join this channel
        # leave empty (i.e. []) or remove from a channel setup to allow everybody to join this channel
        # if you provide multiple permissions, player will only require a single permission from that list
        # in order to join this channel
        # default: []
        join-permissions
: [ ]
        # permissions a player has to have in order to subscribe to this channel
        # leave empty (i.e. []) or remove from a channel setup to allow everybody to subscribe to this channel
        # if you provide multiple permissions, player will only require a single permission from that list
        # in order to subscribe to this channel
        # default: []
        subscribe-permissions
: [ ]
        # permissions a player has to have in order to use the one-time message shortcut for this channel
        # leave empty (i.e. []) or remove from a channel setup to allow everybody to use the one-time
        # message shortcut
        # if you provide multiple permissions, player will only require a single permission from that list
        # in order to use the one-time message shortcut for this channel
        # default: []
        one-time-msg-permissions
: [ ]
        # would you like this channel to be password-protected? if not, leave this option empty ("")
        # or remove this option from a channel setup
        # default: ""
        password
: ""
        # how many seconds a player needs to wait before they can send the next message
        # set to 0 to disable this limitation or remove it from a channel setup
        # default: 0
        cooldown
: 3
        # whether this channel is muted for everybody
        # only players with "ec.bypass.muted" permission are able to talk in muted channels
        # default: false
        muted
: false
        # whether or not this channel can be listened to while being active in another channel
        # players can chat only in a single channel but can be subscribed into multiple, if not disallowed
        # via a negative "-ec.subscribe.<channel-name>" permission or by setting this value to false
        # default: true
        subscriptions
: true
        # a list of players banned from this channel
        # default: []
        bans
: [ ]
        # a list of players muted in this channel
        # default: []
        mutes
: [ ]

      # a local channel, allowing players to hear each other for the distance of 16 blocks
      Local
:
        shortcut
: L
        color
: "&e"
        one-time-channel-msg-character
: "."
        format
:
          "&e[{CHANNEL_SHORTCUT}]&f"
:
            hover
: "&eLocal"
            click
:
              suggest
: "/isolate L"
          "{DISPLAYNAME}"
:
            click
:
              suggest
: "/me "
          " &f> "
:
            "no-json"
: true
          "{MESSAGE}"
:
            hover
: "&bclick to copy into clipboard"
            click
:
              clipboard
: true
        chat-bubble-format
: "&e{MESSAGE}"
        distance
: 16
        cooldown
: 3
        muted
: false
        subscriptions
: true
        bans
: [ ]
        mutes
: [ ]

      # a whisper channel used to tell people secrets that don't leave the inside of the room
      Whisper
:
        shortcut
: W
        color
: "&7"
        one-time-channel-msg-character
: "@"
        format
:
          "&7[{CHANNEL_SHORTCUT}]"
:
            hover
: "&7Whisper"
          "{DISPLAYNAME} &7> {MESSAGE}"
:
            "no-json"
: true
        chat-bubble-format
: "&7{MESSAGE}"
        distance
: 4
        hear-over-solid-blocks-distance
: 0
        cooldown
: 3
        muted
: false
        subscriptions
: true
        bans
:
         - IWasWhisperingTooMuch
          - AlwaysBanned
        mutes
: [ ]

      # help channel, allowing players to get help from your helpers and moderators
      Help
:
        shortcut
: H
        color
: "&b"
        auto-subscribe-newcomers
: true
        one-time-channel-msg-character
: "?"
        channel-join-leave-message
: true
        format
:
          "&b[{CHANNEL_SHORTCUT}]&f"
:
            hover
: "&bHelp"
            click
:
              suggest
: "/isolate H"
          "{DISPLAYNAME} &f> "
:
            "no-json"
: true
          "{MESSAGE}"
:
            hover
: "&bclick to copy message into clipboard"
            click
:
              clipboard
: true
        chat-bubble-format
: "&b{MESSAGE}"
        cooldown
: 3
        muted
: false
        subscriptions
: true
        bans
: [ ]
        mutes
: [ ]

      # moderators and owners chat
      Staff
:
        shortcut
: S
        color
: '&c'
        one-time-channel-msg-character
: "*"
        channel-join-leave-message
: true
        format
:
          "&c[{CHANNEL_SHORTCUT}]&f"
:
            hover
: "&cStaff"
            click
:
              suggest
: "/isolate S"
          "{DISPLAYNAME} &f> "
:
            "no-json"
: true
          "{MESSAGE}"
:
            hover
: "&bclick to copy into clipboard"
            click
:
              clipboard
: true
        chat-bubble-format
: "&c{MESSAGE}"
        join-permissions
:
         - "chat.channel.staff"
          - "IAMOWNER"
        subscribe-permissions
:
         - "chat.channel.staff"
          - "IAMOWNER"
        one-time-msg-permissions
:
         - "chat.channel.staff"
          - "IAMOWNER"
        muted
: false
        subscriptions
: true
        bans
: [ ]
        mutes
: [ ]

      # private channel for VIPs
      VIP
:
        shortcut
: V
        color
: '&c'
        one-time-channel-msg-character
: "$"
        channel-join-leave-message
: true
        format
:
          "&d[{CHANNEL_SHORTCUT}]&f"
:
            hover
: "&bclick to demote this user from VIP status"
            click
:
              command
: "/lp user {PLAYERNAME} demote vip"
          "&c[V]&f"
:
            hover
: "&cVIP"
            click
:
              suggest
: "/isolate V"
          "{DISPLAYNAME}"
:
            click
:
              suggest
: "/me "
          " &f> "
:
            "no-json"
: true
          "{MESSAGE}"
:
            hover
: "&bclick to copy into clipboard"
            click
:
              clipboard
:
                enabled
: true
        chat-bubble-format
: "&c{MESSAGE}"
        join-permissions
:
         - "vip.chat.channel"
        subscribe-permissions
:
         - "vip.chat.channel"
        one-time-msg-permissions
:
         - "vip.chat.channel"
        password
: "ThisIsNotForOrdinaryPeople"
        cooldown
: 2
        muted
: false
        subscriptions
: true
        bans
: [ ]
        mutes
: [ ]

  # this is basically a spy channel across all existing channels,
  # to which you can subscribe to hear messages from ALL channels in game
  # you can use these additional formatting placeholders:
  global-spy-channel
:
    enabled
: true
    shortcut
: "@spy"
    # the forwarded original chat message will be stripped of all color information
    # and shown in gray italics by default
    format
: "&7&o{CHANNEL_SHORTCUT} {MESSAGE}"

  # default chat messages format if channels module is disabled
  default-chat-format
:
    enabled
: true
    format
: "&d{DISPLAYNAME}&f > {MESSAGE}"
    cooldown
: 3
    muted
: false
    mutes
: [ ]

  # format of broadcast messages (via the /say command)
  broadcasts
:
    enabled
: true
    format
: "&d[{DISPLAYNAME}&d] {MESSAGE}"

  # private chat messages format, via /msg or /tell command (configurable)
  # you can use 2 additional placeholders here, {RECIPIENT}
  # which will give you the display name of the message recipient
  # and {RECIPIENT_NAME} which will give you the clear username
  # of the recipient
  private-chat
:
    enabled
: true
    format
: '&6 {DISPLAYNAME }&a >> &6 {RECIPIENT_NAME }&r : &d{MESSAGE}'
    cooldown
: 3

  # you can allow logging and spying on commands run by your players
  command-spy
:
    enabled
: true
    # if you want to exclude some commands from being spied on you can set them up here
    # this restriction can be bypassed via ec.bypass.command-spy-commands permission
    excluded-commands
:
     - register
      - login

  # if you prefer not to have color codes from chat sent to console,
  # since they generate weird characters in the server log file,
  # you can set this up here
  console-strip-chat-colors
: false

  # if you'd like to run certain commands when someone in chat types a certain phrase,
  # or you'd like to replace certain words or phrases with custom text, you can set them up here
  # ... you can replace "* smiles" in chat and run it as "/me smiles"
  # ... or you can replace phrases such as "this server sucks" with "I'm in love with your server, really!"
  #
  # note: these patterns must be Java RegExp patterns, which is an advanced way of telling the server
  #       to look for certain patterns in chat messages and replace them by certain commands
  chat-aliasing
:
    enabled
: false
    patterns
:
      # match any text that begins with "* " and continues with some text
      "asterisk and space into emote"
:
        # the text phrase to match
        match
: "^\\* (.+)"
        # redirect chat output to command
        command
: "me $1"
        # if this is true, the original chat message will still be shown
        # if this is false, only the command will be run and the chat message will be cancelled
        # default: true
        cancel-original-message
: true
        # if you want this pattern to work only in certain worlds, list them here
        # default: []
        excluded-worlds
:
         - MyCrazyWorld
          - world27
        # if you want the "excluded-worlds" option to actually work as "included worlds",
        # set this to true and your phrase will only be available in the worlds given above
        # otherwise set this to false
        # default: false
        excluded-worlds-works-as-whitelist
: false
      # match the phrase "this server sucks" exactly
      "surprise bad talkers"
:
        # this will match the below text in a case-insensitive manner
        match
: "(?i)this server sucks"
        # ... the above patterns will now match all of the following:
        #     - this server sucks
        #     - ThiS serVEr SUcks
        #     - THIS SERVER SUCKS
        #
        # now replace message by custom text
        replace
: "I'm in love with your server, really!"
        # if you'd like to send a response to the player who sent the chat message
        # you can use the following option to set it up
        respond
: "&cNo need to be rude. You may leave anytime."
      # international characters work from MC versions 1.9 and above,
      # 1.8 has bad unicode support
      "unicode replacement"
:
        match
: "(?U)železný kôň"
        replace
: "drevený kôň"

  # chat bubbles on top of player heads as they talk (MC 1.11.2+)
  # PLEASE NOTE: chat bubbles above player heads IGNORE local chat and hear-through-walls limitations
  #              and are visible for the same distance as every other name tag in the game
  chat-bubbles
:
    enabled
: false
    # maximum rows a single chat bubble can have
    max-bubble-height
: 3
    # maximum characters a single chat bubble can show
    # longer words won't be truncated and will still appear whole in a single line
    max-bubble-characters
: 15
    # number of ticks (1 tick = 50ms) between chat bubbles, so there is a slight pause
    # between the one and the next chat bubble for a better visual effect
    pause-between-bubbles
: 5
    # characters per minute, considering an average of 5 chars per word (4 letters + 1 space)
    read-speed
: 800
    # number of characters to prolong the read-speed calculations by, as I notices that
    # there is an additional time of about 2 word (10 characters) required to note the message
    # and re-position player's eyes
    read-speed-adjustment
: 10
lang
: en-gb
 


Developer API
EasyChat uses custom ECChatEvent event which can be utilized to update chat formatting, even per each player to who the message is being sent:

Code (Java):
@EventHandler (priority = EventPriority. LOWEST )
public void updateEasyChatMessage ( final ECChatEvent e ) {
  // prefix whole message with simple text
  e. prefix_message_with_text ( "&a[B4 nickname]" ) ;

  // prefix whole message with a JSON-enabled chat component
  e. prefix_message_with_json ( "{\"text\":\"" + ChatColor. GRAY + "[XYZ]" + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + "/my_command " + e. getPlayer ( ). getName ( ) + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"run my command\"}}" ) ;

  // prefix one of the recipients with custom message
  for ( Player player : e. getRecipients ( ) ) {
    if ( player. getName ( ). equals ( "Zathrus_Writer" ) ) {
      e. prefix_player_message_with_text ( player, "&c[Owner]" ) ;
    }
  }

  // prefix one of the recipients with custom JSON-enabled chat component
  for ( Player player : e. getRecipients ( ) ) {
    if ( player. getName ( ). equals ( "Zathrus_Writer" ) ) {
      e. prefix_player_message_with_json ( player, "{\"text\":\"" + ChatColor. RED + "[K]" + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + "/kill\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"harakiri\"}}" ) ;
    }
  }
}


This plugin utilizes BStats metrics system. Various server information is collected and sent to bstats.org unless opted out. Opting out of this service can be done by changing the value of enabled from true to false in file Plugins/bStats/config.yml.
Resource Information
Author:
----------
Total Downloads: 9
First Release: Mar 10, 2021
Last Update: Apr 21, 2021
Category: ---------------
All-Time Rating:
2 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings