From 95e0674af59a74ce05a6dc7e07e25a72430a254c Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 5 Jun 2025 22:49:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96=E5=8F=8D?= =?UTF-8?q?=E5=B0=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reflection/minecraft/CoreReflections.java | 34 ++- .../minecraft/NetworkReflections.java | 238 +++++++++++------- .../core/util/ReflectionUtils.java | 30 +-- 3 files changed, 179 insertions(+), 123 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index 986c58c50..eafbdc60e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -3274,18 +3274,26 @@ public final class CoreReflections { ) ); - public static final MethodHandle handle$ServerEntity$broadcastSetter = requireNonNull( - ReflectionUtils.unreflectSetter(field$ServerEntity$broadcast) - .asType(MethodType.methodType(void.class, Object.class, Consumer.class)) - ); + public static final MethodHandle handle$ServerEntity$broadcastSetter; + public static final MethodHandle handle$ServerEntity$updateIntervalSetter; + public static final MethodHandle handle$ServerPlayer$connectionGetter; - public static final MethodHandle handle$ServerEntity$updateIntervalSetter = requireNonNull( - ReflectionUtils.unreflectSetter(field$ServerEntity$updateInterval) - .asType(MethodType.methodType(void.class, Object.class, int.class)) - ); - - public static final MethodHandle handle$ServerPlayer$connectionGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerPlayer$connection) - .asType(MethodType.methodType(Object.class, Object.class)) - ); + static { + try { + handle$ServerEntity$broadcastSetter = requireNonNull( + ReflectionUtils.unreflectSetter(field$ServerEntity$broadcast) + .asType(MethodType.methodType(void.class, Object.class, Consumer.class)) + ); + handle$ServerEntity$updateIntervalSetter = requireNonNull( + ReflectionUtils.unreflectSetter(field$ServerEntity$updateInterval) + .asType(MethodType.methodType(void.class, Object.class, int.class)) + ); + handle$ServerPlayer$connectionGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerPlayer$connection) + .asType(MethodType.methodType(Object.class, Object.class)) + ); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java index 83ff087e5..bf3019c03 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java @@ -1296,121 +1296,177 @@ public final class NetworkReflections { .map(it -> ReflectionUtils.getConstructor(it, float.class, boolean.class)) .orElse(null); - public static final MethodHandle handle$ServerboundRenameItemPacket$nameGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundRenameItemPacket$name) - .asType(MethodType.methodType(String.class, Object.class)) - ); + public static final MethodHandle handle$ServerboundRenameItemPacket$nameGetter; + public static final MethodHandle handle$ServerboundRenameItemPacket$nameSetter; + public static final MethodHandle handle$ServerboundHelloPacket$nameGetter; + public static final MethodHandle handle$ServerboundHelloPacket$uuidGetter; + public static final MethodHandle handle$ServerboundSetCreativeModeSlotPacket$itemStackGetter; + public static final MethodHandle handle$ServerboundSetCreativeModeSlotPacket$slotNumGetter; + public static final MethodHandle handle$ServerboundInteractPacket$actionGetter; + public static final MethodHandle handle$ServerboundInteractPacket$InteractionAtLocationAction$handGetter; + public static final MethodHandle handle$ServerboundInteractPacket$InteractionAtLocationAction$locationGetter; + public static final MethodHandle handle$ServerboundSignUpdatePacket$linesGetter; + public static final MethodHandle handleServerboundEditBookPacket$pagesGetter; + public static final MethodHandle handle$ServerboundEditBookPacket$titleGetter; + public static final MethodHandle handle$ServerboundEditBookPacket$slotGetter; + public static final MethodHandle handle$ServerboundResourcePackPacket$actionGetter; + public static final MethodHandle handle$ClientboundEntityEventPacket$entityIdGetter; + public static final MethodHandle handle$ClientboundEntityEventPacket$eventIdGetter; + public static final MethodHandle handle$ClientIntentionPacket$protocolVersionGetter; - public static final MethodHandle handle$ServerboundRenameItemPacket$nameSetter = requireNonNull( - ReflectionUtils.unreflectSetter(field$ServerboundRenameItemPacket$name) - .asType(MethodType.methodType(void.class, Object.class, String.class)) - ); - - public static final MethodHandle handle$ServerboundHelloPacket$nameGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundHelloPacket$name) - .asType(MethodType.methodType(String.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundHelloPacket$uuidGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundHelloPacket$uuid) - .asType(MethodType.methodType(VersionHelper.isOrAbove1_20_2() ? UUID.class : Optional.class, Object.class)) - ); + static { + try { + handle$ServerboundRenameItemPacket$nameGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundRenameItemPacket$name) + .asType(MethodType.methodType(String.class, Object.class)) + ); + handle$ServerboundRenameItemPacket$nameSetter = requireNonNull( + ReflectionUtils.unreflectSetter(field$ServerboundRenameItemPacket$name) + .asType(MethodType.methodType(void.class, Object.class, String.class)) + ); + handle$ServerboundHelloPacket$nameGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundHelloPacket$name) + .asType(MethodType.methodType(String.class, Object.class)) + ); + handle$ServerboundHelloPacket$uuidGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundHelloPacket$uuid) + .asType(MethodType.methodType(VersionHelper.isOrAbove1_20_2() ? UUID.class : Optional.class, Object.class)) + ); + handle$ServerboundSetCreativeModeSlotPacket$itemStackGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundSetCreativeModeSlotPacket$itemStack) + .asType(MethodType.methodType(Object.class, Object.class)) + ); + handle$ServerboundSetCreativeModeSlotPacket$slotNumGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundSetCreativeModeSlotPacket$slotNum) + .asType(MethodType.methodType(VersionHelper.isOrAbove1_20_5() ? short.class : int.class, Object.class)) + ); + handle$ServerboundInteractPacket$actionGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundInteractPacket$action) + .asType(MethodType.methodType(Object.class, Object.class)) + ); + handle$ServerboundInteractPacket$InteractionAtLocationAction$handGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundInteractPacket$InteractionAtLocationAction$hand) + .asType(MethodType.methodType(Object.class, Object.class)) + ); + handle$ServerboundInteractPacket$InteractionAtLocationAction$locationGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundInteractPacket$InteractionAtLocationAction$location) + .asType(MethodType.methodType(Object.class, Object.class)) + ); + handle$ServerboundSignUpdatePacket$linesGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundSignUpdatePacket$lines) + .asType(MethodType.methodType(String[].class, Object.class)) + ); + handleServerboundEditBookPacket$pagesGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundEditBookPacket$pages) + .asType(MethodType.methodType(List.class, Object.class)) + ); + handle$ServerboundEditBookPacket$titleGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundEditBookPacket$title) + .asType(MethodType.methodType(Optional.class, Object.class)) + ); + handle$ServerboundEditBookPacket$slotGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundEditBookPacket$slot) + .asType(MethodType.methodType(int.class, Object.class)) + ); + handle$ServerboundResourcePackPacket$actionGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ServerboundResourcePackPacket$action) + .asType(MethodType.methodType(Object.class, Object.class)) + ); + handle$ClientboundEntityEventPacket$entityIdGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ClientboundEntityEventPacket$entityId) + .asType(MethodType.methodType(int.class, Object.class)) + ); + handle$ClientboundEntityEventPacket$eventIdGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ClientboundEntityEventPacket$eventId) + .asType(MethodType.methodType(byte.class, Object.class)) + ); + handle$ClientIntentionPacket$protocolVersionGetter = requireNonNull( + ReflectionUtils.unreflectGetter(field$ClientIntentionPacket$protocolVersion) + .asType(MethodType.methodType(int.class, Object.class)) + ); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } public static final MethodHandle handle$ClientboundRespawnPacket$dimensionGetter = Optional.ofNullable(field$ClientboundRespawnPacket$dimension) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); public static final MethodHandle handle$ClientboundRespawnPacket$commonPlayerSpawnInfoGetter = Optional.ofNullable(field$ClientboundRespawnPacket$commonPlayerSpawnInfo) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); public static final MethodHandle handle$CommonPlayerSpawnInfo$dimensionGetter = Optional.ofNullable(field$CommonPlayerSpawnInfo$dimension) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); public static final MethodHandle handle$ClientboundLoginPacket$dimensionGetter = Optional.ofNullable(field$ClientboundLoginPacket$dimension) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); public static final MethodHandle handle$ClientboundLoginPacket$commonPlayerSpawnInfoGetter = Optional.ofNullable(field$ClientboundLoginPacket$commonPlayerSpawnInfo) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); - public static final MethodHandle handle$ServerboundSetCreativeModeSlotPacket$itemStackGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundSetCreativeModeSlotPacket$itemStack) - .asType(MethodType.methodType(Object.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundSetCreativeModeSlotPacket$slotNumGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundSetCreativeModeSlotPacket$slotNum) - .asType(MethodType.methodType(VersionHelper.isOrAbove1_20_5() ? short.class : int.class, Object.class)) - ); - public static final MethodHandle handle$ServerboundPickItemFromBlockPacket$posGetter = Optional.ofNullable(field$ServerboundPickItemFromBlockPacket$pos) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); public static final MethodHandle handle$ServerboundPickItemFromEntityPacket$idGetter = Optional.ofNullable(field$ServerboundPickItemFromEntityPacket$id) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(int.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(int.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); - public static final MethodHandle handle$ServerboundInteractPacket$actionGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundInteractPacket$action) - .asType(MethodType.methodType(Object.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundInteractPacket$InteractionAtLocationAction$handGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundInteractPacket$InteractionAtLocationAction$hand) - .asType(MethodType.methodType(Object.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundInteractPacket$InteractionAtLocationAction$locationGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundInteractPacket$InteractionAtLocationAction$location) - .asType(MethodType.methodType(Object.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundSignUpdatePacket$linesGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundSignUpdatePacket$lines) - .asType(MethodType.methodType(String[].class, Object.class)) - ); - - public static final MethodHandle handleServerboundEditBookPacket$pagesGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundEditBookPacket$pages) - .asType(MethodType.methodType(List.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundEditBookPacket$titleGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundEditBookPacket$title) - .asType(MethodType.methodType(Optional.class, Object.class)) - ); - - public static final MethodHandle handle$ServerboundEditBookPacket$slotGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundEditBookPacket$slot) - .asType(MethodType.methodType(int.class, Object.class)) - ); - public static final MethodHandle handle$ServerboundCustomPayloadPacket$payloadGetter = Optional.ofNullable(field$ServerboundCustomPayloadPacket$payload) - .map(it -> ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class))) + .map(it -> { + try { + return ReflectionUtils.unreflectGetter(it).asType(MethodType.methodType(Object.class, Object.class)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }) .orElse(null); - public static final MethodHandle handle$ServerboundResourcePackPacket$actionGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ServerboundResourcePackPacket$action) - .asType(MethodType.methodType(Object.class, Object.class)) - ); - - public static final MethodHandle handle$ClientboundEntityEventPacket$entityIdGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ClientboundEntityEventPacket$entityId) - .asType(MethodType.methodType(int.class, Object.class)) - ); - - public static final MethodHandle handle$ClientboundEntityEventPacket$eventIdGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ClientboundEntityEventPacket$eventId) - .asType(MethodType.methodType(byte.class, Object.class)) - ); - - public static final MethodHandle handle$ClientIntentionPacket$protocolVersionGetter = requireNonNull( - ReflectionUtils.unreflectGetter(field$ClientIntentionPacket$protocolVersion) - .asType(MethodType.methodType(int.class, Object.class)) - ); - } diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/ReflectionUtils.java b/core/src/main/java/net/momirealms/craftengine/core/util/ReflectionUtils.java index 5022cc141..ea6759cfb 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/ReflectionUtils.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/ReflectionUtils.java @@ -485,16 +485,21 @@ public class ReflectionUtils { return constructors[0]; } - public static MethodHandle unreflectGetter(Field field) { + public static MethodHandle unreflectGetter(Field field) throws IllegalAccessException { try { return LOOKUP.unreflectGetter(field); } catch (IllegalAccessException e) { field.setAccessible(true); - try { - return LOOKUP.unreflectGetter(field); - } catch (IllegalAccessException ex) { - throw new RuntimeException(ex); - } + return LOOKUP.unreflectGetter(field); + } + } + + public static MethodHandle unreflectSetter(Field field) throws IllegalAccessException { + try { + return LOOKUP.unreflectSetter(field); + } catch (IllegalAccessException e) { + field.setAccessible(true); + return LOOKUP.unreflectSetter(field); } } @@ -524,17 +529,4 @@ public class ReflectionUtils { return null; } } - - public static MethodHandle unreflectSetter(Field field) { - try { - return LOOKUP.unreflectSetter(field); - } catch (IllegalAccessException e) { - field.setAccessible(true); - try { - return LOOKUP.unreflectSetter(field); - } catch (IllegalAccessException ex) { - throw new RuntimeException(ex); - } - } - } }