chore: made text component clickable links clickable in console

This commit is contained in:
Alexander Medvedev
2026-05-23 11:30:30 +02:00
parent 3303bb7b97
commit f19d84efef
2 changed files with 12 additions and 1 deletions

View File

@@ -102,6 +102,10 @@ impl TextComponentBase {
/// A formatted string ready for console output.
#[must_use]
pub fn to_pretty_console(self) -> String {
fn osc8_link(url: &str, text: &str) -> String {
format!("\x1b]8;;{url}\x1b\\{text}\x1b]8;;\x1b\\")
}
let mut text = match *self.content {
TextContent::Text { text } => text.into_owned(),
TextContent::Translate {
@@ -133,6 +137,13 @@ impl TextComponentBase {
if style.strikethrough.is_some() {
text = text.strikethrough().to_string();
}
if let Some(ClickEvent::OpenUrl { url }) = style.click_event.as_ref() {
text = osc8_link(url, &text);
}
if let Some(ClickEvent::OpenFile { path }) = style.click_event.as_ref() {
text = osc8_link(&format!("file://{path}"), &text);
}
for child in self.extra {
text += &*child.to_pretty_console();
}

View File

@@ -203,7 +203,7 @@ impl CommandExecutor for Executor {
.add_child(
TextComponent::text("[Donate]")
.click_event(ClickEvent::OpenUrl {
url: Cow::from("https://github.com/sponsors/Pumpkin-MC"),
url: Cow::from("https://pumpkinmc.org/donate/"),
})
.hover_event(HoverEvent::show_text(TextComponent::text(
"Click to open Donate",