分享到           

发帖证明我有在努力优化,没有偷懒!(?)
目前终于把大型走龙的大量技能都做好了,有多大量呢?四种立龙科(骨顶龙、火棘龙、爪暴龙和大地走龙)总共做了9个物理攻击动作、3个魔法攻击动作,其中还包括物种限定的攻击动作,以及部位破坏后的攻击失败动作
所以之后上线后大家一定要多去被他们杀一杀,绝对值得体验哦!(炸)





然后做好模型和动画后,测试斗兽的时候却发现了一个十分玄幻的大问题,那就是我测试之前做的各种动物斗兽都很正常很丝滑,测试骨顶龙的时候也很丝滑,可剩下三种龙只要一出场后台就疯狂汇报Can't keep up!卡顿,画面也卡得不忍直视,斗兽更是压根抖不起来,攻击动画都播完了对面还没有受到伤害的那种
这可是翻新模型后的第一种大型怪,就发生如此恶性BUG可不行啊,于是用力(?)排查了好几天,终于定位到了这单纯是大型实体碰撞箱太大了导致的卡顿!把碰撞箱做小就瞬间丝滑了!
emmmmm,MC的源代码优化到底有什么毛病(X)
但原版的渲染范围又是和碰撞箱相关联的,举个例子就是当画面视线离开实体的碰撞箱时,实体就不会渲染,所以遇到像有长尾巴长脖子的龙这种实体,如果碰撞箱太小,就会很容易出现头和尾巴在画面中闪现的问题
这也是以前困扰过我的问题,所以之前才会把大型怪的碰撞箱设置得那么巨大(但实际上由于我写了类似末影龙的小碰撞箱,所以大碰撞箱其实是没有碰撞功能的)
不过今天我发现了一个用于单独控制渲染范围的代码 getRenderBoundingBox(),所以这个问题也可以得到解决了!就算把实体的碰撞箱做得很小,只要把这个渲染的范围设大点,也不会导致模型在画面中闪现!
总之今天解决了一个关于大型怪的很严重的优化BUG,高兴得我发了个进度(X),以后游戏会比之前更丝滑一些了,距离新更新又更近了一步! (?)
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


最近刚做了大型龙的模型更新,手累,不想做新模型,那就来写点新功能吧
这次尝试来把看起来就很难搞的部落系统给做了

功能大概就是添加一个【部落之书】道具,使用道具时自动新建一个以自己为名的部落,跟方舟一样
然后部落界面UI分为三块内容,玩家列表、宠物列表和部落日志(显示谁谁谁死于谁谁谁之类的(X)
参考原版创造模式物品栏的标签写法,啃了两天,成功把前两块内容搞定啦
可以显示出当前部落中的人员,如果人太多显示不下,就会出现向下箭头用于翻页


之后再继续做点界面优化,玩家界面要怎么弄还没有想好,但宠物界面肯定是可以做的更漂亮的(?)
但部落日志要怎么做还没有头绪,我这个部落直接借用了原版 Team(组队)和 Scoreboard(计分板)的内容,但原版代码里并没有记录长字段的功能,只能看看有没有什么办法迂回一下了
或者日志只记录一次游戏的内容,下线后清空,也不是不行(?)
羽·凌风 于 2023-11-20 20:51 补充以下内容
宠物界面美化完成
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


既然现在越来越熟练做UI了,那么顺道把驯养动物的属性界面也美化一下(?)
血量和饱食度显示的更直观


同时食性的位置加上了附近是否有食槽的显示,有食槽又有食物就会显示彩色的食槽图案


有食槽但是没有食物,就会显示灰色图案
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


本帖最后由 羽·凌风 于 2023-11-23 22:26 编辑
今日进度,做出了部落相关的建筑方块:部落旗帜!
emmm,就是一个好看的旗子(X)

还可以通过染料改变颜色

还可以控制摆放的朝向

当然右键点击还有打开部落界面的功能

之后考虑再加上信标的功能好了,可以在很远的距离看到回家的路那种(?)

用Geckolib做的带动画的方块,制作方式还挺麻烦的,做个笔记好了~
制作动态方块的流程和Geckolib的官方教程基本一致:https://github.com/bernie-g/geck ... -Blocks-(Geckolib3)
但官方教程是高版本的,对于1.12版的话,注册方式有些差异
首先1.12版需要继承的方块实体方法是 TileEntity,不是 BlockEntity
然后注册的时候方块实体的注册方法是
  1. GameRegistry.registerTileEntity(TribeFlagTile.class, new ResourceLocation(Dragicland.MOD_ID, "tribe_flag_tile"));
复制代码
位置放在注册其他实体(比如生物)的地方即可
然后注册方块实体的渲染的方法是
  1. ClientRegistry.bindTileEntitySpecialRenderer(TribeFlagTile.class, new RenderTirbeFlag());
复制代码
这里需要注意,不要放在Geckolib自带ExampleMOD的那个位置!直接把这句放在注册Block的地方就行了,不要放在监听 FMLPreInitializationEvent 事件的地方,不知道为什么,反正我监听事件加载不出来!给我卡了好久 (X)
如此一来带动画的方块就OK了!
放置朝向则是给Block继承一下原版就有面向的方块(比如箱子)就行了,能偷懒就没必要重新造轮子(X)

还有一点需要注意的是,方块实体的 writeToNBT 和 readFromNBT 方法(存档和读档)是默认只在服务端加载的
也就是说如果你要用它储存客户端需要的变量(比如我这里的旗帜颜色)的话,就会发现退出游戏重进后这个数据会在客户端丢失,修改过后的颜色会变回默认的状态
在 TileEntity 里面加两个方法,给客户端也传递存档的值就OK了
  1.     public NBTTagCompound getUpdateTag() {
  2.         return this.writeToNBT(new NBTTagCompound());
  3.     }
  4.     public SPacketUpdateTileEntity getUpdatePacket() {
  5.         return new SPacketUpdateTileEntity(this.pos, 11, this.getUpdateTag());
  6.     }
复制代码
唔,我的生物实体也遇到了类似的问题,用 NBT 保存的装备也会在重新加载游戏后的客户端上显示不出来,需要通过打开生物背包的方式同步数据后才会在客户端上加载出来
但是生物实体上好像没有找到类似的方法,看来要仿造这个 SPacketUpdateTileEntity 写个实体生物版的了
羽·凌风 于 2023-11-23 22:23 补充以下内容
唔,我的生物实体也遇到了类似的问题,用 NBT 保存的装备也会在重新加载游戏后的客户端上显示不出来,需要通过打开生物背包的方式同步数据后才会在客户端上加载出来
但是生物实体上好像没有找到类似的方法,看来要仿造这个 SPacketUpdateTileEntity 写个实体生物版的了

今天把这个问题解决了!
先是尝试写个生物实体版的 SPacketUpdateTileEntity,没成功,Packet的注册方式完全不会(X)
于是尝试借用原版的代码,发现一个控制原版生物实体装备通信的 SPacketEntityEquipment,这东西似乎也是用来控制骷髅和僵尸这些怪物的装备和武器的
但是用
  1. ((WorldServer)this.world).getEntityTracker().sendToTracking(this, new SPacketEntityEquipment(this.getEntityId(), entityequipmentslot, itemstack));
复制代码
进行通信发现并没有卵用,不知道为什么这一句明明成功运行了,但是修改装备的 setItemStackToSlot 却没有运行
只好寻找其他办法,遂发现原版自己在父类 EntityLivingBase 里就会使用 SPacketEntityEquipment,那么我其实可以直接利用这一点,不需要单独再去通信一遍
于是查阅发现 SPacketEntityEquipment 会将生物的装备(护甲)和手持道具进行通信,解决方案这就来了!
首先在实体储存的时候把我的生物的鞍具和装备储存到人形怪的装备位上去
顺道一提我的生物继承的是原版马的代码,所以储存装备用的是物品栏,而不是装备栏,为了方便和原版马的右键界面对接,这个部分还是不改为好(?)
  1. super.setItemStackToSlot(EntityEquipmentSlot.CHEST, this.getSaddle());
  2.         super.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, this.getAmulet());
复制代码
然后原版代码在使用 SPacketEntityEquipment 的时候,就会自动帮我加载到可以修改装备的 setItemStackToSlot 代码上去,于是我就再修改一下这里
  1.     public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) {
  2.         // 清空原版装备栏,避免卡顿或中途修改装备造成冲突
  3.         super.setItemStackToSlot(slotIn, ItemStack.EMPTY);
  4.         // 将装备栏物品转换为物品栏物品
  5.         if (this.world.isRemote) {
  6.             if (slotIn == EntityEquipmentSlot.CHEST)
  7.                 this.getHorseChest().setInventorySlotContents(0, stack);
  8.             if (slotIn == EntityEquipmentSlot.MAINHAND)
  9.                 this.getHorseChest().setInventorySlotContents(1, stack);
  10.         }
  11.     }
复制代码
如此一来,就搞定了!给动物带上装备后,退出游戏、重新加载后,装备依然可以直接看到,而不需要打开动物的物品栏一次才能正常同步了!
这样以后做更多更复杂的装备就更轻松了,而且因为我把鞍具也放进了这个代码里,也就是说我可以尝试做点带有新功能的鞍具了
模仿怪猎MOD的功能性鞍具和晶石系统指日可待!(XXX)
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


本来开开心心玩着游戏唱着歌,我的移动硬盘突然就坏掉惹,哎,把部落旗帜的图案画完吧(X)

基础图案,直接就按七种属性来画了,用MOD熟肉切换


然后九个种族的所有形态分类都有一个图案









那么多图案,总有一款适合你!

本来一开始的计划不是做旗帜,而是做雕塑,每一个种族形态分类都给一个独立模型的……emmmm,还好最后没有采用这个计划(炸)WWWWWW
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


继续一点美化,给食槽增加了三大类食物的显示,如果食槽中存在相应的食物,就会在模型上展示出来

因为涉及到数据同步,所以又需要教程和笔记:https://teamcovertdragon.github. ... le-entity-sync.html
唔,数据同步太难了

部落道具(添加成员和移出成员)还在奋战中,这东西怎么那么难啊,关键是相关功能的教程完全找不到
实在不行还是和之前一样先放弃这个功能吧(XXX)
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


本帖最后由 羽·凌风 于 2023-12-7 15:10 编辑
尝试了很久搞部落组队功能,原本计划使用原版的计分板功能来实现,结果测试了很久很久,发现计分板只能在服务端修改,而多人模式下非主机玩家是没有权限修改服务端(主机玩家的数据)的!
这也就意味着,在多人模式下,只有主机可以操纵部落,无论是添加成员还是踢出成员的功能,都只有主机玩家可以使用,其他玩家是没有权限使用的
这样对于仿方舟游戏肯定是不行的,一个服务器上需要有多个部落同时存在,怎么可以只有主机(服主)有权限编辑部落呢?
于是,利用原版计分板的想法只能放弃

我只能想想别的方式来实现这个功能,有什么办法可以不利用原版的计分板,实现禁止宠物友伤、以及同部落坐骑共享的功能呢?
我想到了我新做的部落旗帜!作为一个存在于地图上,并且客户端和服务端都会加载的方块实体,完全可以通过它来迂回地实现这个功能啊!
具体解决方案就是,不再使用计分板来储存部落信息了,而是利用部落旗帜!当玩家把旗帜放在地图上时,旗帜会储存它的主人是谁
然后当系统需要判断这个玩家是否有组队时,就直接判断旗帜周边是否还有其他玩家的旗帜,如果有,那周围旗帜的主人就是这个玩家的盟友(组队队员)!
简单来说就是,只要几个玩家把旗帜放在一起,就自动组队了!破坏旗帜,自然也就相当于退出了这个组队!(同时在方块破坏的地方写一句只有主人可以破坏旗帜就不怕别人捣乱了)


这个“在一起”的判定距离为同一水平面内10格,应该足够正常游戏使用了~
然后给旗帜加一个强制区块加载的功能,就算玩家距离家园天远也能获取到家里的旗帜位置和组队信息,就行了!
完美!

顺便动物模型翻新方面新增萌萌哒山雀(还有恐怖的爆炸黑鸦(X)
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


继续做MOD,现在做的就是下次凑齐十条更新内容后更新的内容了
增加了一个小型动物的功能:肩宠……不对,这叫头宠!(?
所有非纯水生和非立兽状态的小型成年动物都可以捡起来放在头上,提供一些功能,比如草兔这些伪装大师可以提供额外的伪装加成(?



请选择你喜欢的帽子吧!(X)
羽·凌风 于 2023-12-10 13:57 补充以下内容
模型也继续更新,八种(?)鼠类都更上了!


【发帖际遇】羽·凌风 看见现行犯立刻上前捕捉,见义勇为被刀疤警长克莱尔·地皇鼓励,获得&sid=nW6a62 10探险经验 !

际遇事件仅作娱乐,正式设定请见【DL故事集】
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


继续做点微小(?)的优化,因为发现我写的玩家魔法属性会被原版的药水状态挡住,所以修改一下生存模式物品栏,把药水状态的显示和魔法属性的显示分开了


对没错,那个伪装大师药水状态也是新增的东西,现在学会了写状态,可以增加很多有趣的状态了
羽·凌风 于 2023-12-11 19:11 补充以下内容
宠物信息界面也和人物界面一样加上状态显示了

很好,物品储存done、新建状态done、状态显示done,可以开始做刷刷刷晶石系统了
羽·凌风 于 2023-12-12 11:55 补充以下内容
说做就做,下一步,护石!


物品、储存、属性加成,全都已经完成!
获取方式嘛,就靠打BOSS吧,下一步开始做BOSS
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


准备更2.6,一直在内测修BUG,好久没贴改模进度了(X)

上次没贴的穴鼠,啊!———


两种凤鸟完成


三种鹿完成,啊这个全新的鹿角,不能挂在墙上好可惜啊(炸)




两种鲨鱼火鲨和钳鲨也搞定,然后发现还有一大堆鲨鱼都没有加入游戏(X)



【发帖际遇】:羽·凌风 走在大街上摔了一跤,竟然发现地上躺着 15F卡币 ,赶紧捡起来!

际遇事件仅作娱乐,正式设定请见【DL故事集】
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


更好2.6之后,开始做 DLC 2 最终也是最重头的内容了,动物图鉴!
图鉴会显示全部动物的信息、并且简单介绍一下MOD动物的玩法,现在MOD体量越来越大越来越复杂,这东西就很有必要了!
总之先把界面设计好,动物相关的全部数据自动显示,我永远都喜欢自动加载自动显示(X)



上面的“动物基础信息”就是教程,这就不能自动生成了,得自己写(X)
嚯,我敢说光是这个图鉴,在MC MOD里就绝对是优质的存在!(炸)

本来一开始打算用立绘图,但放进MC里像素太粗糙了,立绘图并不会比那个小图清晰到哪里去,最后就选择了用模型图,感觉效果非常好!


看看,多可爱啊!!!

因为这个物品对游戏前期非常重要,所以加入初始奖励箱子

修改原版初始奖励箱子的办法:https://forge-documentation-cn.r ... /items/loot_tables/
这个操作比预想的简单得多,啊要是其他功能都有那么简单就好了(X)

接下来尝试看做做通过望远镜、击杀和驯服开图鉴,这么多图鉴当然要一开始全灰、然后一个个开更有成就感啦
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


今日进度,之前说要一个个开词条和图鉴,打算使用进度的方式来储存,毕竟用原版的东西不太需要考虑通信的问题,要方便一些
总之学会了添加进度

也学会在GUI里调用进度数据,玩家获得进度后才解锁相应的词条


虽然感觉用这个方式,之后写图鉴会需要写大量的进度,有点累(XXX)
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


更新2.7新的老獵人生存攻略!

經過我們毛毛的爆肝攻城之後,DL模組有了更新的玩法!既然如此,測試員我就來提供一下目前的可行方案,幫助大家在這個危機四伏(?)的世界好好生存下去吧!

初期前期階段:先在地表上砍些木頭做出合成台和斧子與木劍,然後打殺一些小動物蒐集種子,最重要是搞到小麥種子!接著蒐集一些土壤後不要猶豫,馬上鑽地裡去!去地下挖煤和鐵之類的貴金屬,同時在地底下用火把和蒐集的土塊做田,保證自己食物來源無虞!除貴金屬外順便帶回大量石材備用,此時期必須要取得足夠鐵做成鐵桶以搬運水,且之後才可以採奶,至少要準備五個專用奶桶。

初期後期階段:地下田已經把握住了,維生不困難之後重點是靠挖礦增加等級,最好靠挖礦累積到超過30等(成為獅以上營養級,越高越好),保證回到地面後低階掠食者比如龍蜥蛇類和飛蜥不主動打玩家。接著就可以回到地面,不做床晚上也不睡覺,因為打不過會掉做床材料的動物,所以乾脆不睡覺了。此時晚上就打殺一些火尾鼠或地雞等蒐集種子,務必要蒐集到所有的作物種子!只要所有種子都蒐集到之後就不要再殺鳥類了!之後你會需要牠們幫你下蛋的,留得青山在啊!

中期前期:先種田保證農作物自由,同時慢慢堆積多餘的種子做成植食性飼料,重點是囤積植物性物資以馴服用。食物不匱乏之後,趁夜晚大型哺乳類睡覺時用地下蒐集來的石塊把他們封住只留一個口,採奶之後趕快跑避免被打死,一旦沒有奶了就小心地從土外面把動物打死,就能獲得做床的材料。此時開始玩家才可以自行選擇是否跳過夜晚,否則之前都推薦夜間活動,逐步累積牛奶之後,做出足夠草食動物飼料。

中期後期:已經有了白天也能安全行走的等級之後,尋找長大後可以採奶的體型的哺乳類寶寶,同時撿地上的雞蛋作為飼料材料。接著用前面累積的資源馴服一個長大可以採奶的寶寶,保證牛奶的獲取並保護這個重要的個體絕不能死,這傢伙是之後馴養龍類的關鍵!然後真的不要殺鳥類了,小雞類的寶寶很難有而且小型鳥類都活不長,有時候找到一個回家拿飼料過來就已經被狼給吃掉了,因此雞蛋主要用撿的。  

進入後期:用自產穩定的奶來源+地底下帶回來的礦塊或者撿到的屍體肉做成飼料,馴服第一隻戰寵之後,騎這隻戰寵去殺更強一點的動物比如大耳跳鼠和馬,來增加奶滴獲取和動物刷新,才能開始準備馴養更多動物。

快把萌燦抱回家!
Don’t think, just do. For the heart is an organ of fire.

TOP


本帖最后由 羽·凌风 于 2023-12-23 16:37 编辑
回复 43#  @紅峽青燦

原来如此,看来加了奶和蔬菜的获取但忽略了鸡蛋,懂了,现在小型龙类、鸟类、虫类、鲸鱼之外的海族,都有概率掉落蛋了
话说有第一只战宠就能叫后期了吗!我还以为现版本的后期再怎么也要打过几个高级历战耶!(炸)WWWWWWWW
之后的版本动物的机制可以不怎么动了,会再加入一些探险、装备和BOSS方面的内容,到时候得到第一只宠物仅仅只是冒险的开始


目前进度,写出来了自定义触发条件的成就!


这样通过观察/击杀/驯服等等接触(?)的方式解锁动物图鉴的方案也可以实施了




这些动物Json文件都通过JAVA自动生成,还好,虽然数量很多,但并不累 (X)
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP


本帖最后由 羽·凌风 于 2023-12-24 18:46 编辑
一直在被时不时的卡顿问题困扰,昨天一通排查发现是攻击AI的问题,因为攻击AI涉及到一直寻路(需要不停靠近目标),而寻路代码中又是计算某个位置是否可以通行的部分加载次数非常多、最卡
但苦于不知道从哪里入手,本以为按照原版重写一遍攻击AI就行了,结果放大型龙出来打架的时候还是会明显卡顿
直到我研究AI机制的时候看见了这个东西:https://www.bilibili.com/read/cv23090029/
啊?啥意思?大体型的动物在检测寻路的时候会把整个体型范围内的方块全部检测一遍?
难怪我每次都是大型动物一多就开始卡!也难怪每次卡都是卡在寻路和通行检测上,原来是因为这个啊!毕竟我走龙4*4的体型不就等于16个僵尸的通行检测量,这能不卡吗!
但是寻路算法我可不会改,也不敢改,这东西一改就出事,那……就把攻击AI里面会加载到寻路的那段代码改一改吧!
毕竟现在有了Geckolib模型,在做动画的时候其实是不需要寻路的,把这段时间的寻路关掉,果然一下子就流畅多了~

但是我总觉得,大型MOD要靠作者自己优化总归还是不太现实,毕竟JAVA和MC源码的性能是人尽皆知的差,而市面上大型MOD卡也是很正常的(XXX)
那么,还是得需要一点辅助MOD来帮助优化比较好,目前我测试了一款叫泡沫修复的(https://www.mcmod.cn/class/978.html
我去,优化效果非常好!好到什么程度呢?就是刷30+骨顶龙和10+爪暴龙出来还能斗兽!


打得跟方舟牛龙VS霸王龙似的,真有意思(X)
总之,玩MOD如果感觉到卡顿,建议安装这个优化,当然如果各位玩家发现更好的选择也欢迎提出
欢迎来到Dragicland,【总版规】请记得要看哦,还有这个也是好东西→如何回复?

TOP

分享到