Skip to content

Creating Your Own Cosmetics

Quick Start: Monetize your server.

  • Every look is one leaf under cosmetics: in plugins/JManhunt/advanced/cosmetics.yml, nested by group, sub, then name. Save the file, run /manhunt reload, and your look shows up in the menu.
  • A broken leaf warns in the console and skips itself; the rest of the file keeps working.

Quick Start: A Purple Floor Ring (5 minutes)

  1. Open plugins/JManhunt/advanced/cosmetics.yml and find the cosmetics: section at the bottom.
  2. Add a leaf under lobby:, floor: like this:
cosmetics:
  lobby:
    floor:
      violet-ring:
        enabled: true
        meta:
          icon: "PURPLE_CONCRETE_POWDER"
          rarity: "uncommon"
        params:
          particle: "DUST"
          color: "AA55FF"
          radius: "1.2"
          interval-seconds: "0.75"
          amount: "10"
  1. Run /manhunt reload and open /manhunt cosmetics: Violet Ring sits in Lobby, Floor, glowing uncommon-green. The name reads from your language file (see below); without an entry there it falls back to the prettified leaf name.
  2. Give yourself the win permission so you can unlock it: lp user <you> permission set jmanhunt.cosmetics.lobby.floor.violet-ring true then /manhunt cosmetics unlock lobby.floor.violet-ring.
  3. Ready for a drawing instead of a ring? The 10-minute Creeper Wings quickstart builds a PNG tracing from scratch.

The leaf shape

Field Meaning
path group.sub.name, all lowercase, like highlights.kill.drum. The group and sub pick where the look lives and what it fits; the name must be unique. Note the dashes in in-hand, bad-signal, and final-kill.
enabled false hides the leaf without deleting it.
kind Only for multi-kind subs (kill, final-kill, mourn, win, celebration): names what the look does, and must fit the sub. Every other sub infers its single kind from the path.
meta.icon The menu icon material, with optional JMH Icon Data.
meta.rarity common, uncommon, rare, epic, or mythic. Anything else skips the leaf.
params The kind's settings (particle, size, sound, and so on).

The 13 group/sub pairs: lobby.floor, lobby.aura, lobby.wings, compass.refresh, compass.in-hand, compass.analysis, compass.bad-signal, footsteps.trail, highlights.kill, highlights.final-kill, highlights.mourn, highlights.win, highlights.celebration.

Names and lore live in your language

Menu names and lore lines are translated per language, in the cosmetics.names: section of each lang/<code>.yml file, nested exactly like the cosmetics file: group, sub, name, then name: and desc:. Add entries in the same shape for your own looks:

cosmetics:
  names:
    lobby:
      floor:
        violet-ring:
          name: "Violet Ring"
          desc: "A purple ring for patient waiters."

A look without an entry still renders: its name falls back to the prettified leaf name (violet-ring reads Violet Ring) with no lore line.

Which kinds fit where

  • Lobby: floor, aura, wings (particles, sizes, intervals).
  • Compass: needle, hand, analysis (plus sound for bad signals).
  • Footsteps: trail.
  • Highlights: sound, hiss, blast, head (kill only), mob, fountain, lightning and tnt (final kill only), pattern (mourn only), spawn, rain, ride (win and celebration only).

  • Each group page lists every kind-specific setting and its limits. Values outside the limits warn and skip the leaf, as do unknown particles, sounds, creatures, and materials, so copy an existing leaf and tweak one thing at a time.

  • A setting name the kind does not take (a typo, or count left over from before it became amount) warns and is ignored, and the leaf still loads. Drawings work through tracings.

Shared particle settings

Every kind that takes a particle also takes these:

  • speed: spawn speed, 0 to 0.4 (0 if left out). Footsteps cap at 0.08. Most looks sit at 0; only very explosive ones approach the cap. The NOTE particle reads its hue from speed, so leave it at 0 unless you want to retune the color.
  • block: block material, needed for BLOCK, FALLING_DUST, DUST_PILLAR, and BLOCK_CRUMBLE.
  • item: item material, needed for ITEM.
  • color-to: second hex color, needed for DUST_COLOR_TRANSITION (paired with color).
  • power: scalar strength, 0 to 64 (1 if left out). Drives dragon breath and sculk charge size, shriek delay, and geyser height.

Every particle type works except VIBRATION, TRAIL, and BLOCK_MARKER, which warn and skip the leaf.

Shared sound settings

Every kind that takes a sound also takes volume (0 to 2, 1 if left out) and pitch (0.5 to 2, 1 if left out).

Making it earnable

A new look drops and unlocks like any other once someone is allowed to win it:

  • Win permission: jmanhunt.cosmetics.<group>.<sub>.<name> (LuckPerms, or any permission plugin).
  • Instant unlock: jmanhunt.cosmetics.<group>.<sub>.<name>.owner.
  • Rank grant: add the id to a rank's ids: list in the same file (see Ranks).

Drops pick it up by rarity automatically: its rarity weight decides how often its rarity rolls, and it joins the pool of looks the winner is allowed to win.