{"id":17013687,"url":"https://github.com/cakegit/create-interfaces","last_synced_at":"2026-03-31T21:30:18.018Z","repository":{"id":251183880,"uuid":"836454290","full_name":"cakeGit/Create-Interfaces","owner":"cakeGit","description":"Superseded by Create++ project","archived":true,"fork":false,"pushed_at":"2024-08-10T22:49:11.000Z","size":210,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"1.20.1-Dev","last_synced_at":"2025-01-27T13:48:33.687Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","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/cakeGit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2024-07-31T22:18:39.000Z","updated_at":"2024-10-14T21:06:37.000Z","dependencies_parsed_at":"2024-08-10T23:48:05.487Z","dependency_job_id":null,"html_url":"https://github.com/cakeGit/Create-Interfaces","commit_stats":null,"previous_names":["cakegit/create-interactive","cakegit/create-interfaces"],"tags_count":0,"template":false,"template_full_name":"Fabricators-of-Create/create-multiloader-addon-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakeGit%2FCreate-Interfaces","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakeGit%2FCreate-Interfaces/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakeGit%2FCreate-Interfaces/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakeGit%2FCreate-Interfaces/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cakeGit","download_url":"https://codeload.github.com/cakeGit/Create-Interfaces/tar.gz/refs/heads/1.20.1-Dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239957976,"owners_count":19724920,"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":[],"created_at":"2024-10-14T06:13:58.221Z","updated_at":"2026-03-31T21:30:17.958Z","avatar_url":"https://github.com/cakeGit.png","language":"Java","readme":"# Create Multi-Loader Addon Template\nA template based on Architectury for creating addons for Create on Forge, Fabric, and Quilt, simultaneously.\n\n## How does it work?\nThis template is powered by the [Architectury](https://github.com/architectury) toolchain.\nArchitectury allows developers to create the majority of their mod in common, loader-agnostic code that\nonly touches Minecraft itself. This can be found in the [common](common) subproject. Each loader target \nalso has its own subproject: those being [forge](forge) and [fabric](fabric). (Quilt support: you \nshouldn't need anything special and the Fabric version should work fine, but it is possible to add a \n`quilt` subproject if needed.) These loader-specific projects bridge between their respective loaders \nand the common code.\n\nThis system can be extended to work with Create as well as plain Minecraft. The common project gives\naccess to most of Create, Registrate, and Flywheel.\n\n## Limitations\nMinecraft has a lot of differences across loaders. You'll need to manage these differences using\nabstractions. Architectury does provide an [API](https://github.com/architectury/architectury-api)\nwhich you may use if desired, but it means you have another dependency to worry about.\n\nThis also applies to Create, which underwent significant changes in porting to Fabric. This means a lot \nof it will be different between loaders. The `common` project is only capable of referencing the code \non one loader (Fabric in this template), so you should be careful to not reference things that don't \nexist on the other one. Test often, and check the code on both loaders. When you do need to use these \nchanged things, that leads us to...\n\n## Solutions\nThere's a bunch of ways to work around the differences.\n\nFirst is Architectury API. It provides cross-loader abstractions that can be used in common code for\na decent amount of Minecraft. However, it means you need to worry about another dependency. It also\ndoesn't really help with Create.\n\nNext is the `@ExpectPlatform` annotation. It allows the implementation of a method to be replaced\nat compile time per-loader, letting you make your own abstractions. It is part of the Architectury\nplugin and does not cause an extra dependency. However, it can only be placed on static methods. See \n[ExampleExpectPlatform](common/src/main/java/net/examplemod/ExampleExpectPlatform.java) in common \nfor an example.\n\nFinally, simply have a common interface with implementation based on the loader. You might have a\n`PlatformHelper` common interface, with a static instance somewhere. On Fabric, set it to a\n`FabricPlatformHelper`, and a `ForgePlatformHelper` on Forge. The implementation is kept as a detail\nso you can use your helper from common code.\n\n## Features\n- Access to Create and all of its dependencies on both loaders\n- Mojang Mappings base, with Quilt Mappings and Parchment providing Javadoc and parameters\n- VineFlower decompiler for high quality Minecraft sources: `gradlew genSourcesWithVineflower`\n- GitHub Actions automatic build workflow\n- Machete Gradle plugin to shrink jar file sizes\n- Developer QOL: Mod Menu, LazyDFU, JEI\n\n## Use\nReady to get started? First you'll want to create a new repository using this template. You can do it\nthrough GitHub with the big green button near the top that says `Use this template`. \n\nOnce you've got your repository set up, you'll want to change all the branding to your mod instead \nof the template. Every `examplemod`, every placeholder. \n\nYou're free to change your license: CC0 lets you do whatever you want. Base Create is MIT, for reference. \n\nReplace this README with information about your addon. Give it an icon and change the metadata in the \n[fabric.mod.json](fabric/src/main/resources/fabric.mod.json) and the\n[mods.toml](forge/src/main/resources/META-INF/mods.toml).\n\nConfigure your dependencies. Each subproject `build.gradle` has optional dependencies commented.\nEither remove them or uncomment them. For Fabric, set your preferred recipe viewer with \n`fabric_recipe_viewer` in the root [gradle.properties](gradle.properties).\n\nRemember to remove any example code you don't need anymore.\n\nGet modding!\n\n## Notes\n- Architectury does not merge jars; When you build, you get separate jars for each loader.\n  There is an independent project that can merge these into one if desired called\n  [Forgix](https://github.com/PacifistMC/Forgix).\n- The file names and versions of jars are configured in the root [build.gradle](build.gradle). Feel \nfree to change the format if desired, but make sure it follows SemVer to work well on Fabric.\n- When publishing, you should always let GitHub Actions build your release jars. These builds will\nhave build number metadata, and will be compressed by the Machete plugin.\n\n## Other Templates\n- [Fabric-only template](https://github.com/Fabricators-of-Create/create-fabric-addon-template)\n- [Forge-only template](https://github.com/kotakotik22/CreateAddonTemplate)\n\n## Help\nQuestions? Join us in the #devchat channel of the [Create Discord](https://discord.com/invite/hmaD7Se).\n\n## License\n\nThis template is available under the CC0 license. Feel free to do as you wish with it.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcakegit%2Fcreate-interfaces","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcakegit%2Fcreate-interfaces","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcakegit%2Fcreate-interfaces/lists"}