Skip to content
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

Merged
merged 18 commits into from
Jun 3, 2023
Merged

refactor: AllayBlockType #31

merged 18 commits into from
Jun 3, 2023

Conversation

CoolLoong
Copy link
Collaborator

Deprecated AllayVanillaBlockPaletteRegistry and add AllayBlockPaletteRegistry

CoolLoong added 3 commits May 31, 2023 18:34
Deprecated AllayVanillaBlockPaletteRegistry and add
AllayBlockPaletteRegistry
@CoolLoong CoolLoong linked an issue Jun 1, 2023 that may be closed by this pull request
@smartcmd
Copy link
Member

smartcmd commented Jun 1, 2023

我还是希望自定义方块和原版方块在api层面尽量一致,差异最好在内部解决,像是CustomBlockComponent之类的最好去掉(

@smartcmd
Copy link
Member

smartcmd commented Jun 1, 2023

这个pr我明天回来仔细看一遍

@smartcmd
Copy link
Member

smartcmd commented Jun 2, 2023

我觉得没必要通过读取palette构造原版方块的状态列表

没必要就因为一个属性出问题就全改,可以考虑直接删除掉BlockPropertyRegistry,这个注册表看样子没什么用。

其次,对于原版方块和自定义方块如果采用两种不同的状态注册机制会引入不必要的复杂度,后期维护起来会很麻烦。

@CoolLoong
Copy link
Collaborator Author

你有更好的解决方式?
现在遇到的问题,同一类方块属性不同取值范围,这个如何区分?
还有,如果不从palette读取数据,就会出现循环依赖,因为构造BlockState需要BlockType,BlockType中的defaultState和allStates需要被初始化,这个如何解决。

@CoolLoong
Copy link
Collaborator Author

CoolLoong commented Jun 2, 2023

现在的解决方式,原版方块直接从palette中读取,BlockType的defaultState和allStates一开始不初始化,先等BlockState构造出来之后再通过一个包私有方法初始化。每种BlockType的allStates直接就和palette对应,不存在错误。自定义方块通过一个算法从全部BlockProperty排列组合得出allStates,默认取min-max的取值范围。

@CoolLoong
Copy link
Collaborator Author

我还是希望自定义方块和原版方块在api层面尽量一致,差异最好在内部解决,像是CustomBlockComponent之类的最好去掉(

自定义方块的API和原版方块完全一致,只是在构造BlockType的时候加入一个自定义方块组件(里面可以提供更多功能)。
关于你说的方块状态注册的实现不同,那是实现层面的,隐藏在后面,用户和开发者都看不到,而且这个区别也是没办法避免的,原因就是自定义方块的全部状态需要自己计算。

@CoolLoong
Copy link
Collaborator Author

你必须得有一个东西,来标识是自定义方块,因为后期我们还需要提供发送给客户端的NBT定义信息,这个都可以通过CustomBlockComponent来完成。
Allay在方块状态注册上已经很统一了,原版方块和自定义方块用的都是同一个registry

@CoolLoong
Copy link
Collaborator Author

你强行统一原版方块和自定义方块是不可能的,因为自定义方块有原版方块没有的接口,它们就不是一个层级

@CoolLoong
Copy link
Collaborator Author

BlockPropertyRegistry这个注册表是有作用的,一个插件获取另一个插件的方块属性,肯定要通过这个啊。内部的那些枚举都是不可变的

@CoolLoong
Copy link
Collaborator Author

准确来说你现在自定义的Property都还没规范化,一个插件自定义Property可以注册也可以不注册进注册表

@CoolLoong
Copy link
Collaborator Author

插件自定义的Property还不一定能保证全局单例

@smartcmd
Copy link
Member

smartcmd commented Jun 2, 2023

准确来说你现在自定义的Property都还没规范化,一个插件自定义Property可以注册也可以不注册进注册表

z这个注册表直接删掉就行了。插件直接提供引用property的方法

@smartcmd
Copy link
Member

smartcmd commented Jun 2, 2023

你有更好的解决方式? 现在遇到的问题,同一类方块属性不同取值范围,这个如何区分? 还有,如果不从palette读取数据,就会出现循环依赖,因为构造BlockState需要BlockType,BlockType中的defaultState和allStates需要被初始化,这个如何解决。

给这个特殊的property加个special case即可

@smartcmd
Copy link
Member

smartcmd commented Jun 2, 2023

你有更好的解决方式? 现在遇到的问题,同一类方块属性不同取值范围,这个如何区分? 还有,如果不从palette读取数据,就会出现循环依赖,因为构造BlockState需要BlockType,BlockType中的defaultState和allStates需要被初始化,这个如何解决。

给组件加个onInit(),在全部组件实例化后调用即可

@CoolLoong
Copy link
Collaborator Author

Reference i

手动添加特例更难维护,还不如给属性添加一个运行时范围。
插件提供方法?意思还要A插件提供API给外部使用,那如果核心需要获取怎么操作?每个插件API你能统一?

@CoolLoong
Copy link
Collaborator Author

你有更好的解决方式? 现在遇到的问题,同一类方块属性不同取值范围,这个如何区分? 还有,如果不从palette读取数据,就会出现循环依赖,因为构造BlockState需要BlockType,BlockType中的defaultState和allStates需要被初始化,这个如何解决。

给组件加个onInit(),在全部组件实例化后调用即可
没理解,是两个注册表直接存在相互依赖关系,为什么会扯到组件

@smartcmd
Copy link
Member

smartcmd commented Jun 2, 2023

Reference i

手动添加特例更难维护,还不如给属性添加一个运行时范围。 插件提供方法?意思还要A插件提供API给外部使用,那如果核心需要获取怎么操作?每个插件API你能统一?

property肯定是static final阿,直接引用就行了

@smartcmd
Copy link
Member

smartcmd commented Jun 2, 2023

Reference i

手动添加特例更难维护,还不如给属性添加一个运行时范围。 插件提供方法?意思还要A插件提供API给外部使用,那如果核心需要获取怎么操作?每个插件API你能统一?

我认为维护复杂度小于你现在这个方案,因为只有一个特例,而且我认为这个特例是微软的疏忽。

bds内部也不是读文件的

@CoolLoong CoolLoong merged commit c438d82 into master Jun 3, 2023
@CoolLoong CoolLoong deleted the refactor/block_state branch June 3, 2023 07:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

BlockState#updatePropertyValue的性能问题 block_properties.json的正确性存疑
2 participants