-
create a personal fork if you don't yet have one
-
clone the main repository to your pc, and add your personal fork as a secondary remote (after cloning) -- if you did it the other way around, it's fine, you just have to make sure you pull tags from the main repository, and not your fork!
if you already have a local clone, fetch from the main repository to make sure you have the latest commit
-
create a new work branch based off the correct branch, eg like, upstream/1.15.x
-
run gradlew setup and gradlew gen*Runs
-
do the thing and the changes, and test that it works as expected. write or update a test mod if the feature calls for it (as RenderNameplateEvent would)
-
run gradlew build to make sure it doesn't error when building, and gradlew genPatches to update the patch files with your changes (I recommend doing that often, as a backup strategy)
-
review your changes, to make sure your patch files didn't gain/lose import lines
-
commit to your branch, and push the branch to your personal fork
-
create the PR from the github site
Annex 1: repeat steps 5 to 8 if you have any followup changes from review comments, or you remember something you missed.
Annex 2: if you need to rebase your changes on top of a newer commit, first make sure you ran genPatches, then git fetch upstream the latest version from the main repository (upstream is whatever you named the remote, could be origin), and then rebase on top of like upstream/1.15.x, resolving any conflicts that may arise