Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] 16進カラーをTextComponentに適応できないバグを修正 #211

Merged
merged 1 commit into from
Sep 15, 2020
Merged

Conversation

LazyGon
Copy link
Contributor

@LazyGon LazyGon commented Sep 14, 2020

new TextComponent(String str) は引数を解析せずそのまま格納するだけなので、プレイヤーに送信するときも § のまま送信されます。
つまり、例えば #123456 はLunaChat側で §x§1§2§3§4§5§6 に変換されますが、これはクライアント側で §6 と解釈されます。
それに対して TextComponent.fromLegacyText(String str) は、ちゃんと文字列に含まれる § を解析して適当な色を setColor してくれます。これは、クライアント側でしっかりjsonメッセージとして解釈され、適切な色になります。
なので、こちらに置き換えました。

ちなみに、 §x§1§1§1§1§1§1 のような表現がクライアント側でうまく変換されないのは、この表現がvanillaのものではなくspigot由来のためだそうで。
vanillaではjsonメッセージ以外では16進カラーに対応していないらしいです。

@LazyGon
Copy link
Contributor Author

LazyGon commented Sep 14, 2020

あと、コンソールに表示されるメッセージも直した問題と全く同様に、こんな感じに一番最後の § の色が適応されますが、こっちそう簡単には治せなさそうです。
そもそも16進カラーに対応してるターミナルがそんなになさそうですし。
苦肉の策として、もういっそ16進カラーは全部そのまま #111111 みたいに表示すれば、統一感がでそうな気はします。

(上の画像のチャンネル名と名前の色は #123456

P.S. このコンソールも同様にバグってる問題については、治そうとしたらPR一つに対して変更範囲が大きくなりすぎるんじゃないかと思ったので手を付けていません。

Copy link
Owner

@ucchyocean ucchyocean left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRありがとうございます。
なぜか、全行差分になっちゃっています。
たぶん、改行コードが変わってしまっているためだと思います。
直すことは可能ですか?

@LazyGon
Copy link
Contributor Author

LazyGon commented Sep 15, 2020

な、直せない...。
ちょっと調べてみます。

@LazyGon
Copy link
Contributor Author

LazyGon commented Sep 15, 2020

CRLFにしたら上手く行きました。

@LazyGon LazyGon requested a review from ucchyocean September 15, 2020 05:44
@LazyGon
Copy link
Contributor Author

LazyGon commented Sep 15, 2020

最初に書くべきことでしたが、このバグが具体的に影響を及ぼすのを再現するなら

  • 発言先チャンネルフォーマットに %username または %displayname を含める
  • Essentials を導入してnickコマンドでニックネームを変更することで、 getDisplayName() の結果に16進数カラーを入れる
  • 発言する

という手順でできると思います。
明らかに置換された %username の16進数カラーが、そのカラーの一番最後の § の色になってしまうのでわかりやすいかと。

私はBungee環境で実験しましたが、コード的にはSpigotのみでも同じことが起きそうな気がしますね。

@ucchyocean ucchyocean merged commit 1e384e9 into ucchyocean:master Sep 15, 2020
@ucchyocean
Copy link
Owner

ご対応ありがとうございます。
問題の現象についても、動作検証して再現できて、PRの内容で修正できることも確認できたので、ソースコードをマージさせてもらいます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants