{"id":18038829,"url":"https://github.com/dockyardmc/dockyard","last_synced_at":"2025-04-07T10:19:59.226Z","repository":{"id":233309574,"uuid":"650731309","full_name":"DockyardMC/Dockyard","owner":"DockyardMC","description":"Custom implementation of the Minecraft server protocol in Kotlin","archived":false,"fork":false,"pushed_at":"2025-04-06T11:27:28.000Z","size":7174,"stargazers_count":76,"open_issues_count":15,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-06T12:27:17.417Z","etag":null,"topics":["hacktoberfest","kotlin","minecraft","minecraft-protocol","minecraft-server-software","netty","nio"],"latest_commit_sha":null,"homepage":"https://dockyard.lukynka.cloud/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DockyardMC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"DockyardMC","patreon":null,"open_collective":null,"ko_fi":"LukynkaCZE","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2023-06-07T17:27:40.000Z","updated_at":"2025-04-05T10:46:06.000Z","dependencies_parsed_at":"2024-11-13T12:18:39.510Z","dependency_job_id":"1d6c5b59-b7bc-4db5-bb3c-bef119303b0b","html_url":"https://github.com/DockyardMC/Dockyard","commit_stats":{"total_commits":446,"total_committers":10,"mean_commits":44.6,"dds":"0.10538116591928248","last_synced_commit":"60473e147426b0eee51830765c93e487928eabab"},"previous_names":["dockyardmc/dockyard"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DockyardMC%2FDockyard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DockyardMC%2FDockyard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DockyardMC%2FDockyard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DockyardMC%2FDockyard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DockyardMC","download_url":"https://codeload.github.com/DockyardMC/Dockyard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247631833,"owners_count":20970069,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","kotlin","minecraft","minecraft-protocol","minecraft-server-software","netty","nio"],"created_at":"2024-10-30T14:06:31.077Z","updated_at":"2025-04-07T10:19:59.200Z","avatar_url":"https://github.com/DockyardMC.png","language":"Kotlin","funding_links":["https://github.com/sponsors/DockyardMC","https://ko-fi.com/LukynkaCZE","https://ko-fi.com/lukynkacze"],"categories":[],"sub_categories":[],"readme":"[\u003cimg src=\"https://github.com/user-attachments/assets/cfac1e41-d046-4092-9c84-befb79a48d96\"\u003e](https://github.com/DockyardMC/Dockyard)\n\n---\n[![Maven metadata URL](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fmvn.devos.one%2Freleases%2Fio%2Fgithub%2Fdockyardmc%2Fdockyard%2Fmaven-metadata.xml\u0026style=for-the-badge\u0026logo=maven\u0026logoColor=%23FFFFFF\u0026label=Latest%20Version\u0026color=%23afff87)](https://mvn.devos.one/#/releases/io/github/dockyardmc/dockyard)\n[![Static Badge](https://img.shields.io/badge/Language-Kotlin-Kotlin?style=for-the-badge\u0026color=%23963cf4)](https://kotlinlang.org/)\n\n[![wakatime](https://wakatime.com/badge/github/DockyardMC/Dockyard.svg?style=for-the-badge)](https://wakatime.com/badge/github/DockyardMC/Dockyard)\n[![Discord](https://img.shields.io/discord/1242845647892123650?label=Discord%20Server\u0026color=%237289DA\u0026style=for-the-badge\u0026logo=discord\u0026logoColor=%23FFFFFF)](https://discord.gg/SA9nmfMkdc)\n[![Static Badge](https://img.shields.io/badge/Donate-Ko--Fi-pink?style=for-the-badge\u0026logo=ko-fi\u0026logoColor=%23FFFFFF\u0026color=%23ff70c8)](https://ko-fi.com/LukynkaCZE)\n\nDockyardMC is an open-source, fast and lightweight Minecraft server protocol implementation that's written from scratch in Kotlin without any code from Mojang. It is focused on making developing and prototyping easy, simple and intuitive while having full control over every aspect of the server.\n\n**This project currently under development, missing parts some users might rely on**\n\n## Quick Start\n\nYou can read how to setup and use dockyard [here](https://dockyard.lukynka.cloud/wiki/quick-start)\n\n## Features\n\n- Modern, simple to use API which makes developing and prototyping easy and fast\n- Lightweight and without all the overhead the vanilla server has\n- Ability to take full control over every aspect of the server\n- Fully multithreaded worlds\n\n## API Examples\n\n### Events\n\n```kotlin\nEvents.on\u003cPlayerJoinEvent\u003e { event -\u003e\n    if(banList.contains(event.player.uuid)) {\n        event.player.kick(\"\u003cred\u003eYou are banned!\")\n        event.cancel()\n        return@on\n    }\n  \n    broadcastMessage(\"\u003clime\u003e→ \u003cyellow\u003e${event.player} has joined the server.\")\n}\n```\n\nModifying events (including PacketReceived and PacketSent)\n```kotlin\nEvents.on\u003cPacketReceivedEvent\u003e { event -\u003e\n    if(event.packet is ServerboundPlayerChatMessagePacket) {\n      event.packet.message = \"ha get overwritten \u003e:3\"\n    }\n}\n```\n---\n\n### Commands API\nYou can create commands quickly and easily with the DockyardMC command API\n\n```kotlin\nCommands.add(\"/explode\") {\n    addArgument(\"player\", PlayerArgument())\n    withPermission(\"player.admin\")\n    withDescription(\"explodes a player\")\n    execute { context -\u003e\n        val executingPlayer = context.getPlayerOrThrow()\n        val player = getArgument\u003cPlayer\u003e(\"player\")\n    \n        player.spawnParticle(player.location, Particles.EXPLOSION_EMITTER, Vector3f(1f), amount = 5)\n        player.playSound(Sounds.ENTITY_GENERIC_EXPLODE, volume = 2f, pitch = randomFloat(0.6f, 1.3f))\n    \n        player.sendMessage(\"\u003cyellow\u003eYou got \u003crainbow\u003e\u003cb\u003etotally exploded \u003cyellow\u003eby \u003cred\u003e$executingPlayer\")\n        executingPlayer.sendMessage(\"\u003cyellow\u003eYou \u003crainbow\u003e\u003cb\u003etotally exploded \u003cyellow\u003eplayer \u003cred\u003e$player\")\n    }\n}\n```\n\n---\n\n### Built-in Bossbar and Sidebar APIs\n\n#### Sidebar API\n```kotlin\nval sidebar = Sidebar {\n    setTitle(\"\u003cyellow\u003e\u003cbold\u003eMy Cool Server\")\n    setGlobalLine(\"\")\n    setPlayerLine { player -\u003e \"Welcome, \u003caqua\u003e$player\" }\n    setPlayerLine { player -\u003e \"World: \u003cyellow\u003e${player.world.name}\" }\n    setPlayerLine { player -\u003e \"Ping: \u003cpink\u003e${player.ping}\" }\n    setGlobalLine(\"\")\n    setGlobalLine(\"\u003cyellow\u003ewww.mycoolserver.uwu\")\n}\n\nEvents.on\u003cPlayerJoinEvent\u003e { event -\u003e\n    sidebar.viewers.add(event.player)\n}\n```\nChanging any lines, title etc. will automatically send update to the viewers\n\n#### Bossbar API\n```kotlin\nval bossbar = Bossbar(\"\u003cyellow\u003eThe server has uptime is: \u003corange\u003e$serverUptime\u003cyellow\u003e!\", 1f, BossbarColor.YELLOW, BossbarNotches.SIX)\n\nEvents.on\u003cPlayerJoinEvent\u003e { event -\u003e\n    bossbar.addViewer(event.player)\n}\n```\nAgain, changing any properties of the bossbar will automatically send updates to the viewers \n\n### Entity Metadata Layers\n\nLayering entity metadata per player allows for client-side changes to entities for purposes like client-side glowing and client-side invisibility. \n\nNote that this behaviour is not just sending one packet, but its whole system that overlays the player specific metadata layer over the entity's actual metadata   \n\nHere are few examples:\n```kotlin\n// pre-made functions to set client-side glowing and invisibility\nentity.setGlowingFor(player, true)\nentity.setInvisibleFor(player, false)\n```\n\n```kotlin\n// get the metadata layer of player or create new one if it doesn't exist\nval playerMetadataLayer = warden.metadataLayers[player] ?: mutableMapOf\u003cEntityMetadataType, EntityMetadata\u003e()\n\n// create new EntityMetadata with index and type pose\nval pose = EntityMetadata(EntityMetadataType.POSE, EntityMetaValue.POSE, EntityPose.ROARING)\n\n// add the pose to the list\nplayerMetadataLayer[EntityMetadataType.POSE] = pose\nwarden.metadataLayers[player] = playerMetadataLayer\n\n// specified player will now see the warden roaring\n```\n\n## Running\n\nDockyard is mainly designed as library that can be imported via maven. If you want to run dockyard you will need to embed it into your own kotlin app.\n\n## Contributing\n\nContributions are always welcome! Please always check branches to see if the feature you are contributing is not already existing feature that someone else is working on\n\n(plus you get cool fancy orange contributor role on the discord!!!)\n\n## Related Libraries / Projects\n\n- **[Scroll](https://github.com/DockyardMC/Scroll/)** - Minecraft component library made for DockyardMC\n- **[Chart](https://github.com/DockyardMC/Chart)** - Minecraft NBT library made for DockyardMC\n- **[kotlin-bindables](https://github.com/LukynkaCZE/kotlin-bindables)** - Bindable system inspired by [osu!framework](https://github.com/ppy/osu-framework/)\n- **[Pathetic](https://github.com/Metaphoriker/pathetic)** - A powerful, optimized and easy-to-use Java A* Pathfinding Library for 3D environments.\n- **[Spark](https://github.com/lucko/spark)** - A performance profiler for Minecraft clients, servers, and proxies\n- **[PrettyLog](https://github.com/LukynkaCZE/PrettyLog/)** - Fancy logging library\n\n## Authors\n\n- [LukynkaCZE](https://www.github.com/LukynkaCZE)\n- [AsoDesu](https://www.github.com/AsoDesu)\n\n## Additional thanks to\n\n- [KevDev](https://github.com/TrasherMC)\n- [BluSpring](https://github.com/BluSpring)\n- [Asoji](https://github.com/asoji)\n- All the contributors\n- Twitch chat who watches me code this! \u003c3\n\n---\n\nIf you want to support me and this project, consider [**buying me a coffee**](https://ko-fi.com/lukynkacze) \u003c3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdockyardmc%2Fdockyard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdockyardmc%2Fdockyard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdockyardmc%2Fdockyard/lists"}