本帖最后由 白羊羊 于 2020-2-22 14:53 编辑
—— 欢迎各位开发者来到VexView的世界 —— (高级篇) 简介:VexView是一款能够制作自定义界面的插件,它由插件和MOD配合完成全部的显示任务。它的高强度自定义性赢得了当下不少服主的青睐,VexView从出生至今,已超过一年时间,通过期间的不断更新,现在的界面体制已非常完善,当然,在以后的更新中,我们会继续开发更多的实用内容。虽然VexView曾经是付费插件,但是现在已经免费开放使用,我们也欢迎各位开发者使用VexView为自己的插件增添色彩! 本教程目录:
- 第一章 - 高级GUI组件介绍
- 第二章 - 动态操作已打开的GUI
- 第三章 - 更加高级的InventoryGui类
- 第四章 - 背包侧边栏和自定义计分板
- 第五章 - 自定义药水效果和特效显示
- 第六章 - 自定义聊天频道和高级物品提示
- 第七章 - 使用VexEventCallable接口
- 第八章 - 更多高级操作
|
|
|
第一章 - 高级GUI组件介绍
注意:本章建议配合https://www.vexview.net/docs/index.html顺便查看一下相关组件的构造方法。
除了基础篇介绍的几个组件外,在 lk.vexview.gui.components 包下,还包含着非常丰富的组件:
- VexCheckBox - 勾选框组件
- VexTextField - 文本框组件
- VexSlot - 物品框组件
- VexPlayerDraw - 玩家模型绘制
我们来看看官方JavaDoc文档对于这些类的描述:
VexCheckBox:
VexCheckBox 勾选框,支持动态获取勾选状态, 只有两种勾选状态(未选/已选)
在代码中实现大概是这样的:
它类似于VexButton按钮组件,也有两种状态,你可以设置它的默认勾选状态,也就是最后的那个参数。
当然,仅仅是显示肯定是无法达到我们所希望的那样,我们需要判断玩家操作的勾选状态,所以说我们就需要用到OpenedVexGui进行当前Gui的动态操作(动态操作在下一章)
VexTextField:
VexTextField 自定义文本框 允许玩家自由输入文本内容,允许限制最大输入字数,可以实时获取输入的文本内容。
这个组件的用处就非常之大,我们知道,如果使用箱子GUI显示界面,是完全没办法让玩家实时输入内容的(只能靠一些带有文本框的原版容器替代,比如网易的嗨皮咳嗽就是用的铁毡的界面当做输入框)这样的实现的确很灵活,但是美观性就不尽人意了,而VexView直接提供文本框组件添加到GUI中,弥补了很多的不足。
同上,此组件需要动态操作才能完全发挥它的能力!
VexSlot:
物品槽 继承VexComponents类,属于组件,在GUI中生成一个固定大小的物品槽(18*18)
此组件并不是在VexView诞生初期就添加的,直到VexView 1.8版本问世后才被加入,可见操作难度是要比其他组件困难的。不过VexView已经帮助各位开发者简化了很多工序,现在的VexSlot可以直接被添加入VexGui中,可以预设物品,操作起来也非常方便。
使用此类需要注意的是:
参数:
id - 物品槽的ID(一个GUI的物品槽ID必须从0开始按顺序依次增大,不同物品槽不能相同)
这是关键,物品槽的id必须从0开始按顺序增加,否则就嘿嘿嘿...
此外,在VexGui中的VexSlot是无法进行拖拽操作的!想要实现拖拽效果,InventoryGui将会是你的不二之选,它会在第三章介绍。
VexPlayerDraw:
VexPlayerDraw - 玩家实体绘制 继承VexComponents类,属于组件,在GUI中生成一个玩家实体绘制(就是那种玩家模型,脑壳跟着鼠标动的那种)
如果你还是没看懂这个到底是个什么组件,我就用一句话来描述吧:玩家生存模式背包里面的那个第二人称样貌。
不过这个组件目前还有一定的瑕疵,官方建议是仅用作显示玩家自己的模型,待VexView更加成熟的一天到来,它说不定能够显示生物模型甚至是自定义模型。
小故事:之前在VexView开发群听到一个很不错的创意,既然组件都这么齐全,直接自己伪造个E键背包吧,可以穿戴更多RPG的物品,我仔细一想,的确,配合 InventoryGui 完全可以做到!
滚动列表 VexScorllingList 组件 emmm,说到这个组件,它也是很晚才被加入,在VexView2.0版本中,它以一个全新的交互方式和所有人见面。滚动列表中的各种操作绝不输GUI,我们进行了非常多的测试、修改,才将其简化到易于理解和使用。说了这么多,那么,它到底是一个什么样的存在呢?
它可以让你的GUI看起来像这样:
通过鼠标滚轮或者向下拉动右边的滑块,就可以滚动显示列表里面的内容。
包括Minecraft客户端的一些设置界面、创造模式物品栏,都是滚动列表的实现。
官方JavaDoc对于它的介绍是这样的:
VexScrollingList 滚动列表等同于一个组件容器 类似于VexGui,它同样可以包含一些组件,需要 组件实现ScrollingListComponent接口。 一个Gui中只允许含有一个滚动列表。 需要注意的是,组件的坐标将以该滚动列表的左上角开始重新计算坐标,而不是Gui。
简而言之:它是一个能容纳其他组件的组件。
和GUI一样通过addComponent方法直接添加组件:
可以说它的使用非常方便。
介绍的好帮手 -> VexHoverText 首先要声明,它不是组件!不知道这样你是否能理解:它是组件的组件(就像你有个身体,你的身体上还穿着洛丽塔...),HoverText能够为这个组件提供描述,它和物品描述是一样的,当你将鼠标放在物品上时,能够显示lore信息,它让VexView的Gui组件也能够这样显示信息,就像这样:
它的官方JavaDoc介绍为:
添加一个HoverText的方法也很简单:
所有实现了HoverTextComponent接口的组件,都可以添加一个HoverText
扩展型组件 在包lk.vexview.gui.components.expand下,就是我们提供的扩展型组件,在本篇教程中,我们只进行大致介绍,如果有需要或是感兴趣的话可以在我们的JavaDoc查看具体用法:
- VexBase64Image - 以Base64形式直接传输的图片,直接读取输入流,存在传输大小限制,为了防止服务器的网络占用过高,非必须情况下不建议使用。
- VexClickableButton - 可点击型按钮,除了普通按钮具有的两种状态外,它还有不可点击状态(需要第三张贴图),不可点击状态下,玩家无法操作此按钮,此组件支持动态操作(设置可点击性)。
- VexColorfulTextField - 彩色文本框,允许自定义16进制颜色代码,甚至可以透明,用一张VexImage做底图实现自定义样式的文本框,其他用法和普通的文本框一致。
- VexGifImage - 顾名思义,它支持显示GIF图片,继承自VexImage,你甚至可以设置每一帧之间的播放间隔。
- VexSplitImage - 切割型图片,继承自VexImage,支持对一张图片的裁剪操作。
- VexMcImage - 它用于显示其他MOD或是原版的材质贴图,继承自VexSplitImage,支持图形切割,URL的填写方式不同于普通的图片,具体使用方法参见doc
|
|
|
第二章 - 动态操作已打开的GUI VexView开发初期,总有人提出需要动态操作组件的想法,我们就很纳闷,既然一个GUI已经完成配置并展现给了玩家,还需要动态操作做什么?
在VexTextField文本框组件推出后,我们开始意识到动态操作的必要性。比如实时获取文本框内容,在很早的版本中,需要你进行大量复杂的工序来实现;还有无法动态更新按钮和图片,只能以重新打开GUI的方式刷新界面,这些都极大地降低了开发效率,也使得逻辑偏离了正常的轨道,这绝不是我们希望看到的。
终于,在1.9.5版本中,OpenedVexGui问世了。OpenedVexGui是一个用于动态操作已展示GUI的类,官方介绍:
你可以把它看作是玩家已经打开的一个GUI 该类用于实现对已打开的类进行动态操作 请不要以任何形式创建该类的新对象,该 类对象可在VexViewAPI中进行实时获取
获取方法很简单:
使用此类,你可以进行以下操作:
- 动态删减或是添加已实现 DynamicComponent 接口的组件。
- 动态获取文本框、勾选框、物品槽并获取玩家更改的内容。
- 直接为此GUI设置文本框、勾选框的内容。
- 直接获取VexGui对象。
例如,我们需要获取文本框的内容:
通过动态操作,一切都只需要一行代码即可,不仅减少了工作量,还提升了运行效率。
当然,此类的动态操作还有很多,你可以直接查阅我们的JavaDoc。
|
|
|
第三章 - 更加高级的InventoryGui类 InventoryGui继承于VexGui,它在VexSlot问世后,相继而来,此类实现了很多人需要的物品拖拽功能,本章将进行详细介绍。
官方对此类是这样介绍的:
这是基于VexGui的强化版界面,它允许开发者在普通 VexGui 的基础上,实现玩家背包物品查看、拖拽,并结合我们的VexSlot组件开发新的功能性容器界面。 唯一需要注意的是,所有的VexSlot在此GUI中,全部变为空物品槽(2.3.3版本中已移除此机制)关于玩家背包栏阵列,是为了显示玩家背包栏特别增加 的36格、4行、9列阵列,同原版排列顺序相同,宽度为 18*9、高度为18*4
简而言之,它能实现你做高级的合成台、强化台的想法!
使用此类之前,我们需要进行解读,首先我们从基本的开始,如果要实现自己造个强化台、合成台,是必须要和背包物品进行交互的,玩家需要将他背包中的物品放上合成台才可以进行合成,这是肯定的,因此,第一个概念就很容易理解了,为什么此类会多出一个玩家背包阵列相关参数,这正是为了放置玩家背包的全部槽位所设计的。
此类的VexSlot全部允许进行拖拽操作,解除了普通VexGui的限制,让许多的合成、强化插件能够使用新的操作界面。
就像这样:
本章开头提到的风险又是什么呢?
VexView并没有进行物品操作校验的流程,这会导致一个什么问题呢?如果玩家使用某些背包编辑器、作弊MOD等,私自修改了物品槽的原有物品,在VexSlot动态获取的内容就会变成这些被恶意修改的物品,严重干扰物品操作的正常判断,不过不用担心,解决办法很简单,在进行任何物品删减操作时,你只需要多加一个判断玩家背包中是否真的包含此物品(使用Player类的Inventory获取真实的内容),千万不能相信客户端的任何数据!(2.5.2版本后开始同步操作) |
|
|
第七章 - 使用VexEventCallable接口 在2.6.10版本更新后,为了简化附属项目的结构,我们推出了VexEventCallable接口用于直接在Gui对象中编写事件处理逻辑。它的作用是,任何实现了VexEventCallable接口的VexGui(包括子类)都会在事件触发时,自动调用接口中的方法,此接口中包含以下方法:
- onKeyPressed - 当此GUI中触发KeyBoardHoldEvent时自动调用
- onSlotClick - 当此GUI中触发VexSlotClickEvent时自动调用
- onGuiOpened - 当此GUI触发GuiOpenEvent时自动调用
- ...
更多方法可以前往我们的JavaDoc查阅。
一个标准的实现可以像这样编写:
这也是我们之前基础篇推荐使用的继承式写法,它的操作更加灵活。
实现此接口后,我们就可以直接在对应方法中编写我们的逻辑,而不需要再去进行监听操作:
大幅度提升了开发效率。 |
|
|
[groupid=1330]PluginsCDTribe[/groupid]