### Version 2.5.0:
This is the biggest update to Ambience Mini yet which introduces a system for configuring named areas (or regions) which can be used for music selection. Staying true to the philosophy of "no server-support required to run", the area system works regardless of whether the server has the mod installed or not. If no server-support, the server-dependent features are simply disabled.
The configuration language has also been extended a lot to make it more usable and flexible, but while retaining the original simplicity. **Beware of breaking changes to the configuration language syntax as described below**. Finally new events and properties have been added as described below.
**Area system:**
- Added a client-side-based system for configuring areas.
* Areas can always be stored locally (stored separately from world; sensitive to world and server names).
* With server support, areas can be stored within the world and optionally shared with other players.
**Events and Properties:**
- Added `$areas` property which contains a list of all areas the player is currently touching.
* `$areas` is ordered by the volume of areas in increasing order (first area is the smallest).
- Added `$uuid` property for getting the id of the player. (Can be used to check area ownership.)
- Added `@warden_nearby` event which is active when a Warden is within 32 blocks (2 chunks) of the player.
* **Note:** This event is only available from Minecraft 1.19 and up.
- Added `$structures` property which contains a list of the ids of all structures that the player is in.
* **Note 1:** even if the "structure blocks" are removed, the "structure bounding box" still exists.
* **Note 2:** it is a bit difficult to get a sensible hitbox for structures and some structures' hitboxes might be a slightly off. If so, feel free to report where this happens.
* **Important:** `$structures` requires server support to function. If no server-support, then `$structures == undefined`.
**Configuration language:**
- **Breaking change:** Changed the syntax for `all/any [x] in [list] **where** [condition] end` to `all/any [x] in [list] **has** [condition] end`
- Added indexing operator `[]` for lists where the first element has index `0`. Example: `list[0]`.
- All values in the configuration language can now have an "undefined" value.
* For example, `list[n] == undefined` if there is no element at index `n` in the list.
* Also, if no world is currently loaded, events such as "@rain" will also have `@rain == undefined`.
- Added the constant `undefined` which can be of any type.
- Added operator `[value] *~ [regex]` for matching strings with regular expressions (using Java regex syntax).
- Added more number-comparison operators: `<=`, `>`, and `>=`.
- Added unary operators for logical not `!` and for number negation `-`.
- Added field access notation `value.field`.
* As an example `area.name` gets the name of an area, whereas `area.owner` gets the owner's id (if the area is owned).
- Added `let [name] = [value] in [schedule]` for introducing named values in a schedule.
* This allows the values of expensive events and properties for reuse in multiple checks.
- Fixed bug in list equality check where equality was only checked up to the length of the shortest list.
**Other:**
- Many big and small improvements and fixes.
****
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }