「通过Deep Learning生成随机文本来驱动Minecraft的质询攻击mod」

借助深度学习的力量,在玩我的世界游戏时,我制作了一个可以读出与游戏相关的文本的软件。

でもミニ.gif

真实玩耍的视频

由于整合为一篇文章很困难,我将分成几篇文章。
在这里,我将解释一下应用部分。

↓其他文本

    • 全体の流れ

 

    • データを用意する

 

    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》具有很大的潜力,所以希望大家也试着玩一下。

广告
将在 10 秒后关闭
bannerAds