Search in sources :

Example 61 with ChatClickable

use of net.minecraft.server.v1_13_R1.ChatClickable in project PaperDev by Kamillaova.

the class CraftChatMessage method fixComponent.

private static IChatBaseComponent fixComponent(IChatBaseComponent component, Matcher matcher) {
    if (component instanceof ChatComponentText) {
        ChatComponentText text = ((ChatComponentText) component);
        String msg = text.g();
        if (matcher.reset(msg).find()) {
            matcher.reset();
            ChatModifier modifier = text.getChatModifier() != null ? text.getChatModifier() : new ChatModifier();
            List<IChatBaseComponent> extras = new ArrayList<IChatBaseComponent>();
            List<IChatBaseComponent> extrasOld = new ArrayList<IChatBaseComponent>(text.a());
            component = text = new ChatComponentText("");
            int pos = 0;
            while (matcher.find()) {
                String match = matcher.group();
                if (!(match.startsWith("http://") || match.startsWith("https://"))) {
                    match = "http://" + match;
                }
                ChatComponentText prev = new ChatComponentText(msg.substring(pos, matcher.start()));
                prev.setChatModifier(modifier);
                extras.add(prev);
                ChatComponentText link = new ChatComponentText(matcher.group());
                ChatModifier linkModi = modifier.clone();
                linkModi.setChatClickable(new ChatClickable(EnumClickAction.OPEN_URL, match));
                link.setChatModifier(linkModi);
                extras.add(link);
                pos = matcher.end();
            }
            ChatComponentText prev = new ChatComponentText(msg.substring(pos));
            prev.setChatModifier(modifier);
            extras.add(prev);
            extras.addAll(extrasOld);
            for (IChatBaseComponent c : extras) {
                text.addSibling(c);
            }
        }
    }
    List extras = component.a();
    for (int i = 0; i < extras.size(); i++) {
        IChatBaseComponent comp = (IChatBaseComponent) extras.get(i);
        if (comp.getChatModifier() != null && comp.getChatModifier().h() == null) {
            extras.set(i, fixComponent(comp, matcher));
        }
    }
    if (component instanceof ChatMessage) {
        Object[] subs = ((ChatMessage) component).j();
        for (int i = 0; i < subs.length; i++) {
            Object comp = subs[i];
            if (comp instanceof IChatBaseComponent) {
                IChatBaseComponent c = (IChatBaseComponent) comp;
                if (c.getChatModifier() != null && c.getChatModifier().h() == null) {
                    subs[i] = fixComponent(c, matcher);
                }
            } else if (comp instanceof String && matcher.reset((String) comp).find()) {
                subs[i] = fixComponent(new ChatComponentText((String) comp), matcher);
            }
        }
    }
    return component;
}
Also used : ChatMessage(net.minecraft.server.v1_12_R1.ChatMessage) ChatClickable(net.minecraft.server.v1_12_R1.ChatClickable) ChatModifier(net.minecraft.server.v1_12_R1.ChatModifier) ArrayList(java.util.ArrayList) IChatBaseComponent(net.minecraft.server.v1_12_R1.IChatBaseComponent) ArrayList(java.util.ArrayList) List(java.util.List) ChatComponentText(net.minecraft.server.v1_12_R1.ChatComponentText)

Aggregations

ArrayList (java.util.ArrayList)31 Component (me.devtec.shared.components.Component)30 ChatClickable (net.minecraft.server.v1_10_R1.ChatClickable)4 ChatComponentText (net.minecraft.server.v1_10_R1.ChatComponentText)4 ChatHoverable (net.minecraft.server.v1_10_R1.ChatHoverable)4 ChatModifier (net.minecraft.server.v1_10_R1.ChatModifier)4 ChatClickable (net.minecraft.server.v1_13_R1.ChatClickable)4 ChatComponentText (net.minecraft.server.v1_13_R1.ChatComponentText)4 ChatHoverable (net.minecraft.server.v1_13_R1.ChatHoverable)4 ChatModifier (net.minecraft.server.v1_13_R1.ChatModifier)4 IChatBaseComponent (net.minecraft.server.v1_13_R1.IChatBaseComponent)4 ChatClickable (net.minecraft.server.v1_8_R1.ChatClickable)4 ChatComponentText (net.minecraft.server.v1_8_R1.ChatComponentText)4 ChatHoverable (net.minecraft.server.v1_8_R1.ChatHoverable)4 ChatModifier (net.minecraft.server.v1_8_R1.ChatModifier)4 IChatBaseComponent (net.minecraft.server.v1_8_R1.IChatBaseComponent)4 ChatClickable (net.minecraft.server.v1_12_R1.ChatClickable)3 ChatComponentText (net.minecraft.server.v1_12_R1.ChatComponentText)3 ChatHoverable (net.minecraft.server.v1_12_R1.ChatHoverable)3 ChatModifier (net.minecraft.server.v1_12_R1.ChatModifier)3