A powerful, modular placeholder translation system designed for dynamic text processing across multiple platforms.
⚡ Installation
The process is fairly simple:
- Download the latest
synapse-PLATFORM-*.*.jarfrom the Releases. - Place the JAR file in your server's
plugins/directory. - Restart your server.
- Configure as needed.
✨ Features
Core Features
- 🚀 High Performance: Optimized placeholder resolution with intelligent caching
- 🔧 Modular Architecture: Clean separation between core logic and platform implementations
- 🎯 Type Safety: Strongly typed generics ensure compile-time safety
- ⚡ Async Processing: Non-blocking placeholder resolution with CompletableFuture support
- 🏗️ Extensible Design: Easy to add new platforms and custom neurons
- 📝 Rich API: Comprehensive API for both synchronous and asynchronous operations
- 🏷️ Namespace Management: Organized placeholder categorization and conflict prevention
- 🔄 Context-Aware Resolution: Placeholders resolved based on user context and environment
Advanced Features
- 🔗 Relational Placeholders: Placeholders that resolve values based on relationships between 2 Users
- 💾 Intelligent Caching: Built-in caching mechanisms with expiration support
- 🧪 Comprehensive Testing: Extensive test suite ensuring reliability
- 🔙 PAPI Backward-Compatibility: In Bukkit, you can simply call BukkitNeuron#hookToPAPI and we will do the rest
🏗️ Structure
Synapse is a collection of Neurons
A Neuron is what a plugin registers to add Placeholders
Every Neuron has it's own Namespace(s)
A namespace is what defines the name(s) of that Neuron!
The format of placeholders is ${namespace.placeholder:[args1]:[arg2]:etc..}
These arguments can be surrounded by double quotes ("), single quotes (') and back quotes (`)
So if a Neuron with the namespace player is registered, and we register a health placeholder inside of it, this will be the placeholder format:
${player.health}
🛠️ For Developers
Synapse is hosted on maven-central, so no need to add any specific repository.
Bukkit
BungeeCordVelocity
• First of all, we add it to our plugin.yml
name: "ExamplePlugin"
version: 1.0.0
main: com.example.Plugin
softdepend:
- Synapse
• And then to our build tool!
- Maven
- Gradle (Groovy)
- Gradle (Kotlin)
<dependency>
<groupId>studio.mevera</groupId>
<artifactId>synapse-bukkit</artifactId>
<version>loading...</version>
</dependency>
implementation 'studio.mevera:synapse-bukkit:loading...'
implementation("studio.mevera:synapse-bukkit:loading...")
• The Synapse class in this is case is: BukkitSynapse
• And of course the Neuron class will be BukkitNeuron
• First of all, we add it to our plugin.yml/bungee.yml
name: "ExamplePlugin"
version: 1.0.0
main: com.example.Plugin
softdepend:
- Synapse
• And then to our build tool!
- Maven
- Gradle (Groovy)
- Gradle (Kotlin)
<dependency>
<groupId>studio.mevera</groupId>
<artifactId>synapse-bungee</artifactId>
<version>loading...</version>
</dependency>
implementation 'studio.mevera:synapse-bungee:loading...'
implementation("studio.mevera:synapse-bungee:loading...")
• The Synapse class in this is case is: BungeeSynapse
• And of course the Neuron class will be BungeeNeuron
• First of all, we add it to our @Plugin dependencies
@Plugin(
id = "myfirstplugin",
name = "My Plugin",
version = "0.1.0",
dependencies = {
@Dependency(id = "synapse", optional = true)
}
)
• And then to our build tool!
- Maven
- Gradle (Groovy)
- Gradle (Kotlin)
<dependency>
<groupId>studio.mevera</groupId>
<artifactId>synapse-velocity</artifactId>
<version>loading...</version>
</dependency>
implementation 'studio.mevera:synapse-velocity:loading...'
implementation("studio.mevera:synapse-velocity:loading...")
• The Synapse class in this is case is: VelocitySynapse
• And of course the Neuron class will be VelocityNeuron