πŸ”₯Join our Discord for support, updates, and custom commissions.
Polaroid Studio Logo
PolaroidSTUDIO
DiscordLog In

✏️ Writing

Four things a player can put in a line of chat beyond the words.

Emoji

emojis.yml. A player types a shortcut and it becomes a picture.

  heart:
    placeholder: ':heart:'
    emoji: '<#eb4b30>❀'
    permission: ''
    tab_complete: true
    tooltip:
      - '<#E9FDFB>Type <#f2c42f>%placeholder%<#E9FDFB> in chat'
      - '<#95d027>β–Έ Click to copy'
    click: '[COPY] %placeholder%'
KeyDecides
placeholderWhat they type
emojiWhat it becomes
permissionWho may. Empty means everyone
tab_completeWhether it is offered while typing
soundA sound it makes β€” see below

A shortcut ending on a letter is only replaced when it stands as a whole word, so hp is left alone inside a longer one. One ending on anything else β€” :hp: and its like β€” marks its own edges and is replaced anywhere.

An emoji drawn by a tag keeps its own colours. One written as text takes on the sender's chat colour, like the rest of the message.

Sounds. Give an emoji a sound: block and it plays when somebody sends it. Both the cooldown and the switch belong to whoever is listening: a message is written once and heard by many, and each of them decides. Write none as the name to keep one emoji silent while others sound.

/emojis lists what the player asking may actually use β€” as a book or in chat, set by display.

Sprites and heads

Three tags, one permission each:

TagDrawsPermission
<sprite:name>A built-in game texture, no resource pack neededpolaroidchat.tag.sprite
<glyph:name>A Nexo glyphpolaroidchat.tag.glyph
<head:Player>A player's facepolaroidchat.tag.head

<sprite:…> needs Minecraft 1.21.9 or newer; on older servers it renders as nothing and the rest of the message is unaffected. The prefix can be dropped for any name the catalogue knows, so <wooden_sword> works.

A head can also be named by the id behind an account, which outlives a name change (<head:uuid:069a79f4-…>), or by a skin handed over directly, belonging to no account (<head:texture:eyJ0ZXh0…>).

/sprites lists what is available on the running version.

Mentions

mentions in config.yml. Writing @Steve marks the name and notifies them.

SettingDecides
prefixWhat starts a mention. Empty means a bare name is enough
highlightThe colour. Empty uses the colour that player already wears
cooldownSeconds before the same player may be pinged again by the same sender
max_per_messageHow many one message may land. 0 is no limit
match_nicksWhether a player answers to their nick as well as their name
hover / clickThe tooltip and what clicking does

A mention made too soon is left exactly as typed: not marked, not announced.

notify decides what the mentioned player sees, and shares its shape with private-message notices β€” see the notifications block.

Sharing something in chat

interactive in config.yml. A keyword puts a thing in chat that others can open.

KeywordShows
[item], [i]The item in their hand, with its real tooltip
[inv], [inventory]Their whole inventory, armour and level
[ender], [e]Their ender chest

What is shared is snapshotted as the message is sent, so opening it an hour later shows what was shared, not what they hold now.

Every keyword takes the same shape, written once under interactive.defaults β€” whether it is on, how long it stays openable, how long before it may be used again. Each keyword names only what makes it different.

Your own. Add one under interactive.custom:

    coords:
      keyword: '[coords]'
      name: '[coords]'
      description: 'Shares where you are'
      regex: false
      replacement: '<#E9FDFB>[<#f2c42f>%player_x% …<#E9FDFB>]'
      hover:
        - '<#E9FDFB>World: <#f2c42f>%player_world%'
      click: ''

Allowed by polaroidchat.interactive.<name>. PlaceholderAPI resolves in every field. Setting regex: true reads the keyword as a regular expression and lets what it captures be used as $1, $2 in the replacement, hover and click.

Commands. A command written inside […] becomes one a reader can click. The wrapper is asked for so that every command merely mentioned in passing does not become clickable.

Limits worth knowing. max_per_message refuses to send a message carrying too many. max_shares caps how many stay openable at once, and so caps memory. A lodestone compass is sent pointing at spawn instead of where it really points, so sharing one does not hand everyone a location.

Notifications

Mentions and private messages both raise a notice, and both take the same channels: actionbar, title, bossbar, sound and toast.

That shape is written once in config.yml under notifications β€” which channels are on, their timings, the sound. Each of the two sites then writes only its own wording, under chat.msg_notifications and mentions.notify.

A player turns any of them off for themselves with /polaroidchat toggle.

One inconsistency the plugin has always had: chat.msg_notifications.bossbar.duration counts in ticks, while mentions.notify.bossbar.duration counts in seconds.