Skip to content

    Press / to search from anywhere.

    ModsDaily Calendar

    Making calendars

    Where calendar files go, and the calendar types: streak, monthly and dated.

    Calendars are JSON files, so server owners and pack makers can change every reward, add their own calendars and switch the built-in ones off. This page covers where the files go and the calendar’s own settings; Rewards and themes covers what goes behind the doors.

    Where the files go

    • Server owners: config/dailycalendar/calendars/<name>.json. The id is dailycalendar:<name>, unless the file has its own "id": "myserver:winter". A file named like a built-in one (daily.json, halloween.json, advent.json) replaces it, and {"enabled": false} switches it off. config/dailycalendar/examples/ holds copies of the built-in calendars to start from (refreshed every start, never loaded).
    • Modpacks and datapacks: data/<namespace>/dailycalendar/calendars/<name>.json, id <namespace>:<name>. A config file with the same id wins over a datapack one.
    • Or list ids to switch off in disabledCalendars in config/dailycalendar/server.toml.

    Run /calendar admin reload (or /reload) after editing. Anything wrong (a typo, an item from a mod that isn’t installed, a bad colour) is listed in chat and the server log; a broken reward is left out rather than losing the whole calendar. /calendar admin preview <calendar> shows it with every reward visible, and /calendar admin test <calendar> <door> gives you a door’s rewards without saving anything.

    A calendar

    {
      "name": "Daily Rewards",
      "description": "A door a day. Come back tomorrow for the next one!",
      "type": "streak",
      "length": 28,
      "on_miss": "skip",
      "grace_days": 1,
      "on_complete": "restart",
      "reveal": "all",
      "sort": 0,
      "milestone_every": 7,
      "theme": { "door": "#8B5E3C", "accent": "#FFD866", "particles": "sparkles" },
      "default": [ { "item": "minecraft:bread", "count": 4 } ],
      "days": {
        "1": [ { "item": "minecraft:bread", "count": 6 } ],
        "7": { "milestone": true, "label": "Week one!", "rewards": [ { "item": "minecraft:diamond", "count": 2 }, { "levels": 3 } ] }
      }
    }
    Field Default Meaning
    name the file name Shown as the title and tab. A string, or a text component ({"text": "...", "color": "gold"}, {"translate": "..."}).
    description none A line under the doors.
    type streak streak, monthly or dated (see below).
    reveal all What players can see behind doors they haven’t opened: all, milestones (only milestone doors) or none (all surprises).
    sort 0 Tab order, lowest first. The calendar key opens the first one with a door waiting.
    days Door number (from 1) to what’s behind it. See Days.
    default nothing What’s behind doors not listed in days.
    milestone_every 0 (off) Make every Nth door a milestone (7 = 7, 14, 21…).
    streak_rewards none Bonuses for days in a row. See Streak rewards.
    requires everyone Who can use the calendar. See Who can use a calendar.
    theme warm wood Colours and effects, see Themes.
    enabled true false switches the calendar off.
    id from the file Config folder files only: the calendar’s id.

    Types

    streak: a door per day the player shows up. Door 1 on their first day, door 2 the next day they play, and so on. It’s personal: everyone starts at door 1.

    Field Default Meaning
    length 28 Number of doors (1-366).
    on_miss skip What missing a day does. reset: back to door 1. skip: the missed days’ doors stay shut forever, the player carries on where they’d have been (they keep what they opened). pause: nothing is lost, they carry on at the next door.
    grace_days 0 Days a player can miss in a row without it counting as a miss (their streak carries on too).
    on_complete restart After the last door: restart (a new round the next day) or stop (done for good).

    dated: a door per date, the same for everyone, like a real advent calendar.

    Field Default Meaning
    start, end "12-01" and "12-25" for every year, or "2026-12-01" and "2026-12-25" for that year only. Can wrap the new year ("12-30" to "01-02"). Dates can also be counted from Easter Sunday, which moves every year: "easter", "easter-13", "easter+1" (Western Easter). Door 1 is the start date.
    grace_days 0 How many days late a missed door can still be opened. The calendar stays up that long after it ends, too.
    preview_days 0 Show the calendar (all doors shut, “Opens in N days”) this many days before it starts.

    Doors are laid out under weekday headings, like a wall calendar.

    monthly: a dated calendar that’s always on: the current month’s days, 28 to 31 doors, starting fresh on the 1st. grace_days works as for dated (within the month). Door N is the Nth of the month, so days keys 1-31.