• 【问卷调查奖励发放公告】

    感谢大家积极参与本次 MineBBS 社区问卷调查。200 金粒的参与奖励已完成发放。部分用户发放失败,请【点击此处】 查看详情。

Java MiniMessage 删除某个标签的处理器

MrXiaoM

【Lv:4】

VIP
开发者
正式会员
注册
2021/08/13
消息
214
金粒
5,634金粒
你可能不需要,甚至是反感 MiniMessage 中的某些标签
MiniMessage 在标签处理器默认实现这一块防得严丝合缝,需要反射才能进行修改。
使用以下代码即可移除某个标签的处理器。

Java:
    @SuppressWarnings({"unchecked", "CallToPrintStackTrace"})
    public static void remove(TagResolver.Builder builder, String... tags) {
        Class<?> type = builder.getClass();
        try {
            Field field = type.getDeclaredField("resolvers");
            field.setAccessible(true);
            List<TagResolver> list = (List<TagResolver>) field.get(builder);
            list.removeIf(it -> {
                for (String tag : tags) {
                    if (it.has(tag)) return true;
                }
                return false;
            });
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    // 使用样例
    public static MiniMessage create() {
        return MiniMessage.builder()
                .editTags(it -> remove(it, "pride")) // 在这里输入要删除的标签,如 <pride[:flag]>
                .build();
    }
 
内容版权许可
CC BY-SA 署名-相同方式共享

在线会员

  • MrXiaoM
  • 76456355275
  • zim
  • FenLing
  • 乾坤
  • 小路_Lanes
  • LCH
  • 没钱的山海
  • 香马鸭子
  • 老路霸王
  • 2534905003
  • tick47
  • konpakuyoumu
  • haoge66666
  • 你所拨打的用户已关机
  • 地狱厨房
  • 广播
  • 奥 陶
  • gouziaishimi
  • 薄荷岛
...和 35 更多。
后退
顶部 底部