{"id":20084275,"url":"https://github.com/eternalcodeteam/multification","last_synced_at":"2026-01-18T09:43:17.232Z","repository":{"id":220678614,"uuid":"742956909","full_name":"EternalCodeTeam/multification","owner":"EternalCodeTeam","description":"⚡ Powerful library for sending custom notifications based on adventure.","archived":false,"fork":false,"pushed_at":"2026-01-15T21:41:32.000Z","size":768,"stargazers_count":17,"open_issues_count":11,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-16T00:49:20.332Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EternalCodeTeam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"EternalCodeTeam","ko_fi":"eternalcodeteam"}},"created_at":"2024-01-13T21:42:09.000Z","updated_at":"2026-01-15T21:40:48.000Z","dependencies_parsed_at":"2024-04-21T00:44:51.904Z","dependency_job_id":"ac5586a0-e76a-43bc-9849-3e3dbc0888c7","html_url":"https://github.com/EternalCodeTeam/multification","commit_stats":null,"previous_names":["eternalcodeteam/multification"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/EternalCodeTeam/multification","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EternalCodeTeam%2Fmultification","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EternalCodeTeam%2Fmultification/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EternalCodeTeam%2Fmultification/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EternalCodeTeam%2Fmultification/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EternalCodeTeam","download_url":"https://codeload.github.com/EternalCodeTeam/multification/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EternalCodeTeam%2Fmultification/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-11-13T15:51:20.142Z","updated_at":"2026-01-18T09:43:12.213Z","avatar_url":"https://github.com/EternalCodeTeam.png","language":"Java","funding_links":["https://github.com/sponsors/EternalCodeTeam","https://ko-fi.com/eternalcodeteam","https://www.patreon.com/eternalcode"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \n![Multification Banner](/assets/readme-banner.png)\n### Multification\nPowerful library for sending custom notifications based on adventure.\n\n[![Patreon](https://raw.githubusercontent.com/intergrav/devins-badges/v3/assets/cozy/donate/patreon-plural_vector.svg)](https://www.patreon.com/eternalcode)\n[![Website](https://raw.githubusercontent.com/intergrav/devins-badges/v3/assets/cozy/documentation/website_vector.svg)](https://eternalcode.pl/)\n[![Discord](https://raw.githubusercontent.com/intergrav/devins-badges/v3/assets/cozy/social/discord-plural_vector.svg)](https://discord.gg/FQ7jmGBd6c)\n\n[![Gradle](https://raw.githubusercontent.com/intergrav/devins-badges/v3/assets/cozy/built-with/gradle_vector.svg)](https://gradle.org/)\n[![Java](https://raw.githubusercontent.com/intergrav/devins-badges/v3/assets/cozy/built-with/java17_vector.svg)](https://www.java.com/)\n\n\u003c/div\u003e\n\n## About\n\nMultification makes it simple to create customizable notifications and messages within large plugins that require handling a high volume of messages (while the setup may not be easy, **it’s worthwhile for extensive plugins**). It offers a range of features, including:\n\n- 💭 Chat messages\n- 📕 Title \u0026 Subtitle\n- 🎬 ActionBar\n- 🍫 BossBar\n- 🔊 Sounds\n- 🎨 Adventure support\n- 🌈 MiniMessage support (including gradients, hex colors, hover, click and more)\n- 📥 Placeholders\n- 🛠️ Formatter support\n- 🌎 Flexible messages providing (easy to implement i18n)\n- 📦 Configuration support (CDN, Okaeri Configs)\n- Cross-platform support (currently we support Bukkit, but it's easy to add support for other adventure-based platforms)\n\nMessages can be sent to any audience, such as players or the console.\n\n## Getting Started\n\nTo use the library, you need to add the following repository and dependency to your `build.gradle` file:\n\n```kts\nmaven(\"https://repo.eternalcode.pl/releases\")\n```\n\n```kts\nimplementation(\"com.eternalcode:multification-bukkit:1.1.4\")\n```\n\n\u003e **Note:** If you want to use the library with other platforms, then you need to use the `multification-core` dependency.\n\nThen create a new instance of the `Multification` class and use it to send notifications:\n\n```java\npublic class YourMultification extends BukkitMultification\u003cMessagesConfig\u003e {\n\n    private final MessagesConfig messagesConfig;\n    private final AudienceProvider audienceProvider;\n    private final MiniMessage miniMessage;\n\n    public YourMultification(MessagesConfig messagesConfig, AudienceProvider audienceProvider, MiniMessage miniMessage) {\n        this.messagesConfig = messagesConfig;\n        this.audienceProvider = audienceProvider;\n        this.miniMessage = miniMessage;\n    }\n\n    @Override\n    protected @NotNull TranslationProvider\u003cMessagesConfig\u003e translationProvider() {\n        return locale -\u003e this.messagesConfig;\n    }\n\n    @Override\n    protected @NotNull ComponentSerializer\u003cComponent, Component, String\u003e serializer() {\n        return this.miniMessage;\n    }\n\n    @Override\n    protected @NotNull AudienceConverter\u003cCommandSender\u003e audienceConverter() {\n        return  commandSender -\u003e {\n            if (commandSender instanceof Player player) {\n                return this.audienceProvider.player(player.getUniqueId());\n            }\n\n            return this.audienceProvider.console();\n        };\n    }\n\n}\n```\n\nThen in init method such as `onEnable`,\nyou can create a new instance of the `YourMultification` class and use it to send notifications:\n\n```java\nAudienceProvider audienceProvider = BukkitAudiences.create(this);\nMiniMessage miniMessage = MiniMessage.miniMessage();\n\nMessagesConfig messagesConfig = new MessagesConfig();\nYourMultification multification = new YourMultification(messagesConfig, audienceProvider, miniMessage);\n```\n\nAfter that, you can use the `multification` instance to send notifications:\n\n```java\nmultification.create()\n    .player(player.getUniqueId())\n    .notice(messages -\u003e messages.yourMessage)\n    .send();\n```\n\n## Configuration Support\n\nMultification currently supports two configuration libraries:\n- [CDN](https://github.com/dzikoysk/cdn) _Simple and fast property-based configuration library for JVM apps_\n- [Okaeri Configs](https://github.com/OkaeriPoland/okaeri-configs) _Simple Java/POJO config library written with love and Lombok_\n\nTo use the Multification library with one of the configuration libraries, you need to:\n\n### [CDN](https://github.com/dzikoysk/cdn)\n\n#### (CDN) 1. Add dependency to your `build.gradle` file:\n```gradle\nimplementation(\"com.eternalcode:multification-cdn:1.1.4\")\nimplementation(\"net.dzikoysk:cdn:1.14.5\")\n```\n\n#### (CDN) 2. Create configuration class:\n```java\npublic class MessagesConfig {\n    @Description(\"# My first message\")\n    public Notice firstMessage = Notice.chat(\"\u003cgradient:red:blue\u003eMultification is awesome!\");\n}\n```\n\n#### (CDN) 3. Create a new instance of the `Cdn` with the `MultificationNoticeCdnComposer`:\n```java\nCdn cdn = CdnFactory.createYamlLike()\n    .getSettings()\n    .withComposer(Notice.class, new MultificationNoticeCdnComposer(multification.getNoticeRegistry()))\n    .build();\n```\n\n#### (CDN) 4. Load the configuration:\n\nTo load and create the config file, use the following code in the init method such as `onEnable`:\n\n```java\nMessagesConfig messages = new MessagesConfig();\nResource resource = Source.of(this.dataFolder, \"messages.yml\");\n        \ncdn.load(resource, messages)\n    .orThrow(cause -\u003e cause);\n\ncdn.render(config, resource)\n    .orThrow(cause -\u003e cause);\n```\n\nCheckout example with CDN! [example plugin](https://github.com/EternalCodeTeam/multification/tree/master/examples/bukkit).\n\n### [Okaeri Configs](https://github.com/OkaeriPoland/okaeri-configs)\n\n#### (Okaeri) 1. Add the following dependency to your `build.gradle` file:\n\n```gradle\nimplementation(\"com.eternalcode:multification-okaeri:1.1.4\")\n```\n\nProbably also you will need to add additional dependencies for your platform, e.g. :\n```gradle\nimplementation(\"eu.okaeri:okaeri-configs-serdes-commons:5.0.5\")\nimplementation(\"eu.okaeri:okaeri-configs-serdes-bukkit:5.0.5\")\nimplementation(\"eu.okaeri:okaeri-configs-yaml-bukkit:5.0.5\")\n```\nSee [Okaeri Configs](https://github.com/OkaeriPoland/okaeri-configs) for more information.\n\n#### (Okaeri) 2. Create configuration class:\n\n```java\npublic class MessagesConfig extends OkaeriConfig {\n    @Comment(\"My first message\")\n    public Notice firstMessage = Notice.chat(\"\u003cgradient:red:blue\u003eMultification is awesome!\");\n}\n```\n\n#### (Okaeri) 3. Load the configuration:\n\n```java\nMessagesConfig config = (MessagesConfig) ConfigManager.create(MessagesConfig.class)\n    .withConfigurer(new MultificationSerdesPack(multification.getNoticeRegistry()))\n    .withConfigurer(new SerdesCommons(), new YamlBukkitConfigurer(), new SerdesBukkit()) // specify configurers for your platform\n    .withBindFile(new File(dataFolder, \"messages.yml\"))\n    .withRemoveOrphans(true) // automatic removal of undeclared keys\n    .saveDefaults() // save file if does not exists\n    .load(true);\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feternalcodeteam%2Fmultification","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feternalcodeteam%2Fmultification","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feternalcodeteam%2Fmultification/lists"}