MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

用户:MashKJo/1.12.2模组开发教程/11.高级物品和方块 - 前置概念:修订间差异

跳到导航 跳到搜索
→‎一些枚举类:​ // Edit via Wikiplus
→‎一些枚举类:​ // Edit via Wikiplus
→‎一些枚举类:​ // Edit via Wikiplus
== 一些枚举类 ==
在给我们的高级的物品/方块实现一些功能时,我们会和很多枚举类打交道,如:
* EnumAction:这个枚举类专用于物品,具体地说,是表示物品被使用时,产生的动画效果的“类型”(说是动画效果,实际上就是一层薄薄的贴图转了个角度后的一堆平移、伸缩或旋转变换而已),由<code>Item#getItemUseAction</code>决定。原版有5种EnumAction,分别是:NONE、EAT、DRINK、BLOCK、BOW。很显然,后四者分别用于食物、水瓶和药水、方块的物品形式、弓。那么可能会有读者问了:如果我想自定义物品使用时的动画效果,怎么办,如何去做到?答案是通常情况下做不到,除非你用黑魔法。一般而言,新的EnumAction可以通过Forge提供的EnumHelper来通过反射生成,但是Minecraft具体处理这个EnumAction并实际产生动画的代码中,Forge实际上没有发布任何事件,所以理论上我们无法新增自定义的物品使用动画,除非你用Mixin大法,但除非你Modding水平够高,否则执意在Forge框架下开发时用Mixin实现自己的需求,还不如自己换个需求。
* EnumActionResult:这个枚举类有3个实例:SUCCESS、PASS和FAIL,它用于描述某个交互逻辑进行后,返回的结果(或者说执行结果)。其实它的意义不是那么大,因为它也就只是一个返回值而已,你可以在写一堆你自己的自定义逻辑后返回FAIL,本质上就是一个标记而已。不过对于物品的使用而言,SUCCESS和FAIL都不会在执行完主手上的物品的相关逻辑后,继续执行副手上对应物品的相关逻辑,而PASS则会,这个特性需要小小地注意一下。
* EnumBlockRenderType:顾名思义,这个枚举类用于描述方块的渲染类型——INVISIBLE、LIQUID、ENTITYBLOCK_ANIMATED、MODEL。
** MODEL:默认值,就是最普通的渲染类型——从指定的模型文件中读取出一个模型(实际上是通过一个ICustomModelLoader得到了一个IModel),并经历一系列加工过程,最后渲染出来。
** INVISIBLE:顾名思义,就是代表该方块什么都不渲染,如空气方块,如果你的模组中有一些方块纯粹是用于技术性用途,那可以设定成INVISIBLE这个渲染类型,再附加一个<code>setHardness(-1.0F)</code>即可。
** LIQUID:用于流体方块的渲染,代表例子是原版的水方块。
** ENTITYBLOCK_ANIMATED:这个渲染类型很特殊,它单独起到的效果和INVISIBLE其实是大差不差的,只是它用于标记——该方块有TileEntity<ref>没错,EntityBlock指的其实就是TileEntity,实际上高版本它也叫BlockEntity,意思其实都一样,翻译成中文都是方块实体。</ref>,且该方块的渲染'''全部'''由该TileEntity对应的一些相对接近于底层(实际上是lwjgl的OpenGL)的渲染代码来完成,包装成的东西名为TileEntitySpecialRenderer,一般简称TESR,TESR能帮我们实现很多单纯的模型文件做不到的效果,如:在方块表面渲染文字、动态贴图甚至实现动画效果。但是注意:用了TESR的方块实体,对应的方块的渲染类型,一般也还是MODEL。为何?因为这代表先让Minecraft默认的渲染机制为我们渲染好方块的大致轮廓和基础材质,再用TESR作补充;然而如果用了ENTITYBLOCK_ANIMATED,代表:方块的基础轮廓也是要我们手动去渲染的,典型的例子是原版的箱子。当它开启时,它的顶部的全部材质和四个侧面的一部分材质都会抬升并旋转一个角度——由于四个侧面都仅仅有一部分材质会参与这个过程,因此Minecraft的默认渲染机制确实不能胜任,所以才有必要用这个渲染类型。所以记住——除非你有特殊的需求,否则就算你用TESR渲染TileEntity,你也该用MODEL作为渲染类型而非ENTITYBLOCK_ANIMATED。有关TileEntity和TESR的内容,将会在后面讲到,这里先做了解即可。
* BlockRenderLayer:这个枚举类同样应用于方块,只是它用于指定方块的材质的特性。它有4个实例:SOLID、TRANSLUCENT、CUTOUT、CUTOUT_MIPPED。SOLID代表方块的材质完全不透明,TRANSLUCENT则代表半透明,CUTOUT则是材质中有一部分全透明而另外一部分完全不透明,至于CUTOUT_MIPPED,它是CUTOUT的抗锯齿版本,和CUTOUT实际上差别不是很大。
* EnumFacing:这是一个表示方向的枚举类,可以表示东、南、西、北、上、下六个方向,前面已经提过,此处不再赘述。
* EnumHand和EnumHandSide:二者都用于表示主手和副手,不知道Mojang出于怎样的考量写出了这两个定位几乎一样的枚举类,反正用的时候也没区别,注意一下到底是哪个类型就行。
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,351

个编辑

我们提供服务需要使用Cookie。您使用我们的服务,即表示您同意我们使用Cookie。

导航菜单