开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[其他] Terraria与Minecraft互相通讯!

 发表于 2025-4-12 23:17:01 来自手机|显示全部楼层|阅读模式 IP:河北省

前言
这是我最近在搞的一个先研究,关于tshock的,原因是我不熟悉C#懒得学(其实以前学过一点),但是又想做插件
首先是简简单单装个tshock
直接wget下来解压,或者自己下载下来也行,链接从这里找
https://github.com/Pryaxis/TShock/releases
然后,我觉得服务器启动我应该不用说(),如果像我一样比较懒的话可以次次用TShock.Installer启动,byd连个环境变量都懒得设是罢,是这样的
第一次用TShock.Installer它会自动给你装dotnet,所以你不用自己手动装NET了,不过我以前学C#装过Mono就是了
跑题了,本篇不教怎么装tshock

似乎已经是正文了
实现互相通讯,我是基于tshock的RESTAPI弄的,在tshock/config.json的第140行,将RestApiEnabled改为true就行了
然后在第146行找到ApplicationRestTokens,然后添加你的永久token
这里的Token名称你应该可以随便设,如果为了省事可以用1
示例:
  1. "ApplicationRestTokens": {
  2.    "1": {
  3.       "Username": "name",
  4.       "UserGroupName": "superadmin"
  5.     }
  6. }
复制代码

建议把权限组设置为superadmin而不是owner,owner无法正常使用/v3/server/rawcmd接口,superadmin的权限相当于游戏内的/sudo命令
当然,如果仅通讯其实Token是不必要的,但是如果要做一些特殊的东西可以用token

Minecraft部分只通信就选择WebSocket就好了,我用的是库socket-be,这个库相对方便一些

对了,Terraria那边我选择了一个插件,ChattyBridge,这个插件本用于泰拉服务器之间的互相通信,基于restAPI,所以用这个简单些,用exec命令然后监听stdout也可以,但是太过于麻烦了
使用这个插件,我们只需要写一个假的REST服务器接收信息并返回status: 200就好了
联系上文,每当服务器获取到请求的数据(ChattyBridge定义了一个REST接口,即/chat,GET请求),获取分析然后使用wss转发就可以了!
Mc2tr呢,通过ws监听再扔回给REST接口就可以了!
我写了一个小东西,提供现成的类与米涩的(Method)
github.com/Love-Kogasa/trc.js

然后就大功告成了
我这里直接给我写的代码了w
开始随地拉屎
var {Server, ServerEvent} = require( "socket-be" )
var {VRestServer, EventChatMsg} = require( "./index" )
var mc = new Server({ port: 7979 })
var terraria = new VRestServer(
  7171, "localhost", "private-token-for-lovekogasa"
), rdt
var replyer = new EventChatMsg(({msg: JSON.stringify(rdt = {
  server_name: "Minecraft",
  name: "n", prefix: null,
  group: "owner", rgb: "///",
  type: "player_chat"
}), verify: ""}), terraria)
terraria.on( "chat", (message) => {
  var msg = `<TERRARIA:${message.sender}> ${message.toString()}`
  mc.broadcastMessage( msg )
  console.log( msg )
})
terraria.on( "player_join", (message) => {
  var msg = `<TERRARIA:${message.sender}> 进入了游戏`
  mc.broadcastMessage( msg )
  console.log( msg )
})
terraria.on( "player_leave", (message) => {
  var msg = `<TERRARIA:${message.sender}> 退出了游戏`
  mc.broadcastMessage( msg )
  console.log( msg )
})
mc.on( ServerEvent.PlayerChat, e => {
  if( e.sender.name == "外部" ) return;
  replyer.reply( e.message, e.sender.name )
})
mc.on( ServerEvent.PlayerJoin, e => {
  var join = {...rdt}
  join.name = e.players.join( " " )
  join.type = "player_join"
  terraria._r( "/chat", join )
})
mc.on( ServerEvent.PlayerLeave, e => {
  var join = {...rdt}
  join.name = e.players.join( " " )
  join.type = "player_join"
  terraria._r( "/chat", join )
})
terraria.listen( 7373, () => {
  console.log( "/connect 127.0.0.1:7979" )
})

其实还可以再写写互通命令什么的,其实是可以实现的,需要把ChattyBridge.json里的forward_command改为true,然后做一个检测+适配,或者自己手搓一种命令格式也可以
我写了一个工具字库,见TRModule/ccommand,可以轻松的创建自定义命令
另外这个时候要写具体功能,比如烟花什么的,就需要上面的token了











草,我要说什么来着()
想不起来了啊w,emmm,那就结个尾吧,这个代码我没有专门建一个仓库,然后我不知道各位感不感兴趣,如果有兴趣的话我就专门整个项目实现TR与MC交互(我猜没有())
然后是,哦,我是不是忘放图
我找找啊,亡了亡了,我没有史莱姆ang啊,我光录视频没截屏,那这里就给大家放个终端截屏吧
Screenshot_2025-04-12-22-36-23-571_com.termux.jpg
最后,祝大家周末快乐w
苦力怕论坛,感谢有您~
 发表于 2025-4-16 20:26:37|显示全部楼层 IP:广东省
6666666666
2#2025-4-16 20:26:37回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 发表于 2025-4-19 17:46:25|显示全部楼层 IP:广东省
有个邪恶的存在注视着你

已设置重生点
克苏鲁之眼失去了对你的兴趣
3#2025-4-19 17:46:25回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

| 由 木韩网络 提供支持 | GMT+8, 2026-2-3 04:52

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4