# ExcellentCrates v7.0.0

The **v7 Major Update** brings a completely fresh experience to ExcellentCrates! Every single system has been rewritten from scratch, featuring true **modularity**, massive **performance boosts**, and, of course, fixes for all known bugs.

## Crate Blocks

There were plenty of complaints about the old block binding system, so here's a much better solution for everyone. Block binding is now handled by an **optional Blocks module**.

Instead of manually "linking" crates to existing blocks, you now just grab the crate block itself via the in-game GUI editor or the `/crate getblock` command, and place it down wherever you want! This gives you way more control, lets the system detect block positions with pinpoint accuracy, simplifies setup, and cuts down on weird bugs.

- **Modular feature!** If you don't plan on placing physical crate blocks in your world, feel free to disable this module entirely.
- **Inverted workflow:** Instead of linking a crate to a block, you just place the specific block (default, custom, or furniture) for that crate right into the world. Quick and painless!
- Added explicit support for **Nexo** custom blocks and furniture. Interactions are handled properly now.
- Added explicit support for **ItemsAdder** custom blocks and furniture. Interactions are handled properly now.

## Holograms

- Added `Scale` and `LineWidth` settings for holograms via **PacketEvents**.
- **Dropped ProtocolLib support** for holograms due to its half-dead state. Please use **PacketEvents** instead.

## Fast Opening

Fast Opening - previously tucked inside "Mass Opening" - is now its own standalone feature. Opening a crate **while sneaking** automatically triggers **Fast Open** mode.

- **Modular feature!** You can fully disable it in the main **crates.core.yml** config, and it won't affect opening behavior at all.
- **Fast Open** skips all menus, automatically choosing the highest amount or whatever option is currently available.
- Skips animations entirely and grants rewards instantly.
- Key/currency selection is handled automatically, picking any available payment method.

## Batch (Bulk Opening)

Mass Opening is now simply called **Batch**. Backed by a brand-new codebase, it runs significantly smoother.

- **Modular feature!** Completely toggleable in the main **crates.core.yml** config file.
- Added a clean **GUI selector** to choose exactly how many crates you want to open in one go.
- The available amount automatically adjusts based on active cooldowns, costs, keys, and other limits.
- If a player can only afford 1 opening, the selector GUI is skipped completely.
- Opening via **Fast Open** always defaults to the maximum possible amount.

## Rarity

Let's be honest: having a separate rarity system that also altered reward drop chances was a bit overkill. It's gone now, making reward chances much easier to balance for everyone.

- The `Weight` option under `Rarity` no longer affects reward drop chances.
- Added a `Color` setting that modules and features can use to color-code reward rarities.

## Reward Commands

Rewards can now have multiple command "bundles", each with its own commands and settings. There are now **3 execution modes** controlling how these bundles are rolled and executed.

- **Modular feature!** You can completely disable the reward commands component. All related features disappear cleanly, without losing any data if you re-enable it later.
- Added a toggle switch in the GUI editor so you can pause command execution on win without deleting your setup.
- Added 3 command execution modes: `NORMAL`, `WEIGHT`, and `CHANCE`.
- `NORMAL` mode executes all bundles sequentially.
- `CHANCE` runs bundles in order, but only if each one passes its individual chance roll.
- `WEIGHT` picks and runs a single bundle based on configured weights.
- Added an **iterations option** for command bundles. For example, paired with `WEIGHT`, you can trigger a guaranteed number of bundles, rolling each one by weight.

## Reward Roll Count

A heavily requested feature - especially for non-GUI animations (which are the only ones right now anyway, haha) - is finally here! You can now configure any crate to roll multiple rewards per single opening.

- Added the `Required Amount` option in the crate editor's `Rewards` menu.
- Players will see as many reward animations as specified by `Required Amount`, multiplied by the chosen **Batch** count.
- Animations play out sequentially, one after another.

## Selectable Rewards

The non-gambling reward selection feature got some long-overdue love. You can even combine it with the Batch feature now! Pretty sweet.

- **Modular feature!** You can completely toggle this off so it never interferes with regular reward rolling.
- Moved to a **dedicated editor section**. Instead of the old workaround where it acted like a crate "opening mode", it's now just a clean toggle switch in the editor.
- The number of pickable rewards is governed by the same `Required Amount` setting.
- **Batch support!** Players can now pick as many rewards in one go as their keys/funds allow.
- **Quota support!** Players can instantly see how many of each reward they can claim based on cooldowns, limits, etc. Maxed-out rewards are hidden from the selection menu.
- Players can now select the same reward multiple times in one session (as long as their quota allows it).

## Editor Fast Mode

- Bulk reward adding has been renamed to **Fast Mode**.
- Fast Mode settings now persist until you log off and are unique to each editor session.
- Adding rewards in Fast Mode now requires a **double-click** instead of a single click to prevent accidental additions.

## Reward Broadcast

- **Modular feature!** You can turn off reward broadcast alerts completely.
- The crate editor now has a dedicated button opening a menu to toggle alerts per reward. More options might land here later.
- Broadcast messages now live in their own dedicated config - `rewards.broadcast.yml` - instead of being shoehorned into the lang file.
- Added **Rarity support** so you can configure custom announcements for each rarity tier.
- Sound effects can now be tuned per broadcast.

## Keys

### Commands

Added a dedicated `/cratekey` command for much cleaner key management.

### Redeem

Significantly improved the unclaimed key system, complete with dedicated redeem commands.

- Added `/cratekey redeem` to claim physical keys that were granted while a player was offline.
- Added the `excellentcrates.keys.auto.redeem` permission to automatically grant unclaimed keys on login.

...and a ton of other minor tweaks & fixes under the hood!
