์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? Component๋ Mojang ์ด๋ฆ์ด๋ฉฐ "Text"๋ผ๊ณ ๋ถ๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ํผ๋์ค๋ฌ์์ง๋๋ค.
public Text method_2164(int mouseX) {
if (message == null) {
return null;
}
int width = minecraft.textRenderer.getStringWidth(message.asFormattedString());
int x1 = this.width / 2 - width / 2;
int x2 = this.width / 2 + width / 2;
int x = x1;
if (mouseX < x1 || mouseX > x2) {
return null;
}
for (Text t : message) {
x += minecraft.textRenderer.getStringWidth(TextComponentUtil.getRenderChatMessage(t.asString(), false));
if (x > mouseX) {
return t;
}
}
return null;
}
๋นจ๋ฆฌ ๋ณด๋ฉด message
์ด ํ
์คํธ ๋ชฉ๋ก( ์ : ์ค)์ด๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง ์ค์ ๋ก ์ฝ๋๋ message
(์ผ๋ฐ ํ
์คํธ, ์คํ์ผ์ด ์ง์ ๋ ํ
์คํธ , ๋งํฌ ๋ฑ) ๋ง์ฐ์ค๊ฐ ๋๋ ๊ตฌ์ฑ ์์ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋๋ฌด ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์ Component์ ๋์ํ์ง ์์ต๋๋ค.
๋๋ ์ฌ์ ํ ๊ฐ๊ฒฐํจ๊ณผ ๋ช
ํ์ฑ์ ์ํด Text
์ ๋ํ ํ๋ ์ด์ด์ ์ ์์ ์ง์งํฉ๋๋ค. ๋ํ ๋ค๋ฅธ ๋ชจํธํ ์ฉ์ด(์: ์ปจํ
์ด๋ -> ๋ฉ๋ด ์ ์)์์ ๋ฉ์ด์ง๊ณ ์์ต๋๋ค.
๊ทํ์ ์์์ TextComponentUtil
ํด๋์ค์ ์ด๋ฆ์ TextRenderUtil
/ TextRenderHelper
๋ก, getRenderChatMessage
๋ฉ์๋๋ฅผ handleColor
๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ด๋ฆ ๋ฐ๊พธ๊ธฐ์ ๋ํ ๋ ๋์ ์๋ฃจ์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Text
ํด๋์ค.
๊ตฌ์ฑํ์ ๊ฐ๊ด์ ์ผ๋ก ๋ณ๋ก์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์์ญ ๋ฒ ๋ฐ๋ณตํ์ต๋๋ค. ๋ค์๋ ๋ค๋ฃจ์ง ์์ต๋๋ค.
๋ช ํ์ฑ๊ณผ ์ ์ฉ์ฑ์ Mojang๊ณผ์ ์ผ๊ด์ฑ๋ณด๋ค ํญ์ ์ฐ์ ๋์ด์ผ ํฉ๋๋ค. ํ์๋ ์์ผ๋ฉด ์ข์ง๋ง ๊ฒฐ์ฝ ์ ์๋ฅผ ํฌ์์ํค๋ฉด ์ ๋ฉ๋๋ค.
์ ๋ช ๋ ๋ฐ ์ฌ์ฉ์ฑ
๋ฌธ์ ๋ฅผ ์ฝ๊ธฐ๋ ํ์ต๋๊น? ๋ฌธ์ ๋ ํผ๋์ค๋ฝ์ต๋๋ค.
"๋ฉ์์ง ํ ์คํธ๋ฅผ ๋ฐ๋ณต"ํ๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์์ต๋๋ค. ๋ฉ์์ง์ ๊ตฌ์ฑ ์์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ Mojang ์ด๋ฆ์ ์ฌ์ฉํ๋ (์ํํธ) ์ ์ฑ ์ด ์์ต๋๋ค.
ํค์๋๋ ์ํํธ ์ ๋๋ค. ์ด๋ฆ์ด ์ดํดํ๊ธฐ ์ฝ๋๋ก ์ข์ง ์๋ค๊ณ ํ๋จ๋๋ฉด ์ฌ์ฉํ์ง ์์ต๋๋ค.
์์งํ ์ ๋ ๊ฐ์ธ์ ์ผ๋ก Text
๋ฅผ ์ด๋ฆ์ผ๋ก ์ ํํ์ง ์์ต๋๋ค. ์ฆ, Component
๋ณด๋ค ํจ์ฌ ๋ซ์ต๋๋ค. ๋ฌธ๋งฅ์ ์๋ฏธ๊ฐ ์๋ "์ผ๋ถ"์ ๋ํ ์ผ๋ฐ ์ด๋ฆ์ด ์๋๋ผ ์ค์ ๋ก (ํ
์คํธ)์ ์ฌ์ฉ๋๋ ๊ฒ์ ์ค๋ช
ํ๊ธฐ ๋๋ฌธ์
๋๋ค. TextComponent
๋ ์ข์ ์ค๊ฐ ์ง์ ์ด ๋ ์ ์์ง๋ง ์ด ์ปค๋ฎค๋ํฐ๋ฅผ ์๊ณ ์์ผ๋ฉด ๊ทธ๋ ๊ฒ ์ธ๊ธฐ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํค์๋๋ ์ํํธ์ ๋๋ค.
๋ฉ๋ด๋ ๋์ฐํ ์ด๋ฆ์ด๋ฉฐ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. (ํ ์คํธ)Component๋ ์ข์ ์ด๋ฆ์ด๊ณ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ด๋ค ๊ฒ์ด ๋น์ ์๊ฒ ๊ฐ์ฅ ์๋ฏธ๊ฐ ์๋์ง ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น?
for (Component component : message) {
for (Text text : message) {
๋๋ ํ ๋ฒ๋ ๋ฉ์์ง์ ๋ํด ๋ฐ๋ณต์ ์ฌ์ฉํ ์ ์ด ์์ผ๋ฉฐ ๋ง์ ๋ชจ๋๋ค๋ ๋ง์ฐฌ๊ฐ์ง์ผ ๊ฒ์ ๋๋ค. TextComponent๋ ๊ด์ฐฎ์ง๋ง Component๋ ์ฌ๋๋ค์ด ๋ชจ๋์์ ์ค์ ๋ก ์ฌ์ฉํ๋ 99.9%์ ์ฅ์์์ ๋ชจํธํ๊ณ ๋์์ด ๋์ง ์์ต๋๋ค.
"๋ฉ์์ง ํ ์คํธ๋ฅผ ๋ฐ๋ณต"ํ๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์์ต๋๋ค. ๋ฉ์์ง์ ๊ตฌ์ฑ ์์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด json ํ ์คํธ ๋๋ ์์ ์๋ ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
for (Component component : message) {
๋ฌธ์ ๋ ๋ฌธ์ ๊ฐ message
๊ฐ ์๋๋ผ๋ ๊ฒ์
๋๋ค. ๋์ siblings
์
๋๋ค. ์คํธ๋ฆผ์ ์ด๋ฌํ ๋ชจ๋ ํ์ ๋ถ๋ถ์ด ์๋ ์ฒซ ๋ฒ์งธ ํ
์คํธ๋ ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฒด ํ
์คํธ์
๋๋ค.
@Boundarybreaker Yarn์ ์ฌ์ฉํ๋ ๊ฒ์ ๋งคํํ์ง ์์ต๋๋ค.
TextComponent์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
Text์ TextComponent๋ฅผ ๋ชจ๋ ์ข์ํ์ง๋ง Component๊ฐ ๋๋ฌด ๋ชจํธํฉ๋๋ค.
Yarn์ ์ฌ๋๋ค์ด ๋ชจ๋๋ฅผ ๋ง๋ค ์ ์๋๋ก Minecraft ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ํ ์์คํ ์ด๋ฏ๋ก ์ฌ๋๋ค์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฅ์์ ์๊ฐ์ ์ฌ์ฉํ ์ด๋ฆ์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ํต์ฌ ์ ๋๋ค. ํด๋์ค์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ๋ํ ์ดํด ๊ฐ๋ฅ์ฑ์ ์ด๋ฆ์ด Mojang์ ๋ด๋ถ ์ด๋ฆ๋ณด๋ค ๋ ์ ํํ ๊ฒ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
Yarn์ ๋ฐ๋๋ผ ์ฝ๋์ ์๋ ๋ฐฉ์์ ์ดํดํ๋ ค๋ ์ฌ๋๋ค๋ ์ฌ์ฉํฉ๋๋ค.
ํด๋์ค์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ๋ํ ์ดํด ๊ฐ๋ฅ์ฑ์ ์ด๋ฆ์ด Mojang์ ๋ด๋ถ ์ด๋ฆ๋ณด๋ค ๋ ์ ํํ ๊ฒ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
๋ฌผ๋ก ์
๋๋ค. ํ์ง๋ง ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ชจ๋ ์ํํ๋ ์ด๋ฆ์ด ์์ต๋๋ค. TextComponent
์ด ์์ ์์ ์ฐ๋ฆฌ๋ ์ธ ๋ฒ์งธ๋ก ์ด ํด๋์ค์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ์ด์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ณ๊ฒฝํ๊ธฐ ์ํ ์ธ์:
Component
๊ฐ ์ ํํ์ง ์์ต๋๋ค. ํ
์คํธ๋ ์ค์ฒฉ๋ ์ ์์ผ๋ฉฐ, ์ ์์ ์ ์ฒด ๋ด์ฉ์ด์ด์ผ ํ๋ค๋ ๋ด์ฉ์ ์์ต๋๋ค.๋ณ๊ฒฝ์ ๋ํ ์ฃผ์ฅ:
Text
์ ๋ํด ๋ถํํ์ง ์์๋ค๋ ๊ฒ์
๋๋ค.์ฐ๋ฆฌ๋ ์ด๋ฏธ Discord์์ ์ด์ ๋ํด ๋ ผ์ํ์ผ๋ฏ๋ก ์ ์ ์์ ๋ค์ ๋ฐ๋ณตํ๊ฒ ์ต๋๋ค.
for (Fragment fragment : message)
๊ทธ๋ฆฌ๊ณ
for (TextFragment fragment : message)
์ด๊ฒ์ ๋ฉ์์ง๊ฐ ๋ฌด์์ธ์ง์ ๋ํ ๋ด๋ฌํฐ๋ธ์ ์ผ์นํฉ๋๋ค. ๋ชจ๋ ํ ์คํธ ์กฐ๊ฐ์ ์กฐ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ผ๋ฉฐ ๋ชจ๋ ํ ์คํธ๋ ๋ค๋ฅธ ํ ์คํธ ์กฐ๊ฐ์ผ๋ก ๋ถํ ๋ ์ ์์ต๋๋ค. ๋ํ ์ธ์ด์์๋ ๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ์ฒด ๋ฌธ์ฅ์ด ์๋ ํ ์คํธ ๋ถ๋ถ์ "๋จํธ"์ด๋ผ๊ณ ํฉ๋๋ค.
ํ๋๊ทธ๋จผํธ๋ ์กฐ๊ฐ ๋๋ ๋ถ๋ถ์ด๊ธฐ๋ ํฉ๋๋ค. ์ฆ _๋จํธํ_.
๋ํ์ _Fragment_๋ฅผ ๋ฃ๊ฑฐ๋ ํ ์คํธ์ _fragment_๋ก ๊ธฐ๋กํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ์ด์ง๋ฅผ ์ฐข์ด _fragments._๋ฅผ ๋ฒ๋ฆฌ์ญ์์ค.
์ด๊ฒ์ ๋ด๊ฐ Text
๊ฐ ๋ง์์ ๋ค์ง ์๋๋ค๋ ๊ฒ์ด ์๋๋ผ ๊ด์ฐฎ์ต๋๋ค. Text
์๋ TextFragment
์ ๋ชจ๋ ์ด์ ์ด ์์ผ๋ฉฐ ๋ ์งง์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๊ณ ๋ คํ๋ฉด TextFragment
, TextComponent
๋ณด๋ค _ํ์คํ_, Component
๋ณด๋ค _waaaaaaay_ ์ข์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ฐ๊พธ์ง ์์ ๊ฒ์ด๋ค.
TextFragment
์ TextComponent
๋ณด๋ค ์ฝ๊ฐ ๋ซ์ง๋ง Text ์ฒ๋ผ mojang ์ด๋ฆ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋๋ค. ๋๋ Text
๊ฐ ์ค์ ๋ก ๋ ์ค ๋ ์ฐ์ํ ์ต์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฆ์ TextTreeNode
๋ก ์ง์ ํฉ๋๋ค. ์ด๊ฒ์ด ๋์๊ณผ ๊ฐ์ฅ ๊ทผ์ ํ๊ฒ ์ผ์นํ๋ ์ด๋ฆ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
TextTreeNode setStyle(Style var1);
Style getStyle();
TextTreeNode addChild(String string_1);
TextTreeNode addChild(TextTreeNode var1);
String getContent(); // only self
String getString(); // whole tree, overrides brigadier message api, no format
String getString(int maxLength); // whole tree, truncated result possibly
String getFormattedString(); // whole tree
List<TextTreeNode> getChildren();
Stream<TextTreeNode> streamTree();
Stream<TextTreeNode> streamCopiedTreeNodes();
Iterator<TextTreeNode> treeIterator();
TextTreeNode copy(); // copy this node
TextTreeNode formattedDeepCopy(); // copy the whole tree with style
TextTreeNode format(Consumer<Style> consumer_1); // accept the style
TextTreeNode format(Formatting... formattings_1); // mutates the node
TextTreeNode format(Formatting formatting_1); // mutates the node
static TextTreeNode formattedCopy(TextTreeNode text_1); // copy this node with style
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ์ค์ ๋ก ํธ๋ฆฌ ๋
ธ๋์ด์ง๋ง ์ ์ฒด ํธ๋ฆฌ๋ฅผ ํ์ํ๋๋ก ์ ํ๋๋ ํด๋์ค๊ฐ ์์ผ๋ฏ๋ก ์ฌ์ ํ Text
๋ผ๋ ์ด๋ฆ์ ์ ์งํฉ๋๋ค.
์, ์ด์ ์ด ๋ ผ์์ ๋๋ผ ์๊ฐ์ ๋๋ค. ๋ฌธ์ ์ ๋ํ ๋ฐ๋์ ์ ๋๋ฅผ ๊ฐ์ํ ๋ ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๊ฒ ์ข ๋ฃํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
@liach ์ฌ๊ธฐ์ Discord์ ๋ํ ๋ง์ ์๊ฒฌ์ Text
๊ฐ ์ข์ ์ด๋ฆ์ด ์๋๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. TextComponent
๊ฐ ์๋๋ฉด ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค. ์๋ง๋ TextPiece
?
๋ค์์ ๋น๊ตํ์ญ์์ค.
์ ๋ฌธ์ ์ ํฌํํ์๊ฒ ์ต๋๊น? ๋ง์ธํฌ๋ํํธ ํ ์คํธ๋ ๋ณด๊ธฐ ํํ์ง๋ง ๋ง์ธํฌ๋ํํธ์๋ ํ ๊ฐ์ง ์ ํ์ ํ ์คํธ๋ง ์์ผ๋ฏ๋ก "ํ ์คํธ"๋ผ๋ ์ด๋ฆ์ด๋ฉด ์ถฉ๋ถํ์ง๋ง ๋ค๋ฅธ ๊ตฌ์ฑ ์์์ ์ ์ฌํ ํญ๋ชฉ(์: FoodComponent)์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ํ ๋ฒ๋ ๋ฉ์์ง์ ๋ํด ๋ฐ๋ณต์ ์ฌ์ฉํ ์ ์ด ์์ผ๋ฉฐ ๋ง์ ๋ชจ๋๋ค๋ ๋ง์ฐฌ๊ฐ์ง์ผ ๊ฒ์ ๋๋ค. TextComponent๋ ๊ด์ฐฎ์ง๋ง Component๋ ์ฌ๋๋ค์ด ๋ชจ๋์์ ์ค์ ๋ก ์ฌ์ฉํ๋ 99.9%์ ์ฅ์์์ ๋ชจํธํ๊ณ ๋์์ด ๋์ง ์์ต๋๋ค.