Back to blog

Minecraft Plugin Handover: Can Your Team Rebuild the JAR?

Mineando
Two green voxel pieces separated to show their assembly, with white Mineando branding.

Before accepting the handover of a custom Minecraft plugin, ask someone other than its author to build the agreed release from the delivered repository, then run that newly built JAR on the agreed test server. Give that person only the documented prerequisites and authorised project access. If they need an unexplained file from the developer's laptop, the handover is incomplete.

This is a practical check for community owners, agencies and teams that expect another developer to maintain their plugin later. It assumes source delivery is included in the project scope. The procedure below is a proposed acceptance exercise, not a build or server test performed by Mineando.

Agree what your team will receive

A working JAR, a source archive and a maintainable project are different deliverables. Before development starts, agree repository access, the source revision corresponding to the release, build instructions and the dependencies needed to produce the distributable file. Record any restrictions on modifying or sharing third-party components rather than assuming every dependency can be handed over unchanged.

Name the person who will receive the project and the organisation that controls the repository and build accounts. A personal account belonging to the original developer should not be an undocumented prerequisite for routine maintenance. If source delivery is outside the agreement, make that limitation explicit and decide how future changes will be commissioned.

The broader plugin acceptance guide covers player behaviour, permissions and failures. This additional check answers a narrower question: can the receiving team produce the software it is expected to maintain?

Tie the release to a specific revision

Create a short release record before the rehearsal. It should identify the delivered JAR, its checksum, the exact source commit, the build command and the required environment. Keep the readable release name as well, but do not rely solely on a filename such as event-plugin-final.jar.

For an illustrative registration plugin, the record might name release 1.4.0, the actual commit identifier and the agreed Paper build. Those values must come from the real project. Do not fill missing fields with guesses or substitute the newest server version during the exercise.

Ask the developer to distinguish the Java environment used to build the plugin from the runtime used on the test server. Record both. Include required companion plugins and configuration. The receiving engineer should be able to tell which release was rebuilt and where its behaviour was checked without reconstructing a conversation from chat history.

Deliver the build tools with the instructions

For a Gradle project, include the Wrapper scripts and files in version control. The Gradle Wrapper runs the declared Gradle version and can download it when needed. It controls the build-tool version; it does not freeze every other input.

The handover instructions should name the exact task that produces the deployable JAR and its output path. A project may create several archives, so “take a file from the build folder” is not adequate. Also state how tests are run and where their results appear. Do not assume that a successful packaging task means tests existed or were executed.

Ask for a list of external repositories and any access they require. Keep credentials outside the source archive and provide access through the team's agreed process. The rehearsal should expose missing permissions without putting secrets into the acceptance report.

Check dependencies beyond their names

A build that succeeds only because an old library remains in one machine's cache is a fragile handover. Require the developer to explain where dependencies come from and which resolved versions belong to the release.

Gradle dependency locking records resolved versions; applicable lockfiles belong in version control. Locking does not freeze changing content under the same coordinates, such as a changing SNAPSHOT dependency.

Paper's project setup documentation distinguishes newer API coordinates that can identify a specific build from the older -SNAPSHOT format. Review the format actually used by your target version instead of copying today's example into an older project.

For private libraries, ask what happens when an employee leaves or a repository becomes unavailable. Agree access ownership and any permitted retention of required artifacts. Dependency locking alone cannot promise future repository availability. Document unresolved limitations and their effect on maintenance before signing off.

Rehearse on a separate build environment

Use an isolated workstation or build environment approved by the receiving team. Start from a fresh checkout of the recorded commit and a fresh dependency cache; do not delete the developer's working files. Network access may still be needed for the documented downloads. A fresh build is not automatically an offline build.

  1. Follow the prerequisite list and obtain the agreed repository access.
  2. Check out the recorded revision without copying local build outputs from the author.
  3. Run the documented build and test commands; retain their logs and actual test results.
  4. Locate the named distributable artifact and record its checksum.
  5. Install that artifact on an isolated server matching the acceptance environment.
  6. Repeat a small agreed behaviour check, such as registering, reconnecting and confirming that the entry remains stored.

For the registration example, a missing private library should stop the exercise with a clear issue to resolve. Copying an unexplained JAR from someone's laptop may unblock a demonstration, but it leaves the maintenance dependency undocumented. Add the legitimate dependency and access procedure to the handover, then repeat the affected steps.

Separate rebuilding from binary reproducibility

A build can succeed and still produce a different file. Strict reproducibility means recreating identical artifact bytes from the same source, defined environment and instructions. If that is a requirement, agree it explicitly and compare the named artifacts.

If checksums differ, ask the engineer to investigate before treating the new JAR as the delivered binary. Do not label a mismatch harmless without examining it. Equally, a matching checksum is not evidence that every gameplay requirement passed. Keep build evidence and server acceptance results together, with their distinct purposes clear.

This exercise covers the agreed release. It does not prove compatibility with future Minecraft versions or make a data-changing upgrade reversible. Plan deployment and recovery separately using the Paper reopening and recovery decision guide.

Close the handover with usable evidence

Accept this part of the delivery when the receiving engineer can follow the instructions, obtain the permitted dependencies, produce the correct artifact and complete the agreed server check. Attach the release record, logs, actual results and any accepted limitations. Assign responsibility for repository access, future dependency updates and the next maintenance release.

For custom Minecraft development, bring these handover requirements alongside your player journey, target versions, deadline and budget. Mineando scopes paid projects individually. Source delivery, maintenance responsibilities and support should be agreed as part of that discussion; future updates are not implied by a successful handover.

Tell us what you’re building.

Paid projects, with a scope and quote agreed before we start.

Discuss your project