Skip to content

    Press / to search from anywhere.

    ModsDaily Calendar

    Rewards and themes

    What goes behind the doors: items, XP, commands, loot tables, mystery gifts, streak bonuses, permissions and themes.

    What’s behind each door, the streak bonuses, who can use a calendar, and how it looks. For where the files go and the calendar types, see Making calendars.

    Days

    Each entry in days (and default) is either a list of rewards, one reward, or an object:

    "25": {
      "milestone": true,
      "label": "Merry Christmas!",
      "icon": "minecraft:cake",
      "rewards": [ ... ]
    }
    Field Meaning
    rewards The rewards, all given when the door opens.
    milestone A big day: a gold door with a star, a fanfare and a bigger card, a firework, a title for players without the mod, and (if the server allows) “Taylor opened day 25 of Advent Calendar!” in chat.
    label Shown after the day number (“Day 25: Merry Christmas!”).
    icon The door’s picture. Without it, the first reward’s.

    Streak rewards

    A player’s streak is how many days in a row they’ve opened a door on that calendar (grace days count as kept). streak_rewards gives a bonus when it reaches a number, on top of that day’s door:

    "streak_rewards": {
      "30": { "label": "30 days in a row!", "rewards": [ { "item": "minecraft:diamond", "count": 3 } ] },
      "100": { "label": "100 days in a row!", "once": true, "rewards": [ { "item": "minecraft:netherite_ingot" } ] }
    }

    Each entry is a day (a list of rewards, one reward, or an object with rewards and label). With "once": true a player only ever gets it once; otherwise they get it again if their streak resets and climbs back. The streak carries on when a streak calendar starts a new round, so a 28-door calendar can still reward 100 days in a row. Players see a bar under their streak filling towards the next bonus (hover it for what it is); reaching one gets a heading on the reveal card, a firework and a line in chat.

    Who can use a calendar

    "requires": { "permission_level": 2, "tags": ["vip", "patron"], "teams": ["staff"] }
    Field Meaning
    permission_level At least this op level (0-4; 0 is everyone).
    tags Has one of these scoreboard tags (/tag <player> add vip).
    teams Is on one of these scoreboard teams.

    All parts must be met; tags and teams together mean either one is enough. Players who don’t meet it don’t see the calendar at all, get no reminder for it, and can’t open its doors.

    Every calendar also has a permission node, dailycalendar.calendar.<namespace>.<name> (so dailycalendar.calendar.dailycalendar.daily), for permission mods like LuckPerms. Its default is the requires rule (everyone, if there isn’t one), and the permission mod can grant or deny it per player or group, e.g. a VIP-only calendar with "requires": {"permission_level": 4} and the node granted to the VIP group. On NeoForge the nodes go through NeoForge’s permission API and are registered as the server starts, so a calendar added afterwards goes by its requires rule until the next restart. On Fabric they go through fabric-permissions-api, which LuckPerms and other permission mods bring (without one installed, the requires rule decides); any calendar works, whenever it was added.

    Rewards

    The kind is worked out from the fields, or set it with "type". Every reward can have a "display" (string or text component) to say what it is in tooltips and the reveal card, and most can have an "icon" (an item id or {"id": ..., "components": {...}}).

    Items

    { "item": "minecraft:diamond", "count": 3 }
    { "item": "create:brass_ingot", "count": 16 }
    { "item": "minecraft:diamond_pickaxe",
      "name": "The Daily Grind",
      "lore": ["For 28 days of showing up."],
      "components": { "minecraft:enchantments": { "levels": { "minecraft:efficiency": 4, "minecraft:unbreaking": 3 } } } }
    • item (or id): any item from any mod. If the mod isn’t installed the reward is skipped and reported.
    • count: any number. More than a stack is handed out in stacks; what doesn’t fit is dropped at the player’s feet.
    • components: item components, written as in /give and datapacks since 1.20.5 (they replace NBT). Some useful ones: minecraft:enchantments and minecraft:stored_enchantments ({"levels": {"minecraft:mending": 1}}, or from 1.21.5 just {"minecraft:mending": 1}), minecraft:dyed_color ({"rgb": 11546150}, or just 11546150; Daily Calendar accepts either form of these two on every version), minecraft:fireworks, minecraft:potion_contents ({"potion": "minecraft:strong_healing"}), minecraft:unbreakable ({}), minecraft:custom_model_data, and modded components by their id.
    • name and lore: shortcuts for a custom name and lore lines (strings or text components), not in italics.

    A bare string is an item too: "minecraft:apple".

    Experience

    { "xp": 50 }
    { "levels": 5 }
    { "xp": 100, "levels": 2 }

    Commands

    { "command": "effect give @s minecraft:speed 300 1", "display": "Speed II for 5 minutes", "icon": "minecraft:sugar" }
    { "commands": ["give @s minecraft:cake", "title @s actionbar \"Happy birthday!\""], "display": "A party" }

    Run as the player (@s), at their position, with full permission, output hidden. {player} and {uuid} are replaced with the player’s name and UUID, for plugins and other mods’ commands (eco give {player} 500). Give a display, since players can’t see the command.

    Loot tables

    { "loot_table": "minecraft:chests/simple_dungeon", "display": "A dungeon chest's worth", "icon": "minecraft:chest" }

    Any loot table, including datapack and modded ones, rolled fresh for each player (luck counts).

    Mystery gifts (random pools)

    {
      "random": [
        { "weight": 4, "item": "minecraft:gold_ingot", "count": 3 },
        { "weight": 3, "item": "minecraft:emerald", "count": 2 },
        { "weight": 1, "item": "minecraft:diamond" },
        { "weight": 2, "xp": 40 },
        { "weight": 1, "command": "effect give @s minecraft:luck 600", "display": "Luck for 10 minutes" }
      ],
      "rolls": 1,
      "unique": false,
      "display": "A mystery gift",
      "icon": "minecraft:ender_chest"
    }

    Picks rolls entries (default 1), each with a chance of weight out of the total (default weight 1). With "unique": true the same entry can’t come up twice in one opening. Entries can be any reward, including another pool or a loot table ("pool" works as well as "random"). Until the door is open it shows as display; after, the door shows what actually came out.

    Themes

    "theme": {
      "background": "#B0100C08",
      "panel": "#2B2118",
      "frame": "#5C4128",
      "door": "#8B5E3C",
      "milestone": "#D9A531",
      "accent": "#FFD866",
      "text": "#F5EBDD",
      "particles": "sparkles",
      "door_item": "minecraft:oak_door",
      "icon": "minecraft:clock"
    }

    Colours are #RRGGBB or #AARRGGBB (background is drawn over the world, so give it some transparency). accent is used for the title, glow round today’s door, and milestone chat lines. particles drift behind the doors: sparkles, snow, embers, leaves, hearts, petals, fireflies or none (players can turn them off with Reduced motion). door_item is a shut door in the chest menu players without the mod see; icon is the calendar’s tab icon and reminder toast picture. Anything left out uses the default (warm wood).

    The day and the clock

    A new day starts at rolloverHour (0-23) in timeZone (server, UTC or a zone like Europe/London), set in config/dailycalendar/server.toml. Only the server’s clock counts: players changing their own clock does nothing, and every door is checked on the server before anything is given. If the server’s clock is ever set back behind a player’s last door, nothing opens for them until it catches up.