Direct NMS packets under net.opmasterleo.packet - #1
Conversation
…licates Drop Netty pipeline injection and menu/container/sign packets already handled by PacketUxUi and SignGUI. Construct version-breaking play packets with net.minecraft Clientbound*/PacketPlayOut* in shared adapters, wrap handles in PacketWrap, and fire CraftBukkit/Paper-backed custom events with ServerPlayer handles. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 721 |
| Duplication | 30 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
Move all sources, Gradle group, module name, plugin main, and shared NMS package rewriting off org.mastersmp.packet. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
Collapse addEntity/addTextDisplay into PacketViews specs, read public metadata accessors without setAccessible, pin GitHub Actions to commit SHAs, and load the Paper API version from gradle.properties. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
Use Gson/Legacy Adventure serializers instead of PlainText/PaperAdventure, String getLore/setLore for Spigot ItemMeta, reflective PacketPlayOutBlockChange construction for 1.16.1, and add legacy serializer deps to mid modules. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
Use string switches and Reflect helpers so modern shared sources compile across STAB enum drift, SetTime constructor changes, and private ChunkPos. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
26.2 moved built-in entity type fields from EntityType to EntityTypes. Look up ARMOR_STAND/TEXT_DISPLAY reflectively so modern shared sources compile across both layouts. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
Split 26.1/26.2 packet bridges to use EntityType vs EntityTypes and direct SetTime(Map) constructors, removing Class.forName entityType lookup and high-NPath constructSetTime from Reflect. Co-authored-by: OPmasterLEO <OPmasterLEO@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR migrates PacketAPI to the net.opmasterleo.packet namespace and shifts packet sending/listening to a “direct NMS” model (via CraftPlayer#getHandle() and ServerPlayer.connection.send) by removing Netty pipeline injection and consolidating per-version packet building into shared NMS adapters.
Changes:
- Remove Netty channel injection/listening and replace it with Bukkit events + direct NMS send pathways (
PacketSendEvent,Nms*events). - Introduce shared NMS packet factories (
SharedPacketBridge*) and a typedPacketWrap, plus metadata helpers for text displays. - Update Gradle build/publish setup (paper API version via
gradle.properties, wrapper scripts, publishing tasks) and pin GitHub Actions SHAs.
Reviewed changes
Copilot reviewed 139 out of 142 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Updates documentation to reflect direct-NMS approach and non-duplication of menu/sign packet functionality. |
| plugin/src/main/resources/plugin.yml | Updates plugin main class package and description. |
| plugin/src/main/java/net/opmasterleo/packet/plugin/PacketPlugin.java | Migrates plugin entrypoint to new package and registers NMS player listener. |
| plugin/src/main/java/net/opmasterleo/packet/plugin/NmsPlayerListener.java | Adds Bukkit→custom-event bridging for join/quit/swing/unknown-entity interactions. |
| plugin/build.gradle.kts | Removes Netty dependency and uses paperApiVersion property. |
| nms/v26_2/src/main/java/net/opmasterleo/packet/nms/v26_2/Adapter.java | Package migration for the 26.2 adapter. |
| nms/v26_2/build.gradle.kts | Updates nmsEra to modern26_2. |
| nms/v26_1/src/main/java/net/opmasterleo/packet/nms/v26_1/Adapter.java | Package migration for the 26.1 adapter. |
| nms/v1_21_R7/src/main/java/net/opmasterleo/packet/nms/v1_21_R7/Adapter.java | Package migration for the 1.21 R7 adapter. |
| nms/v1_21_R6/src/main/java/net/opmasterleo/packet/nms/v1_21_R6/Adapter.java | Package migration for the 1.21 R6 adapter. |
| nms/v1_21_R5/src/main/java/net/opmasterleo/packet/nms/v1_21_R5/Adapter.java | Package migration for the 1.21 R5 adapter. |
| nms/v1_21_R4/src/main/java/net/opmasterleo/packet/nms/v1_21_R4/Adapter.java | Package migration for the 1.21 R4 adapter. |
| nms/v1_21_R3/src/main/java/net/opmasterleo/packet/nms/v1_21_R3/Adapter.java | Package migration for the 1.21 R3 adapter. |
| nms/v1_21_R2/src/main/java/net/opmasterleo/packet/nms/v1_21_R2/Adapter.java | Package migration for the 1.21 R2 adapter. |
| nms/v1_21_R1/src/main/java/net/opmasterleo/packet/nms/v1_21_R1/Adapter.java | Package migration for the 1.21 R1 adapter. |
| nms/v1_20_R4/src/main/java/net/opmasterleo/packet/nms/v1_20_R4/Adapter.java | Package migration for the 1.20 R4 adapter. |
| nms/v1_20_R3/src/main/java/net/opmasterleo/packet/nms/v1_20_R3/Adapter.java | Package migration for the 1.20 R3 adapter. |
| nms/v1_20_R3/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_20_R2/src/main/java/net/opmasterleo/packet/nms/v1_20_R2/Adapter.java | Package migration for the 1.20 R2 adapter. |
| nms/v1_20_R2/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_20_R1/src/main/java/net/opmasterleo/packet/nms/v1_20_R1/Adapter.java | Package migration for the 1.20 R1 adapter. |
| nms/v1_20_R1/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_19_R3/src/main/java/net/opmasterleo/packet/nms/v1_19_R3/Adapter.java | Package migration for the 1.19 R3 adapter. |
| nms/v1_19_R3/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_19_R2/src/main/java/net/opmasterleo/packet/nms/v1_19_R2/Adapter.java | Package migration for the 1.19 R2 adapter. |
| nms/v1_19_R2/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_19_R1/src/main/java/net/opmasterleo/packet/nms/v1_19_R1/Adapter.java | Package migration for the 1.19 R1 adapter. |
| nms/v1_19_R1/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_18_R2/src/main/java/net/opmasterleo/packet/nms/v1_18_R2/Adapter.java | Package migration for the 1.18 R2 adapter. |
| nms/v1_18_R2/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_18_R1/src/main/java/net/opmasterleo/packet/nms/v1_18_R1/Adapter.java | Package migration for the 1.18 R1 adapter. |
| nms/v1_18_R1/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_17_R1/src/main/java/net/opmasterleo/packet/nms/v1_17_R1/Adapter.java | Package migration for the 1.17 R1 adapter. |
| nms/v1_17_R1/build.gradle.kts | Removes Netty deps and adjusts serializer dependency. |
| nms/v1_16_R3/src/main/java/net/opmasterleo/packet/nms/v1_16_R3/Adapter.java | Package migration for the 1.16 R3 adapter. |
| nms/v1_16_R3/build.gradle.kts | Removes Netty dependency for legacy bucket. |
| nms/v1_16_R2/src/main/java/net/opmasterleo/packet/nms/v1_16_R2/Adapter.java | Package migration for the 1.16 R2 adapter. |
| nms/v1_16_R2/build.gradle.kts | Removes Netty dependency for legacy bucket. |
| nms/v1_16_R1/src/main/java/net/opmasterleo/packet/nms/v1_16_R1/Adapter.java | Package migration for the 1.16 R1 adapter. |
| nms/v1_16_R1/build.gradle.kts | Removes Netty dependency for legacy bucket. |
| nms/shared-sources.gradle.kts | Updates shared-source package rewriting and adds modern era variants. |
| nms-shared/world/modern/SharedWorldBridge.java | Updates package/imports and hardens chunk position extraction. |
| nms-shared/world/mid/SharedWorldBridge.java | Updates package/imports for mid adapters. |
| nms-shared/world/legacy/SharedWorldBridge.java | Updates package/imports for legacy adapters. |
| nms-shared/Reflect.java | Updates package and expands reflection helpers (field/set/construct/static invoke). |
| nms-shared/player/modern/SharedPlayerBridge.java | Direct NMS send/connection checks; adds entityId/level helpers. |
| nms-shared/player/mid/SharedPlayerBridge.java | Direct NMS send/connection checks; adds entityId helper. |
| nms-shared/player/legacy/SharedPlayerBridge.java | Direct NMS send/connection checks; adds entityId/level helpers. |
| nms-shared/packet/modern26/SharedPacketBridge.java | Adds modern26-specific packet factory implementation. |
| nms-shared/packet/modern26_2/SharedPacketBridge.java | Adds modern26_2-specific packet factory implementation. |
| nms-shared/packet/modern/SharedPacketBridge.java | Expands modern shared packet factory and removes container/menu packet duplication. |
| nms-shared/packet/mid/SharedPacketBridge.java | Reworks mid shared packet factory to direct constructors for supported packets. |
| nms-shared/packet/legacy/SharedPacketBridge.java | Reworks legacy shared packet factory to direct constructors/field sets without Netty. |
| nms-shared/menu/modern/SharedMenuBridge.java | Package/import migration for modern menu bridge. |
| nms-shared/menu/mid/SharedMenuBridge.java | Package/import migration for mid menu bridge. |
| nms-shared/menu/legacy/SharedMenuBridge.java | Package/import migration for legacy menu bridge. |
| nms-shared/item/modern21_5/SharedItemBridge.java | Package/import migration for modern21_5 item bridge. |
| nms-shared/item/modern/SharedItemBridge.java | Package/import migration for modern item bridge. |
| nms-shared/item/mid/SharedItemBridge.java | Changes lore handling to legacy-string serialization for mid adapters. |
| nms-shared/item/legacy/SharedItemBridge.java | Changes lore handling to legacy-string serialization for legacy adapters. |
| nms-shared/connection/modern/SharedConnectionBridge.java | Removes Netty channel access and exposes NMS connection/listener/latency. |
| nms-shared/connection/mid/SharedConnectionBridge.java | Removes Netty channel access and exposes NMS connection/listener/latency with reflection fallbacks. |
| nms-shared/connection/legacy/SharedConnectionBridge.java | Removes Netty channel access and exposes NMS connection/listener/latency. |
| nms-shared/adapter/modern/SharedMetadataBridge.java | Adds modern metadata bridge using public Mojang-mapped accessors (no setAccessible). |
| nms-shared/adapter/modern/SharedComponentBridge.java | Package/import migration for modern component bridge. |
| nms-shared/adapter/modern/AbstractNmsAdapter.java | Removes PacketWrapper/Netty integration and wires in MetadataBridge. |
| nms-shared/adapter/mid/SharedComponentBridge.java | Switches mid component conversion to JSON serializer and legacy section heuristics. |
| nms-shared/adapter/mid/AbstractNmsAdapter.java | Package/import migration for mid adapter base. |
| nms-shared/adapter/legacy/SharedComponentBridge.java | Adjusts legacy heuristics to legacy section serializer. |
| nms-shared/adapter/legacy/AbstractNmsAdapter.java | Package/import migration for legacy adapter base. |
| nms-shared/wrapper/modern/SharedPacketWrapper.java | Removes Netty-based packet wrapper/injector implementation. |
| nms-api/src/test/java/net/opmasterleo/packet/nms/packet/PacketWrapTest.java | Adds unit tests for PacketWrap direction/type behavior. |
| nms-api/src/test/java/net/opmasterleo/packet/nms/AdapterLoaderTest.java | Adds tests for version normalization and bucket mapping. |
| nms-api/src/main/java/org/mastersmp/packet/nms/PlayerBridge.java | Removes old org.mastersmp PlayerBridge. |
| nms-api/src/main/java/org/mastersmp/packet/nms/PacketWrapper.java | Removes old Netty-based PacketWrapper API. |
| nms-api/src/main/java/org/mastersmp/packet/nms/PacketBridge.java | Removes old broad PacketBridge API. |
| nms-api/src/main/java/org/mastersmp/packet/nms/packet/PacketViews.java | Removes old PacketViews model. |
| nms-api/src/main/java/org/mastersmp/packet/nms/ConnectionBridge.java | Removes old ConnectionBridge that exposed Netty channel. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/WorldBridge.java | Package migration for WorldBridge. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/RandomBridge.java | Refactors weighted-pick overload to avoid nested stream/map call. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/ProtocolProbe.java | Package migration for ProtocolProbe. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/PlayerBridge.java | Adds expanded PlayerBridge API (entityId/level defaults). |
| nms-api/src/main/java/net/opmasterleo/packet/nms/PacketBridge.java | Introduces direct-NMS packet factory interface with per-era required methods. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/packet/PlayerActionType.java | Package migration for PlayerActionType. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/packet/PacketWrap.java | Adds typed, zero-copy packet handle wrapper. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/packet/PacketViews.java | Adds new spec/view model for version-sensitive packet construction. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/packet/InteractAction.java | Package migration for InteractAction. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/packet/Hand.java | Package migration for Hand. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/packet/BlockPosView.java | Package migration for BlockPosView. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/NmsUnsupportedException.java | Package migration for NmsUnsupportedException. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/NmsAdapter.java | Removes PacketWrapper exposure and updates metadata method signature. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/MetadataIds.java | Package migration for MetadataIds. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/MetadataBridge.java | Updates text display metadata API to accept PacketViews.TextDisplayStyle. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/MenuBridge.java | Package migration for MenuBridge. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/ItemBridge.java | Package migration for ItemBridge. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/ConnectionBridge.java | Introduces new ConnectionBridge without Netty exposure (connection/listener/latency/accepting). |
| nms-api/src/main/java/net/opmasterleo/packet/nms/ComponentBridge.java | Package migration for ComponentBridge. |
| nms-api/src/main/java/net/opmasterleo/packet/nms/AdapterLoader.java | Package migration for AdapterLoader. |
| nms-api/build.gradle.kts | Switches Paper API version to property and configures JUnit platform for tests. |
| gradlew.bat | Adds Gradle wrapper script for Windows. |
| gradlew | Adds Gradle wrapper script for POSIX. |
| gradle.properties | Bumps plugin version and centralizes Paper API version. |
| build.gradle.kts | Updates group/module name, centralizes Paper API version, and adjusts publish task gating. |
| api/src/main/java/org/mastersmp/packet/packet/Packets.java | Removes old Packets facade tied to legacy PacketBridge API. |
| api/src/main/java/org/mastersmp/packet/event/NMSPacketSendEvent.java | Removes old Netty-based packet send event model. |
| api/src/main/java/org/mastersmp/packet/event/NMSPacketReceiveEvent.java | Removes old Netty-based packet receive event model. |
| api/src/main/java/org/mastersmp/packet/event/NMSPacketEvent.java | Removes old base event model for Netty interception. |
| api/src/main/java/org/mastersmp/packet/channel/PacketView.java | Removes old Netty-based packet view wrapper. |
| api/src/main/java/org/mastersmp/packet/channel/PacketListenerBus.java | Removes Netty pipeline listener bus. |
| api/src/main/java/org/mastersmp/packet/channel/PacketFilter.java | Removes old outbound packet filter type. |
| api/src/main/java/org/mastersmp/packet/channel/PacketDirection.java | Removes old PacketDirection type used by Netty bus. |
| api/src/main/java/org/mastersmp/packet/channel/PacketChannels.java | Removes Netty channel injection abstraction. |
| api/src/main/java/org/mastersmp/packet/channel/OutboundPacketResult.java | Removes outbound filter result type used by Netty bus. |
| api/src/main/java/org/mastersmp/packet/channel/ChannelOps.java | Removes Netty pipeline utility helpers. |
| api/src/main/java/net/opmasterleo/packet/world/Worlds.java | Package migration for world facade. |
| api/src/main/java/net/opmasterleo/packet/world/Levels.java | Package migration for levels facade. |
| api/src/main/java/net/opmasterleo/packet/world/Entities.java | Package migration for entities facade. |
| api/src/main/java/net/opmasterleo/packet/world/Dimensions.java | Package migration for dimensions facade. |
| api/src/main/java/net/opmasterleo/packet/world/Chunks.java | Package migration for chunks facade. |
| api/src/main/java/net/opmasterleo/packet/schedule/TaskHandle.java | Package migration for scheduling handle. |
| api/src/main/java/net/opmasterleo/packet/schedule/Schedulers.java | Package migration for scheduler facade. |
| api/src/main/java/net/opmasterleo/packet/schedule/PlatformDetect.java | Package migration for platform detection. |
| api/src/main/java/net/opmasterleo/packet/schedule/FastScheduler.java | Removes Netty/event-loop coalescing and cleans up static queue maps. |
| api/src/main/java/net/opmasterleo/packet/schedule/DirectScheduler.java | Package migration for direct scheduler. |
| api/src/main/java/net/opmasterleo/packet/schedule/AsyncWorkerPool.java | Package migration for worker pool. |
| api/src/main/java/net/opmasterleo/packet/schedule/AdvancedScheduler.java | Renames “off netty” helpers to entity/region thread naming. |
| api/src/main/java/net/opmasterleo/packet/PacketAPI.java | Removes Netty channels/listeners exposure and migrates to new package imports. |
| api/src/main/java/net/opmasterleo/packet/packet/PacketTypeCache.java | Package migration for packet type cache. |
| api/src/main/java/net/opmasterleo/packet/packet/Packets.java | Adds new direct-NMS send facade with PacketSendEvent hook and text display spawn bundling. |
| api/src/main/java/net/opmasterleo/packet/menu/Menus.java | Package migration for menus facade. |
| api/src/main/java/net/opmasterleo/packet/item/Items.java | Package migration for items facade. |
| api/src/main/java/net/opmasterleo/packet/event/PacketSendEvent.java | Adds event fired immediately before PacketAPI sends a packet via NMS. |
| api/src/main/java/net/opmasterleo/packet/event/PacketEvent.java | Adds base cancellable packet event used by PacketSendEvent. |
| api/src/main/java/net/opmasterleo/packet/event/NmsUnknownEntityInteractEvent.java | Adds cancellable custom event wrapping Paper unknown-entity interaction. |
| api/src/main/java/net/opmasterleo/packet/event/NmsSwingEvent.java | Adds cancellable custom event for swing animation without Netty intercept. |
| api/src/main/java/net/opmasterleo/packet/event/NmsPlayerQuitEvent.java | Adds NMS-handle quit event. |
| api/src/main/java/net/opmasterleo/packet/event/NmsPlayerJoinEvent.java | Adds NMS-handle join event. |
| api/src/main/java/net/opmasterleo/packet/event/NmsPlayerEvent.java | Adds base NMS player lifecycle event class. |
| api/src/main/java/net/opmasterleo/packet/component/Components.java | Package migration for component bridge facade. |
| api/build.gradle.kts | Lowers toolchain to Java 21 and centralizes deps on paperApiVersion + Adventure 4.17.0. |
| .github/workflows/gradle-publish.yml | Adds CI workflow to build and publish snapshot artifacts with pinned action SHAs. |
| .github/workflows/codeql-analysis.yml | Pins GitHub Actions SHAs for checkout/setup-java/codeql actions. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| @Override | ||
| public ItemStack applyPotion(ItemStack item, PotionType potionType) { | ||
| ItemStack copy = item.clone(); | ||
| if (copy.getItemMeta() instanceof PotionMeta meta) { | ||
| meta.setBasePotionType(potionType); | ||
| copy.setItemMeta(meta); | ||
| } | ||
| return copy; | ||
| return item.clone(); | ||
| } |
| public int entityId(Object packet) { | ||
| Object value = invoke(packet, "getEntityId", "id", "entityId", "getId"); | ||
| if (value instanceof Integer i) { | ||
| return i; | ||
| } | ||
| Object field = get(field(packet.getClass(), "id", "entityId"), packet); | ||
| return field instanceof Integer i ? i : -1; | ||
| return value instanceof Integer i ? i : -1; | ||
| } |
|
|
||
| private static final HandlerList HANDLER_LIST = new HandlerList(); | ||
|
|
||
| private final Player player; | ||
| private final Object playerHandle; |
Removes Netty pipeline injection and does not reimplement menu/container/sign packets that PacketUxUi and SignGUI already own. Play packets whose layout actually breaks across versions are built with direct NMS (
CraftPlayer.getHandle(),ServerPlayer.connection.send,Clientbound*/PacketPlayOut*) in shared adapters instead of per-bucket copies.Package
All code lives under
net.opmasterleo.packet.Changes
PacketWrapaddEntity/addTextDisplay(Codacy parameter-list limits)setAccessible)./gradlew publish/publishSnapshot, pinned Actions SHAs in workflowsgradle.properties(paperApiVersion)Verification
./gradlew :nms-api:test :api:compileJava :plugin:compileJava./gradlew :nms:v1_20_R4:compileJava