/* * Copyright (C) 2020 wea_ondara * * BungeePerms is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * BungeePerms is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.alpenblock.bungeeperms.platform.bukkit; import java.util.ArrayList; import java.util.List; import net.alpenblock.bungeeperms.BungeePerms; import net.alpenblock.bungeeperms.ChatColor; import net.alpenblock.bungeeperms.platform.MessageEncoder; import net.md_5.bungee.api.chat.ComponentBuilder; public class BukkitMessageEncoder extends MessageEncoder { public static BaseComponent[] convert(net.md_5.bungee.api.chat.BaseComponent[] components) { BaseComponent[] ret = new BaseComponent[components.length]; for (int i = 0; i < components.length; i++) { ret[i] = new BaseComponent(components[i]); } return ret; } public static net.md_5.bungee.api.chat.BaseComponent[] convert(BaseComponent[] components) { net.md_5.bungee.api.chat.BaseComponent[] ret = new net.md_5.bungee.api.chat.BaseComponent[components.length]; for (int i = 0; i < components.length; i++) { ret[i] = (net.md_5.bungee.api.chat.BaseComponent) components[i].getComponent(); } return ret; } private ComponentBuilder builder; net.md_5.bungee.api.chat.BaseComponent[] cache; private List<String> list; private String current; public BukkitMessageEncoder(MessageEncoder original) { super(original); if (!(original instanceof BukkitMessageEncoder)) { throw new IllegalArgumentException("original is not a BukkitMessageEncoder"); } if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { builder = ((BukkitMessageEncoder) original).builder; } list = new ArrayList<>(((BukkitMessageEncoder) original).list); current = ((BukkitMessageEncoder) original).current; } public BukkitMessageEncoder(String text) { super(text); if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { builder = new ComponentBuilder(text); } list = new ArrayList<>(); current = text; } @Override public MessageEncoder append(String text) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.append(text); } list.add(current); current = text; return this; } @Override public MessageEncoder color(ChatColor color) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.color(net.md_5.bungee.api.ChatColor.valueOf(color.name())); } current = color + current; return this; } @Override public MessageEncoder bold(boolean bold) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.bold(bold); } else { color(ChatColor.BOLD); if (bold) { color(ChatColor.BOLD); } current = current.replaceAll("" + ChatColor.BOLD, ""); } return this; } @Override public MessageEncoder italic(boolean italic) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.italic(italic); } else { color(ChatColor.ITALIC); if (italic) { color(ChatColor.ITALIC); } current = current.replaceAll("" + ChatColor.ITALIC, ""); } return this; } @Override public MessageEncoder underlined(boolean underlined) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.underlined(underlined); } else { if (underlined) { color(ChatColor.UNDERLINE); } current = current.replaceAll("" + ChatColor.UNDERLINE, ""); } return this; } @Override public MessageEncoder strikethrough(boolean strikethrough) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.strikethrough(strikethrough); } else { if (strikethrough) { color(ChatColor.STRIKETHROUGH); } current = current.replaceAll("" + ChatColor.STRIKETHROUGH, ""); } return this; } @Override public MessageEncoder obfuscated(boolean obfuscated) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { cache = null; builder = builder.obfuscated(obfuscated); } else { if (obfuscated) { color(ChatColor.MAGIC); } current = current.replaceAll("" + ChatColor.MAGIC, ""); } return this; } @Override public MessageEncoder event(ClickEvent clickEvent) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { if (clickEvent == null) { builder = builder.event((net.md_5.bungee.api.chat.ClickEvent) null); } else { cache = null; net.md_5.bungee.api.chat.ClickEvent.Action action = net.md_5.bungee.api.chat.ClickEvent.Action.valueOf(clickEvent.getAction().name()); builder = builder.event(new net.md_5.bungee.api.chat.ClickEvent(action, clickEvent.getValue())); } } return this; } @Override public MessageEncoder event(HoverEvent hoverEvent) { if (BungeePerms.getInstance().getPlugin().isChatApiPresent()) { if (hoverEvent == null) { builder = builder.event((net.md_5.bungee.api.chat.HoverEvent) null); } else { cache = null; net.md_5.bungee.api.chat.HoverEvent.Action action = net.md_5.bungee.api.chat.HoverEvent.Action.valueOf(hoverEvent.getAction().name()); builder = builder.event(new net.md_5.bungee.api.chat.HoverEvent(action, convert(hoverEvent.getValue().create()))); } } return this; } @Override public BaseComponent[] create() { if (cache == null) { cache = builder.create(); } return convert(cache); } @Override public String toString() { String ret = ""; for (String s : list) { ret += s; } ret += current; return ret; } }