使用mcrcon通过StreamDeck在Minecraft服务器上执行特定命令

首先

我最近(2022/6/8)下载了Minecraft的1.19更新,所以我决定搭建一个新的服务器和朋友们一起玩。
在玩的过程中,我经常需要输入一些命令,比如“/time set day”或者“/weather clear”,每次停下来输入都很麻烦。
正好我注意到了眼前的StreamDeck,心想“如果可以通过一个按钮发送命令就方便了呢?”于是我进行了一番调查研究,发现Minecraft本身就有一个名为rcon的通信功能,只要进行设置,就可以从 Python 中控制它。
因此,我就尝试着做了一个StreamDeck。

環境

Minecraft server 方面

    • CentOS(さくらVPS)

 

    Minecraft server 1.19

客户端方或者客户端端

    • Windows 10

 

    Python 3.8.2

设备

    StreamDeck 15ボタン (https://www.elgato.com/ja/stream-deck)

概要

①サーバー側の設定
②プログラムの作成
③StreamDeckに適応

请配置服务器端设置。

将server.properties进行修改。

创建服务器时会生成server.properties文件,要修改该文件以启用rcon功能。
我认为已经建立服务器的人无需了解如何进行修改,因此我仅介绍需要修改的部分。

    まずrcon通信に利用するポート番号の指定
rcon.port=25575

如果您没有特别的要求,初始设置将保持为25575,可以继续使用。
由于通信将在此处设定的端口号上进行,请根据需要设置防火墙等,确保相应的端口开放。

    rcon通信時に必要なパスワードの設定
rcon.password= "任意のパスワード"

在初始设置中,默认值为”minecraft”或空白(?),请设置一个任意的密码,因为这个密码将来会需要。

    rconを有効にする
enable-rcon= True

将初始设置从False更改为True。

服务器的设置在以上结束了。

②プログラムの作成

本次我们将使用Python库mcrcon来进行rcon操作,因此需要进行安装。

pip install mcrcon

接下来我会写代码。

from mcrcon import MCRcon
server_address = "サーバーのIPアドレス"
server_pass = "任意のパスワード"  #server.propertiesで設定したパスワード
server_port= 25575    #server.propertiesで設定したポート番号
with MCRcon(server_address, server_pass, server_port) as mcr:
    mcr.command("/weather clear") #任意のコマンド

请写出你想要使用的任意命令。执行这个程序后,命令应该会被执行。

为了从StreamDeck使用,每个命令需要一个单独的exe文件,因此请准备一个已更改上述命令部分的.py文件,以满足我所需的命令数量。
这次我准备了两个文件,weather_clear.py用于将天气设置为晴朗,time_set_day.py用于将时间设置为中午。

适用于StreamDeck

StreamDeckに最初から搭載されている任意のアプリを開くプラグイン(【システム】→【開く】)は.pyファイルには対応していないため、pyinstallerを用いてpyファイルをexeファイルに変換します。

pip install pyinstaller

在终端上,切换到刚才创建的py文件所在的文件夹。

pyinstaller weather_clear.py --onefire
unknown.png

请从右侧插件选择【系统】→【打开】,然后在屏幕底部的应用/文件部分选择先前生成的exe文件。

作業已经完成,请按下刚刚创建的按钮发送命令到服务器并执行,敬请确认。

我参考了一篇文章。

    • mcrconを利用してpythonからminecraftサーバにコマンドを出力する

 

    Python – pyinstallerの使い方

最終的( de)

在设置这个环境之前,作为服务器主人的我只能在游戏进行中或控制台操作时才能输入指令,而且即使在能够输入指令的情况下,也需要中断游戏并输入指令,增加了一些麻烦。
然而,现在通过StreamDeck的一个按钮就能发送指令,只要在电脑前面就能执行,而且只需按下物理按钮,几乎不会中断工作,因此可以在操作服务器的同时大大提高了生活的质量。

广告
将在 10 秒后关闭
bannerAds