Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions src/content/docs/misc/java-install.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Installing or updating Java
description: How to install or update to Java 21 on Linux (apt/rpm), Windows, or Mac.
description: How to install or update to Java 25 on Linux (apt/rpm), Windows, or Mac.
slug: misc/java-install
---

Expand Down Expand Up @@ -31,7 +31,7 @@ previous hostile licensing.

### Ubuntu/Debian

Installing Java 21 on Debian-based Linux distributions is very simple. First, ensure your system has
Installing Java 25 on Debian-based Linux distributions is very simple. First, ensure your system has
all required tools to successfully install Java.

```bash
Expand All @@ -46,18 +46,18 @@ wget -O - https://apt.corretto.aws/corretto.key | sudo gpg --dearmor -o /usr/sha
echo "deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main" | sudo tee /etc/apt/sources.list.d/corretto.list
```

Then, install Java 21 and other dependencies using the following command:
Then, install Java 25 and other dependencies using the following command:

```bash
sudo apt-get update
sudo apt-get install -y java-21-amazon-corretto-jdk libxi6 libxtst6 libxrender1
sudo apt-get install -y java-25-amazon-corretto-jdk libxi6 libxtst6 libxrender1
```

Proceed to [verify your installation](#verifying-installation).

### RPM-based

To install Java 21 on CentOS, RHEL, Fedora, openSUSE, SLES, or any other RPM-based Linux
To install Java 25 on CentOS, RHEL, Fedora, openSUSE, SLES, or any other RPM-based Linux
distribution, execute the following commands depending on your package manager. Once you have
finished, precede to [verify your installation](#verifying-installation).

Expand All @@ -68,7 +68,7 @@ DNF is used on Fedora, CentOS/RHEL 7+, and related distributions.
```bash
sudo rpm --import https://yum.corretto.aws/corretto.key
sudo curl -Lo /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
sudo dnf -y install java-21-amazon-corretto-devel
sudo dnf -y install java-25-amazon-corretto-devel
```

#### Zypper
Expand All @@ -78,7 +78,7 @@ Zypper is used on openSUSE, SLES, and related distributions.
```bash
sudo zypper addrepo https://yum.corretto.aws/corretto.repo
sudo zypper refresh
sudo zypper install java-21-amazon-corretto-devel
sudo zypper install java-25-amazon-corretto-devel
```

#### YUM
Expand All @@ -88,14 +88,14 @@ YUM is used on older releases of CentOS/RHEL, and excessively old releases of Fe
```bash
sudo rpm --import https://yum.corretto.aws/corretto.key
sudo curl -Lo /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
sudo yum -y install java-21-amazon-corretto-devel
sudo yum -y install java-25-amazon-corretto-devel
```

## Windows 10 & 11

If you're on Windows 10 or 11, installing Java is just like installing any other program. Download
the Amazon Corretto installer from
[their website](https://corretto.aws/downloads/latest/amazon-corretto-21-x64-windows-jdk.msi).
[their website](https://corretto.aws/downloads/latest/amazon-corretto-25-x64-windows-jdk.msi).

Once you have run the installer, it is safe to click "next" through the whole process. No additional
bloatware or toolbars will be installed, and all the required features are enabled out of the box.
Expand All @@ -109,7 +109,7 @@ If you're on macOS, the best way to manage Java installations is with a tool cal
terminal run the following command:

```bash
brew install openjdk@21
brew install openjdk@25
```

Once this command has completed, continue to [verify your installation](#verifying-installation).
Expand All @@ -129,36 +129,36 @@ prompt you to update like this:
![Pterodactyl Automatic Prompt](./assets/pterodactyl-prompt.png)

If this does not show up for you, the Java version can be manually changed. Navigate to the
"Startup" tab of your server, select `Java 21` from the "Docker Image"
"Startup" tab of your server, select `Java 25` from the "Docker Image"
dropdown as shown in the image below.

![Pterodactyl Manual Java Version Change](./assets/pterodactyl-manual.png)

:::note

If you don't see `Java 21` in the dropdown, an administrator account is required to update the Paper egg.
If you don't see `Java 25` in the dropdown, an administrator account is required to update the Paper egg.

:::

The Verifying Installation section does not apply for Pterodactyl.

## Verifying installation

Now that you have installed Java 21, run this command in your terminal to ensure the process was
Now that you have installed Java 25, run this command in your terminal to ensure the process was
successful.

```bash
java -version
```

The output should be similar to this. The important parts to look out for is that it starts with
`openjdk 21` and contains `64-Bit` in the last line. If the output you get is similar to
`openjdk 25` and contains `64-Bit` in the last line. If the output you get is similar to
`java: command not found`, try creating a new terminal session.

```
openjdk version "21" 2023-09-19 LTS
OpenJDK Runtime Environment Corretto-21.0.0.35.1 (build 21+35-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.0.35.1 (build 21+35-LTS, mixed mode, sharing)
openjdk version "25" 2025-09-16
OpenJDK Runtime Environment (build 25+36-3489)
OpenJDK 64-Bit Server VM (build 25+36-3489, mixed mode, sharing)
```

If your installation has failed, do not hesitate to reach out in the `#paper-help` channel of our
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ slug: paper/getting-started

:::tip

Paper requires at least **Java 21** to run, which [is easy to download and install](/misc/java-install).
Paper requires at least **Java 25** to run, which [is easy to download and install](/misc/java-install).

:::

Expand Down
53 changes: 15 additions & 38 deletions src/content/docs/paper/admin/reference/system-properties.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ In most cases, you will not need to use these, unless you are running Paper in a

#### timings.bypassMax

:::danger[Deprecation]

Timings are deprecated. Due to that, this flag does not have any effect.

:::

- **default**: `unset`
- **description**: Allows for bypassing the max amount of data to send to the Aikar's Timings API. Setting this will not permit bypassing the limit unless the API is configured to allow it.

Expand Down Expand Up @@ -113,25 +119,9 @@ In most cases, you will not need to use these, unless you are running Paper in a
- **default**: `unset`
- **description**: Bypasses the host pattern matching attempt for the client when connecting to the server.

#### paper.ticklist-warn-on-excessive-delay

- **default**: `unset`
- **description**: Enables the warning when a tick list is scheduled with an excessive delay.

#### debug.rewriteForIde

- **default**: `unset`
- **description**: Removes the NMS revision from the stack trace to allow for easier debugging in IDEs.
It also remaps plugin CB calls to remove the version information.

#### convertLegacySigns

- **default**: `unset`
- **description**: Converts legacy signs to the new format.

#### paper.maxCustomChannelName

- **default**: `64`
- **default**: `32767`
- **description**: Sets the largest size that a plugin channel name can take.

#### Paper.maxSignLength
Expand Down Expand Up @@ -159,21 +149,11 @@ It also remaps plugin CB calls to remove the version information.
- **default**: `unset`
- **description**: Suppresses the nag message about using `System.out`/`System.err` in a plugin.

#### paper.strict-thread-checks

- **default**: `unset`
- **description**: This sets the status of the AsyncCatcher so that it will always log an error if code is not run on the main thread.

#### Paper.skipServerPropertiesComments

- **default**: `unset`
- **description**: Skips the comments in the `server.properties` file.

#### Paper.debugInvalidSkullProfiles

- **default**: `unset`
- **description**: Enables debug logging for invalid skull profiles. This logs any invalid skulls in the world with the appropriate location information.

#### paper.alwaysPrintWarningState

- **default**: `unset`
Expand All @@ -184,7 +164,7 @@ It also remaps plugin CB calls to remove the version information.
- **default**: `true`
- **description**: Sets whether to parse comments in YAML files by default.

#### paperclip.patchonly:
#### paperclip.patchonly

- **default**: `false`
- **description**: If the server is started via the Paperclip patch utility (the default distribution on the downloads page) then this sets whether it should only patch the Vanilla server and download libraries without starting the server.
Expand All @@ -204,21 +184,11 @@ It also remaps plugin CB calls to remove the version information.
- **default**: `false`
- **description**: Allows cyclic plugin loading. See [here](/paper/reference/paper-plugins#cyclic-plugin-loading) for more info.

#### Paper.DisableCommandConverter

- **default**: `false`
- **description**: Disables Paper's automatic upgrading of commands, including items with custom data defined in command blocks and other places that may contain commands, to the new component format introduced in version 1.20.5.

#### paper.disableOldApiSupport

- **default**: `false`
- **description**: Disables plugin compatibility measures that can otherwise result in a considerable delay of class loading (also known as "Commodore" plugin rewriting). This generally requires all of your plugins to be compiled against a recent API version.

#### paper.disablePluginRemapping

- **default**: `false`
- **description**: Disables plugin remapping introduced in 1.20.5. For more information see the [userdev](/paper/dev/userdev#1205-and-beyond) documentation and the official [announcement](https://discord.com/channels/289587909051416579/976631292747735080/1232740079097876570).

#### paper.preferSparkPlugin

- **default**: `false`
Expand All @@ -231,6 +201,13 @@ It also remaps plugin CB calls to remove the version information.

#### paper.disableGameRuleLimits

:::note

Whilst this system property exists, its associated code is not currently referenced anywhere,
resulting in this property not having any effect.

:::

- **default**: `false`
- **description**: Disables limits on certain game rule values, e.g. `minecartMaxSpeed` and `spawnChunkRadius`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ You will be asked to provide some information about your project.
| **Group ID** | The group ID of your project. This is used for Maven and Gradle. This is usually your domain name in reverse. If you don't know what you should put here, you can use something like `io.github.<yourname>` or if you don't have GitHub you can use `me.<yourname>`. |
| **Artifact ID** | The artifact ID of your project. This is used for Maven and Gradle. This is usually the name of your project. This is usually the same as the `Name` field. |
| **Version** | The version of your project. This is used for Maven and Gradle. This is usually `1.0-SNAPSHOT` and does not really matter for now. |
| **JDK** | The JDK you want to use. This can be anything from Java 21 and above. |
| **JDK** | The JDK you want to use. This can be anything from Java 25 and above. |

Now you can click on the `Create` button and IntelliJ will create the project for you.
If everything went well, you should see something like this:
Expand Down
21 changes: 14 additions & 7 deletions src/content/docs/paper/dev/getting-started/userdev.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ fully deobfuscated types, names, and fields during development, and then remaps
server. However, this does not apply to reflection. Look at something like [this library](https://github.com/jpenilla/reflection-remapper) to be able to
use non-obfuscated names in reflection if you want to support obfuscated servers.

:::note[1.20.5 Mojang-mapped runtime]
:::note[Removal of obfuscations in 26.1]

As of Minecraft version 1.20.5, Paper ships with a Mojang-mapped runtime instead of re-obfuscating the server to Spigot mappings.
See [here](#1205-and-beyond) for more details.
From Minecraft version **26.1** onwards, Paper no longer supports obfuscated plugins due to Mojang themselves
removing obfuscation of their server JAR. As Minecraft now ships unobfuscated, there are no 26.1 Spigot mappings
to obfuscate to. For this reason, the reobfuscation function no longer works for dev bundles for 26.1+.

:::

Expand Down Expand Up @@ -110,15 +111,21 @@ makes use of this feature.

:::

## Gradle tasks
## Reobfuscation (up to 1.21.11)

### `reobfJar`
:::danger

This task creates a plugin JAR that is re-obfuscated to Spigot's runtime mappings.
Since Minecraft version **26.1**, Paper no longer supports remapping your plugin to Spigot
runtime mappings. This section is kept as a reference for older versions, however
reobfuscated plugins will not work from Paper 26.1 onwards!

:::

The `reobfJar` task creates a plugin JAR that is re-obfuscated to Spigot's runtime mappings.
This means it will work on standard Paper servers.

The output will be inside the `build/libs` folder. The JAR whose filename includes `-dev`
is Mojang-mapped (not re-obfuscated) and will not work on most servers.
is Mojang-mapped (not re-obfuscated) and will not work on non-Paper servers.

:::note[Shadow]

Expand Down