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

    感谢大家积极参与本次 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 署名-相同方式共享

在线管理成员

在线会员

  • 阿伟诶
  • 出众年华
  • Chaidawang_
  • 子鱼
  • 小林观测站
  • 王 欢兴
  • yjynb
  • LelinG8277
  • Bacon_
  • YY998329
  • 57
  • _Shiyi
  • FoRever_
  • xslvvv
  • dcfdc
  • suvxxl
  • NolanYu
  • xiaoanTAT
  • YYT
  • nuuueircu
  • Angel_group
...和 59 更多。
后退
顶部 底部