package tc.oc.commons.bukkit.chat; import java.util.Collection; import javax.inject.Inject; import com.google.common.reflect.TypeParameter; import com.google.inject.TypeLiteral; import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import tc.oc.commons.core.reflect.Types; import static com.google.common.base.Preconditions.checkState; /** * @Inject a {@link ComponentRenderContext} */ @Deprecated public class ComponentRenderers { @Inject static ComponentRenderContext renderer; private ComponentRenderers() {} private static ComponentRenderContext renderer() { checkState(renderer != null, ComponentRenderContext.class + " not initialized"); return renderer; } public static BaseComponent render(BaseComponent component, CommandSender viewer) { return renderer().render(component, viewer); } public static void send(Player viewer, BaseComponent component) { viewer.sendMessage(render(component, viewer)); } public static void send(Player viewer, Collection<? extends BaseComponent> components) { for(BaseComponent component : components) { viewer.sendMessage(render(component, viewer)); } } // TODO: when CommandSender has component support... public static void send(CommandSender viewer, BaseComponent component) { if(viewer instanceof Player) { send((Player) viewer, component); } else { viewer.sendMessage(render(component, viewer)); } } public static void send(CommandSender viewer, Collection<? extends BaseComponent> components) { if(viewer instanceof Player) { send((Player) viewer, components); } else { for(BaseComponent component : components) { viewer.sendMessage(render(component, viewer)); } } } /** * Convert to legacy text. Just calls {@link BaseComponent#toLegacyText} for now, * but we may have to replace that at some point due to its dependence on the parent field. */ public static String toLegacyText(BaseComponent component, CommandSender viewer) { return render(component, viewer).toLegacyText(); } /** * Return a {@link TypeLiteral} describing the required renderer type for the given component type */ public static <T extends BaseComponent> TypeLiteral<ComponentRenderer<? super T>> rendererType(Class<T> componentType) { return Types.resolve(new TypeLiteral<ComponentRenderer<? super T>>(){}, new TypeParameter<T>(){}, componentType); } }