9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 09:59:20 +00:00

修改方法匹配写法

This commit is contained in:
XiaoMoMi
2025-08-24 19:40:40 +08:00
parent e02158c19c
commit 0ed58de564
2 changed files with 39 additions and 44 deletions

View File

@@ -109,44 +109,18 @@ public final class BlockGenerator {
.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$onPlace))
.intercept(MethodDelegation.to(OnPlaceInterceptor.INSTANCE))
// onBrokenAfterFall
.method(ElementMatchers.takesArguments(3)
.and(ElementMatchers.takesArgument(0, CoreReflections.clazz$Level))
.and(ElementMatchers.takesArgument(1, CoreReflections.clazz$BlockPos))
.and(ElementMatchers.takesArgument(2, CoreReflections.clazz$FallingBlockEntity))
)
.method(ElementMatchers.is(CoreReflections.method$Fallable$onBrokenAfterFall))
.intercept(MethodDelegation.to(OnBrokenAfterFallInterceptor.INSTANCE))
// onLand
.method(ElementMatchers.takesArguments(5)
.and(ElementMatchers.takesArgument(0, CoreReflections.clazz$Level))
.and(ElementMatchers.takesArgument(1, CoreReflections.clazz$BlockPos))
.and(ElementMatchers.takesArgument(2, CoreReflections.clazz$BlockState))
.and(ElementMatchers.takesArgument(3, CoreReflections.clazz$BlockState))
.and(ElementMatchers.takesArgument(4, CoreReflections.clazz$FallingBlockEntity))
)
.method(ElementMatchers.is(CoreReflections.method$Fallable$onLand))
.intercept(MethodDelegation.to(OnLandInterceptor.INSTANCE))
// canSurvive
.method(ElementMatchers.takesArguments(3)
.and(ElementMatchers.takesArgument(0, CoreReflections.clazz$BlockState))
.and(ElementMatchers.takesArgument(1, CoreReflections.clazz$LevelReader))
.and(ElementMatchers.takesArgument(2, CoreReflections.clazz$BlockPos))
.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$canSurvive)
)
.intercept(MethodDelegation.to(CanSurviveInterceptor.INSTANCE))
// updateShape
.method(ElementMatchers.returns(CoreReflections.clazz$BlockState)
.and(ElementMatchers.takesArgument(0, CoreReflections.clazz$BlockState))
// LevelReader 1.21.3+ // 1.20-1.12.2
.and(ElementMatchers.takesArgument(1, CoreReflections.clazz$LevelReader).or(ElementMatchers.takesArgument(1, CoreReflections.clazz$Direction)))
.and(ElementMatchers.named("updateShape").or(ElementMatchers.named("a"))))
.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$updateShape))
.intercept(MethodDelegation.to(UpdateShapeInterceptor.INSTANCE))
// onExplosionHit 1.21+
.method(ElementMatchers.returns(void.class)
.and(ElementMatchers.takesArgument(0, CoreReflections.clazz$BlockState))
.and(ElementMatchers.takesArgument(1, VersionHelper.isOrAbove1_21_2() ? CoreReflections.clazz$ServerLevel : CoreReflections.clazz$Level))
.and(ElementMatchers.takesArgument(2, CoreReflections.clazz$BlockPos))
.and(ElementMatchers.takesArgument(3, CoreReflections.clazz$Explosion))
.and(ElementMatchers.takesArgument(4, BiConsumer.class))
)
.intercept(MethodDelegation.to(OnExplosionHitInterceptor.INSTANCE))
// neighborChanged
.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$neighborChanged))
.intercept(MethodDelegation.to(NeighborChangedInterceptor.INSTANCE))
@@ -177,15 +151,21 @@ public final class BlockGenerator {
// spawnAfterBreak
.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$spawnAfterBreak))
.intercept(MethodDelegation.to(SpawnAfterBreakInterceptor.INSTANCE));
// 1.21.5+
if (CoreReflections.method$BlockBehaviour$affectNeighborsAfterRemoval != null) {
builder = builder.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$affectNeighborsAfterRemoval))
.intercept(MethodDelegation.to(AffectNeighborsAfterRemovalInterceptor.INSTANCE));
}
// 1.20-1.21.4
if (CoreReflections.method$BlockBehaviour$onRemove != null) {
builder = builder.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$onRemove))
.intercept(MethodDelegation.to(OnRemoveInterceptor.INSTANCE));
}
// 1.21+
if (CoreReflections.method$BlockBehaviour$onExplosionHit != null) {
builder = builder.method(ElementMatchers.is(CoreReflections.method$BlockBehaviour$onExplosionHit))
.intercept(MethodDelegation.to(OnExplosionHitInterceptor.INSTANCE));
}
Class<?> clazz$CraftEngineBlock = builder.make().load(BlockGenerator.class.getClassLoader()).getLoaded();
constructor$CraftEngineBlock = MethodHandles.publicLookup().in(clazz$CraftEngineBlock)
.findConstructor(clazz$CraftEngineBlock, MethodType.methodType(void.class, CoreReflections.clazz$BlockBehaviour$Properties))

View File

@@ -1181,6 +1181,17 @@ public final class CoreReflections {
)
);
public static final Class<?> clazz$ServerLevel = requireNonNull(
BukkitReflectionUtils.findReobfOrMojmapClass(
"server.level.WorldServer",
"server.level.ServerLevel"
)
);
public static final Class<?> clazz$Explosion = requireNonNull(
ReflectionUtils.getClazz(BukkitReflectionUtils.assembleMCClass("world.level.Explosion"))
);
public static final Constructor<?> constructor$StateDefinition$Builder = requireNonNull(
ReflectionUtils.getTheOnlyConstructor(clazz$StateDefinition$Builder)
);
@@ -1663,6 +1674,15 @@ public final class CoreReflections {
ReflectionUtils.getDeclaredMethod(clazz$BlockBehaviour, clazz$BlockState, clazz$BlockState, clazz$Direction, clazz$BlockState, clazz$LevelAccessor, clazz$BlockPos, clazz$BlockPos)
);
public static final Method method$BlockBehaviour$canSurvive = requireNonNull(
ReflectionUtils.getDeclaredMethod(clazz$BlockBehaviour, boolean.class, clazz$BlockState, clazz$LevelReader, clazz$BlockPos)
);
public static final Method method$BlockBehaviour$onExplosionHit = MiscUtils.requireNonNullIf(
ReflectionUtils.getDeclaredMethod(clazz$BlockBehaviour, void.class, clazz$BlockState, VersionHelper.isOrAbove1_21_2() ? clazz$ServerLevel : clazz$Level, clazz$BlockPos, clazz$Explosion, BiConsumer.class),
VersionHelper.isOrAbove1_21()
);
public static final Class<?> clazz$Fallable = requireNonNull(
ReflectionUtils.getClazz(BukkitReflectionUtils.assembleMCClass("world.level.block.Fallable"))
);
@@ -1685,6 +1705,14 @@ public final class CoreReflections {
)
);
public static final Method method$Fallable$onLand = requireNonNull(
ReflectionUtils.getMethod(clazz$Fallable, void.class, clazz$Level, clazz$BlockPos, clazz$BlockState, clazz$BlockState, clazz$FallingBlockEntity)
);
public static final Method method$Fallable$onBrokenAfterFall = requireNonNull(
ReflectionUtils.getMethod(clazz$Fallable, void.class, clazz$Level, clazz$BlockPos, clazz$FallingBlockEntity)
);
public static final Method method$FallingBlockEntity$fall = requireNonNull(
ReflectionUtils.getStaticMethod(clazz$FallingBlockEntity, clazz$FallingBlockEntity, clazz$Level, clazz$BlockPos, clazz$BlockState)
);
@@ -2969,13 +2997,6 @@ public final class CoreReflections {
ReflectionUtils.getInstanceDeclaredField(clazz$ServerPlayer, clazz$ServerGamePacketListenerImpl, 0)
);
public static final Class<?> clazz$ServerLevel = requireNonNull(
BukkitReflectionUtils.findReobfOrMojmapClass(
"server.level.WorldServer",
"server.level.ServerLevel"
)
);
public static final Method method$ServerLevel$getNoiseBiome = requireNonNull(
ReflectionUtils.getMethod(clazz$ServerLevel, clazz$Holder, int.class, int.class, int.class)
);
@@ -3620,12 +3641,6 @@ public final class CoreReflections {
)
);
public static final Class<?> clazz$Explosion = requireNonNull(
ReflectionUtils.getClazz(
BukkitReflectionUtils.assembleMCClass("world.level.Explosion")
)
);
// 1.20.5+
public static final Field field$ItemStack$CODEC = ReflectionUtils.getDeclaredField(clazz$ItemStack, "CODEC", "b");