\n \u003Ca href=\"https://github.com/WiIIiam278/PAPIProxyBridge/actions/workflows/ci.yml\">\n \u003Cimg src=\"https://img.shields.io/github/actions/workflow/status/WiIIiam278/PAPIProxyBridge/ci.yml?branch=master&logo=github\"/>\n \u003C/a>\n \u003Ca href=\"https://repo.william278.net/#releases/net/william278/papiproxybridge\">\n \u003Cimg src=\"https://repo.william278.net/api/badge/latest/releases/net/william278/papiproxybridge?color=00fb9a&name=Maven&prefix=v\" />\n \u003C/a> \n \u003Ca href=\"https://discord.gg/tVYhJfyDWG\">\n \u003Cimg src=\"https://img.shields.io/discord/818135932103557162.svg?label=&logo=discord&logoColor=fff&color=7389D8&labelColor=6A7EC2\" />\n \u003C/a>\n\u003C/p>\n\u003Cbr/>\n\n**PAPIProxyBridge** is a library bridge plugin you install on both your backend and proxy servers that allows proxy plugins to format text with PlaceholderAPI placeholders.\n\n## For server owners\nThis is a library plugin intended for use with plugins that implement its API. There is nothing to configure.\n\nInstall the latest version of the plugin alongside the [PlaceholderAPI plugin](https://www.spigotmc.org/resources/placeholderapi.6245/) on your Spigot (1.16.5+) or the [PlaceholderAPI mod](https://placeholders.pb4.eu/) on your Fabric (1.20) server, then install the plugin on your BungeeCord or Velocity proxy server.\n\nNote this plugin is not a replacement for PlaceholderAPI. You still need to install PlaceholderAPI on your Spigot/Fabric server.\n\n## For developers\nPAPIProxyBridge exposes a cross-platform API to let you format text with PlaceholderAPI placeholders.\n\n\u003Cdetails>\n\u003Csummary>Adding the library to your project\u003C/summary>\n\nPAPIProxyBridge is available on `repo.william278.net` ([view javadocs here](https://repo.william278.net/javadoc/releases/net/william278/papiproxybridge/latest)). First, add the maven repository to your `build.gradle`:\n```groovy\nrepositories {\n maven { url 'https://repo.william278.net/releases/' }\n}\n```\n\nThen add the dependency:\n```groovy\ndependencies {\n implementation 'net.william278:papiproxybridge:1.7.2\n}\n```\n\n\u003C/details>\n\n\u003Cdetails>\n\u003Csummary>Example usage\u003C/summary>\n\nThe `PlaceholderAPI` class exposes the API for formatting placeholders. At the moment, only singleton non-bracketed placeholders are supported (more in the future).\n\nGet an instance of the class with PlaceholderAPI.getInstance(), then use the `#formatPlaceholders` method to format a string with placeholders on a player (specified with UUID for cross-platform simplicity). \n\nThe method returns a [CompletableFuture](https://www.baeldung.com/java-completablefuture) (since we don't want to lock threads while the proxy networks with players on the backend) that you can use to accept the formatted string.\n\n```java\n// Format a string with placeholders\nfinal PlaceholderAPI api = PlaceholderAPI.createInstance();\nfinal UUID player = player.getUniqueId();\napi.formatPlaceholders(\"Hello %player_name%!\", player).thenAccept(formatted -> {\n player.sendMessage(formatted);\n});\n```\n\nNever invoke `#join()` on calls to `#formatPlaceholders`; this is unsafe.\n\nPAPIProxyBridge caches resolved requests for 30000 milliseconds (30 seconds), to avoid causing excessive traffic over your server's network channels. You can adjust how long to cache requests for using the `PlaceholderAPI#setCacheExpiry(long)` method.\n\nThere also exists `#formatComponentPlaceholders`. This method allows you to supply a string containing placeholders and receive an adventure component containing the formatted text, which may contain formatting and chat events.\n\u003C/details>\n",[27,30,33,36],{"id":28,"url":29},"spigot","https://spigotmc.org/resources/papiproxybridge.108415",{"id":31,"url":32},"polymart","https://polymart.org/resource/papiproxybridge.3615",{"id":34,"url":35},"modrinth","https://modrinth.com/plugin/papiproxybridge",{"id":37,"url":38},"bstats","https://bstats.org/plugin/velocity/PAPIProxyBridge%20-%20Velocity/17878",[40],"William278",[28,42,43,44,45],"paper","fabric","waterfall","velocity",0,"",[],6,{"SVG":51,"PNG":52},"papiproxybridge.svg","papiproxybridge.png",[],[],"**PAPIProxyBridge 1.8.1** adds support for Fabric 1.20.1, 1.21.1, and 1.21.5 in addition to the existing support for 1.21.4.\r\n\r\n* Fabric: Added support for 1.20.1, 1.21.1 and 1.21.5, courtesy of @alexdev03 (#198)\r\n\r\nTo update, just drag+drop.","PAPIProxyBridge v1.8.1 Released",{"data":58,"body":59},{},{"type":60,"children":61},"root",[62,76,86],{"type":63,"tag":64,"props":65,"children":66},"element","p",{},[67,74],{"type":63,"tag":68,"props":69,"children":70},"strong",{},[71],{"type":72,"value":73},"text","PAPIProxyBridge 1.8.1",{"type":72,"value":75}," adds support for Fabric 1.20.1, 1.21.1, and 1.21.5 in addition to the existing support for 1.21.4.",{"type":63,"tag":77,"props":78,"children":79},"ul",{},[80],{"type":63,"tag":81,"props":82,"children":83},"li",{},[84],{"type":72,"value":85},"Fabric: Added support for 1.20.1, 1.21.1 and 1.21.5, courtesy of @alexdev03 (#198)",{"type":63,"tag":64,"props":87,"children":88},{},[89],{"type":72,"value":90},"To update, just drag+drop.",["Reactive",92],{"$snuxt-i18n-meta":93,"$sauth":-1,"$sxsrf":-1},{},["Set"],["ShallowReactive",96],{"user":97,"$fc5330UhFlMGGFH2Y43zTPX5e-t1GU-UvjwDuJpcFT0E":-1,"mdc-9ammta-key":-1},["NuxtError",98],{"message":99,"statusCode":100,"statusMessage":101,"data":102},"[GET] \"https://api.william278.net/v1/users/@me\": 401 Unauthorized",401,"Unauthorized",{"error":103},"You must be logged in to perform this action.","/posts/papiproxybridge-1.8.1-released"]