查看: 1036|回复: 6
打印 上一主题 下一主题

[求助] 方块检测与生成建筑结构

[复制链接]

41

主题

45

回帖

63

积分

Lv.3 矿物能手

UID
7906013
小麦
0
金锭
185
下界之星
0
跳转到指定楼层
楼主
发表于 2021-1-17 15:33:13 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 IP:浙江
如何检测某种方块被挖掘
如何生成某种建筑结构,从游戏中导出结构应该放在哪里
如果方便的话给我一下MOD SDK的说明文档网址
谢谢

7

主题

104

回帖

257

积分

Lv.5 农牧专家

UID
8188503
小麦
195
金锭
1039
下界之星
0
沙发
发表于 2021-1-17 21:16:20 | 只看该作者 IP:广东
网址我发不了,给你到文档搜这几个吧

ServerPlayerTryDestroyBlockEvent
描述
当玩家即将破坏方块时,服务端线程触发该事件。
DestroyBlockEvent
描述
触发时机:当方块已经被破坏时触发该事件

结构方块的获取与放置

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

539

回帖

138

积分

Lv.4 怪物猎人

UID
8180997
小麦
0
金锭
412
下界之星
0
板凳
发表于 2021-1-18 10:06:15 | 只看该作者 IP:广东
官方文档链接:
http://mc.163.com/mcstudio/mc-dev/MCDocs/2-ModSDK%E6%A8%A1%E7%BB%84%E5%BC%80%E5%8F%91/00-ModSDK%E6%9B%B4%E6%96%B0%E4%BF%A1%E6%81%AF.html

6

主题

17

回帖

12

积分

Lv.1 新手木匠

UID
7884492
小麦
0
金锭
53
下界之星
0
地板
发表于 2021-1-18 13:17:52 | 只看该作者 IP:湖南
神捕晖 发表于 2021-1-18 10:06
官方文档链接:
http://mc.163.com/mcstudio/mc-dev/MCDocs/2-ModSDK%E6%A8%A1%E7%BB%84%E5%BC%80%E5%8F%9 ...

老哥,我使用官方那个py模板,可以放置结构了,但是很尴尬,需要我走到设定的xyz坐标附近,才可以生成,
就这一段:comp.PlaceStructure(playerId, (100, 70, 100), "test:structureName")  
我想把结构生成坐标改到玩家附近,或者是我点击的方块附近,应该怎么修改?

0

主题

539

回帖

138

积分

Lv.4 怪物猎人

UID
8180997
小麦
0
金锭
412
下界之星
0
地下室
发表于 2021-1-18 14:09:50 | 只看该作者 IP:广东
额头是本体 发表于 2021-1-18 13:17
老哥,我使用官方那个py模板,可以放置结构了,但是很尴尬,需要我走到设定的xyz坐标附近,才可以生成,
...

comp.PlaceStructure(playerId, (100, 70, 100), "test:structureName")
你这样是写死了坐标,要把坐标换成动态参数;
①生成到玩家附近的话,可以用GetPos接口,获得实体坐标,再把第一行代码中的坐标换掉;
例如:comp = clientApi.GetEngineCompFactory().CreatePos(entityId)
entityPos = comp.GetPos()
comp.PlaceStructure(playerId, entityPos, "test:structureName")
②放置方块后再放置结构的话,也是一样的道理,可以监听EntityPlaceBlockAfterServerEvent事件。然后玩家放置成功方块后,会触发这个事件,返回方块的坐标,然后再替换接口

41

主题

45

回帖

63

积分

Lv.3 矿物能手

UID
7906013
小麦
0
金锭
185
下界之星
0
6
 楼主| 发表于 2021-1-29 21:38:20 | 只看该作者 IP:辽宁
额头是本体 发表于 2021-1-18 13:17
老哥,我使用官方那个py模板,可以放置结构了,但是很尴尬,需要我走到设定的xyz坐标附近,才可以生成,
...

可以利用DestroyBlockEvent事件返回的方块坐标值
这个事件在脚本开发入门有讲解,那个是使用方块的,你可以把里面的blockName改成fullName
然后再调用放置结构组件
方块的坐标就填(args["x"],args["y"],args["z"])
为了方便多次使用可以改成三个变量

41

主题

45

回帖

63

积分

Lv.3 矿物能手

UID
7906013
小麦
0
金锭
185
下界之星
0
7
 楼主| 发表于 2021-1-29 21:41:42 | 只看该作者 IP:辽宁
额头是本体 发表于 2021-1-18 13:17
老哥,我使用官方那个py模板,可以放置结构了,但是很尴尬,需要我走到设定的xyz坐标附近,才可以生成,
...

示例:      
if args["fullName"] == "被破坏的方块的id(包含命名空间)":
            BlockX = args["x"]
            BlockY = args["y"]
            BlockZ = args["z"]
            comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
            comp.PlaceStructure(playerId, (BlockX, BlockY, BlockZ), "test:structureName")
这个就可以在你破坏这个方块的坐标上生成结构了,别忘了调用DestroyBlockEvent事件
当然用别的事件也是可以的,注意一下fullName的形式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部