PaperMC / PaperMC/Paper

Player advancement persistency issue

Open
#13,688 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

status: needs triage version: 1.21.11
Dominant language
Java
Stars
12.7k
Forks
3.5k
Avg merge
3d 13h
Merged PRs (30d)
11

Description

Expected behavior

Player should keep their advancements

Observed/Actual behavior

If the player is present when server is stoping, all it's new advancements will not be stored persistently. This does not account for player disconnecting before that, or advancements being saved before the stop phase, for example using the /save-all command.

Steps/models to reproduce

Create a test plugin with this body:

private static final NamespacedKey RECIPE_KEY = NamespacedKey.fromString("test_plugin:my_recipe");

@Override
public void onEnable() {
    ShapelessRecipe recipe = new ShapelessRecipe(RECIPE_KEY, new ItemStack(Material.BARRIER));
    recipe.addIngredient(Material.GLASS);
    Bukkit.addRecipe(recipe);
}

@Override
public void onDisable() {
    Bukkit.removeRecipe(RECIPE_KEY);
}
  • Start a server with only that test plugin present.
  • Join with a client
  • gain advancancement through normal means, for example obtaining a cobble stone.
  • Check advancement menu, you now have the advancement as expected.
  • Stop the server with /stop command.
  • Start server again. You will now not have the advancement anymore
Plugin and Datapack List

Only test plugin with no datapacks

Paper version

This server is running Paper version 1.21.11-126-main@3f5728e (2026-02-28T11:49:07Z) (Implementing API version 1.21.11-R0.1-SNAPSHOT)
You are running the latest version

Other

I saw that there was a pr https://github.com/PaperMC/Paper/pull/12553 , but I have no clue if that fixes this issue

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the test plugin and the /stop workflow described above, then trace the player advancement persistence path during server shutdown and compare it with /save-all. Done means advancements gained before shutdown remain after restarting the server, with a regression test covering the stop path.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.