Yarn: Teks -> Komponen Teks

Dibuat pada 26 Agu 2019  ·  23Komentar  ·  Sumber: FabricMC/yarn

Mengapa ini diganti namanya? Komponen adalah nama Mojang, dan menyebutnya hanya "Teks" membuat kode seperti ini membingungkan:

    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;
    }

Melihatnya dengan cepat, Anda mungkin berpikir bahwa message adalah daftar teks (misalnya baris), tetapi sebenarnya, kode tersebut berulang melalui berbagai komponen message (teks biasa, teks bergaya , link, dll.) untuk mendapatkan komponen mouse over.

discussion refactor

Komentar yang paling membantu

Saya tidak pernah SEKALI menggunakan iterasi atas pesan, dan saya ragu banyak modder juga melakukannya. Saya baik-baik saja dengan TextComponent tetapi Component tidak jelas dan tidak membantu untuk 99,9% tempat orang benar- benar menggunakannya dalam mod.

Semua 23 komentar

Mengapa ini diganti namanya?

737 #650

Saya tidak setuju dengan Component karena terlalu umum.

Saya masih menjunjung tinggi saran pemain untuk Text karena singkat dan jelas. Selain itu, kami beralih dari istilah ambigu lainnya (misalnya Container -> Menu proposal)

Dalam contoh Anda, saya yakin mengganti nama kelas TextComponentUtil menjadi TextRenderUtil / TextRenderHelper dan metode getRenderChatMessage menjadi handleColor adalah solusi yang lebih baik untuk mengganti nama Text kelas.

Komponen secara objektif menyebalkan. Kami membahas ini belasan kali. Kami tidak akan membahasnya lagi.

Kejelasan dan kegunaan harus selalu didahulukan di atas konsistensi dengan Mojang. Yang terakhir bagus untuk dimiliki, tetapi tidak pernah , dengan mengorbankan yang pertama.

Kejelasan dan kegunaan

Apakah Anda bahkan membaca masalah? Masalahnya adalah bahwa itu membingungkan.

Tidak masuk akal untuk "mengulangi teks pesan". Masuk akal untuk beralih melalui komponen pesan.

ada kebijakan (lunak) menggunakan nama Mojang di mana kita mengenalnya

kata kuncinya lembut . Jika kami memutuskan bahwa sebuah nama buruk untuk dimengerti, kami tidak akan menggunakannya.

Sejujurnya, saya pribadi juga tidak akan memilih Text sebagai namanya. Yang mengatakan, itu jauh lebih baik daripada Component , karena itu benar-benar menggambarkan apa yang digunakan untuk (teks) daripada menjadi nama umum untuk "sepotong sesuatu" yang tidak masuk akal di luar konteks. TextComponent akan menjadi jalan tengah yang bagus, tapi saya rasa itu tidak akan menjadi populer mengetahui komunitas ini.

kata kuncinya lembut.

Menu adalah nama yang buruk dan Anda ingin menggunakannya. (Teks) Komponen adalah nama yang bagus dan Anda tidak ingin menggunakannya.

Bisakah Anda memberi tahu saya mana yang paling masuk akal bagi Anda?

  • for (Component component : message) {
  • for (Text text : message) {

Saya tidak pernah SEKALI menggunakan iterasi atas pesan, dan saya ragu banyak modder juga melakukannya. Saya baik-baik saja dengan TextComponent tetapi Component tidak jelas dan tidak membantu untuk 99,9% tempat orang benar- benar menggunakannya dalam mod.

Tidak masuk akal untuk "mengulangi teks pesan". Masuk akal untuk beralih melalui komponen pesan.

Iterasi melalui teks json atau teks kaya masuk akal.

for (Component component : message) {
Masalahnya adalah benda itu bukan message ; itu adalah siblings sebagai gantinya. Teks pertama dengan semua subbagian ini dalam aliran memang merupakan keseluruhan teks dalam memori.

@Boundarybreaker Benang tidak hanya memetakan apa yang Anda gunakan.

Saya juga tidak punya masalah dengan TextComponent.

Saya suka Text dan TextComponent, tetapi Component terlalu kabur.

Benang adalah sistem untuk memahami kode Minecraft agar orang dapat membuat mod, jadi di mana dan kapan orang menggunakan kelas adalah kunci bagaimana kita harus memutuskan nama apa yang akan digunakan. Pemahaman untuk penggunaan paling umum dari sebuah kelas memiliki prioritas yang lebih tinggi daripada nama yang lebih akurat daripada nama internal Mojang.

Benang juga digunakan oleh orang-orang yang ingin memahami cara kerja kode vanilla.

Pemahaman untuk penggunaan paling umum dari sebuah kelas memiliki prioritas yang lebih tinggi daripada nama yang lebih akurat daripada nama internal Mojang.

Tentu, tapi ada nama yang melakukan keduanya: TextComponent

Pada titik ini kita benar-benar harus mempertimbangkan manfaat mengubah nama kelas ini untuk ketiga kalinya.
Argumen untuk mengubahnya:

  • Sedikit lebih dekat dengan nama mojang. Mengapa ini poin yang bagus? Itu bahkan bukan nama sebenarnya jadi mengapa repot-repot?
  • Itu membuatnya lebih jelas bahwa itu tidak selalu merupakan teks lengkap. Apakah ini diperlukan? Sebagian besar waktu mereka benar-benar digunakan sebagai teks lengkap, membuat Component sama tidak akuratnya. Teks dapat bersarang, tidak ada dalam definisinya yang menyatakan bahwa itu harus menjadi hal yang lengkap.
  • Itu membuat perilaku Gaya lebih jelas. Ini adalah poin yang bagus, dan ini dapat diselesaikan dengan mengubah nama metode penataan gaya individu daripada nama seluruh kelas.

Argumen menentang perubahan itu:

  • Teks lebih pendek daripada alternatif apa pun. Mengingat seberapa sering kelas ini digunakan, saya pikir itu penting.
  • Nama kelas ini sudah terlalu sering diubah. Tidak peduli apa yang kita atur, telah ditunjukkan bahwa beberapa orang akan mengeluh. Cukup banyak orang yang berpikir bahwa nama benang berubah sepanjang waktu tanpa alasan; Anda harus membuktikan bahwa nama saat ini sebenarnya menghambat pengembangan dan bahwa mengubahnya akan menyelesaikan setiap masalah. Pengamatan pribadi saya adalah bahwa tidak ada yang mengeluh tentang Text dalam konteks pengembangan reguler.

Kami sudah membahas ini di Discord, jadi saya akan mengulangi saran saya:

for (Fragment fragment : message)

Dan

for (TextFragment fragment : message)

Ini sesuai dengan narasi tentang apa itu pesan. Setiap bagian Teks dapat dianggap sebagai fragmen, dan Teks apa pun dapat dipecah menjadi fragmen teks lainnya. Juga dalam bahasa, segmen teks yang bukan merupakan kalimat lengkap, jika bukan frasa, disebut "fragmen".

Fragmen juga merupakan bagian, atau bagian, pecahan. yaitu _Fragmentasi_.

Anda dapat mendengar _Fragmen_ percakapan, atau menuliskannya sebagai _fragmen_ teks. Kemudian sobek halaman dan buang _fragments._

Ini bukan berarti saya tidak suka Text , saya baik-baik saja dengan itu. Text memiliki semua manfaat TextFragment dan bahkan lebih pendek. Semua hal dipertimbangkan, sama baiknya dengan TextFragment , _definitely_ lebih baik dari TextComponent dan _waaaaaaay_ lebih baik dari sekedar Component . Saya tidak akan mengubahnya.

TextFragment sedikit lebih baik daripada TextComponent , tetapi jauh dari nama mojang sebagai Teks. Saya pikir Text memang pilihan yang lebih baik dari keduanya.

Saya akan menamakannya TextTreeNode karena ini adalah nama yang paling cocok dengan perilakunya.

   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

Tetapi meskipun mereka memang merupakan simpul pohon, kami tidak memiliki kelas yang dibatasi untuk menampilkan seluruh pohon, oleh karena itu saya tetap menjunjung nama Text .

Oke, saatnya untuk mengakhiri argumen ini. Saya berasumsi kita dapat dengan aman menutup masalah ini mengingat banyaknya penolakan dari masalah ini

@liach Banyak komentar di sini dan Discord setuju bahwa Text bukanlah nama yang bagus. Jika bukan TextComponent , itu harus diganti namanya menjadi sesuatu yang lain. Mungkin TextPiece ?

Bandingkan ini:

  • Saya mengulangi teks-teks yang membentuk teks ini.
  • Saya mengulangi potongan-potongan teks yang membentuk potongan teks ini.

Keberatan membuat suara dalam edisi baru? Meskipun teks minecraft jelek, tetapi hanya ada satu jenis teks di minecraft, jadi saya akan mengatakan nama "teks" sudah cukup, sementara ada hal-hal seperti komponen lainnya (mis.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

Sollace picture Sollace  ·  5Komentar

quat1024 picture quat1024  ·  6Komentar

asiekierka picture asiekierka  ·  3Komentar

enbrain picture enbrain  ·  4Komentar

Runemoro picture Runemoro  ·  3Komentar