[{"data":1,"prerenderedAt":246},["ShallowReactive",2],{"docs-\u002Fmodules\u002Fplaceholders":3},{"id":4,"title":5,"body":6,"description":236,"extension":237,"meta":238,"navTitle":239,"navigation":240,"path":241,"rawbody":242,"seo":243,"stem":244,"__hash__":245},"docs\u002Fmodules\u002Fplaceholders.md","Placeholders",{"type":7,"value":8,"toc":227},"minimark",[9,13,17,21,24,40,45,56,59,65,68,74,78,81,87,90,96,99,105,109,116,138,156,162,166,178,181,206,210,213,219],[10,11,5],"h1",{"id":12},"placeholders",[14,15],"platform-badges",{":platforms":16},"[\"bukkit\",\"fabric\"]",[18,19,20],"p",{},"The registry itself is platform-neutral; external placeholder bridges exist for\nBukkit and Fabric.",[18,22,23],{},"The placeholder module offers a shared registry plus platform bridges for:",[25,26,27,31,34,37],"ul",{},[28,29,30],"li",{},"Bukkit PlaceholderAPI",[28,32,33],{},"Fabric PB4 Placeholder API",[28,35,36],{},"Fabric Text Placeholder API",[28,38,39],{},"Fabric MiniPlaceholders",[41,42,44],"h2",{"id":43},"register-placeholders","Register Placeholders",[46,47,53],"pre",{"className":48,"code":50,"language":51,"meta":52},[49],"language-java","MagicPlaceholders.registerNamespace(\"myplugin\", \"MyPlugin\", \"1.0.0\");\n\nMagicPlaceholders.register(\"myplugin\", \"online\", (audience, arg) -> \"42\");\nMagicPlaceholders.register(\"myplugin\", \"balance\", (audience, arg) -> {\n    return arg != null ? arg : \"0\";\n});\n","java","",[54,55,50],"code",{"__ignoreMap":52},[18,57,58],{},"Global placeholders are available without a namespace:",[46,60,63],{"className":61,"code":62,"language":51,"meta":52},[49],"MagicPlaceholders.registerGlobal(\"server\", (audience, arg) -> \"Example\");\n",[54,64,62],{"__ignoreMap":52},[18,66,67],{},"Local placeholders are scoped to an owner key:",[46,69,72],{"className":70,"code":71,"language":51,"meta":52},[49],"MagicPlaceholders.registerLocal(this, \"balance\", (audience, arg) -> \"42\");\n",[54,73,71],{"__ignoreMap":52},[41,75,77],{"id":76},"resolve-and-render","Resolve And Render",[18,79,80],{},"Resolve a single entry directly:",[46,82,85],{"className":83,"code":84,"language":51,"meta":52},[49],"String value = MagicPlaceholders.resolve(\"myplugin\", \"online\", audience, null);\n",[54,86,84],{"__ignoreMap":52},[18,88,89],{},"Render tokens inside text:",[46,91,94],{"className":92,"code":93,"language":51,"meta":52},[49],"PlaceholderContext context = PlaceholderContext.builder()\n    .audience(audience)\n    .defaultNamespace(\"myplugin\")\n    .ownerKey(this)\n    .inline(Map.of(\"player\", \"Steve\"))\n    .build();\n\nString text = \"Hello {player}! Balance: {balance|bank}\";\nString rendered = MagicPlaceholders.render(context, text);\n",[54,95,93],{"__ignoreMap":52},[18,97,98],{},"Convenience overloads:",[46,100,103],{"className":101,"code":102,"language":51,"meta":52},[49],"String rendered = MagicPlaceholders.render(audience, \"Hello {server}\");\n",[54,104,102],{"__ignoreMap":52},[41,106,108],{"id":107},"resolution-order","Resolution Order",[18,110,111,112,115],{},"For ",[54,113,114],{},"{key}"," tokens:",[117,118,119,122,128,135],"ol",{},[28,120,121],{},"Inline values from the context",[28,123,124,125],{},"Local placeholders for the ",[54,126,127],{},"ownerKey",[28,129,130,131,134],{},"Default namespace (",[54,132,133],{},"defaultNamespace:key",")",[28,136,137],{},"Global placeholders",[18,139,140,141,144,145,148,149,151,152,155],{},"Namespaced tokens use ",[54,142,143],{},"{namespace:key}"," or ",[54,146,147],{},"{namespace:key:arg}",". For local\narguments in plain ",[54,150,114],{}," form, use the argument separator (default ",[54,153,154],{},"|","):",[46,157,160],{"className":158,"code":159,"language":51,"meta":52},[49],"PlaceholderContext context = PlaceholderContext.builder()\n    .argumentSeparator(\"::\")\n    .build();\n",[54,161,159],{"__ignoreMap":52},[41,163,165],{"id":164},"platform-bridges","Platform Bridges",[25,167,168,175],{},[28,169,170,171,174],{},"Bukkit: the bridge is installed when the Bukkit ",[54,172,173],{},"Logger"," adapter is created\nor when Bukkit bootstrap wiring creates that logger for you.",[28,176,177],{},"Fabric: the bridge is installed by the Fabric logger integration and registers\navailable placeholders with PB4 Placeholder API, Text Placeholder API, and\nMiniPlaceholders when those mods are present.",[18,179,180],{},"Supported Fabric mods:",[25,182,183,192,199],{},[28,184,185],{},[186,187,191],"a",{"href":188,"rel":189},"https:\u002F\u002Fplaceholders.pb4.eu\u002F",[190],"nofollow","PB4 Placeholder API",[28,193,194],{},[186,195,198],{"href":196,"rel":197},"https:\u002F\u002Fmodrinth.com\u002Fmod\u002Fplaceholder-api",[190],"Text Placeholder API",[28,200,201],{},[186,202,205],{"href":203,"rel":204},"https:\u002F\u002Fmodrinth.com\u002Fmod\u002Fminiplaceholders",[190],"MiniPlaceholders",[41,207,209],{"id":208},"registry-introspection","Registry Introspection",[18,211,212],{},"Snapshots of the registry are available for tooling and debugging:",[46,214,217],{"className":215,"code":216,"language":51,"meta":52},[49],"Set\u003CString> namespaces = MagicPlaceholders.namespaces();\nMap\u003CMagicPlaceholders.PlaceholderKey, MagicPlaceholders.PlaceholderResolver> entries =\n        MagicPlaceholders.entries();\n",[54,218,216],{"__ignoreMap":52},[18,220,221,222,226],{},"See ",[186,223,225],{"href":224},"placeholders-advanced","Placeholders Advanced"," for metadata, listeners,\nand debug hooks.",{"title":52,"searchDepth":228,"depth":228,"links":229},3,[230,232,233,234,235],{"id":43,"depth":231,"text":44},2,{"id":76,"depth":231,"text":77},{"id":107,"depth":231,"text":108},{"id":164,"depth":231,"text":165},{"id":208,"depth":231,"text":209},"The MagicUtils placeholder registry: register, resolve, and expose placeholders across platforms, with a PlaceholderAPI bridge on Bukkit.","md",{},null,true,"\u002Fmodules\u002Fplaceholders","---\ntitle: Placeholders\ndescription: 'The MagicUtils placeholder registry: register, resolve, and expose placeholders across platforms, with a PlaceholderAPI bridge on Bukkit.'\n---\n\n# Placeholders\n\n:platform-badges{:platforms='[\"bukkit\",\"fabric\"]'}\n\nThe registry itself is platform-neutral; external placeholder bridges exist for\nBukkit and Fabric.\n\nThe placeholder module offers a shared registry plus platform bridges for:\n\n- Bukkit PlaceholderAPI\n- Fabric PB4 Placeholder API\n- Fabric Text Placeholder API\n- Fabric MiniPlaceholders\n\n## Register Placeholders\n\n```java\nMagicPlaceholders.registerNamespace(\"myplugin\", \"MyPlugin\", \"1.0.0\");\n\nMagicPlaceholders.register(\"myplugin\", \"online\", (audience, arg) -> \"42\");\nMagicPlaceholders.register(\"myplugin\", \"balance\", (audience, arg) -> {\n    return arg != null ? arg : \"0\";\n});\n```\n\nGlobal placeholders are available without a namespace:\n\n```java\nMagicPlaceholders.registerGlobal(\"server\", (audience, arg) -> \"Example\");\n```\n\nLocal placeholders are scoped to an owner key:\n\n```java\nMagicPlaceholders.registerLocal(this, \"balance\", (audience, arg) -> \"42\");\n```\n\n## Resolve And Render\n\nResolve a single entry directly:\n\n```java\nString value = MagicPlaceholders.resolve(\"myplugin\", \"online\", audience, null);\n```\n\nRender tokens inside text:\n\n```java\nPlaceholderContext context = PlaceholderContext.builder()\n    .audience(audience)\n    .defaultNamespace(\"myplugin\")\n    .ownerKey(this)\n    .inline(Map.of(\"player\", \"Steve\"))\n    .build();\n\nString text = \"Hello {player}! Balance: {balance|bank}\";\nString rendered = MagicPlaceholders.render(context, text);\n```\n\nConvenience overloads:\n\n```java\nString rendered = MagicPlaceholders.render(audience, \"Hello {server}\");\n```\n\n## Resolution Order\n\nFor `{key}` tokens:\n\n1. Inline values from the context\n2. Local placeholders for the `ownerKey`\n3. Default namespace (`defaultNamespace:key`)\n4. Global placeholders\n\nNamespaced tokens use `{namespace:key}` or `{namespace:key:arg}`. For local\narguments in plain `{key}` form, use the argument separator (default `|`):\n\n```java\nPlaceholderContext context = PlaceholderContext.builder()\n    .argumentSeparator(\"::\")\n    .build();\n```\n\n## Platform Bridges\n\n- Bukkit: the bridge is installed when the Bukkit `Logger` adapter is created\n  or when Bukkit bootstrap wiring creates that logger for you.\n- Fabric: the bridge is installed by the Fabric logger integration and registers\n  available placeholders with PB4 Placeholder API, Text Placeholder API, and\n  MiniPlaceholders when those mods are present.\n\nSupported Fabric mods:\n\n- [PB4 Placeholder API](https:\u002F\u002Fplaceholders.pb4.eu\u002F)\n- [Text Placeholder API](https:\u002F\u002Fmodrinth.com\u002Fmod\u002Fplaceholder-api)\n- [MiniPlaceholders](https:\u002F\u002Fmodrinth.com\u002Fmod\u002Fminiplaceholders)\n\n## Registry Introspection\n\nSnapshots of the registry are available for tooling and debugging:\n\n```java\nSet\u003CString> namespaces = MagicPlaceholders.namespaces();\nMap\u003CMagicPlaceholders.PlaceholderKey, MagicPlaceholders.PlaceholderResolver> entries =\n        MagicPlaceholders.entries();\n```\n\nSee [Placeholders Advanced](placeholders-advanced.md) for metadata, listeners,\nand debug hooks.\n",{"title":5,"description":236},"modules\u002Fplaceholders","sGULxHtiGx111XNUjipzGBrwVFwNJcVDBh7LzUWDR0k",1783944487077]