Skip to content
Merged
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
55 changes: 11 additions & 44 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,61 +81,28 @@ jobs:

- name: Build changelog
if: steps.changes.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Reuse the tag resolved in the changes step so both steps are consistent
LAST_TAG="${{ steps.changes.outputs.last_tag }}"
DATE_DISPLAY=$(date -u '+%B %d, %Y')
SHORT_SHA="${GITHUB_SHA:0:7}"
REPO="${{ github.repository }}"

# Fetch merged PRs via the GitHub CLI since the last release tag.
# Falls back to a commit list when no PRs are found (direct pushes, etc.)
if [ -n "$LAST_TAG" ]; then
SINCE=$(git log -1 --format=%aI "${LAST_TAG}")
PR_LIST=$(gh pr list \
--state merged \
--base v3.x \
--search "merged:>=${SINCE}" \
--json number,title,author,url \
--jq '.[] | "- **\(.title)** [#\(.number)](\(.url)) — @\(.author.login)"' \
2>/dev/null || true)
else
PR_LIST=$(gh pr list \
--state merged \
--base v3.x \
--json number,title,author,url \
--jq '.[] | "- **\(.title)** [#\(.number)](\(.url)) — @\(.author.login)"' \
2>/dev/null || true)
fi

if [ -n "$PR_LIST" ]; then
{
printf '#### What changed\n\n'
printf '%s\n' "$PR_LIST"
} > changelog.md
else
# Fallback: list non-bot commits since the last tag
{
printf '#### What changed\n\n'
git log ${LAST_TAG:+"${LAST_TAG}..HEAD"} ${LAST_TAG:-"-10"} \
--format="%an%x09%H%x09%s" \
| while IFS=$'\t' read -r author sha subject; do
[[ "$author" == "github-actions[bot]" ]] && continue
short="${sha:0:7}"
printf '%s\n' "- ${subject} ([${short}](https://github.com/${REPO}/commit/${sha}))"
done
} > changelog.md
fi
# Extract the [Unreleased] section from CHANGELOG.md as the primary changelog.
UNRELEASED=$(awk \
'/^## \[Unreleased\]/ { p=1; next }
/^## \[/ && p { exit }
p { print }' \
CHANGELOG.md | sed '/^[[:space:]]*$/d')

{
printf '\n#### Notes\n\n'
if [ -n "$UNRELEASED" ]; then
printf '%s\n\n' "$UNRELEASED"
fi
printf '#### Notes\n\n'
printf '> 🌙 Automated nightly beta build from `v3.x` (%s).\n' "$DATE_DISPLAY"
printf '>\n'
printf '> Built from [`%s`](https://github.com/%s/commit/%s)\n' \
"$SHORT_SHA" "$REPO" "${{ github.sha }}"
} >> changelog.md
} > changelog.md

echo "=== Changelog preview ===" && cat changelog.md

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,10 @@ jobs:
'/^## \[/ && p { exit }
index($0, hdr) == 1 { p=1; next }
p { print }' \
CHANGELOG.md | sed '/^[[:space:]]*$/d')
CHANGELOG.md)

if [[ -z "$NOTES" ]]; then
NOTES="See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/${{ steps.meta.outputs.ref }}/CHANGELOG.md) for details."
NOTES="No changelog entry found for ${VERSION}."
fi

printf '%s\n' "$NOTES" > release-notes.md
Expand Down
24 changes: 18 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@ Release tags use the `v` prefix (e.g. `v3.0.2`).

### Added

- **Movement-cancel during countdown**: if a player moves too far from their starting position while a countdown is running, the teleport is cancelled.
- `countdown.cancel-on-move` (default `true`) — enable or disable the feature.
- `countdown.cancel-distance` (default `2.0`) — distance in blocks that triggers cancellation.
- `countdown.warn-distance` (default `1.0`) — distance in blocks that sends a one-time warning before cancellation. Set to `0` to disable the warning.
- Two new message keys: `countdown-move-warn` and `countdown-move-cancel` (configurable in `messages/en.yml`).

### Changed

### Fixed
Expand All @@ -34,6 +28,24 @@ Release tags use the `v` prefix (e.g. `v3.0.2`).
- `messages.suppress-player`: when `true`, silences all teleport-related messages to players globally (searching, countdown, queue position, success, failure, cost).
- `messages.suppress-console`: when `true`, silences the executor notification that `/forcertp` sends to the command sender globally.
- **`--skip-message` command flag**: can be appended to `/rtp`, `/rtp <center|region>`, `/forcertp <player> [world]`, and `/rtp forcertp <player> [world]` to suppress both player-facing and executor messages for that single invocation. Tab-completion suggests the flag.
- **`BiomeCompat` utility** (`ezrtp-common`): reflection-based `safeName(Biome)` and `safeValueOf(String)` helpers that work correctly whether `org.bukkit.block.Biome` is an enum (Spigot/Bukkit ≤ Paper 25) or an interface (Paper 26+), preventing `IncompatibleClassChangeError` at runtime.
- **Movement-cancel during countdown**: if a player moves too far from their starting position while a countdown is running, the teleport is cancelled.
- `countdown.cancel-on-move` (default `true`) — enable or disable the feature.
- `countdown.cancel-distance` (default `2.0`) — distance in blocks that triggers cancellation.
- `countdown.warn-distance` (default `1.0`) — distance in blocks that sends a one-time warning before cancellation. Set to `0` to disable the warning.
- Two new message keys: `countdown-move-warn` and `countdown-move-cancel` (configurable in `messages/en.yml`).

### Changed

- **Minecraft version support expanded to 1.13+**: `api-version` in `plugin.yml` lowered from `1.21` to `1.13`; plugin will now load on any server from MC 1.13 onwards.
- **Java 17 output bytecode**: `maven.compiler.release` changed from `25` to `17` so the built JARs run on Java 17+ hosts. The build toolchain still requires JDK 25 to compile against `paper-api`.
- **Modrinth `game-versions` broadened to `>=1.13`** in release and nightly workflows (was `>=26.1`).
- **`RareBiomeRegistry.getDefaultRareBiomes()`**: replaced a single try/catch wrapping all `Biome.valueOf()` calls with per-biome `BiomeCompat.safeValueOf()` guards, so a biome absent on the running server version (e.g. `MODIFIED_JUNGLE` removed in 1.18, `DEEP_DARK` added in 1.19) no longer silently prevents the remaining biomes from being registered.
- All `biome.name()` call sites replaced with `BiomeCompat.safeName(biome)` across `RareBiomeRegistry`, `GuiSettings`, `BiomeLocationCache`, `StatsSubcommand`, and `HeatmapSubcommand`.

### Fixed

- Stale `<fork>`, `<executable>`, and `<jvm>` references to deleted `java25.javac` / `java25.java` properties removed from root `pom.xml` compiler and Surefire plugin configuration.

---

Expand Down
Loading