-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: AllayBlockType #31
Conversation
Deprecated AllayVanillaBlockPaletteRegistry and add AllayBlockPaletteRegistry
我还是希望自定义方块和原版方块在api层面尽量一致,差异最好在内部解决,像是CustomBlockComponent之类的最好去掉( |
这个pr我明天回来仔细看一遍 |
我觉得没必要通过读取palette构造原版方块的状态列表 没必要就因为一个属性出问题就全改,可以考虑直接删除掉BlockPropertyRegistry,这个注册表看样子没什么用。 其次,对于原版方块和自定义方块如果采用两种不同的状态注册机制会引入不必要的复杂度,后期维护起来会很麻烦。 |
你有更好的解决方式? |
现在的解决方式,原版方块直接从palette中读取,BlockType的defaultState和allStates一开始不初始化,先等BlockState构造出来之后再通过一个包私有方法初始化。每种BlockType的allStates直接就和palette对应,不存在错误。自定义方块通过一个算法从全部BlockProperty排列组合得出allStates,默认取min-max的取值范围。 |
自定义方块的API和原版方块完全一致,只是在构造BlockType的时候加入一个自定义方块组件(里面可以提供更多功能)。 |
你必须得有一个东西,来标识是自定义方块,因为后期我们还需要提供发送给客户端的NBT定义信息,这个都可以通过CustomBlockComponent来完成。 |
你强行统一原版方块和自定义方块是不可能的,因为自定义方块有原版方块没有的接口,它们就不是一个层级 |
BlockPropertyRegistry这个注册表是有作用的,一个插件获取另一个插件的方块属性,肯定要通过这个啊。内部的那些枚举都是不可变的 |
准确来说你现在自定义的Property都还没规范化,一个插件自定义Property可以注册也可以不注册进注册表 |
插件自定义的Property还不一定能保证全局单例 |
z这个注册表直接删掉就行了。插件直接提供引用property的方法 |
给这个特殊的property加个special case即可 |
给组件加个onInit(),在全部组件实例化后调用即可 |
手动添加特例更难维护,还不如给属性添加一个运行时范围。 |
|
property肯定是static final阿,直接引用就行了 |
我认为维护复杂度小于你现在这个方案,因为只有一个特例,而且我认为这个特例是微软的疏忽。 bds内部也不是读文件的 |
…a and VanillaBlockPaletteRegistry.java to VanillaBlockStatePalette.java
Deprecated AllayVanillaBlockPaletteRegistry and add AllayBlockPaletteRegistry