Skip to content

Dev v1.1.3#14

Merged
3add merged 27 commits into
mainfrom
dev
May 21, 2026
Merged

Dev v1.1.3#14
3add merged 27 commits into
mainfrom
dev

Conversation

@3add
Copy link
Copy Markdown
Owner

@3add 3add commented May 21, 2026

Summary by CodeRabbit

  • New Features

    • Added an entitymeta Skript type and a condition to check packet bound (client/server).
  • Improvements

    • Reworked fake-entity and packet field expressions for more robust handling, validation, and array flattening.
    • Expanded and clarified examples and documentation for fake entities and metadata usage.
  • Updates

    • Version bumped to 1.1.3; registration tooling updated to 1.4.3.
  • Removed

    • Removed the fake entity event value expression.

Review Change Stack

Copilot AI review requested due to automatic review settings May 21, 2026 17:53
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 21, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9e83ee7f-4422-4733-91de-9153ddf6d1f1

📥 Commits

Reviewing files that changed from the base of the PR and between facecdb and 574ce31.

📒 Files selected for processing (2)
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java

📝 Walkthrough

Walkthrough

This PR reorganizes entity/meta code into entity-specific packages, replaces global validators with per-schema validators, refactors property expressions to resolve/cached FieldAccessors, updates packet/type registries and serializers, revises many examples, and bumps the project to 1.1.3.

Changes

Entity Meta Architecture & Type System Reorganization

Layer / File(s) Summary
Build Version & Dependency Updates
build.gradle.kts, src/main/resources/config.yml
Project version bumped to 1.1.3 and SkriptRegistration updated to 1.4.3; config header updated.
Packet Registry Storage & Lookup Refactoring
src/main/java/dev/threeadd/packeteventssk/api/general/packet/PacketTypeRegistry.java
Replaces old send/receive maps with CLIENT_BOUND_PACKETS/SERVER_BOUND_PACKETS, adds ALL_PACKETS, and updates lookup methods.
Logging Cleanup
src/main/java/dev/threeadd/packeteventssk/api/simple/PlayerSkinManager.java
Remove SLF4J imports, static logger, and an error log call.
Entity Registration & Meta Registry Wiring
src/main/java/dev/threeadd/packeteventssk/element/entity/EntityElementRegistration.java, src/main/java/dev/threeadd/packeteventssk/element/general/GeneralElementRegistration.java
Entity registration now registers MetaFieldRegistry and new entity/meta expressions/sections; general registration removes old meta registrations.
Entity Types & Examples
src/main/java/dev/threeadd/packeteventssk/element/entity/Types.java, various element/entity/expression/*
Adds entitymeta Skript type and updates fake-entity example snippets to use explicit new-entity blocks and variable usage.
Meta Field Registrars & Package Moves
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/*, src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/*
Move various meta and entity field registrar classes into entity.field.meta and entity.field.entity packages and update imports/usages.
Schema-Based Validator Pattern Implementation
src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewFakeEntity.java, src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewMeta.java, src/main/java/dev/threeadd/packeteventssk/element/general/section/SecExprNewPacket.java
Replace single global validators with per-FieldSchema VALIDATORS maps and update registration/validation and generated documentation.
Field Accessor Pattern & Property Expressions
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprFakeEntityField.java, src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprPacketField.java
Refactor to resolve and cache FieldAccessor during init, change runtime get/change/acceptChange to use accessor metadata; update examples and documentation.
Packet Field Registrar & ServerBound Support
src/main/java/dev/threeadd/packeteventssk/element/general/field/*
Move packet field registrars into new package and add WrapperPlayClientUpdateSign/UPDATE_SIGN field wiring.
Types, Serialization & Skin/BlockEntity Updates
src/main/java/dev/threeadd/packeteventssk/element/general/Types.java
Update packet/block-entity/skin type formatting and serialization (Fields-backed serializers), add examples, and adjust deserialization sync/instantiation behavior.
Documentation / Example Adjustments
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/*
Many examples rewritten to use explicit new fake player entity blocks, variable storage, and updated field usage.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

"🐰 I hopped through code and fields anew,
Meta maps lined up in tidy view,
Validators per schema now parse each line,
Accessors cached so values align,
Version bumped, examples polished too!"

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title "Dev v1.1.3" is vague and generic, using non-descriptive terms that don't convey meaningful information about the changeset's purpose or primary focus. Replace with a descriptive title that summarizes the main changes, such as "Refactor entity metadata and packet field handling for v1.1.3" or "Reorganize field/meta registries and update version to 1.1.3".
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 21, 2026

Qodana for JVM

8 new problems were found

Inspection name Severity Problems
Constant values 🔶 Warning 5
Nullability and data flow problems 🔶 Warning 3
View the detailed Qodana report

To be able to view the detailed Qodana report, you can either:

To get *.log files or any other Qodana artifacts, run the action with upload-result option set to true,
so that the action will upload the files as the job artifacts:

      - name: 'Qodana Scan'
        uses: JetBrains/qodana-action@v2025.3.2
        with:
          upload-result: true
Contact Qodana team

Contact us at qodana-support@jetbrains.com

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR appears to be the v1.1.3 release bump for PacketEventsSK, combining version updates with a refactor of field/meta registries, new/updated Skript elements, and improved serialization/documentation/examples for several types.

Changes:

  • Bump project version to 1.1.3 and update SkriptRegistration dependency.
  • Refactor/move packet field registries and entity meta/fake-entity field systems into clearer packages + update registrations accordingly.
  • Add new Skript elements and behavior improvements (e.g., packet bound condition, new packet fields, serializers, expanded examples).

Reviewed changes

Copilot reviewed 34 out of 35 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
src/main/resources/config.yml Updates displayed config header version to v1.1.3.
build.gradle.kts Bumps project version and SkriptRegistration dependency.
src/main/java/dev/threeadd/packeteventssk/api/general/packet/PacketTypeRegistry.java Renames internal maps and adds a direction-agnostic getPacket(String) lookup.
src/main/java/dev/threeadd/packeteventssk/api/simple/PlayerSkinManager.java Removes debug logger usage.
src/main/java/dev/threeadd/packeteventssk/element/general/GeneralElementRegistration.java Adjusts registrations for moved/removed meta-related elements; adds packet bound condition registration.
src/main/java/dev/threeadd/packeteventssk/element/general/Types.java Adds converters, serializers (Skin/BlockEntityType), and improves examples + string representations.
src/main/java/dev/threeadd/packeteventssk/element/general/condition/CondPacketTypeIsBound.java Adds condition to check whether a packet type is clientbound/serverbound.
src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprPacketField.java Refactors packet field access logic and return typing (but introduces correctness issues).
src/main/java/dev/threeadd/packeteventssk/element/general/section/SecExprNewPacket.java Switches to per-schema validators and improves docs/examples.
src/main/java/dev/threeadd/packeteventssk/element/general/field/PacketFieldRegistry.java Moves registry package and maintains registrar wiring.
src/main/java/dev/threeadd/packeteventssk/element/general/field/ClientBoundPacketFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/general/field/ServerBoundPacketFieldRegistrar.java Package move + adds UPDATE_SIGN packet fields (but currently has a construction key bug).
src/main/java/dev/threeadd/packeteventssk/element/general/field/SkBeePacketFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/EntityElementRegistration.java Registers meta registry/section/expression under entity module; removes fake-entity event value expr registration.
src/main/java/dev/threeadd/packeteventssk/element/entity/Types.java Updates examples; reintroduces/registers EntityMeta type and converter.
src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewFakeEntity.java Per-schema validators + improved docs/examples and field inheritance formatting.
src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewMeta.java Moved package + per-schema validators + improved docs/examples and inheritance formatting.
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntitiesAll.java Updates examples to new fake entity section syntax.
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromId.java Updates examples to new fake entity section syntax.
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromUuid.java Updates examples to new fake entity section syntax.
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprFakeEntityField.java Refactors fake entity field access and docs (but introduces correctness issues).
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprMetaField.java Reintroduces meta field expression under entity module (but introduces correctness issues).
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprVisibleFakeEntities.java Updates examples to new fake entity section syntax.
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java Updates pattern/examples; changes attribute defaulting behavior.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakeBaseEntityFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakeEntityFieldRegistry.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakePlayerEntityFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/BaseMetaFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/InteractionMetaFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/ItemMetaFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/LivingMetaFieldRegistrar.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/MetaFieldRegistry.java Package move only.
src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprMetaField.java Removes the old meta field expression from the general module.
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityEventValue.java Removes the fake-entity event value expression.
Comments suppressed due to low confidence (2)

src/main/java/dev/threeadd/packeteventssk/element/general/field/ServerBoundPacketFieldRegistrar.java:66

  • In the UPDATE_SIGN packet schema, the Vector field is registered as "location vector" (aliases: "location"), but the constructor looks up a required field named "block position". Since ConstructionContext asserts the accessor exists, this will throw at runtime when constructing the packet. Use the registered field name (or one of its aliases) consistently in the constructor lookup.
    src/main/java/dev/threeadd/packeteventssk/element/general/field/ServerBoundPacketFieldRegistrar.java:10
  • WrapperPlayServerOpenSignEditor is imported but not used in this class. Remove the unused import to avoid warnings and keep the file tidy.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🧹 Nitpick comments (2)
src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewFakeEntity.java (1)

33-47: ⚡ Quick win

Clear validator cache before rebuilding.

VALIDATORS is static and repopulated on each register() call. Clearing it first avoids stale schema-key entries on repeated registration paths.

Suggested change
 public static void register(Registration reg) {
+    VALIDATORS.clear();
 
     for (FieldSchema<EntityType, WrapperEntity> def : FakeEntityFieldRegistry.INSTANCE.getAllSchemas()) {
         SimpleEntryValidator builder = SimpleEntryValidator.builder();
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewFakeEntity.java`
around lines 33 - 47, The static VALIDATORS map is repopulated in register()
without clearing old entries, which can leave stale keys; modify the register()
method to clear VALIDATORS at the start (e.g., call VALIDATORS.clear()) before
iterating FakeEntityFieldRegistry.INSTANCE.getAllSchemas() and rebuilding
validators with SimpleEntryValidator.builder(), so the map only contains current
FieldSchema keys and their corresponding EntryValidator instances.
src/main/java/dev/threeadd/packeteventssk/element/general/section/SecExprNewPacket.java (1)

29-44: ⚡ Quick win

Reset static validators before population.

Because VALIDATORS is static, clearing it at the start of register() prevents stale schema-validator entries across repeated registration calls.

Suggested change
 public static void register(Registration reg) {
+    VALIDATORS.clear();
 
     for (FieldSchema<PacketTypeCommon, PacketWrapper<?>> def : PacketFieldRegistry.INSTANCE.getAllSchemas()) {
         SimpleEntryValidator builder = SimpleEntryValidator.builder();
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/dev/threeadd/packeteventssk/element/general/section/SecExprNewPacket.java`
around lines 29 - 44, The static VALIDATORS map is never cleared so repeated
calls to register() can leave stale entries; at the start of the
register(Registration reg) method clear VALIDATORS (e.g., VALIDATORS.clear())
before iterating PacketFieldRegistry.INSTANCE.getAllSchemas() so you rebuild
validators from scratch for each registration; update the register method that
references VALIDATORS, SimpleEntryValidator.builder(), and PacketFieldRegistry
to perform the clear first.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromUuid.java`:
- Around line 31-37: Update the example to use a UUID-specific list variable
name: replace all occurrences of the list variable {-id::*} with {-uuid::*} in
the example snippet inside ExprFakeEntityFromUuid (so the store line "add the
fake entity uuid of {_player} to {-id::*}" and the command lookup loop/contains
lines referencing {-id::*} all use {-uuid::*} instead) to make the intent clear
and avoid confusion.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprFakeEntityField.java`:
- Around line 172-179: The acceptChange() logic in ExprFakeEntityField
mistakenly returns null for array-backed fields because it compares expected
(fieldAccessor.expectedType()) to the component type and only returns when
equal; instead, modify acceptChange() in class ExprFakeEntityField to
unconditionally return an array containing typeToAccept (the component type for
arrays or the expected type for non-arrays) so SET operations are allowed — this
aligns acceptChange() with the existing change() behavior that constructs the
target array.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprMetaField.java`:
- Around line 166-173: The acceptChange logic in ExprMetaField currently returns
null for array-typed fields by comparing expected vs component type, which
blocks SET for arrays; update acceptChange to return the field's expected type
(the array class when expected.isArray()) instead of null so array assignments
are accepted (use fieldAccessor.expectedType() as the returned Class<?> value);
ensure this change aligns with the existing change() handling for array
assignment.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java`:
- Around line 66-77: getAttributeValue currently can return null for
non-WrapperLivingEntity, violating the non-null Number contract; change it so it
always returns a numeric default: lookup the PacketEvents attribute
(Attributes.getByName(bukkitAttr.getKey().asString())) outside or before the
WrapperLivingEntity check (or duplicate the lookup in the else branch) and
return its getDefaultValue() when the entity is not a WrapperLivingEntity or
when no Property is found, ensuring getAttributeValue never returns null;
reference getAttributeValue, WrapperEntity, WrapperLivingEntity,
Attributes.getByName, Property.getValue and peAttr.getDefaultValue() when making
the change.

In
`@src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprPacketField.java`:
- Around line 90-104: The current global-path logic in ExprPacketField binds
this.fieldAccessor to the first matching schema (via
PacketFieldRegistry.INSTANCE.getAllSchemas()), which is unsafe because field
names are reused across schemas; instead, only validate that a schema contains
the field name but do NOT cache an accessor globally. Leave the parsed fieldName
as-is, remove assigning this.fieldAccessor in the global branch, and update any
runtime lookup code that uses fieldAccessor (methods in ExprPacketField that
access packet values from a PacketWrapper) to resolve the accessor per-wrapper
by fetching the wrapper's actual schema (FieldSchema for the wrapper's packet
type) and calling schema.getAccessor(fieldName) for that wrapper each time.
Ensure you reference PacketFieldRegistry, FieldSchema, PacketWrapper, fieldName
and fieldAccessor when making these changes.
- Around line 160-167: The acceptChange() logic in ExprPacketField incorrectly
returns null for array-backed fields because expected.equals(typeToAccept) is
always false when expected.isArray(); update acceptChange() in class
ExprPacketField so that if fieldAccessor.expectedType().isArray() it returns new
Class[]{ fieldAccessor.expectedType().getComponentType() } (allowing
element-type changes for arrays), otherwise return new Class[]{
fieldAccessor.expectedType() }; keep change() unchanged (it already handles
arrays), and ensure UPDATE_SIGN / "sign lines" fields become modifiable.

In
`@src/main/java/dev/threeadd/packeteventssk/element/general/field/ServerBoundPacketFieldRegistrar.java`:
- Around line 51-65: The constructor lambda for the UPDATE_SIGN registration
uses a mismatched key ("block position") that never matches the registered
position field keys ("location vector"/"location"); update the constructor in
PacketFieldRegistry.INSTANCE.builder(PacketType.Play.Client.UPDATE_SIGN,
WrapperPlayClientUpdateSign.class) to call values.getRequired with the same key
used in the requiredField for the position (e.g., "location" or "location
vector"), or alternatively change the requiredField keys to "block position" so
they match; ensure the two places (the requiredField for Vector.class and the
constructor creating new WrapperPlayClientUpdateSign) use the identical key
string.

---

Nitpick comments:
In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewFakeEntity.java`:
- Around line 33-47: The static VALIDATORS map is repopulated in register()
without clearing old entries, which can leave stale keys; modify the register()
method to clear VALIDATORS at the start (e.g., call VALIDATORS.clear()) before
iterating FakeEntityFieldRegistry.INSTANCE.getAllSchemas() and rebuilding
validators with SimpleEntryValidator.builder(), so the map only contains current
FieldSchema keys and their corresponding EntryValidator instances.

In
`@src/main/java/dev/threeadd/packeteventssk/element/general/section/SecExprNewPacket.java`:
- Around line 29-44: The static VALIDATORS map is never cleared so repeated
calls to register() can leave stale entries; at the start of the
register(Registration reg) method clear VALIDATORS (e.g., VALIDATORS.clear())
before iterating PacketFieldRegistry.INSTANCE.getAllSchemas() so you rebuild
validators from scratch for each registration; update the register method that
references VALIDATORS, SimpleEntryValidator.builder(), and PacketFieldRegistry
to perform the clear first.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 060d9c9c-cc00-45a3-bbb1-5b26ed651b53

📥 Commits

Reviewing files that changed from the base of the PR and between 6618ee6 and 1ca197b.

📒 Files selected for processing (35)
  • build.gradle.kts
  • src/main/java/dev/threeadd/packeteventssk/api/general/packet/PacketTypeRegistry.java
  • src/main/java/dev/threeadd/packeteventssk/api/simple/PlayerSkinManager.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/EntityElementRegistration.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/Types.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntitiesAll.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityEventValue.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromId.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromUuid.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprFakeEntityField.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprMetaField.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprVisibleFakeEntities.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakeBaseEntityFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakeEntityFieldRegistry.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakePlayerEntityFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/BaseMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/InteractionMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/ItemMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/LivingMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/MetaFieldRegistry.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewFakeEntity.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/section/SecExprNewMeta.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/GeneralElementRegistration.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/Types.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/condition/CondPacketTypeIsBound.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprMetaField.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprPacketField.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/field/ClientBoundPacketFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/field/PacketFieldRegistry.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/field/ServerBoundPacketFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/field/SkBeePacketFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/section/SecExprNewPacket.java
  • src/main/resources/config.yml
💤 Files with no reviewable changes (3)
  • src/main/java/dev/threeadd/packeteventssk/api/simple/PlayerSkinManager.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityEventValue.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprMetaField.java

@AnOwlBe
Copy link
Copy Markdown

AnOwlBe commented May 21, 2026

CodeRabbit: No

@3add
Copy link
Copy Markdown
Owner Author

3add commented May 21, 2026

real

@3add 3add requested a review from Copilot May 21, 2026 18:44
@3add
Copy link
Copy Markdown
Owner Author

3add commented May 21, 2026

@CodeRabbit re-review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 21, 2026

@3add Sure, I'll re-review the changes in this PR right away!

(ᵔ ᴥ ᵔ)🐇

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 34 out of 35 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java:84

  • The setters for "display shadow radius" and "display shadow strength" look swapped: radius is currently writing via setShadowStrength(...), while strength writes via setShadowRadius(...). This will cause scripts setting radius/strength to affect the wrong underlying value.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java (1)

71-79: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fix ADD/REMOVE to use attribute default instead of 0d when no property is present

getAttributeValue() returns peAttr.getDefaultValue() when the attribute property is missing, but change() seeds currentValue with 0d (orElse(0d)), so ADD/REMOVE can diverge from the values exposed by reads for non-zero defaults.

Suggested fix
                 double currentValue = livingFake.getAttributes().getProperties().stream()
                         .filter(prop -> prop.getAttribute() == peAttr)
                         .findFirst()
                         .map(Property::getValue)
-                        .orElse(0d);
+                        .orElse(peAttr.getDefaultValue());
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java`
around lines 71 - 79, getAttributeValue(...) returns peAttr.getDefaultValue()
when a property is missing, but change() seeds currentValue with 0d (see
orElse(0d)), causing ADD/REMOVE to diverge from reads; update the change() logic
to use the attribute's default (peAttr.getDefaultValue()) as the
fallback/current baseline instead of 0d (or call getAttributeValue(...) to
obtain the current baseline) so ADD/REMOVE compute deltas consistently with
getAttributeValue; adjust references inside change() where currentValue is
initialized (and any orElse(0d) usage) to use the default from peAttr or the
getAttributeValue result.
src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java (1)

77-84: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fix swapped shadow radius/strength wiring (and stop truncating to ints)

  • display shadow radius is currently wired to setShadowStrength, and display shadow strength is wired to setShadowRadius (lines 77-84).
  • Constructor-side values use intValue() for both properties, but AbstractDisplayMeta#setShadowRadius/setShadowStrength take floats (lines 302-309).
Suggested fix
                 .optionalField(Number.class,
                         AbstractDisplayMeta::getShadowRadius,
-                        (meta, newNum) -> meta.setShadowStrength(newNum.floatValue()),
+                        (meta, newNum) -> meta.setShadowRadius(newNum.floatValue()),
                         "display shadow radius")
                 .optionalField(Number.class,
                         AbstractDisplayMeta::getShadowStrength,
-                        (meta, newNum) -> meta.setShadowRadius(newNum.floatValue()),
+                        (meta, newNum) -> meta.setShadowStrength(newNum.floatValue()),
                         "display shadow strength")
@@
         Number shadowRadius = context.getOptional("display shadow radius", Number.class);
         if (shadowRadius != null) {
-            meta.setShadowRadius(shadowRadius.intValue());
+            meta.setShadowRadius(shadowRadius.floatValue());
         }
 
         Number shadowStrength = context.getOptional("display shadow strength", Number.class);
         if (shadowStrength != null) {
-            meta.setShadowStrength(shadowStrength.intValue());
+            meta.setShadowStrength(shadowStrength.floatValue());
         }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java`
around lines 77 - 84, The two optionalField registrations in
DisplayMetaFieldRegistrar are swapped and use integer conversion; change the
first to map AbstractDisplayMeta::getShadowRadius to meta.setShadowRadius(...)
and the second to map AbstractDisplayMeta::getShadowStrength to
meta.setShadowStrength(...), and ensure both setters receive newNum.floatValue()
(not intValue()) to match AbstractDisplayMeta#setShadowRadius and
`#setShadowStrength` which expect floats.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java`:
- Around line 71-79: getAttributeValue(...) returns peAttr.getDefaultValue()
when a property is missing, but change() seeds currentValue with 0d (see
orElse(0d)), causing ADD/REMOVE to diverge from reads; update the change() logic
to use the attribute's default (peAttr.getDefaultValue()) as the
fallback/current baseline instead of 0d (or call getAttributeValue(...) to
obtain the current baseline) so ADD/REMOVE compute deltas consistently with
getAttributeValue; adjust references inside change() where currentValue is
initialized (and any orElse(0d) usage) to use the default from peAttr or the
getAttributeValue result.

In
`@src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java`:
- Around line 77-84: The two optionalField registrations in
DisplayMetaFieldRegistrar are swapped and use integer conversion; change the
first to map AbstractDisplayMeta::getShadowRadius to meta.setShadowRadius(...)
and the second to map AbstractDisplayMeta::getShadowStrength to
meta.setShadowStrength(...), and ensure both setters receive newNum.floatValue()
(not intValue()) to match AbstractDisplayMeta#setShadowRadius and
`#setShadowStrength` which expect floats.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 27f7a44e-ba2f-478d-93c2-fe9670bb211e

📥 Commits

Reviewing files that changed from the base of the PR and between 1ca197b and facecdb.

📒 Files selected for processing (11)
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromUuid.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprFakeEntityField.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/ExprMetaField.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/prop/living/ExprFakeLivingEntityAttribute.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/entity/FakePlayerEntityFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/DisplayMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/entity/field/meta/LivingMetaFieldRegistrar.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/GeneralElementRegistration.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/Types.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/expression/prop/ExprPacketField.java
  • src/main/java/dev/threeadd/packeteventssk/element/general/field/ServerBoundPacketFieldRegistrar.java
💤 Files with no reviewable changes (1)
  • src/main/java/dev/threeadd/packeteventssk/element/general/GeneralElementRegistration.java
✅ Files skipped from review due to trivial changes (1)
  • src/main/java/dev/threeadd/packeteventssk/element/entity/expression/ExprFakeEntityFromUuid.java

@3add 3add merged commit 0f43d26 into main May 21, 2026
3 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.

3 participants