Spooky season is here. Happy Halloween from Lattice!
Lattice
Docs/LatWrapped

LatWrapped

Your players' year in review: a short film with music and games, and a story card to share.

No reviews yet

Overview

Module id
wrapped
Version
1.0.0
Platforms
foliapaper
Price
$9.99
Authors
Atlantis Services

Install

  1. Install Lattice on a Paper or Folia server, if it is not there yet.
  2. Drop the LatWrapped jar into plugins/Lattice/modules/. It loads straight away.
  3. Put your license key in lattice.yml, then run /lat license refresh.
  4. Edit config/global/wrapped/ and apply it with /lat reload wrapped.

Commands

Command names and aliases are set in config.yml, so yours may differ. <required> [optional]

Command Description Permission
/wrapped
also /recap
Your year in review wrapped.use
/wrapped admin
Wrapped admin wrapped.admin
/wrapped admin test [player]
Snapshot now and open last year's Wrapped -
/wrapped admin demo
Publish a Wrapped with sample numbers, to link from a store page -
/wrapped admin web [player]
Make a player's web page now, skipping the cooldown -

Permissions

Permission Lets a player use
wrapped.use
/wrapped
wrapped.admin
/wrapped admin

config.yml

Written to config/global/wrapped/config.yml on first start. Edit it, then /lat reload wrapped.

# Wrapped: a year in review for every player, built from vanilla statistics.
# /wrapped opens a menu with two buttons: a map to hang on a wall, and the Wrapped as a web page.

# Generated from WrappedSettings. Keys you delete return to their default;
# keys that are not in the schema are ignored and reported on load.

command:
  # Takes effect on restart.
  name: "wrapped"
  aliases:
    - "recap"
  permission: "wrapped.use"
  # For /wrapped admin, and to make web pages without waiting for the cooldown.
  admin-permission: "wrapped.admin"
# Your server on the menu, the map and the web page. Every field is optional.
branding:
  # e.g. YourServer, shown as 'YourServer Wrapped'.
  server-name: "YourServer"
  # A square PNG over https. For the downloadable card the host must allow cross-origin images; most do.
  logo-url: ""
  # What players join with, e.g. play.example.net, shown with a copy button.
  address: "play.example.net"
  # Your website or store over https, linked from the end of the web page.
  website: ""
# Day the year closes and its Wrapped opens, as MM-DD. 12-26 lands it at Christmas;
# days from then on count toward the next year. 01-01 gives a plain calendar year.
year-closes: "12-26"
# Timezone for that day, e.g. Europe/London.
timezone: "UTC"
# Days after the year closes that players are told on join that their Wrapped is ready.
reveal-days: 14
# Colours of the map and the web page, as #rrggbb.
colours:
  background: "#0e0f11"
  accent: "#38bdf8"
  text: "#f2f3f5"
card:
  # Offer the map in the menu.
  enabled: true
  # Numbers on the map, 1 to 6, from the top of statistics.
  stats: 4
web:
  # Offer the web page in the menu. A player who clicks it publishes their name and numbers
  # to the Lattice license server, deleted after 'hours'. Nothing is sent unless they click.
  enabled: true
  # How long a page lives, 1 to 24.
  hours: 24
  # Minutes between pages per player. Each page counts toward the license's daily quota.
  cooldown-minutes: 30
# Minutes a player must have played in the year to count toward the 'top X%' numbers,
# so alts that joined once do not make everyone look like the top 1%.
min-playtime-minutes: 30
# Years of history kept per player.
keep-years: 3
# The numbers shown, in order, at most 7. Each one:
#   statistic    a Bukkit Statistic name, e.g. PLAY_ONE_MINUTE, MINE_BLOCK, KILL_ENTITY, WALK_ONE_CM
#   target       for MINE_BLOCK, KILL_ENTITY and the like: a block, item or entity, or * for all of them
#   favourite    also show the target with the highest count, e.g. 'Favourite: Deepslate' (target * only)
#   unit         COUNT, HOURS (play time) or KM (distance)
#   label, icon  what it is called, and the item drawn for it
#   comparisons  'that is <name> <n> times'; amount is in the unit, the biggest that fits is used
statistics:
  playtime:
    statistic: "PLAY_ONE_MINUTE"
    target: ""
    favourite: false
    unit: HOURS
    label: "Time played"
    icon: "CLOCK"
    comparisons: []
  mined:
    statistic: "MINE_BLOCK"
    target: "*"
    favourite: true
    unit: COUNT
    label: "Blocks mined"
    icon: "IRON_PICKAXE"
    comparisons: []
  hunted:
    statistic: "KILL_ENTITY"
    target: "*"
    favourite: true
    unit: COUNT
    label: "Mobs slain"
    icon: "IRON_SWORD"
    comparisons: []
  walked:
    statistic: "WALK_ONE_CM"
    target: ""
    favourite: false
    unit: KM
    label: "Distance walked"
    icon: "LEATHER_BOOTS"
    comparisons:
      - name: "London to Paris"
        amount: 344.0
      - name: "the length of Great Britain"
        amount: 1407.0
      - name: "New York to Los Angeles"
        amount: 3936.0
  fish:
    statistic: "FISH_CAUGHT"
    target: ""
    favourite: false
    unit: COUNT
    label: "Fish caught"
    icon: "FISHING_ROD"
    comparisons: []
  crafted:
    statistic: "CRAFT_ITEM"
    target: "*"
    favourite: false
    unit: COUNT
    label: "Items crafted"
    icon: "CRAFTING_TABLE"
    comparisons: []
  deaths:
    statistic: "DEATHS"
    target: ""
    favourite: false
    unit: COUNT
    label: "Deaths"
    icon: "SKELETON_SKULL"
    comparisons: []
# Each player gets the persona of the statistic they rank highest in on the server.
personas:
  regular:
    statistic: "playtime"
    name: "The Regular"
    description: "Always online. The server would not be the same without you."
  excavator:
    statistic: "mined"
    name: "The Excavator"
    description: "If it is a block, you have dug through it."
  hunter:
    statistic: "hunted"
    name: "The Hunter"
    description: "Nothing that moves is safe around you."
  wanderer:
    statistic: "walked"
    name: "The Wanderer"
    description: "You have seen more of this world than anyone."
  angler:
    statistic: "fish"
    name: "The Angler"
    description: "Patience, a rod, and a lot of fish."
  artisan:
    statistic: "crafted"
    name: "The Artisan"
    description: "The crafting table is your second home."
  daredevil:
    statistic: "deaths"
    name: "The Daredevil"
    description: "Respawning is just part of the plan."
# Persona for a player who ranks in nothing yet.
fallback-persona:
  name: "The Explorer"
  description: "A bit of everything, everywhere."

Messages

Every line players see, in config/global/wrapped/messages.yml. Uses MiniMessage formatting.

Show messages.yml (95 lines)
# Player-facing text for wrapped.
# Placeholders in {braces} are filled in by the module.
# A key you delete falls back to its built-in default.

admin-demo: <body>Making a demo page with sample numbers...
admin-demo-link:
- '<body>Demo Wrapped: <click:open_url:''{url}''><accent><u>{url}</u></accent></click>'
- <muted>It lasts {hours} hours.
admin-test: '<body>Test: snapshot taken for <accent>{player}</accent>, opening last
  year''s Wrapped.'
admin-web: <body>Making a web page for <accent>{player}</accent>, cooldown skipped.
admin-web-link: '<body>{player}''s Wrapped: <click:open_url:''{url}''><accent><u>{url}</u></accent></click>'
card-dropped: Your inventory is full, so your card is at your feet.
card-given: Here is your Wrapped card. Hang it in an item frame and take a screenshot!
card-name: <accent>Wrapped {year}
card-once: You already took your Wrapped card. Rejoin to take another.
card-title: WRAPPED {year}
card-title-brand: '{server} {year}'
demo-name: Steve
menu-map: <accent>Get your Wrapped map
menu-map-lore:
- <body>Hang it in an item frame
- <body>and take a screenshot.
menu-title: Your {year} Wrapped
menu-title-brand: '{server} Wrapped {year}'
menu-web: <accent>Open as a web page
menu-web-lore:
- <body>Your year as a short film
- <body>with music, games and a card.
- ''
- <muted>Publishes your name and numbers
- <muted>for {hours} hours.
months:
- January
- February
- March
- April
- May
- June
- July
- August
- September
- October
- November
- December
no-recap: Your first Wrapped is not ready yet. It opens on {date}.
not-online: '{player} is not online.'
players-only: Only a player can do that.
ready: <body>Your <accent>{year} Wrapped</accent> is ready! <click:run_command:'/{command}'><accent><u>Open
  it</u></accent></click>
unit-hours: h
unit-km: km
web-advancement: Advancement Made!
web-bad-link: bad link
web-brand-presents: '{server} presents'
web-challenge: Challenge Complete!
web-close: Close
web-comparison: That is {name} {times} times
web-cooldown: You can make another page in {minutes} minutes.
web-copied: Link copied
web-copy: Copy link
web-copy-ip: Copy IP
web-download: Download card
web-failed: 'Your page could not be made: {reason}'
web-fav-prompt: Which one was your favourite?
web-favourite: 'Favourite: {target}'
web-first-day: Your first day here
web-footer: Made with LatWrapped
web-guess: 'Guess: how much {label}?'
web-heading: Your {year} Wrapped
web-heading-brand: '{server} Wrapped {year}'
web-ip-copied: IP copied
web-keys: ← → skip · space pause · M mute
web-now-playing: 'Now playing: {year} Wrapped'
web-persona-intro: This year, you were
web-persona-prompt: Which one were you?
web-play: Press play
web-play-on: Play on {address}
web-post: Post on X
web-presents: A year on the server, as told by your stats.
web-published: '<body>Your Wrapped is ready: <click:open_url:''{url}''><accent><u>open
  it</u></accent></click> <muted>(link works for {hours} hours)'
web-replay: Watch again
web-right: Nailed it.
web-save-hint: Long-press or right-click the card to save it.
web-share: Share
web-share-text: 'My {year} Wrapped: this year I was {persona}.'
web-sound: Sound on or off
web-summary: '{year} Wrapped'
web-tap-hint: Pick one
web-top: Top {top}% on the server
web-unknown-error: unknown
web-wait: One moment, making your page...
web-website: Visit {server}
web-wrong: Not quite.