{"id":54839,"date":"2026-06-03T04:17:11","date_gmt":"2026-06-03T01:17:11","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/"},"modified":"2026-06-03T04:17:11","modified_gmt":"2026-06-03T01:17:11","slug":"dearu","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/","title":{"rendered":"DearU"},"content":{"rendered":"<div align=\"center\">\n<p># \ud83d\udcec DearU<\/p>\n<p>### A modern mailbox plugin for Paper\/Folia servers<\/p>\n<p>![Kotlin](https:\/\/kotlinlang.org\/)<br \/>\n![Java](https:\/\/openjdk.org\/)<br \/>\n![Paper](https:\/\/papermc.io\/)<br \/>\n![License](LICENSE)<\/p>\n<\/div>\n<p>## \u2728 Features<\/p>\n<p>&#8211; \ud83d\udcee **Mailbox System** &#8211; Players can receive and manage their mail through a beautiful GUI<br \/>\n&#8211; \ud83d\udce6 **Package Support** &#8211; Send single items or multi-item packages to players<br \/>\n&#8211; \ud83d\udcbe **Database Abstraction** &#8211; Built-in support for SQLite and MySQL<br \/>\n&#8211; \u26a1 **Async Operations** &#8211; Non-blocking mail operations using `CompletableFuture`<br \/>\n&#8211; \ud83c\udfa8 **Modern API** &#8211; Clean Java interface for plugin developers<br \/>\n&#8211; \ud83d\udee0\ufe0f **Command Aliases** &#8211; Customizable command aliases<\/p>\n<p>## \ud83d\udcc1 Project Structure<\/p>\n<p>&#8220;`<br \/>\nDearU\/<br \/>\n\u251c\u2500\u2500 api\/                    # Java module with public interfaces<br \/>\n\u2502   \u2514\u2500\u2500 DearU              # Main plugin interface<br \/>\n\u2502   \u251c\u2500\u2500 Mailbox            # Async mailbox operations<br \/>\n\u2502   \u251c\u2500\u2500 Mail               # Sealed interface for mail types<br \/>\n\u2502   \u2502   \u251c\u2500\u2500 SingleMail     # Single item mail<br \/>\n\u2502   \u2502   \u2514\u2500\u2500 PackageMail    # Multi-item package<br \/>\n\u2502   \u251c\u2500\u2500 MailSender         # Mail sender representation<br \/>\n\u2502   \u2514\u2500\u2500 MailboxManager     # Mailbox instance manager<br \/>\n\u2502<br \/>\n\u2514\u2500\u2500 core\/                   # Kotlin module with implementations<br \/>\n    \u2514\u2500\u2500 DearUPlugin        # Main plugin class<br \/>\n    \u251c\u2500\u2500 DearUConfiguration # Config system<br \/>\n    \u251c\u2500\u2500 DatabaseManager    # Database abstraction<br \/>\n    \u251c\u2500\u2500 MailboxManagerImpl # Mailbox implementation<br \/>\n    \u2514\u2500\u2500 MailboxGui         # GUI implementation<br \/>\n&#8220;`<\/p>\n<p>## \ud83d\ude80 Getting Started<\/p>\n<p>### Requirements<\/p>\n<p>&#8211; **Java 21** or higher<br \/>\n&#8211; **Paper\/Folia** server (latest version)<\/p>\n<p>### Installation<\/p>\n<p>1. Build the plugin:<br \/>\n   &#8220;`bash<br \/>\n   .\/gradlew build<br \/>\n   &#8220;`<\/p>\n<p>2. Find the JAR in `core\/build\/libs\/`<\/p>\n<p>3. Place it in your server&#8217;s `plugins\/` folder<\/p>\n<p>4. Restart your server<\/p>\n<p>### Configuration<\/p>\n<p>Edit `plugins\/DearU\/config.yml` to customize:<\/p>\n<p>&#8220;`yaml<br \/>\n# Database settings (SQLite\/MySQL)<br \/>\ndatabase:<br \/>\n  sql:<br \/>\n    type: SQLITE  # or MYSQL<br \/>\n    mysql:<br \/>\n      host: localhost<br \/>\n      port: 3306<br \/>\n      database: dearu<br \/>\n      username: root<br \/>\n      password: password<\/p>\n<p># Command aliases<br \/>\ncommands:<br \/>\n  mailbox:<br \/>\n    aliases:<br \/>\n      &#8211; mail<br \/>\n      &#8211; \uc6b0\ud3b8\ud568<br \/>\n&#8220;`<\/p>\n<p>## \ud83d\udcbb Development<\/p>\n<p>### Build Commands<\/p>\n<p>&#8220;`bash<br \/>\n# Build the project<br \/>\n.\/gradlew build<\/p>\n<p># Run test server (Paper)<br \/>\n.\/gradlew runServer<\/p>\n<p># Run Folia test server<br \/>\n.\/gradlew runFolia<\/p>\n<p># Clean build artifacts<br \/>\n.\/gradlew clean<br \/>\n&#8220;`<\/p>\n<p>### API Usage<\/p>\n<p>#### Sending Mail<\/p>\n<p>&#8220;`java<br \/>\nimport com.bindglam.dearu.DearU;<br \/>\nimport com.bindglam.dearu.mail.*;<\/p>\n<p>\/\/ Get plugin instance<br \/>\nDearU dearU = DearUProvider.get();<\/p>\n<p>\/\/ Send single item mail<br \/>\nMail singleMail = Mail.single(<br \/>\n    MailSender.server(),<br \/>\n    itemStack,<br \/>\n    &#8220;Welcome to our server!&#8221;<br \/>\n);<br \/>\ndearu.mailboxManager().getMailbox(playerUUID)<br \/>\n    .putMail(singleMail);<\/p>\n<p>\/\/ Send package mail<br \/>\nPackageMail.Body body = PackageMail.bodyBuilder()<br \/>\n    .name(&#8220;Welcome Package&#8221;)<br \/>\n    .content(itemStack1)<br \/>\n    .content(itemStack2)<br \/>\n    .build();<\/p>\n<p>Mail packageMail = Mail.packaged(<br \/>\n    MailSender.player(senderUUID),<br \/>\n    body,<br \/>\n    &#8220;Here&#8217;s your starter kit!&#8221;<br \/>\n);<br \/>\ndearu.mailboxManager().getMailbox(playerUUID)<br \/>\n    .putMail(packageMail);<br \/>\n&#8220;`<\/p>\n<p>#### Reading Mail<\/p>\n<p>&#8220;`java<br \/>\nimport com.bindglam.dearu.Mailbox;<br \/>\nimport java.util.concurrent.CompletableFuture;<\/p>\n<p>Mailbox mailbox = dearU.mailboxManager().getMailbox(playerUUID);<\/p>\n<p>\/\/ Get all mail (async)<br \/>\nCompletableFuture<List<Mailbox.IdentifiedMail>> future = mailbox.mails();<br \/>\nfuture.thenAccept(mails -> {<br \/>\n    for (Mailbox.IdentifiedMail identified : mails) {<br \/>\n        Mail mail = identified.mail();<br \/>\n        \/\/ Process mail&#8230;<br \/>\n    }<br \/>\n});<\/p>\n<p>\/\/ Get specific mail by ID<br \/>\nCompletableFuture<Mailbox.IdentifiedMail> mailFuture = mailbox.mail(mailId);<br \/>\nmailFuture.thenAccept(identified -> {<br \/>\n    if (identified != null) {<br \/>\n        Mail mail = identified.mail();<br \/>\n        \/\/ Process mail&#8230;<br \/>\n    }<br \/>\n});<br \/>\n&#8220;`<\/p>\n<p>## \ud83c\udfd7\ufe0f Architecture<\/p>\n<p>### Managerial Pattern<\/p>\n<p>All managers implement the `Managerial` interface:<\/p>\n<p>&#8220;`kotlin<br \/>\ninterface Managerial {<br \/>\n    fun start(context: Context)<br \/>\n    fun end(context: Context)<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>Managers are initialized in plugin lifecycle:<br \/>\n&#8220;`kotlin<br \/>\nval managers = listOf(DatabaseManager, MailboxManagerImpl)<br \/>\nmanagers.forEach { it.start(Context(this, dearUConfig)) }<br \/>\n&#8220;`<\/p>\n<p>### Database Abstraction<\/p>\n<p>Uses `DatabaseLib` for unified SQL operations:<\/p>\n<p>&#8211; **SQLite** &#8211; Default, uses `database.db` in plugin data folder<br \/>\n&#8211; **MySQL** &#8211; Configurable for production use<\/p>\n<p>### Configuration System<\/p>\n<p>Nested class-based configuration using `ConfigLib`:<br \/>\n&#8220;`kotlin<br \/>\nclass Commands {<br \/>\n    val mailbox = createExtendedComplexField { CommandField(&#8220;mailbox&#8221;) }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>## \ud83d\udd27 Dependencies<\/p>\n<p>### Runtime Dependencies<br \/>\n&#8211; **ConfigLib** (1.0.0) &#8211; Configuration system<br \/>\n&#8211; **DatabaseLib** (1.0.4) &#8211; Database abstraction<br \/>\n&#8211; **semver4j** (6.0.0) &#8211; Version comparison<\/p>\n<p>### Build Dependencies<br \/>\n&#8211; **Shadow Plugin** &#8211; JAR shading and relocation<br \/>\n&#8211; **RunPaper** &#8211; Test server management<\/p>\n<p>## \ud83d\udcdd License<\/p>\n<p>This project is licensed under the MIT License &#8211; see the [LICENSE](LICENSE) file for details.<\/p>\n<p>## \ud83e\udd1d Contributing<\/p>\n<p>Contributions are welcome! Please feel free to submit a Pull Request.<\/p>\n<p>## \ud83d\udcde Support<\/p>\n<p>&#8211; \ud83d\udc1b Report bugs via GitHub Issues<br \/>\n&#8211; \ud83d\udca1 Feature requests welcome<br \/>\n&#8211; \ud83d\udcd6 Check the code documentation for more details<\/p>\n<p>&#8212;<\/p>\n<div align=\"center\">\n<p>Made with \u2764\ufe0f for the Minecraft community<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A paper plugin for mailbox<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"_minecraft_slug":"dearu","_minecraft_project_id":"EmibqDVx","_minecraft_author":"bindglam","_minecraft_license":"MIT","_minecraft_downloads":15,"_minecraft_follows":0,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"dearu.zip","_minecraft_size_bytes":3559074,"_minecraft_version_count":2,"_minecraft_updated_at":"2026-05-15T22:50:02.114596Z","_minecraft_date_created":"2026-03-12T02:54:39.596849Z","_minecraft_date_modified":"2026-03-08T08:36:14.513246Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/dearu","_minecraft_icon_attachment_id":0,"_minecraft_imported_at":"2026-06-03T01:17:15+00:00","_minecraft_import_hash":"bd71a5e59073d7188cf5670a043239e2","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[125,89,126,127,128,91,92],"mod_loader":[131,132,133],"minecraft_version":[62,37,40,41,73,74,38,78,79,80,81,82],"class_list":["post-54839","mod","type-mod","status-publish","hentry","mod_category-folia","mod_category-game-mechanics","mod_category-management","mod_category-paper","mod_category-purpur","mod_category-storage","mod_category-utility","mod_loader-folia","mod_loader-paper","mod_loader-purpur","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DearU - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DearU - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A paper plugin for mailbox\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/dearu\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/dearu\\\/\",\"name\":\"DearU - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"datePublished\":\"2026-06-03T01:17:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/dearu\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/dearu\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/dearu\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"DearU\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DearU - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/","og_locale":"en_US","og_type":"article","og_title":"DearU - Minecraft","og_description":"A paper plugin for mailbox","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/","name":"DearU - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"datePublished":"2026-06-03T01:17:11+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/dearu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/dearu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"DearU"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/54839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=54839"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=54839"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=54839"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=54839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}