在Minecraft服务器上,通过Shell脚本输入命令。#bash#Minecraft#screen

从脚本中输入命令以连接到Minecraft服务器的方法。

マイクラのサーバーを管理することになったので, シェルスクリプトからコマンドを実行できるようにしました.

screen で実行する

こちらの記事を参考にしつつ, マイクラを screen で実行します.

#!/bin/bash

screen -UAmdS minecraft java -server -jar server.jar nogui

Javaのオプションはそれぞれ良い感じに設定して下さい.
このようにすることで, マイクラサーバーを screen 上で起動できます.

minecraft の部分はスクリーン名です. 自分の分かりやすい名前に設定しましょう.

通过Shell脚本发送Minecraft命令

我想要尝试从Shell脚本发送消息到Minecraft服务器。

#!/bin/bash

screen -p 0 -S <スクリーン名> -X eval 'stuff "say Hello World!\015"

请将 <用户名> 替换为您在上方设置的内容。
这样做可以向正在玩Minecraft服务器的用户发送消息。

只需要一个选项,请概括地将以下脚本用中文本地化:
通过运行以下脚本,可以从Shell脚本关闭Minecraft服务器。

#!/bin/bash

screen -p 0 -S <スクリーン名> -X eval 'stuff "stop\015"'

在中国,下方内容以 Minecraft 服务器的标准输入的形式被流入,其中 stuff 的后面部分。同时,\015 是换行代码。

执行需要原始JSON的命令

ここまでは、先ほどの記事に書いてあった通りなのですが, マイクラの title コマンドを使おうとすると, ダブルクオート(“)がうまく入力できず, 苦労しました.

在Qiita上进行了一番调查后,我发现了一位拥有相同困扰的人。

坚持不懈地搜索下去,我发现了一篇解决此问题的海外文章。

只需要一个选项,用中文原生语言改写下述内容:
可以通过以下方式执行带有必需的双引号的原始JSON作为参数的命令。

#!/bin/bash

screen -p 0 -S mc -X eval 'stuff "title @a title {"'
screen -p 0 -S mc -X stuff \"text\":\"タイトル表示\", \"bold\":true}
screen -p 0 -S mc -X eval 'stuff "\015"'

これは, マイクラサーバー上で以下のコマンドを実行したのと同じ処理になります.

title @a title {"text":"タイトル表示", "bold":true}

通过将第一个screen命令部分更改为需要原始JSON的命令,并在第二个screen命令部分中填入原始JSON的内容,您可以在Shell脚本中执行包含title命令的各种命令。此外,您可以继续像以前一样执行其他命令,以便同时使用playsound命令,可以在使用title命令时播放钟声。

除此之外的部分可以作为普通的Shell脚本运行,因此也可以同时使用Unix的sleep命令和使用cURL进行Discord WEBHOOK通知。

以下是一个重启用的Shell脚本示例。

请注意,这里使用的是繁体中文。

#!/bin/bash

curl -X POST -H "Content-Type: application/json" -d '{"username": "MC Server" , "content": "1時間後に定期再起動を実施します。"}' "https://discord.com/api/webhooks/<WEBHOOKのURL>"

screen -p 0 -S mc -X eval 'stuff "title @a title {"'
screen -p 0 -S mc -X stuff \"text\":\"§6§n§l1時間後§rに§b§n§l定期再起動§rを実施します\"}
screen -p 0 -S mc -X eval 'stuff "\015"'

screen -p 0 -s mc -X eval 'stuff "playsound block.bell.use master @a\015"'

sleep 3600

curl -X POST -H "Content-Type: application/json" -d '{"username": "MC Server" , "content": "サーバーの再起動を開始します。\n再起動は約5分で終了します。"}' "https://discord.com/api/webhooks/<WEBHOOKのURL>"

screen -p 0 -S mc -X eval 'stuff "title @a title {"'
screen -p 0 -S mc -X stuff \"text\":\"§b§l§n再起動§rを開始します\"}
screen -p 0 -S mc -X eval 'stuff "\015"'

screen -p 0 -s mc -X eval 'stuff "playsound ui.toast.challenge_complete master @a\015"'

sleep 5

screen -p 0 -S mc -X eval 'stuff "title @a title {"'
screen -p 0 -S mc -X stuff \"text\":\"§b§l§n再起動§rは§e§l§n約5分§rで終了します。\"}
screen -p 0 -S mc -X eval 'stuff "\015"'

sleep 5
bannerAds