0コメント

【Bukkit】プラグインでプレイヤーのスコアボードのスコアを取得したい。【Java】

マイクラ内で変数のように扱い、条件等に引っ掛けてコマンドを実行することもできる「スコアボード」。これをプラグインで取得・変更できるようにしたい。

という訳で、ネットでたどり着いたコードがこれ。

スクリーンショット 2021-11-07 181301.png

ちなみにOBJECTIVE_NAMEにはスコアボード名が入っている。今回の場合は"MagicPoint"だ。

しかし、Objective型からgetScore(プレイヤー)することがどうやら非推奨にされているらしい。

それについても調べていたところ、
Scoreboard型のデータの取得でScoreboardManagerを使わずとも、エンティティ一体のみのスコアを取得するだけならば(?)、エンティティ.getScoreboard()でスコアボード型のデータを取得すればOKのようだ。

で、現時点でこんな感じ
スクリーンショット 2021-11-07 181834.png
※pはプレイヤーを指す
※objective.getScoreで取得できるデータはあくまでScore形でint型にキャストすることも出来ないので、getScoreして取得したScore形のデータにさらにgetScoreする必要がある。

スクリーンショット 2021-11-07 182008.png

一応スコアは取得できたし、objective.getScore(p).setScore(int型);でスコアボードのデータを書き換えることも可能なようだが・・・

objective型からgetScoreでScore形のデータを取得するのが非推奨は乃は何故だろう・・・

リファレンスには「Scoreboards can contain entries that aren't player(プレイヤー以外のエンティティも含める事が出来る)」と記述してある。

別にプレイヤー以外で使うつもりもないし、良いような・・・まあこの書き方で動作には問題ないが、じゃあプレイヤーのスコアボードだけ取得するときは皆はどういう書き方をしているんだと。

と、ここでこんな情報を見つけた(https://www.spigotmc.org/threads/getscore-deprecated.193902/
「getScore(Player / OfflinePlayer) is deprecated. getScore(String) is not. Remember to look at your parameter types」
getScore(player型)は非推奨だがgetScore(String型)はそうではない、と。

(;^ω^)・・・?

つまり、エンティティの名前でヤレ!ってこと?コマンドのように?

試しに引数をp.getDisplayName()で取得した名前(String型)で試してみる

スクリーンショット 2021-11-07 183607.png

普通に行けた。

オブジェクト名の指定でもString型を使っているから単純に統一したかっただけ・・・?

ちなみにスコアボードのデータ、今回の場合をコマンドで表すとこうなる。
「/scoreboard players get "nekoyama_cmd" MagicPoint」。
scoreboard players get プレイヤー名 オブジェクト名

あくまでコマンドに準拠した形になっているのかな。

よ~わからんけど。

ちなみに、Entity型も引数として使えるんだけど、こっちも非推奨になった。しかしこっちは固体名とかdisplayNameがあるわけじゃないので、おそらくUUIDを取得してそれを文字列として引数に使うことでスコアを取得できるのだろう。

謎の非推奨でちょっと悩んだというお話。以上。
0

この記事へのコメント