{"id":125810,"date":"2026-06-07T12:23:30","date_gmt":"2026-06-07T09:23:30","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/"},"modified":"2026-06-07T12:23:30","modified_gmt":"2026-06-07T09:23:30","slug":"protoweaver","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/","title":{"rendered":"ProtoWeaver"},"content":{"rendered":"<p>![Maintenance](https:\/\/GitHub.com\/Naereen\/StrapDown.js\/graphs\/commit-activity)<br \/>\n![PRs Welcome](http:\/\/makeapullrequest.com)<\/p>\n<p>![ko-fi](https:\/\/ko-fi.com\/G2G4DZF4D)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/MrNavaStar\/ProtoWeaver\/master\/server\/src\/main\/resources\/assets\/protoweaver\/icon.png\" width=\"300\" height=\"300\"><\/p>\n<p># ProtoWeaver<br \/>\nA minecraft networking library for creating custom protocols that run on the internal netty server. <\/p>\n<p>#### What dis mean?<br \/>\nSick and tired of hyjacking client connections to send data to and from a proxy? Well I sure was. ProtoWeaver allows you to create a custom protocol that runs on the same port that the minecraft server uses.<br \/>\nThis means a proxy such as velocity is able to communicate with the server regardless if players are on online or not, without running an extra socket server on a different port. Protoweaver is also not just<br \/>\nlimited to proxies. Using the `client` module, any 3rd party java application can talk directly with ProtoWeaver!<\/p>\n<p>Protoweaver is fast, secure, and easy to use. All protocols run under the same netty instance used by minecraft, are encypted with ssl, and are wrapped in a very straight forward api. Lets take a look:<\/p>\n<p>### Features<br \/>\n&#8211; [x] Zero user config required<br \/>\n&#8211; [x] SSL encrytion<br \/>\n&#8211; [x] Protocol authentication<br \/>\n&#8211; [x] Packets as POJO&#8217;s<br \/>\n&#8211; [x] Compression (Gzip, Snappy, LZ)<br \/>\n&#8211; [x] All major mod loaders (neoforge soon tm)<br \/>\n&#8211; [ ] API for registering raw protocols (http, ssh, etc)<br \/>\n&#8211; [x] Custom serialization<br \/>\n&#8211; [ ] Custom SSL providers\/certs<br \/>\n&#8211; [ ] Muti-protocol connections<br \/>\n&#8211; [ ] Tell me what you want to see!<\/p>\n<p>### Project Setup<br \/>\nIn your build.gradle include<\/p>\n<p>*** Note: **Do not shade protoweaver! It will not work properly. ProtoWeaver is a mod\/plugin that is installed along side yours!**<br \/>\n&#8220;` gradle<br \/>\nrepositories {<br \/>\n    maven { url &#8220;https:\/\/maven.mrnavastar.me\/releases&#8221; }<br \/>\n}<\/p>\n<p>dependencies {<br \/>\n    \/\/ &#8216;common&#8217; can be replaced with any of: `client`, `fabric`, `forge`, `paper` or `proxy`.<br \/>\n    implementation &#8220;me.mrnavastar.protoweaver:common:1.3.11&#8221;<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Creating a Protocol<br \/>\nProtocols are very customizable with a lot of built in functionality. Here is an example protocol:<br \/>\n&#8220;`java<br \/>\nProtocol protocol = Protocol.create(&#8220;my_mod_id&#8221;, &#8220;cool_protocol&#8221;)<br \/>\n    .setCompression(CompressionType.GZIP)<br \/>\n    .setServerHandler(MyCustomServerHandler.class)<br \/>\n    .setClientHandler(MyCustomClientHandler.class)<br \/>\n    .setMaxConnections(15)<br \/>\n    .addPacket(String.class)<br \/>\n    .build();<\/p>\n<p>\/\/ Load the protocol before it can be used<br \/>\nProtoWeaver.load(protocol);<br \/>\n&#8220;`<\/p>\n<p>### Sending packets<br \/>\nSending packets is extremely simple. Any POJO that has been added to the protocol (See [Creating a Protcol](#creating-a-protocol)) is a valid packet that can be sent. Note that all POJO serialization is handled through kyro, a fast and fast serialization library.<br \/>\n&#8220;`java<br \/>\n\/\/ If you have a reference to a &#8216;ProtoConnection&#8217;, you can simply:<br \/>\nconnection.send(myObject);<br \/>\n\/\/ If you have a reference to a &#8216;ProtoClient&#8217;, you can also:<br \/>\nclient.send(myObject);<br \/>\n&#8220;`<\/p>\n<p>### Handling packets<br \/>\nAll protocols need handlers in order to implement functionality. The client and server can either use the same handler, or both use different ones.<br \/>\n&#8220;`java<br \/>\npublic class MyCustomServerHandler implements ProtoConnectionHandler {<br \/>\n    \/\/ Note that all functions are optional to implement<\/p>\n<p>    @Override<br \/>\n    public void void onReady(ProtoConnection connection) {<br \/>\n        System.out.println(&#8220;awesome! looks like a new client has connected from: &#8221; + connection.getRemoteAddress());<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void onDisconnect(ProtoConnection connection) {<br \/>\n        System.out.println(&#8220;goodbye: &#8221; + connection.getRemoteAddress());<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void handlePacket(ProtoConnection connection, Object packet) {<br \/>\n        System.out.println(&#8220;wow! got: &#8221; + packet.toString() + &#8221; from: &#8221; + connection.getRemoteAddress());<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>&#8220;`java<br \/>\npublic class MyCustomClientHandler implements ProtoConnectionHandler {<br \/>\n    \/\/ Note that all functions are optional to implement<\/p>\n<p>    @Override<br \/>\n    public void void onReady(ProtoConnection connection) {<br \/>\n        System.out.println(&#8220;awesome! connected to: &#8221; + connection.getRemoteAddress());<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void onDisconnect(ProtoConnection connection) {<br \/>\n        System.out.println(&#8220;goodbye: &#8221; + connection.getRemoteAddress());<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void handlePacket(ProtoConnection connection, Object packet) {<br \/>\n        System.out.println(&#8220;saying hi!&#8221;);<br \/>\n        connection.send(&#8220;Hey server!&#8221;);<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Custom Serialization<br \/>\nSometimes it can be useful to send minecraft objects or other premade POJO&#8217;s in your protocol. To allow this, you can register a custom serializer.<\/p>\n<p>For example, here is a serializer for NBT tags:<br \/>\n&#8220;`java<br \/>\npublic class NbtSerializer extends ProtoSerializer<CompoundTag> {<\/p>\n<p>    public NbtSerializer(Class<CompoundTag> type) {<br \/>\n        super(type);<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void write(ByteArrayOutputStream buffer, CompoundTag value) {<br \/>\n        try {<br \/>\n            NbtIo.writeCompressed(value, buffer);<br \/>\n        } catch (IOException e) {<br \/>\n            Platform.throwException(e);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public CompoundTag read(ByteArrayInputStream buffer) {<br \/>\n        try {<br \/>\n            return NbtIo.readCompressed(buffer, NbtAccounter.unlimitedHeap());<br \/>\n        } catch (IOException e) {<br \/>\n            Platform.throwException(e);<br \/>\n            throw new RuntimeException(e);<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<br \/>\nThen to register the serializer, simply do:<br \/>\n&#8220;`java<br \/>\nProtocol protocol = Protocol.create(&#8220;my_mod_id&#8221;, &#8220;cool_protocol&#8221;)<br \/>\n    .setCompression(CompressionType.GZIP)<br \/>\n    .setServerHandler(MyCustomServerHandler.class)<br \/>\n    .setClientHandler(MyCustomClientHandler.class)<br \/>\n    .setMaxConnections(15)<br \/>\n    .addPacket(CompoundTag.class, NbtSerializer.class)<br \/>\n    .build();<br \/>\n&#8220;`<\/p>\n<p>### More Docs Coming soon! Maybe a real website??<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A networking library for creating custom protocols that run on the internal netty server.<\/p>\n","protected":false},"featured_media":125811,"template":"","meta":{"_minecraft_slug":"protoweaver","_minecraft_project_id":"6nKmUVc7","_minecraft_author":"mrnavastar","_minecraft_license":"CC0-1.0","_minecraft_downloads":5265,"_minecraft_follows":25,"_minecraft_client_side":"unknown","_minecraft_server_side":"unknown","_minecraft_storage_type":"zip","_minecraft_archive_name":"protoweaver.zip","_minecraft_size_bytes":980587002,"_minecraft_version_count":134,"_minecraft_updated_at":"2026-05-16T03:22:36.703621Z","_minecraft_date_created":"2024-05-28T20:44:14.440160Z","_minecraft_date_modified":"2026-04-01T17:51:42.345830Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/protoweaver","_minecraft_icon_attachment_id":125811,"_minecraft_imported_at":"2026-06-07T09:23:31+00:00","_minecraft_import_hash":"cf99e56964e60462b9bca07976625ff6","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[97,125,104,873,126,158,127,128,98,123,92,985,992],"mod_loader":[99,131,132,133,100],"minecraft_version":[110,111,112,113,114,115,116,117,118,119,120,46,47,48,49,50,51,52,53,54,55,56,57,58,59,36,60,93,94,101,102,62,37,40,41,73,74,38,78,79,80,81,82,83,167],"class_list":["post-125810","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-fabric","mod_category-folia","mod_category-forge","mod_category-library","mod_category-management","mod_category-neoforge","mod_category-paper","mod_category-purpur","mod_category-quilt","mod_category-technology","mod_category-utility","mod_category-velocity","mod_category-waterfall","mod_loader-fabric","mod_loader-folia","mod_loader-paper","mod_loader-purpur","mod_loader-quilt","minecraft_version-1-14","minecraft_version-1-14-1","minecraft_version-1-14-2","minecraft_version-1-14-3","minecraft_version-1-14-4","minecraft_version-1-15","minecraft_version-1-15-1","minecraft_version-1-15-2","minecraft_version-1-16","minecraft_version-1-16-1","minecraft_version-1-16-2","minecraft_version-1-16-3","minecraft_version-1-16-4","minecraft_version-1-16-5","minecraft_version-1-17","minecraft_version-1-17-1","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-19-4","minecraft_version-1-20","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-26-1","minecraft_version-26-1-1"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ProtoWeaver - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ProtoWeaver - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A networking library for creating custom protocols that run on the internal netty server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta property=\"og:image\" content=\"https:\/\/raw.githubusercontent.com\/MrNavaStar\/ProtoWeaver\/master\/server\/src\/main\/resources\/assets\/protoweaver\/icon.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/\",\"name\":\"ProtoWeaver - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/protoweaver-icon-abf54b594a901e7e7defa02a1bd037e4f966eafd_96.webp\",\"datePublished\":\"2026-06-07T09:23:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/protoweaver-icon-abf54b594a901e7e7defa02a1bd037e4f966eafd_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/protoweaver-icon-abf54b594a901e7e7defa02a1bd037e4f966eafd_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protoweaver\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ProtoWeaver\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ProtoWeaver - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/","og_locale":"en_US","og_type":"article","og_title":"ProtoWeaver - Minecraft","og_description":"A networking library for creating custom protocols that run on the internal netty server.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/","og_site_name":"Minecraft","og_image":[{"url":"https:\/\/raw.githubusercontent.com\/MrNavaStar\/ProtoWeaver\/master\/server\/src\/main\/resources\/assets\/protoweaver\/icon.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/","name":"ProtoWeaver - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/protoweaver-icon-abf54b594a901e7e7defa02a1bd037e4f966eafd_96.webp","datePublished":"2026-06-07T09:23:30+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/protoweaver-icon-abf54b594a901e7e7defa02a1bd037e4f966eafd_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/protoweaver-icon-abf54b594a901e7e7defa02a1bd037e4f966eafd_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/protoweaver\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"ProtoWeaver"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/125810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/125811"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=125810"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=125810"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=125810"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=125810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}