MC开发者日志#03
是摸鱼的一天hhhhh
接上条博客未说完
上条博客解决了传送门的事,但是发现网易自带的传送门脚本传送过去后坐标竟然不会变,然后地形是一样的(黑人问号.jpg)然后就开始解决传送后的坐标设置问题,因为传送过去后是不会创建传送门的,不像原版地狱传送门那样,于是便在py脚本里找相关的代码,找了半天没找到,然后用了一个十分愚蠢的办法
def _dimension_change_finish_server(self, data):
player_id = data['playerId']
dimension_id = data['toDimensionId']
p = data['toPos']
comp = serverApi.GetEngineCompFactory().CreateCommand(serverApi.GetLevelId())
if dimension_id != 0:
# logging.info("============now player in fantasy")
p = [p[0] * 8, p[1], p[2] * 8]
# logging.info("=============now player pos: {} {} {}".format(p[0], p[1], p[2]))
comp.SetCommand("/tp {} {} {}".format(p[0], p[1], p[2]), player_id, False)
else:
# logging.info("============now player in over_world")
p = [p[0] / 8, p[1], p[2] / 8]
# logging.info("=============now player pos: {} {} {}".format(p[0], p[1], p[2]))
comp.SetCommand("/tp {} {} {}".format(p[0], p[1], p[2]), player_id, False)
当传送维度完成时判断玩家目标维度,若为幻想世界使用comp执行指令将玩家的坐标x与z分别乘上8,若回到主世界则将玩家的坐标x与z分别除以8,这样就完成了幻想世界与主世界的坐标不同步了,而且也能实现主世界1格等于幻想世界8格的规则(与地狱相反)
今天的新内容
今天将微光森林的生态完善了一下,创建了新方块微光草(shimmer_grass)将原来的微光草地的识别id改成了shimmer_grass_block

并且利用了网易的方块定义标签中的may_place_on限定微光草只能放置在泥土类方块上,具体实现代码如下:
"netease:may_place_on": {
"block": [
"minecraft:dirt",
"minecraft:grass",
"minecraft:podzol",
"fantasy_world:grass_block"
],
"spawn_resources": false
}
今天还有一个特别重要的是就是为微光草地(shimmer_grass_block)创建掉落物表,就在我苦思冥想如何实现普通挖掘掉落泥土,精准采集掉落微光草地,并花上了大量时间研究战利品表(这个网址)好不容易理解了逻辑,将逻辑实现在json中,进到游戏发现只实现了精准采集的方法,普通挖掘竟然不掉落物品。排查了许久突然我发现了↓

直接傻眼!然后进到游戏发现网易竟然内置了(或者是游戏内置了)精准采集本来就会掉落方块本身,直接绕过了战利品表掉落机制,所以战利品表只要填上普通挖掘时掉落的物品就行了(泪崩,我的时间)
今天大概的工作就是这样了(因为今天是摸鱼的一天hhhh)
明天可能更新更少内容,因为有别的事情要处理。

