= 创作分享 =
编程开发
记录贴:纯新modder的披荆斩棘之旅
Doremy

记录贴:纯新modder的披荆斩棘之旅

Doremy 于 2023-4-10 11:26 ( 1年前 ) [复制链接] [只看楼主] [打印]
855 3
本帖最后由 QQ酱49791 于 2023-4-20 14:24 编辑

好吧,我去年写过1.18,5年前也写过1.12.2
但是都十分甚至九分的远古了,现在写1.12.2也算纯新

10天一楼


Day1

配置开发环境
    0. 下载mdk,和IDEA,按照解压出来的README.txt一步一步执行。
    1. zip END header not found
        解决过程:重试失败,搜索得到几个解决方案,依次尝试。
        解决方案:删除user/???/.gradle/wrapper下不完整的4.9版本,IDEA会自动重新安装
        这应该是我独特的历史遗留问题
    2. gradlew genIntellijRuns
        Unable to start the daemon process.
        解决方案:因为之前JAVA_HOME设置到了1.18用的高版本java,换成低版本就可以了。
        虽然项目里设置了低版本的java,但是cmd不知道,于是用高版本的java,没法润gradlew
   
    客户端成功启动

我的目标!
    0. 为什么我突然想着来写mod?因为我在做整合包,然后昨天研究了小半天,魔改没法满足我的需求。于是就来写mod了。
    1. 小目标:我想要做神秘4的法杖,但不一定是完美复刻。我对法杖核心不是很感兴趣,但是我想要让法杖有极高的可操控性:
                      所有法杖公用一个id,有很多nbt参数。
                      根据capName,rodName渲染材质。
                      法杖的各元素容量上限、耗魔效率也存储在nbt内。这样一来,CrT甚至可以给法杖升级。
                      至于合成……做一个独立于神秘6工作台的工作台,材质模型可以重画。
          额,我觉得ThaumicWand有点谔谔,灵气只有一种,所以想要重做。
          注:ThaumicWand可以CrT增添、删除杖芯杖端。
    2. 大目标:TC4连连看!

法杖之旅1:
    0. 直接搜索教程,可以把harbinger当成准文档。并且搜索一下命名规范。
    1. 我完全理解了事件是什么!和CrT的事件是一个道理,只不过范围更广。
    2. 随便看看教程先把物品创建出来~
    3. 研读并比较:
            TinkersConstruct/src/main/java/slimeknights/tconstruct at 1.12 · SlimeKnights/TinkersConstruct (github.com)
            工具组装台的IBakedModel
            Thaumic-Wands/ModelWand.java at master · Zokonius/Thaumic-Wands (github.com)
    4. 没看懂……先进行一个摆

法杖之旅2:
    0. harbinger说只要写了TileEntityItemStackRenderer,然后物品模型写一下就好了。
        由于法杖模型还是比较复杂的,我直接进行一个代码的薅,从ThaumicWand。    1. 但是我紫黑块了。先写一个普通的物品模型试试。然后发现仍然紫黑块。另外,语言文件也没作用上。
    2. 去求助了一番,发现是某种我还没有理解的魔法问题。十分感谢群友~
    3. 但是我渲染写得有问题。啥都没显示,再看看吧。

Day2
法杖之旅3:
    0. 有burnbee 昨天把setTEISR给注释掉没加回来,当然啥都没显示。
    1. 先测试一下吧!

    2. 修了一点NBT判定的Bug,然后逐渐理解了IBakedModel和TEISR,ModelRenderer的用法:
          IBakedModel是物品模型json文件的上位替代。但是作为一个类,它并没有一个明确的路径。需要在ModelBakeEvent下,进行
  1. event.getModelRegistry().putObject(ModelResourceLocation,IBakedModel);
复制代码
         如果一个物品模型,是builtin/entity,或者IBakedModel里面那啥返回true(详见TEISR文档)就会自动调用TEISR
          在使用ModelRenderer.render()之前,使用
  1. Minecraft.getMinecraft().renderEngine.bindTexture(ResourceLocation)
复制代码
         即可染上材质(?
    3. 不知道对不对,因为我的法杖长这样,似乎材质没绑上……

    4. 大概是new ResourceLocation写错了……现在好了

法杖之旅 总结:     
0. 注册一个特殊渲染的物品,首先先把普通的物品写好。
     1. 写一个TEISR,并且让物品注册过去。
          * 写一个IModelBase。里面写上几个ModelRenderer。然后在render的时候,先bindTexture,然后再ModelRenderer.render(...)
     2. 如果不同视角会有不同渲染,即丢在地上、第一人称第三人称左右手持、在GUI内部,那么你需要手写一个IBakedModel,并用上文提到的代码把它“放到某个路径下”。


不过这么一圈做下来,还是不如直接用ThaumicWand,既然它可以自定义杖端杖芯(虽然灵气少了点)。
如果要做一个完善的法杖系统,还有很多的事要做。
这是我一天多写的代码:



连连看的任务列表:
    1. 做一个方块
    2. 做一个多方块结构
    3. 可以通过漏斗输入输出你家连连看卷子!)
    4. 右键打开gui
    5. 可以手动存取卷子!
    6. 在gui内画上一坨要素
    7. 在gui内把卷子画出来~

    1. 做一个魔导透镜
    2. 做一个PlayerData来储存研究点
    3. 做一个指令可以操控玩家的研究点
    4. 在研究台显示玩家的研究点……
    5. 加个滚动条

    1. 要素合成
    2. 拖动要素
    3. 要素连接显示
    4. 卷子完成显示
和研究的联动就用CrT监听物品使用事件,然后指令完成研究。
好多啊……我是不是应该先考虑做个简单点的。
不过涉及的Forge内容,应该就是自定义一个gui,弄一个多方块,以及弄一个自定义PlayerData吧
但是这个自定义gui有点抽象


先休息会吧~
Day3
休息了一下,就到第三天的晚上了~
直接做连连看的话,果然还是太难了,一下就没动力了呢……

先做一个简单的小祭坛吧,解决一下一个最简单的问题:
    多流体+多物品(+mana?)->成品物品/流体
我似乎没在1.12.2找到能够达成这个任务的机器/祭坛。(GT装配线就算了,我知道它能够胜任这个任务,但是它太胖了)
在开始编写祭坛之前,我需要重新配置环境,来制作与JEI、CrT(、bot?)的联动(?)。


先进行一个简单的设计~

物品和流体都是无序合成,流体放在基座中。物品放在祭坛上。
祭坛启动,流体被祭坛暴风吸入到祭坛上方,与物品混合。

啊啊啊啊好累啊不想写了

Day4
祭坛!
     0. 先不管基座
     1. 模型……先瞎写吧
     2. 挂一个TileEntity,写好nbt读取。nbt包含:基座的坐标(先不写),祭坛所含的物品,祭坛的合成进度(不合成为-1)
     3. 弱充能则progress=0。每刻拾取祭坛上方物品(最大容量:36物品,植魔符文祭坛的两倍)。挖掘后掉落物品。
          逝了一下,如果写drops和onHarvesting,太晚了,TileEntity已经被删除了。
          对原版箱子进行一个超。
     4. 写一个TESR,把物品给炫出来~
             请问我们超谁?龙研和Bot。
             龙研有个前置,也得打开来看……他把物品渲染写里面了
             修了一下NBT的读写,以及客户端、服务端的通讯。但是我渲染出来的物品都是黑的……
             这下抄不明白了

Day5
3t说,方块里要有光
于是方块变透明了,物品不是黑的了!

先进行一个摸

写了一下配方系统,接下来需要写流体基座才能继续……

Day6
时间不多,希望能把流体基座写完吧。
流体基座理论上是个开口的流体容器,我现在懒得写方块模型……
看一眼匠魂,赶紧开工吧!

谔谔,匠魂写的是不是有亿点恐怖……TinkersConstruct/src/main/java/slimeknights/tconstruct at 1.12 · SlimeKnights/TinkersConstruct (github.com)
看了一眼魔力池,好像更加恐怖还是照着匠魂写的抄吧

搜出来一个好东西Java TextureAtlasSprite类代码示例 - 纯净天空 (vimsky.com)
抄了好久,没超对……我都不知道我的图标渲染到哪去了

后来渲染出来了,但是是不是变黑或者隐身
仰视没问题,俯视有问题,就很离谱

Day7
换了114514种写法,都有问题



总之就是非常离谱
Day8
闪烁的原因是少了一行
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);

总结:渲染一个贴图的步骤
  Step1. 用GLStateManager把你要渲染的家伙移动到你想要的位置
  Step2. 选择你想要的图片:TextureAtlasSprite sprite=Minecraft.getMinecraft().getTextureMapBlocks().getTextureExtry(...)
  Step3.
  1. Tessellator tessellator=Tessellator.getInstance();
  2.         BufferBuilder renderer=tessellator.getBuffer();
  3.         renderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); //你可以选择一个你想要的VertexFormat。如果你选了POSITION_TEX,循环里的位置就.pos(...).tex(...)。如果选了POSITION_TEX_COLOR,就.pos().tex().color().
  4. Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);  //重要!!!但是我看不懂这是什么魔法
  5. for(int i=0;i<4;i++){
  6.     renderer.pos(x,y,z)  //x,y,z
  7.             .color(R,G,B,A)    //RGBA
  8.             .tex(u,v)    //大概就是你打算用贴图的哪一部分。你可以把贴图裁出一部分
  9.             .lightmap(brightness >> 0x10 & 0xFFFF,brightness & 0xFFFF)  //没搞懂,一律填240。你不用BLOCK就没有这玩意
  10.             .endVertex();
  11. }
  12. tessellator.draw();  //你制作了4个Vertex,有着自己的坐标。如果你渲染了一个四边形,那么你只能从逆时针方向看见它(即如果四个顶点从你的方向看过去,按顺序是逆时针方向)   你可以先画一个ABCD,再画一个ADCB,就可以两面都看得见了。
复制代码
那么这几天写的东西在这了:
main2.rar (21.2 KB, 下载次数: 0)
配方系统没有实装。

代码写得很蹉,所以重新写吧……
Day9
重新写了一个用于注册的轮子,感觉良好
然后我先写个流体基座(储罐),把Capability写上,然后弄渲染。
Capability继续参考匠魂。管道倒是还没测试,但是水桶/岩浆桶右键已经做好了(通过Capability)。
以及渲染的轮子写得也很舒适~


Day10
今天要把流体储罐的物品渲染做好
怎么做呢?看了一眼匠魂和热力,一个比一个麻烦……
我打算添加一个不可获取的物品,其模型集成流体基座方块。然后TEISR先渲染它再渲染流体。
大概是勉勉强强渲染上了,但是手持、掉落物显示都很奇怪

main.rar

21.2 KB, 下载次数: 0

评分

参与人数 2RF +10 Vis +2 收起 理由
DTFuel + 5 + 2 好耶
QQ酱208628 + 5 稳如狼

查看全部评分

发表于 2023-4-10 11:26:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 3 条回复!
Ignoreme
字词!
发表于 2023-4-11 11:01:46 | 只看该作者

回复 | 举报

Doremy
Day11
暂时放弃了写储罐的TEISR……总之就是非常麻烦,先不显示流体凑活用吧
小写了一下祭坛。但是还没上配方系统。
发表于 2023-4-21 08:12:22 | 只看该作者

回复 | 举报

Zi_Min
暖个贴
YPXxiao
颜家之星。
发表于 2023-4-21 13:44:07 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表