{"id":18574131,"url":"https://github.com/viaversion/vialegacy","last_synced_at":"2026-01-18T18:02:29.078Z","repository":{"id":144927890,"uuid":"584919256","full_name":"ViaVersion/ViaLegacy","owner":"ViaVersion","description":"ViaVersion addon to add support for EVERY Minecraft server version (Classic, Alpha, Beta, Release)","archived":false,"fork":false,"pushed_at":"2026-01-17T00:42:29.000Z","size":2588,"stargazers_count":77,"open_issues_count":8,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-01-17T13:24:01.947Z","etag":null,"topics":["minecraft","minecraft-alpha","minecraft-beta","minecraft-classic","minecraft-protocol","protocol","protocol-translation","protocol-translator","viaversion"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ViaVersion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"rk_01"}},"created_at":"2023-01-03T21:20:02.000Z","updated_at":"2026-01-09T15:21:41.000Z","dependencies_parsed_at":"2024-01-05T16:30:40.311Z","dependency_job_id":"a0e19937-9daf-4220-bf3f-ad56ea4ceabc","html_url":"https://github.com/ViaVersion/ViaLegacy","commit_stats":null,"previous_names":["viaversion/vialegacy"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/ViaVersion/ViaLegacy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViaVersion%2FViaLegacy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViaVersion%2FViaLegacy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViaVersion%2FViaLegacy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViaVersion%2FViaLegacy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ViaVersion","download_url":"https://codeload.github.com/ViaVersion/ViaLegacy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViaVersion%2FViaLegacy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28547004,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["minecraft","minecraft-alpha","minecraft-beta","minecraft-classic","minecraft-protocol","protocol","protocol-translation","protocol-translator","viaversion"],"created_at":"2024-11-06T23:14:00.706Z","updated_at":"2026-01-18T18:02:29.068Z","avatar_url":"https://github.com/ViaVersion.png","language":"Java","funding_links":["https://ko-fi.com/rk_01"],"categories":[],"sub_categories":[],"readme":"# ViaLegacy\nViaVersion addon to add support for EVERY Minecraft server version (Classic, Alpha, Beta, Release).\n\nViaLegacy is not usable by itself as a standalone software, as it is an addon for ViaVersion which adds more protocol translators.\nViaLegacy is intended to be implemented in a ViaVersion based protocol translator.\n\nIf you are looking to implement ViaLegacy in your own software you can start by reading the [Usage](#usage) section.  \nIf you just want to use ViaLegacy yourself you can check out some projects which implement it in the [Projects](#projects-implementing-vialegacy) section.\n\n### Supported Server protocols\n- Classic (c0.0.15 - c0.30 including [CPE](https://wiki.vg/Classic_Protocol_Extension))\n- Alpha (a1.0.15 - a1.2.6)\n- Beta (b1.0 - b1.8.1)\n- Release (1.0.0 - 1.7.10)\n\nThe lowest supported client version from which ViaLegacy can translate is 1.7.2.\n\n### Projects implementing ViaLegacy\n - [ViaProxy](https://github.com/ViaVersion/ViaProxy): Standalone proxy which uses ViaVersion to translate between Minecraft versions. Allows Minecraft 1.7+ clients to join to any version server.\n - [ViaFabricPlus](https://github.com/ViaVersion/ViaFabricPlus): Fabric mod for the latest Minecraft version with QoL fixes and enhancements to the gameplay.\n\n## Releases\n### Gradle/Maven\nTo use ViaLegacy with Gradle/Maven you can use the ViaVersion maven server:\n```groovy\nrepositories {\n    maven { url \"https://repo.viaversion.com\" }\n}\n\ndependencies {\n    implementation(\"net.raphimc:ViaLegacy:x.x.x\") // Get latest version from releases\n}\n```\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003eviaversion\u003c/id\u003e\n        \u003curl\u003ehttps://repo.viaversion.com\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003enet.raphimc\u003c/groupId\u003e\n        \u003cartifactId\u003eViaLegacy\u003c/artifactId\u003e\n        \u003cversion\u003ex.x.x\u003c/version\u003e \u003c!-- Get latest version from releases --\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n### Jar File\nIf you just want the latest jar file you can download it from [GitHub Actions](https://github.com/RaphiMC/ViaLegacy/actions/workflows/build.yml) or the [ViaVersion Jenkins](https://ci.viaversion.com/view/All/job/ViaLegacy/).\n\n## Usage\nViaLegacy requires you to have an already functional ViaVersion implementation for your platform.\nIf you don't have one you can check out [this documentation](https://github.com/ViaVersion/ViaVersion/wiki/Creating-a-new-ViaVersion-platform) in order to create one.\n\n### Base Implementation\n\nTo implement ViaLegacy you need to create a new instance of its platform implementation class ``ViaLegacyPlatformImpl`` when ViaVersion is being enabled.\nHere is an example:\n```java\nnew ViaLegacyPlatformImpl();\n```\nThis should be done in your ``ViaManagerImpl.initAndLoad()`` method call as enable listener (or otherwise after the Via manager is initialized).\n\n#### Implementing the netty changes\nViaLegacy requires you to make some changes to your netty pipeline where ViaVersion is being added into the pipeline.\nViaLegacy needs to have custom netty handlers in the pipeline which handle \u003c= 1.6.4 connections. This is required due to the way how \u003c= 1.6.4 (called pre-netty protocol) protocol differs.\n\nTo implement the changes you should add something similar to the following lines to your netty pipeline (After the ViaVersion handlers are added):\n```java\nif (serverTargetVersion.olderThanOrEqualTo(LegacyProtocolVersion.r1_6_4)) { // Only add those handlers if the server version is \u003c= 1.6.4\n    // You can either add a codec (if your pipeline is built for that)\n    channel.pipeline().addBefore(\"length-codec\", PreNettyLengthCodec.NAME, new PreNettyLengthCodec(user));\n    // or two seperate netty handlers\n    // channel.pipeline().addBefore(\"length-decoder\", PreNettyLengthPrepender.NAME, new PreNettyLengthPrepender(user));\n    // channel.pipeline().addBefore(\"length-encoder\", PreNettyLengthRemover.NAME, new PreNettyLengthRemover(user));\n}\n```\n\n### Implementing the platform specific providers\nThe platform specific providers are all optional (except for ``EncryptionProvider`` and ``GameProfileFetcher``) and only required if you want to use the features which require them.  \nTo implement a provider you can simply call ``Via.getManager().getProviders().use(TheNameOfTheProvider.class, new YouImplementationOfThatProvider());`` after the Via manager is initialized.\n\n#### EncryptionProvider\nThe encryption provider is used to encrypt the connection to the server if the server version is 1.2.5 - 1.6.4.  \nThose servers enable the encryption at a different point in the login process than \u003e= 1.7.2 servers. This means that your platform must not encrypt the connection when receiving the LoginKey packet from the server, but instead store the key and encrypt the connection when the method in the provider is invoked.  \nIf your platform supports online mode authentication you also should not always do a joinServer request when receiving the LoginKey packet, but only when ``userConnection.get(ProtocolMetadataStorage.class).authenticate`` is true.\n\n#### GameProfileFetcher\nThe game profile fetcher is used to fetch the game profile of a player if the server version is \u003c= 1.7.10.\nThis is required because the game profile or UUID of players is not sent by the server in \u003c= 1.7.10.\nThe GameProfileFetcher is only used when ``legacy-skin-loading`` or ``legacy-skull-loading`` is set to ``true`` in the config. If you don't plan to use those options you don't need to implement this provider.\nFor a reference implementation using the Mojang AuthLib you can take a look at how [ViaProxy](https://github.com/ViaVersion/ViaProxy/blob/60e6e2ad49ee15617bb5b1aebeb3ac6fec05ba43/src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyGameProfileFetcher.java) implements it.\n\n#### OldAuthProvider\nThe old auth provider is used to authenticate the player if the server version is \u003c= 1.2.5 and has online mode enabled.\nThis is required as \u003c= 1.2.5 servers do not enable encryption at all and authenticate at a different point in the login process.  \nThe implementation of this provider requires the implementer to be able to send a joinServer request to the mojang servers using the supplied server hash.  \nThe default implementation of this provider simply throws an Exception indicating that online mode is not supported by this implementation.\n\n#### AlphaInventoryProvider\nThe alpha inventory provider is used to get/set the inventory contents of the player if the server version is \u003c= Alpha 1.2.6.\nThis is required as \u003c= Alpha 1.2.6 servers handle the inventory fully clientside and the client is expected to send the whole inventory contents to the server when it changes anything.  \nThe default implementation of this provider uses an inventory tracking system which tracks the inventory contents of the player.\n\n#### ClassicWorldHeightProvider\nThe classic world height provider is used to get the maximum world height the client is able to handle.\nClassic server worlds can be up to 1024 blocks high, but \u003c= 1.16.5 client can't handle worlds higher than 256 blocks.\nThe implementation of this provider requires the implementer to be able to determine the maximum supported world height of a given client.  \nThe default implementation of this provider states that the client supports 128 blocks high worlds.  \n\n**Implementing this provider to have worlds higher than 256 blocks requires heavy modification of ViaVersion code which the implementer has to do on their own.**\nFor a reference implementation you can take a look at how [ViaProxy](https://github.com/ViaVersion/ViaProxy) implements it.\n\n#### ClassicMPPassProvider\nThe classic MP pass provider is used to get the MP pass (Authentication token) of a player if the server version is \u003c= Classic 0.30.\nThis is required for joining classic servers with enabled online mode.  \nThe implementation of this provider requires the implementer to be able to get the MP pass of a given player.  \nThe default implementation of this provider simply returns \"0\" which indicates to the server that the client does not have a valid MP pass.  \nFor a reference implementation you can take a look at how [ViaProxy](https://github.com/ViaVersion/ViaProxy/blob/60e6e2ad49ee15617bb5b1aebeb3ac6fec05ba43/src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyClassicMPPassProvider.java) implements it.\n\n## Contact\nIf you encounter any issues, please report them on the\n[issue tracker](https://github.com/ViaVersion/ViaLegacy/issues).  \nIf you just want to talk or need help implementing ViaLegacy feel free to join the ViaVersion\n[Discord](https://discord.gg/viaversion).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviaversion%2Fvialegacy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviaversion%2Fvialegacy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviaversion%2Fvialegacy/lists"}