Thank you for considering contributing to ParallelUtils!
These guidelines help ensure that contributors can effectively make contributions to the project in a smooth manner, minimizing the time taken by the developers and maintainers to address issues and assess changes.
Table of Contents
This project and everyone participating in it is governed by the ParallelMC Code of Conduct
The development is a work in progress, so it's kind of a mess right now and not in a final state (we are always open to contributions to improve the development and build process!)
We use Gradle as our build system for its tight integration with Paper and helpful development tools.
Primarily, the gradle plugins xyz.jpenilla.run-paper
and io.papermc.paperweight.userdev
are used to run development servers
and to automatically create plugin jar files.
ParallelUtils is broken into two components: The API and the modules.
The API contains utility code, our command system, and functionality to load and unload modules at runtime. This is all code needed for all plugins to run effectively.
The modules are the functional components of the plugin. The structure of modules allows for easy expansion of the plugin.
The root directory's gradle script includes gradle plugins and dependencies that are common between the API and modules. This file rarely needs to be edited, such as when the Paper API is updated.
api/
- This directory contains the code and build script for the API. All non-plugin dependencies needed by modules (those that need to be integrated into the plugin JAR), must be added here. This will likely be changed in the future. This also contains the configuration information oif the plugin, which includes dependencies and commands. The commands will be removed from here in the future, favoring an API interface for modules to hook their own commands. To build the API, run./gradlew api:reobfJar
. To run the development server, run./gradlew api:runServer
.docs/
- This directory contains a submodule of the Parallel-Documentation repository. This repository will soon be removed in favor of the Wiki page on the ParallelUtils repo.libs/
- This directory should contain libraries that are linked as jar files. Currently, this includes the Parallel version of FractalForest (not currently public), Pronouns, and the Parallel version of VoteParty (also not currently public).modules/
- This directory contains the code and build script for the modules. The build script here contains compileOnly dependencies for all modules as well as custom code to automatically generate tasks to build each module separately. To build a module, run./gradlew modules:reobf-moduleName
, where moduleName is the directory name of the module.
If you believe you have found a bug with ParallelUtils or its modules, report it in an issue here. Please include a descriptive title and details of the bug, so we can properly evaluate and fix it. Please do not report issues in Github that are unrelated to ParallelUtils (such as bugs with other plugins on our server). For these issues, create a ticket in our Discord server!
If you would like to request a new feature for ParallelUtils or its modules, create an issue here.
The developer team will evaluate the request and determine if it can be added to our workload.
If it cannot, but we still determine the feature is worthwhile, we will label the issue with help-wanted
.
Take a look at issues with the good first issue
and help wanted
labels:
good first issue
- Should only require a few lines of code or are otherwise very simplehelp wanted
- A bit more involved thangood first issue
. These are generally issues that the development team doesn't have the time to pick up.
Setting up a development environment for ParallelUtils can be a bit tricky:
- If you are modifying an existing module, simply fork and clone ParallelUtils.
- First, ensure that you have Git installed. Second, create a public GitHub repository. This will house your module.
Next, fork and clone ParallelUtils. Now, you must add a submodule using
git submodule add repoURL modules/src/main/java/parallelmc/parallelutils/modules/<moduleName>
Next, rungit submodule update --init modules/src/main/java/parallelmc/parallelutils/modules/<moduleName>
. These steps will allow you to use our development environment for creating the module and will prepare your fork for an eventual Pull Request.
Create a Pull Request! Please add a changelog of all features (new things), improvements (things that work better), bug fixes, and new known bugs
to the description. Also, link all relevant issues to the PR with #issueNum
. The PR should include changes
to existing modules or a git submodule to a new module.
During review, the development team will:
- Ensure any CI tests pass
- At least one member will review all code and add comments or request changes
- Once at least one team member approves the PR, we will merge it into the
staging
branch, where it will stay until the next release.
Coming Soon:tm:
- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line
- When only changing documentation, include
[ci skip]
in the commit title