なぜこれが改名されたのですか? コンポーネントはMojangの名前であり、単に「テキスト」と呼ぶと、次のようなコードが混乱します。
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
のさまざまなコンポーネント(プレーンテキスト、スタイル付きテキスト)を繰り返し処理しています。 、リンクなど)を使用して、マウスが置かれているコンポーネントを取得します。
なぜこれが改名されたのですか?
コンポーネントは一般的すぎるため、同意しません。
私は、その簡潔さと明快さのために、 Text
に対するプレイヤーの提案を今でも支持しています。 さらに、他のそのようなあいまいな用語から離れています(例:コンテナ->メニューの提案)
あなたの例では、 TextComponentUtil
クラスの名前をTextRenderUtil
/ TextRenderHelper
に変更し、そのgetRenderChatMessage
メソッドの名前をhandleColor
に変更する方が良い解決策だと思います。 Text
クラス。
コンポーネントは客観的に吸います。 私たちはこれを十数回繰り返しました。 二度とそれを乗り越えることはありません。
明瞭さと使いやすさは、常にMojangとの一貫性よりも優先されるべきです。 後者は持っているのはいいですが、前者を犠牲にして決してありません。
明瞭さと使いやすさ
あなたもその問題を読んだことがありますか? 問題はそれが混乱しているということです。
「メッセージのテキストを繰り返す」ことは意味がありません。 メッセージのコンポーネントを反復処理することは理にかなっています。
Mojangの名前を私たちが知っている場所で使用するという(ソフトな)ポリシーがあります
キーワードはソフトです。 名前がわかりにくいと判断した場合は使用しません。
正直なところ、私も個人的にはText
を名前として選びませんでした。 とは言うものの、それはComponent
よりもはるかに優れています。なぜなら、文脈から意味をなさない「何かの一部」の総称ではなく、実際に(テキスト)に使用されるものを説明しているからです。 TextComponent
は良い中間点になるでしょうが、このコミュニティを知っていると、それが必ずしも人気になるとは限らないと思います。
キーワードはソフトです。
メニューはひどい名前で、あなたはそれを使いたいです。 (Text)Componentは適切な名前であり、使用したくありません。
どちらがあなたにとって最も理にかなっているのか教えていただけますか?
for (Component component : message) {
for (Text text : message) {
私は一度もメッセージに対して反復を使用したことがなく、多くのmodderも使用しているとは思えません。 私はTextComponentで大丈夫ですが、Componentはあいまいで、人々が実際にModで使用する場所の99.9%では役に立ちません。
「メッセージのテキストを繰り返す」ことは意味がありません。 メッセージのコンポーネントを反復処理することは理にかなっています。
その場合、jsonテキストまたはリッチテキストを繰り返すことは理にかなっています。
for (Component component : message) {
問題は、物事がmessage
ではないということです。 代わりにsiblings
です。 ストリーム内のこれらすべてのサブパートを含む最初のテキストは、実際にはメモリ内のテキスト全体です。
@Boundarybreaker Yarnは、使用するものをマップするだけではありません。
TextComponentにも問題はありません。
TextとTextComponentの両方が好きですが、Componentがあいまいすぎます。
Yarnは、人々がmodを作成できるようにするためのMinecraftコードを理解するためのシステムです。したがって、人々がクラスを使用する場所とタイミングは、使用する名前を決定する方法の鍵となります。 クラスの最も一般的な使用法の理解度は、Mojangの内部名よりも正確な名前よりも優先されます。
ヤーンは、バニラコードがどのように機能するかを理解したい人にも使用されます。
クラスの最も一般的な使用法の理解度は、Mojangの内部名よりも正確な名前よりも優先されます。
もちろんですが、両方を行う名前があります: TextComponent
この時点で、このクラスの名前を3回変更することの利点を実際に検討する必要があります。
それを変更するための引数:
Component
も同様に不正確になります。 テキストはネストすることができますが、その定義には、完全なものでなければならないことを示すものはありません。それを変更することに反対する議論:
Text
について不満を言っていません。これについてはDiscordですでに説明したので、提案を繰り返します。
for (Fragment fragment : message)
と
for (TextFragment fragment : message)
これは、メッセージが何であるかという物語と一致します。 テキストのどの部分もフラグメントと見なすことができ、テキストは他のテキストのフラグメントに分割できます。 また、言語では、それ自体が完全な文ではないテキストのセグメントは、フレーズではないにしても、「フラグメント」と呼ばれます。
フラグメントは、ピースまたはパーツ、シャードでもあります。 つまり、_Fragmentation_。
会話の_断片_を聞くか、テキストの_断片_として書き留めることができます。 次に、ページを破棄して、_fragments._を破棄します。
これは、私がText
が好きではないと言っているわけではありません、私はそれで大丈夫です。 Text
には、 TextFragment
のすべての利点があり、さらに短くなります。 考慮されるすべてのものは、 TextFragment
と同じくらい良く、 TextComponent
よりも_間違いなく_良く、 Component
よりも_waaaaaaay_優れています。 私はそれを変えません。
TextFragment
はTextComponent
よりもわずかに優れていますが、テキストのようにmojangの名前からはほど遠いです。 Text
は確かに2つの優れたオプションだと思います。
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
?
これらを比較してください:
新しい問題に投票する気ですか? Minecraftのテキストは醜いですが、Minecraftには1種類のテキストしかないので、「text」という名前で十分ですが、他のコンポーネントのようなもの(FoodComponentなど)もあります。
最も参考になるコメント
私は一度もメッセージに対して反復を使用したことがなく、多くのmodderも使用しているとは思えません。 私はTextComponentで大丈夫ですが、Componentはあいまいで、人々が実際にModで使用する場所の99.9%では役に立ちません。