Contextual Placeholders

Contextual placeholders depend on user context and receive a Context<U> parameter.


Creating Contextual Placeholders

public class PlayerNeuron extends BukkitNeuron {
    
    public PlayerNeuron(Plugin plugin) {
        super(plugin, Namespace.of("player"));
        
        // Basic contextual placeholder - works with any CommandSender
        register("name", context -> context.user().getName());
        
        // Player-specific placeholder using requirePlayer()
        register("health", context -> {
            Player player = context.user().requirePlayer();
            return String.format("%.1f", player.getHealth());
        });
        
        // Placeholder with argument handling
        register("stats", context -> {
            Player player = context.user().requirePlayer();
            String[] args = context.arguments();
            if (args.length > 0) {
                Statistic stat = Statistic.valueOf(args[0].toUpperCase());
                return String.valueOf(player.getStatistic(stat));
            }
            return "No statistic specified";
        });
        
        // Location-based placeholder
        register("world", context -> {
            Player player = context.user().requirePlayer();
            Location loc = player.getLocation();
            return loc.getWorld().getName();
        });
    }
}

Usage:

String name = synapse.translate("Hello ${player.name}!", player);
// Result: "Hello Steve!"

String health = synapse.translate("Health: ${player.health}", player);
// Result: "Health: 20.0"

String stat = synapse.translate("Deaths: ${player.stats:DEATHS}", player);
// Result: "Deaths: 5"

Contextual Placeholder Options

Contextual placeholders support caching based on user context:

register("player_rank", context -> {
    return expensiveRankLookup(context.user().getUniqueId());
}, options -> {
    options.cache(true);                    // Enable caching
    options.cacheTTL(5, TimeUnit.MINUTES);  // Cache for 5 minutes
});

Available Options:

  • cache(boolean) - Enable result caching per user (default: false)
  • cacheTTL(long, TimeUnit) - How long to cache results (default: 20 seconds)

Caching Behavior:

  • Cache key includes user ID, namespace, placeholder name, and arguments
  • Each user has their own cached values
  • Automatic cleanup when cache expires
  • Arguments are part of the cache key (different args = different cache entries)