= 创作分享 =
编程开发
1.18.2如何禁用其他模组的部分功能
6371peter

1.18.2如何禁用其他模组的部分功能

6371peter 于 2024-2-14 23:26 ( 2月前 ) [复制链接] [只看楼主] [打印]
317 2
100RF
CoFH Core模组ArcheryEvents.java中handleArrowLooseEvent取消了ArrowLooseEvent事件。我用Mixin取消了后续执行
  1. @Mixin(value = ArcheryEvents.class, remap = false)
  2. public class ArcheryEventsMixin {
  3.     @Inject(method = "handleArrowLooseEvent", at = @At("HEAD"), cancellable = true)
  4.     private static void handleArrowLooseEvent(ArrowLooseEvent event, CallbackInfo ci) {
  5.         Player player = event.getPlayer();
  6.         if (CuriosApi.getCuriosHelper().findFirstCurio(player, Registry.ANGELS_SIGHT.get()).isPresent()) ci.cancel();
  7.     }
  8. }
复制代码
是否有更好的办法实现与上述代码相同的功能

最佳答案

查看完整内容

你的意思是取消handleArrowLooseEvent(ArrowLooseEvent event)的执行?一般情况下我选择修改源码,一个return就解决了,但不修改的除了mixin外或许可以尝试自己编写个AOP试一下
发表于 2024-2-14 23:26:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 2 条回复!
C江秋
你的意思是取消handleArrowLooseEvent(ArrowLooseEvent event)的执行?一般情况下我选择修改源码,一个return就解决了,但不修改的除了mixin外或许可以尝试自己编写个AOP试一下
  1. import org.aopalliance.intercept.MethodInterceptor;
  2. import org.aopalliance.intercept.MethodInvocation;

  3. public class MyMethodInterceptor implements MethodInterceptor {
  4.     @Override
  5.     public Object invoke(MethodInvocation invocation) throws Throwable {
  6.         String methodName = invocation.getMethod().getName();
  7.         if ("handleArrowLooseEvent".equals(methodName)) {
  8.             // 返回null,取消原方法的执行
  9.             return null;
  10.         }
  11.       
  12.         return invocation.proceed();
  13.     }
  14. }
复制代码
始终在征程上。
发表于 2024-2-14 23:26:08 | 只看该作者

回复 | 举报

墨靈(墨白言靈)
检查配置文件……(?)
斗轉星移,空間扭曲。
星域之幻,皆爲虛惘。
世界碩大,宇宙無垠。
曆練之途,永無終日。
萬物從法,魂歸太巟。
勿由此落,待生輪回!
发表于 2024-2-20 09:56:21 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表