Holidays and Seasons

Holidays and seasons let you run effects on real-world dates, like double XP on Christmas Day or a summer shop. You define each one in a config file, and libreforge gives it a condition, a filter, and start and end triggers you can use anywhere. This page covers creating one, naming it, the date options, and the components each one gets.

Quick start

  1. Open the holidays.yml or seasons.yml file in /plugins/libreforge.

  2. Add an entry under holidays: or seasons: with an id and a date.

  3. Run /libreforge reload.

  4. Use the is_<id> condition on an effect, and confirm it only runs on your date.

Naming and IDs

Each holiday or season needs an id. It names the condition, filter, and triggers it gets, so a holiday with id: christmas_day gives you is_christmas_day, christmas_day_start, and christmas_day_end.

The structure of a holiday

PartWhat it controls
DatesThe days of the year it is on
Calendar optionsThe month, day of the week, or week of the month it must fall in
OffsetMoving it earlier or later by a number of days

Every option you set must match for the holiday to be on. A list matches if any value in it does.

holidays:
  - id: christmas_day # === Dates ===
    date: "12-25" # The same day every year

  - id: thanksgiving # === Calendar options ===
    month: november # Month names or numbers
    day_of_week: thursday # Day names or numbers (1 = Monday ... 7 = Sunday)
    week: 4 # The fourth Thursday of the month

  - id: black_friday # === Offset ===
    date: "%thanksgiving%" # Whenever the thanksgiving holiday is on
    date_offset: 1 # One day later

Dates

Set date for one date, or dates for a list. Always quote dates.

FormatMeaning
"12-25"The same day every year
"2026-11-08"One day only
"12-25..01-05"Every day in between, and can cross New Year
"2027-02-06..2027-02-20"Every day in between, once
"%easter%"Easter Sunday, worked out for every year
"%<id>%"Whenever another holiday in the same file is on
"%<id>%..%<id>%"From the start of one holiday to the end of another
- id: diwali
  dates: # Dates that can't be calculated, like those on lunar calendars
    - "2026-11-08"
    - "2027-10-29"

- id: advent
  date: "%advent_sunday%..%christmas_eve%" # From one holiday to another

Calendar options

OptionValues
month / monthsMonth names (november) or numbers (1-12)
day_of_week / days_of_weekDay names (thursday) or numbers (1 = Monday ... 7 = Sunday)
week / weeksWhich one of its day of the week it is in the month (1-5, or last)
- id: memorial_day
  month: may
  day_of_week: monday
  week: last # The last Monday in May

- id: advent_sunday
  date: "11-27..12-03" # Options combine with dates too
  day_of_week: sunday

Offset

date_offset moves a holiday a number of days later, or earlier if negative. Use a range to cover every day in between.

- id: good_friday
  date: "%easter%"
  date_offset: -2 # Two days before Easter Sunday

- id: twelve_days_of_christmas
  date: "%christmas_day%"
  date_offset: 0..11 # Christmas Day and the 11 days after it

Seasons

Seasons use the same options, in seasons.yml. The defaults are the northern hemisphere's meteorological seasons, and southern hemisphere servers can swap the months around.

seasons:
  - id: summer
    months: [ june, july, august ]
  - id: winter
    months: [ december, january, february ]

Using holidays and seasons

Every holiday and season gets these, which work like any other condition, filter, or trigger.

ComponentIDWhat it does
Conditionis_<id>Passes while it is on
Filteris_<id>Matches while it is on (true) or off (false)
Trigger<id>_startFires for every online player at midnight on its first day
Trigger<id>_endFires for every online player at 23:59 on its last day
effects:
  - id: xp_multiplier
    args:
      multiplier: 2
    conditions:
      - id: is_christmas_day

Where to go next

  • Conditions: Configuring a Condition to run effects only on a holiday.

  • Effects: Configuring an Effect to build what happens on the day.

  • Placeholders: Custom Placeholders to show different values in a season.