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

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

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

MrXiaoM

【Lv:4】

VIP
开发者
正式会员
注册
2021/08/13
消息
213
金粒
4,945金粒
你可能不需要,甚至是反感 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 署名-相同方式共享

在线管理成员

在线会员

  • 铭记mingji
  • jmmmM
  • LUOMIAOCHU
  • 乱杖先生
  • 羽茶
  • 荭藜
  • Small_bried
  • a24406
  • blblsdw
  • 眠悠子Miyoz
  • yu_haonan
  • ysz2024
  • qawsedcu//
  • FoRever_
  • yan5656
  • EthanAxe
  • 名字只是敷衍
  • 清黎
  • PuddingKC
  • 世闲
  • polang
...和 59 更多。
后退
顶部 底部