From e221c5a50b30257e4d86452cdf4df9b5b4da5532 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 7 May 2025 20:35:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D1.21.5=E9=AA=A8=E7=B2=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/CropBlockBehavior.java | 2 +- .../craftengine/bukkit/util/Reflections.java | 4 ++-- .../craftengine/core/block/UpdateOption.java | 4 ++++ .../core/util/ReflectionUtils.java | 21 +++++++++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java index f74239a2d..e5681c5fb 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java @@ -157,7 +157,7 @@ public class CropBlockBehavior extends BushBlockBehavior { if (i > maxAge) { i = maxAge; } - FastNMS.INSTANCE.method$LevelWriter$setBlock(level, pos, immutableBlockState.with(this.ageProperty, i).customBlockState().handle(), UpdateOption.UPDATE_NONE.flags()); + FastNMS.INSTANCE.method$LevelWriter$setBlock(level, pos, immutableBlockState.with(this.ageProperty, i).customBlockState().handle(), UpdateOption.UPDATE_ALL.flags()); if (sendParticles) { world.spawnParticle(ParticleUtils.getParticle("HAPPY_VILLAGER"), x + 0.5, y + 0.5, z + 0.5, 15, 0.25, 0.25, 0.25); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index ed7918dd2..87c8dfcd5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -4962,10 +4962,10 @@ public class Reflections { public static final Method method$BonemealableBlock$isValidBonemealTarget = requireNonNull( VersionHelper.isOrAbove1_20_2() ? - ReflectionUtils.getMethod( + ReflectionUtils.getInstanceMethod( clazz$BonemealableBlock, boolean.class, clazz$LevelReader, clazz$BlockPos, clazz$BlockState ) : - ReflectionUtils.getMethod( + ReflectionUtils.getInstanceMethod( clazz$BonemealableBlock, boolean.class, clazz$LevelReader, clazz$BlockPos, clazz$BlockState, boolean.class ) ); diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/UpdateOption.java b/core/src/main/java/net/momirealms/craftengine/core/block/UpdateOption.java index 98286d2ea..ae1c652ad 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/UpdateOption.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/UpdateOption.java @@ -14,6 +14,10 @@ public class UpdateOption { return flags; } + public static Builder builder() { + return new Builder(); + } + public static class Builder { private int flags; 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 f83302bab..04a9d4baf 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 @@ -246,6 +246,27 @@ public class ReflectionUtils { return null; } + @Nullable + public static Method getInstanceMethod(final Class clazz, Class returnType, final Class... parameterTypes) { + outer: + for (Method method : clazz.getMethods()) { + if (method.getParameterCount() != parameterTypes.length) { + continue; + } + if (Modifier.isStatic(method.getModifiers())) { + continue; + } + Class[] types = method.getParameterTypes(); + for (int i = 0; i < types.length; i++) { + if (types[i] != parameterTypes[i]) { + continue outer; + } + } + if (returnType.isAssignableFrom(method.getReturnType())) return method; + } + return null; + } + @Nullable public static Method getDeclaredMethod(final Class clazz, Class returnType, final String[] possibleMethodNames, final Class... parameterTypes) { outer: