mod無しプラグインなしでマイクラ内で遊べる額縁のパズルゲームを作ったので解説と作り方を紹介します
回転させて向きを揃えるゲームです
統合版では出来ません
環境はjava 1.16.4 tuinity server forge導入済みですが1.13以降のバニラならいけます(多分)
淫夢要素はないです。
目次
遊び方

石のボタンを押すと額縁内のアイテムがランダムな方向を向きます

揃えたらメッセージが届きランキングと今の記録(record)が表示されます

準備
同じものを作る人はいないと思いますが参考程度にどうぞ
/scoreboard objectives add frame_puzzle
/scoreboard objectives add puzzle_record
スコアボードを作成してください
/scoreboard players set view frame_puzzle 1
初期値を指定します
/tag @e[limit=1,sort=nearest,tag=!frame_puzzle1,type=minecraft:item_frame] add frame_puzzle1
額縁を壁に貼ります
設置した後にコマンドを額縁の数だけ実行してください
近い場所から登録されていきます
コマンドブロックの解説
配置は自由ですが解説では上記画像の左上からいきます
特に何も指定がなければリピートは無条件 常時実行
チェーンは条件付き 常時実行です
例外関係1
リピートです
execute if score record puzzle_record matches ..10 if score flag frame_puzzle matches 1 unless entity @e[nbt=!{ItemRotation:0b},nbt=!{ItemRotation:4b},nbt=!{ItemRotation:-4b},type=minecraft:item_frame,tag=frame_puzzle1] run scoreboard players set flag frame_puzzle 0
10tick以下でクリアしたときになかったことにします
例外関係2
次はリピートです
execute if score flag frame_puzzle matches 1 run scoreboard players add record puzzle_record 1
もしスコア(frame_puzzle)のflagが1ならrecordを1増やします
flagが1ならプレイ中(ボタンを押してからクリアするまでの時間)であることを意味します
recordはクリアまでのtick数を計測します
結果のスコアを非表示にするタイマー
次はリピートと2連のチェーンです
execute if score view frame_puzzle matches 1.. run scoreboard players add view frame_puzzle 1
結果が表示されている(viewが1以上)なら結果のタイマー(view)を1増やす
execute if score view frame_puzzle matches 200.. run scoreboard players set view frame_puzzle 0
結果のタイマー(view)が200より大きいなら結果のタイマー(view)を0にする(要するに非表示)
scoreboard objectives setdisplay sidebar
結果のスコアボードを非表示にする
ランダムに額縁を回転
次はリピートと6連のチェーンです リピートは”動力が必要”です リピートにはボタンを付けてください
scoreboard players add @e[type=minecraft:item_frame,tag=frame_puzzle1,sort=random,limit=5] frame_puzzle 1
ランダムで抽出された額縁5つのスコア(frame_puzzle)を1増加させます
scoreboard players add @e[type=minecraft:item_frame,tag=frame_puzzle1,sort=random,limit=5] frame_puzzle 1
ランダムで抽出された額縁5つのスコア(frame_puzzle)を1増加させます よりランダムになるように1tickで2回実行させてます
execute at @e[tag=frame_puzzle1,type=minecraft:item_frame] store result entity @e[type=minecraft:item_frame,limit=1,sort=nearest] ItemRotation int 1 run scoreboard players get @e[type=minecraft:item_frame,sort=nearest,limit=1] frame_puzzle
スコア(frame_puzzle)を額縁のItemRotationに代入します
scoreboard players set flag frame_puzzle 1
スコア(frame_puzzle)のflagを1にします
この数値が1ならプレイ中(ボタンを押してからクリアするまで)であることを意味します
scoreboard players set record puzzle_record 0
puzzle_recordを0にします
puzzle_recordが0なら報酬のコマンドが実行されている事を意味します
scoreboard objectives setdisplay sidebar
サイドバーを非表示にします
クリア判定とクリア後の処理
次はリピートと7連のチェーンです
execute if score record puzzle_record matches 10.. if score flag frame_puzzle matches 1 unless entity @e[nbt=!{ItemRotation:0b},nbt=!{ItemRotation:4b},nbt=!{ItemRotation:-4b},type=minecraft:item_frame,tag=frame_puzzle1] run scoreboard players set flag frame_puzzle 0
もしプレイ開始から10tick以上経過していてかつ揃っているならスコア(frame_puzzle)のflagを0にします
この数値が0ならプレイしていない(ボタンを押してからクリアするまでの時間ではない)事であることを意味します
tellraw @p[sort=nearest,limit=1] {"text":"クリア!"}
クリアとささやきます
@pだとマルチプレイで問題があるかもしれませんが大したことはないです
scoreboard players set view frame_puzzle 1
viewを1にします
これが1以上ならスコアボードが表示されていることを意味します
scoreboard objectives setdisplay sidebar puzzle_record
スコアボード(puzzle_record)を表示します
scoreboard players set reward_flag frame_puzzle 1
puzzle_recordを1にします
puzzle_recordが1なら報酬のコマンドが実行されていることを意味します
execute unless score @p puzzle_record < record puzzle_record run scoreboard players operation @p puzzle_record = record puzzle_record
新記録ならpuzzle_recordの@p(近くのプレイヤー)に今回の記録を代入します
@pだとマルチプレイで問題があるかもしれませんが大したことはないです
tellraw @p {"text":"新記録!"}
新記録であることを通知します
@pだとマルチプレイで問題があるかもしれませんが大したことはないです
報酬関連のコマンド
次はリピートと4連のチェーンです
execute unless score reward_flag frame_puzzle matches 0 run scoreboard players set reward_flag frame_puzzle 0
puzzle_recordが0以外ならpuzzle_recordを0にします
puzzle_recordが0なら報酬のコマンドが実行されていないことを意味します
execute if score record puzzle_record matches ..100 run give @p minecraft:iron_ore 1
execute if score record puzzle_record matches ..90 run give @p minecraft:iron_ore 1
execute if score record puzzle_record matches ..80 run give @p minecraft:iron_ore 1
execute if score record puzzle_record matches ..70 run give @p minecraft:iron_ore 1
各自報酬コマンドです
100なら鉄鉱石1つ
90なら2つ 80なら3つ 70ならそれに追加してダイヤモンドがもらえます