Create a Paper Minecraft plugin for version 1.21 called "donutkeysandcreates". The plugin should behave similar to a DonutSMP style key and crate system. MAIN FEATURE: Players earn 1 Basic crate key every 2 hours of online playtime. PLAYTIME KEY SYSTEM: - Every player should earn a key every 120 minutes of playtime. - The timer must only count when the player is online. - The timer must pause when the player leaves the server. - The timer must continue when the player rejoins. - The timer must persist after server restart. - The reward crate type and amount must be configurable. DEFAULT CONFIG: Playtime reward interval: 120 minutes Reward crate: basic Reward amount: 1 key TAB / PLACEHOLDER SUPPORT: The plugin must provide placeholders so they can be used in TAB plugins. Placeholders required: %donutkeysandcreates_playtime_left% Shows remaining time until next key %donutkeysandcreates_nextcrate% Shows the crate name that will be rewarded %donutkeysandcreates_keys_<crate>% Shows how many keys the player has for that crate Example TAB display: Next Basic Key: 10m left The time format must be configurable. CRATE SYSTEM: Create a crate system where players open a crate GUI and choose one reward. Features: - GUI menu using Bukkit inventory - Player chooses exactly ONE reward - Remove 1 key after claiming reward - If player has no key show error message - Rewards configured in crates.yml Each reward must support: - material - display name - lore - slot position - console commands CRATE TYPES: Plugin must support multiple crates, for example: basic rare legendary donut Each crate must be configurable in crates.yml. COMMANDS: /crates Open main crate menu /crates <crate> Open specific crate /donut givekey <player> <crate> <amount> Give keys to player /donut removekey <player> <crate> <amount> Remove keys /donut keys <player> Show player's keys /donut reload Reload configs /playtimekeys Show remaining time until next key PERMISSIONS: donutkeysandcreates.crates donutkeysandcreates.admin donutkeysandcreates.givekey donutkeysandcreates.removekey donutkeysandcreates.reload CONFIG FILES: config.yml messages.yml crates.yml playerdata.yml MESSAGES: All messages must be configurable. Examples: - no permission - no keys - reward claimed - key received - reload complete - playtime progress DATA STORAGE: Store player data in YAML. Save: playtime progress crate keys player uuid NPC SUPPORT: The plugin should work with NPC plugins like ZNPCs or Citizens. Example usage: /znpcs action add CMD crates /znpcs action add CMD crates basic This allows NPCs to open the crate menu. CODE STRUCTURE: Use a clean Java plugin structure. Main class Managers Commands Listeners Data storage The plugin must compile for Paper 1.21 and generate a working plugin.yml and Gradle project. IMPORTANT: Do NOT use Skript. Create a real Java Paper plugin.