网易我的世界论坛

标题: 方块检测与生成建筑结构 [打印本页]

作者: mine__MC    时间: 2021-1-17 15:33
标题: 方块检测与生成建筑结构
如何检测某种方块被挖掘
如何生成某种建筑结构,从游戏中导出结构应该放在哪里
如果方便的话给我一下MOD SDK的说明文档网址
谢谢
作者: Ran_n    时间: 2021-1-17 21:16
网址我发不了,给你到文档搜这几个吧

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

结构方块的获取与放置

作者: 神捕晖    时间: 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%91/00-ModSDK%E6%9B%B4%E6%96%B0%E4%BF%A1%E6%81%AF.html
作者: 额头是本体    时间: 2021-1-18 13:17
神捕晖 发表于 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")  
我想把结构生成坐标改到玩家附近,或者是我点击的方块附近,应该怎么修改?
作者: 神捕晖    时间: 2021-1-18 14:09
额头是本体 发表于 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事件。然后玩家放置成功方块后,会触发这个事件,返回方块的坐标,然后再替换接口
作者: mine__MC    时间: 2021-1-29 21:38
额头是本体 发表于 2021-1-18 13:17
老哥,我使用官方那个py模板,可以放置结构了,但是很尴尬,需要我走到设定的xyz坐标附近,才可以生成,
...

可以利用DestroyBlockEvent事件返回的方块坐标值
这个事件在脚本开发入门有讲解,那个是使用方块的,你可以把里面的blockName改成fullName
然后再调用放置结构组件
方块的坐标就填(args["x"],args["y"],args["z"])
为了方便多次使用可以改成三个变量
作者: mine__MC    时间: 2021-1-29 21:41
额头是本体 发表于 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的形式




欢迎光临 网易我的世界论坛 (http://mc.netease.com/) Powered by Discuz! X3.3