0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Minecraft JE DataPack] ["配列"]ってめちゃ使えるんだぜ。

Posted at

初めに

どうも。
そろそろ記事を書かないとコマンドをやっているということを忘れられそうなので書きます。

本題

配列ってなんなのさ?

みなさん、変数ってもちろん知ってますよね。
それに、っつぅもんがありまして。
例えば...

  • int
    • 整数のみ使えます
  • float
    • 少数が使えます
  • string
    • 文字列が使えます
  • List
    • 今回の記事で言っている配列のことです

っとまぁいろいろな型があります。(これで全部ではないですが...)
今回のその中のListの便利さを解説するっていうことですね。
では、さっそく見ていきましょうか!

data modify storage test: Test set value ["apple", "orange", "grape"]

こんな感じです。
例えば、この中の"apple"というデータを見たければ...

data get storage test: Test[0]
# => apple

こうですね。
これは「Testという配列の先頭に入っているデータを取得する。」ということですね。なので...

data get storage test: Test[1]
# => orange

こうなります。
...え?先頭は[1]じゃないのかって?(勝手に質問を作りだす。)
そうなんです。実はこの...Indexって言うんですけど、これは先頭を指定するのが1ではなく0なんですよね大体のプログラムがそうなんです。自分も最初は疑問でしたが。
まぁ...慣れですね。

どうやって使うのさ?

下のコードは、ゾンビを倒したときに報酬が貰えるというものです。

#> test:killed_a_zombie
#
# ゾンビを倒したぞ!
#
# @within advancement test:killed_a_zombie

# データを取得
data modify storage test: reward.Item from storage test: reward.List[0]
# test: reward.List => ["iron_ingot", "diamond", "emerald"]
# test: reward.Item => "iron_ingot"

# アイテムを渡すマクロ
function test:get_reward.m with storage test: reward

# 不要データ削除
data remove storage test: reward_item[0]
# => [diamond, emerald]

まず、このファイルはadvancementにより、ゾンビを倒したときに呼び出されます。
reward.List内には報酬となるアイテムの名前が格納されており鉄のインゴット、ダイヤモンド、エメラルドの順に入っています。
まず、reward.Item内にreward.List[0]をコピーします。
そうすることにより、reward.Item内にはiron_ingotが入ります。
次に、アイテムを取得するマクロです。その中身はこれ!

#> test:get_reward.m
#
# 報酬を取得
#
# @within function test:killed_a_zombie

$give @s $(Item)

こうすることにより、reward.Itemに格納されているアイテム名からアイテムを取得できます。
最後に!reward.List[0]を消去します。
何故消去するのかというと...このままだとreward.List[0]にはずっと"iron_ingot"が残ってしまうから!
次にゾンビを倒しても鉄のインゴットしか手に入らないということになってしまいます。
ダイヤモンドを手に入れるためには、"diamond"を配列の先頭に持ってこないといけません。
そして、現在先頭のデータ"iron_ingot"を消去することにより、隣にある"diamond"が先頭に移動します。
2回目のゾンビ討伐をした際、"diamond"は先頭に来るので、2回目にreward.Itemに入ってくるデータは"diamond"ということになり、手に入れることのできるアイテムはダイヤモンドになります。
では問題です!三回目のゾンビ討伐では一体、何が貰えるでしょうか?

答え

正解は、エメラルドです!
2回目で"diamond"が消去されることにより、その隣の"emerald"が先頭に来るためですね!

ちなみに、これをループさせたい場合はこのコードを付け足せばいいです!

# 今回もらったデータを配列の一番後ろに追加する。
data modify storage test: reward.List append from storage test: reward.Item

こうすることで、
四回目は鉄、五回目はダイヤモンド、六回目はエメラルド...
という風になります!

おわり

さて、皆さん。どうでしたか?
ちょっと長ったらしい説明ですね。自分で読んでてあきちゃいますよ。
配列は、色々足りな過ぎるmcfunctionでものすごくありがたみを感じる物です。できることが広がりますからね!
前回解説した、再帰と組み合わせると、とっても面白いことが出来るので、どうぞそちらも読んで...(宣伝)

再帰の解説

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?