Skip to content

Add Minecraft 1.8.8–1.20.6 legacy compatibility - #4

Merged
GoodrichDev merged 1 commit into
masterfrom
backwards-compat
Aug 17, 2026
Merged

Add Minecraft 1.8.8–1.20.6 legacy compatibility#4
GoodrichDev merged 1 commit into
masterfrom
backwards-compat

Conversation

@GoodrichDev

Copy link
Copy Markdown
Member

Summary

Adds separate modern and legacy HeadDB 6.0.3 artifacts:

  • HeadDB-6.0.3.jar for Paper 1.21+
  • HeadDB-6.0.3-legacy.jar for Bukkit-compatible servers from 1.8.8 through 1.20.6

Legacy support

The new headdb-legacy module provides:

  • Browsing, category, search, favorites, local-head, custom-category, and purchase menus
  • Persistent player settings and favorites using the existing SQLite schema
  • Migration from the pre-v6 player database
  • Vault economy integration and configurable pricing
  • Legacy and modern textured-skull profile handling
  • Structured search filters
  • /hdb info, /hdb search, /hdb give, /hdb open, and /hdb sounds
  • Public and deprecated API service compatibility
  • Configurable messages, sounds, and permissions
  • Metrics and update notifications
  • Scheduled database refreshes, preload support, and fallback database sources

Legacy menus use Bukkit inventories. Purchase quantities use inventory presets, and unsupported MiniMessage effects are simplified on older clients.

Build and release changes

  • Adds headdb-legacy as a Maven module
  • Targets Java 8 bytecode for the legacy jar
  • Targets Java 21 for the modern jar
  • Compiles the modern plugin against Paper 1.21
  • Removes the previous -Spigot.jar classifier
  • Updates the release workflow to upload both jars
  • Adds API compatibility and runtime smoke-test tooling
  • Updates installation documentation and the 6.0.3 changelog

Validation

  • Full Maven reactor build passed
  • 55 automated tests passed
  • Legacy API compilation passed against:
    • 1.8.8
    • 1.13.2
    • 1.16.5
    • 1.18.2
    • 1.20.6
  • Java bytecode audit passed:
    • Legacy: Java 8 compatible
    • Modern: Java 21 compatible
  • Runtime smoke tests passed on all 39 historical Paper releases published between 1.8.8 and 1.20.6
  • Every runtime test:
    • Reached server-ready state
    • Enabled HeadDB successfully
    • Loaded all 86,248 heads
    • Reported no HeadDB startup errors

Compatibility

Artifact Minecraft versions Runtime
HeadDB-6.0.3.jar Paper 1.21+ Java 21+
HeadDB-6.0.3-legacy.jar Bukkit-compatible 1.8.8–1.20.6 Java version required by the server

Only one HeadDB artifact should be installed on a server.

## Summary

Adds separate modern and legacy HeadDB 6.0.3 artifacts:

- `HeadDB-6.0.3.jar` for Paper 1.21+
- `HeadDB-6.0.3-legacy.jar` for Bukkit-compatible servers from 1.8.8 through 1.20.6

## Legacy support

The new `headdb-legacy` module provides:

- Browsing, category, search, favorites, local-head, custom-category, and purchase menus
- Persistent player settings and favorites using the existing SQLite schema
- Migration from the pre-v6 player database
- Vault economy integration and configurable pricing
- Legacy and modern textured-skull profile handling
- Structured search filters
- `/hdb info`, `/hdb search`, `/hdb give`, `/hdb open`, and `/hdb sounds`
- Public and deprecated API service compatibility
- Configurable messages, sounds, and permissions
- Metrics and update notifications
- Scheduled database refreshes, preload support, and fallback database sources

Legacy menus use Bukkit inventories. Purchase quantities use inventory presets, and unsupported MiniMessage effects are simplified on older clients.

## Build and release changes

- Adds `headdb-legacy` as a Maven module
- Targets Java 8 bytecode for the legacy jar
- Targets Java 21 for the modern jar
- Compiles the modern plugin against Paper 1.21
- Removes the previous `-Spigot.jar` classifier
- Updates the release workflow to upload both jars
- Adds API compatibility and runtime smoke-test tooling
- Updates installation documentation and the 6.0.3 changelog

## Validation

- Full Maven reactor build passed
- 55 automated tests passed
- Legacy API compilation passed against:
  - 1.8.8
  - 1.13.2
  - 1.16.5
  - 1.18.2
  - 1.20.6
- Java bytecode audit passed:
  - Legacy: Java 8 compatible
  - Modern: Java 21 compatible
- Runtime smoke tests passed on all 39 historical Paper releases published between 1.8.8 and 1.20.6
- Every runtime test:
  - Reached server-ready state
  - Enabled HeadDB successfully
  - Loaded all 86,248 heads
  - Reported no HeadDB startup errors

## Compatibility

| Artifact | Minecraft versions | Runtime |
|---|---|---|
| `HeadDB-6.0.3.jar` | Paper 1.21+ | Java 21+ |
| `HeadDB-6.0.3-legacy.jar` | Bukkit-compatible 1.8.8–1.20.6 | Java version required by the server |

Only one HeadDB artifact should be installed on a server.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 36bcb14913

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +370 to +372
private boolean allowed(Player player, String category) {
return player.hasPermission("headdb.category.*")
|| player.hasPermission("headdb.category." + normalize(category));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Honor explicit category denials before wildcard grants

When a permission manager grants headdb.category.* but explicitly denies a specific node such as headdb.category.local, allowed returns true solely because of the wildcard. This bypasses the documented category-specific override and lets the player open denied menus; the equivalent wildcard-first checks in the main menu and search filtering have the same problem. Check whether the category-specific permission is explicitly set before falling back to the wildcard.

Useful? React with 👍 / 👎.

Comment on lines +4 to +5
main: com.bitworksmc.headdb.legacy.LegacyHeadDB
version: ${project.version}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Declare Vault as a soft dependency

When economy.provider is configured as VAULT but HeadDB is enabled before Vault, the one-time provider lookup returns null and economy support remains disabled for the entire session. Players can then take heads directly without being charged. Add Vault to softdepend so its service is registered before LegacyEconomy is constructed.

Useful? React with 👍 / 👎.

Comment on lines +37 to +38
headdb.category.favorites:
default: op

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the legacy favorites permission alias

Existing installations that grant only the documented legacy node headdb.favorites lose access to favorites with this artifact because the legacy descriptor declares only headdb.category.favorites, and the legacy permission check does not recognize the alias. Declare headdb.favorites with the new node as a child, as the modern descriptor does.

Useful? React with 👍 / 👎.

@GoodrichDev
GoodrichDev merged commit 8de552c into master Aug 17, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant