Skip to content

feat(api): expose opt-in classic combat and off-hand eligibility - #14377

Closed
BriceFab wants to merge 1 commit into
PaperMC:ver/26.2from
BriceFab:feat/optional-classic-combat-26.2
Closed

BriceFab wants to merge 1 commit into
PaperMC:ver/26.2from
BriceFab:feat/optional-classic-combat-26.2

Conversation

@BriceFab

@BriceFab BriceFab commented Oct 12, 2026 •

Copy link
Copy Markdown

Problem and proposal

Closes #14376.

Expose opt-in native capabilities for plugins supporting classic combat and clients that do not use an off-hand. Existing public events can control damage and gameplay policy, but cannot select native projectile intersection/flight order, all player knockback/movement paths, or off-hand eligibility across native selectors. Post-event corrections can therefore use lost collision state or leave predictive inventory disagreement.

This is an extension proposal, not a claim that modern vanilla combat is defective. Native defaults remain unchanged. The implementation targets maintained ver/26.2, upstream base 58e6e45d67c998909581f9079189ef51eb6f1267; it has not been ported or validated against main/26.3.

Implementation and boundaries

  • Player runtime combat profile for classic component clipping/jumps, accepted knockback, ordinary fall/fire behavior and explosion calculations/attribution. Modern spear, mace-smash and shield-block impulses retain native paths.
  • Arrow, throwable and fishing-hook flight order, intersections and owner grace, plus initial projectile position. Initial velocity, balancing and enabled projectile types remain the caller's responsibility.
  • Runtime off-hand equipment eligibility, native inventory routing/placement/merge eligibility and indirect held-item selectors. The setting is copied on respawn; residual storage is retained. Plugins must still handle swap, creative, interact and resurrection policy using public events.
  • Native event cancellation, damage acceptance, protection and ownership remain authoritative. No custom identities, server balance/configuration, protocol spoofing, client trust or anti-cheat exemption is added. Integrators must coordinate matching client and anti-cheat prediction themselves.

The branch contains a single generic commit on public upstream ancestry. The feature patch changes are regenerated context/index updates needed by the source patches, not additional optimizations. The broad capability surface is proposed for maintainer review; it can be split or narrowed based on accepted API scope.

Executed validation

On this source tree before its commit (no code changes since):

./gradlew applyPatches
BUILD SUCCESSFUL in 1m 7s
./gradlew fixupSourcePatches rebuildPatches
BUILD SUCCESSFUL in 7s
./gradlew :paper-api:check :paper-server:check createPaperclipJar
BUILD SUCCESSFUL in 2m 21s

API XML: 519 executions, no failures/errors, 2 skips. Server XML: 9330 executions, no failures/errors, 22 skips. Suites may execute cases more than once; these are not unique test counts. Native default controls cover the unselected profile, modern weapons and ordinary equipment routes. Regressions cover launch/flight, collision boundaries, Punch, embedded-arrow release, fishing pulls, player impulses and off-hand routing/selectors.

Paperclip SHA-256: c64fba9a36662d9782a79c19f6f6dade1132756d41eeb97e33b5c6990d1aeffa. No connected-client runtime campaign is attributed to this upstream export.

@mbax

mbax commented Oct 12, 2026

Copy link
Copy Markdown
Member

Closing this as it violates agents.md, with the human not reviewing the change or writing communication themselves.

@mbax mbax closed this Oct 12, 2026
@github-project-automation github-project-automation Bot moved this from Awaiting review to Closed in Paper PR Queue Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Closed

Development

Successfully merging this pull request may close these issues.

2 participants