【C#, Minecraft】書き初め
あけましておめでとうございます。2021年もよろしくお願いします。
さて、お正月と言えば 書き初め ですね。ということで、新年初めての書き初め(と書いてプログラミングと読む)をしていきます。
実行環境
- Minecraft 1.16.3 (バニラ版, RCON設定済みサーバ)
お題
Minecraft で "Happy New Year!" を表示させるプログラムを書きます。
実装
マイクラの画面全体に文字を表示させるには /title
コマンドを使用します。サブタイトルも追加することもできますが、タイトルを表示する前に設定する必要があります。
/title <プレイヤー名など> subtitle "サブタイトル" /title <プレイヤー名など> title "タイトル"
これを RCON 経由で投げれば良いので簡単に実装できます。
class Program { static RCON rcon = new RCON(IPAddress.Parse("127.0.0.1"), 25575, "minecraft"); static void Main(string[] args) { Task.Run(async () => { await HNY(); }).GetAwaiter().GetResult(); } static async Task HNY() { string title = "Happy New Year!"; string sub = "- 2021 -"; await rcon.ConnectAsync(); await rcon.SendCommandAsync($"/title @a subtitle \"{sub}\" "); await rcon.SendCommandAsync($"/title @a title \"{title}\" "); } }
実行結果
Happy New Year!
実装その2
これだけだと面白くないので、花火も打ち上げていきましょう。
コマンドが複雑すぎて難しいので、花火を打ち上げるコマンドを生成するサイトにお世話になります。
ここで注意点が1つ。Minecraft 1.13 以降ではコマンドの送信座標が初期座標になるので、プレイヤーの目の前で花火を打ち上げる場合は F3
キーで座標を確認した後、~
(チルダ) 部分をその座標に置き換えてください。時間調整も Delay メソッドでできるので、いい感じに合わせたりしてみてください。
class Program { static RCON rcon = new RCON(IPAddress.Parse("127.0.0.1"), 25575, "minecraft"); static void Main(string[] args) { Task.Run(async () => { await HNY(); await Fireworks(); }).GetAwaiter().GetResult(); } //HNY() メソッド static async Task Fireworks() { List<string> firework = new List<string> { "/summon firework_rocket 380 100 718 {LifeTime:15,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:0,Trail:0,Colors:[I;3887386],FadeColors:[I;11743532]}]}}}}", "/summon firework_rocket 380 99 723 {LifeTime:15,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:0,Trail:0,Colors:[I;11743532,3887386],FadeColors:[I;11743532,4408131]}]}}}}", "/summon firework_rocket 380 99 713 {LifeTime:15,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:0,Trail:0,Colors:[I;2437522],FadeColors:[I;4312372]}]}}}}", "/summon firework_rocket 380 98 728 {LifeTime:15,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:0,Trail:0,Colors:[I;15790320],FadeColors:[I;14602026]}]}}}}", "/summon firework_rocket 380 100 708 {LifeTime:15,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:0,Trail:0,Colors:[I;15435844],FadeColors:[I;15790320]}]}}}}" }; await rcon.ConnectAsync(); for (int i = 0; i < 3; i++) { foreach (var item in firework) { await rcon.SendCommandAsync(item); await Task.Delay(100); } await Task.Delay(1000); } } }
実行結果その2
Happy New Year! (ヒューパァンパァン) (喜びの舞)
今回作ったコード
参考にどうぞ。