Yarn: ํ…์ŠคํŠธ -> TextComponent

์— ๋งŒ๋“  2019๋…„ 08์›” 26์ผ  ยท  23์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: FabricMC/yarn

์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 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 (์ผ๋ฐ˜ ํ…์ŠคํŠธ, ์Šคํƒ€์ผ์ด ์ง€์ •๋œ ํ…์ŠคํŠธ , ๋งํฌ ๋“ฑ) ๋งˆ์šฐ์Šค๊ฐ€ ๋๋‚œ ๊ตฌ์„ฑ ์š”์†Œ ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

discussion refactor

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ํ•œ ๋ฒˆ๋„ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์„ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์œผ๋ฉฐ ๋งŽ์€ ๋ชจ๋”๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. TextComponent๋Š” ๊ดœ์ฐฎ์ง€๋งŒ Component๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ชจ๋“œ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” 99.9%์˜ ์žฅ์†Œ์—์„œ ๋ชจํ˜ธํ•˜๊ณ  ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  23 ๋Œ“๊ธ€

์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

737 #650

๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์— 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

์ด ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ์„ธ ๋ฒˆ์งธ๋กœ ์ด ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ˆ˜:

  • mojang์˜ ์ด๋ฆ„์— ์•ฝ๊ฐ„ ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ข‹์€ ์ ์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‹ค๋ช…๋„ ์•„๋‹Œ๋ฐ ์™œ ๊ท€์ฐฎ์•„?
  • ํ•ญ์ƒ ์ „์ฒด ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•„์ˆ˜์ž…๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ์ „์ฒด ํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ Component ๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋Š” ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •์˜์— ์ „์ฒด ๋‚ด์šฉ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์€ ์—†์Šต๋‹ˆ๋‹ค.
  • Style์˜ ๋™์ž‘์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ข‹์€ ์ ์ด๋ฉฐ, ์ „์ฒด ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ์•„๋‹Œ ๊ฐœ๋ณ„ ์Šคํƒ€์ผ๋ง ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ฃผ์žฅ:

  • ํ…์ŠคํŠธ๋Š” ์–ด๋–ค ๋Œ€์•ˆ๋ณด๋‹ค ์งง์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š”์ง€ ๊ณ ๋ คํ•  ๋•Œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ์ด๋ฏธ ๋„ˆ๋ฌด ๋งŽ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ๊ฒƒ๊ณผ ์ƒ๊ด€์—†์ด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ๋ถˆํ‰ํ•  ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‹ค ์ด๋ฆ„์ด ์•„๋ฌด ์ด์œ  ์—†์ด ํ•ญ์ƒ ๋ณ€๊ฒฝ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋ฆ„์ด ์‹ค์ œ๋กœ ๊ฐœ๋ฐœ์„ ๋ฐฉํ•ดํ•˜๊ณ  ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ์„ ์ฆ๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ฐœ์ธ์ ์ธ ๊ด€์ฐฐ์€ ์•„๋ฌด๋„ ์ •๊ทœ ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ์—์„œ 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)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰