「通过Deep Learning生成随机文本来驱动Minecraft的质询攻击mod」
借助深度学习的力量,在玩我的世界游戏时,我制作了一个可以读出与游戏相关的文本的软件。
真实玩耍的视频
由于整合为一篇文章很困难,我将分成几篇文章。
在这里,我将解释一下应用部分。
↓其他文本
-
- 全体の流れ
-
- データを用意する
- Deep Learning する
我想做的事情
在Minecraft中,判断附近是否有僵尸。
如果有僵尸,显示与僵尸相关的文本。
(文章的具体准备工作请参考其他文章)
我的世界的模组
在《我的世界》游戏中,有志之士们制作了一种叫做“模组”的东西。
通过使用模组,你可以相当自由地修改游戏。
只要使用MCreator,就能立即開始製作mod。
對於簡單的更改,甚至不需要編寫代碼。
我想要嵌入Python程序
Minecraft 的 mod 是用 Java 编写的。
-
- Java あまり分からない。
- DeepLearningのモデルも動かしたいので、Python が使いたい。
树莓果酱模组(MCPI)
可以通过Python来进行部分Minecraft操作。
可以做很多事情。
然而,获取游戏信息的部分有点棘手。
使用Python和Java进行通信.
看看mcpi的代码。
应该是通过Socket通信进行交流。
似乎需要指定端口并进行一些操作。
-
- Python側は mcpi の Connectionクラスを改造
Java側は ゴリ押しで書く
JavaのSocket通信
Pythonと通信
调查附近是否有僵尸存在
终于实现了模组的开发。
使用了 MCreator 1.9.1 版。
使用MCreator创建新的工作区时,会创建mod的模板。
GUIで、新しいコマンドを作れる。空のコマンドを作成。
hogehogeCommandExecuted みたいなやつの、executeProcedure関数に書く。
やりたいことを別の関数に詰め込む。
Socketを準備
継続して、データを取得・送信・受信
コマンド実行時に、別のプロセスで、作った関数を実行するようにする。
mod 素人(+Java素人)なので、mod と切り分けたかった。
脳死で、Thread とかいうのを使ってみる。
获取游戏内信息。
Minecraft mc = Minecraft.getMinecraft()
WorldClient world = mc.world;
List<Entity> entities = world.getEntities(Entity.class, (entity)->!entity.isInvisible());
通过这个功能,可以获取到在游戏世界中非透明的敌对怪物或动物。
Entity player = world.getEntityByID(mc.player.getEntityId());
然后,也取得玩家实例。
String minecraftData;
for (Entity e: entities) {
if (e.getDistance(player) < 8.0f) {
minecraftData += e.getName() + ",";
}
}
使用 getDistance 可以知道实体之间的距离。
通过 getName 获取附近实体的名称,并将其添加到发送用的字符串中。
表达
マインクラフト内のチャットに文字を出す。
MinecraftServer mcserv;
mcserv.getPlayerList().sendMessage(new TextComponentString("hogehoge"));
参考になりそうなサイト
-
- リファレンス?
- 日本語で関数が列挙されてる記事
在使用mod时需要注意的事项
バージョンによって少しずつ、ライブラリの仕様が異なる。
ライブラリのソースは、MCreatorからでも見られる。分かる人は直接読んでみてもいいと思う。
准备一个文本字符串。
あらかじめ、どのオブジェクトに関係のある文か分けてあるので、mod からのデータを元にランダムに選ぶ。
その文章の先頭単語を生成モデルに入れて、文を生成してみた。
詳しくは別記事参照。
给你一些额外的东西
仅仅表示是无趣的。
让我慢慢地说。
简单地,我这样做了(在Windows上)。
subprocess.call("start C:\hoge\softalk\SofTalk.exe /R: /W: "+"読ませたい文章", shell=True)
总结
因为Minecraft的mod很有名,我以为会有很多详细解说文章可供参考,但实际上并没有那么多。
不想在不使用MCreator的环境下进行繁琐的设置,所以还没完成。
如果要严格地进行编码,感觉很不方便,想找个解决办法。
因为《Minecraft》具有很大的潜力,所以希望大家也试着玩一下。