2017年9月25日月曜日

メイドモデルの話。

いわきから横浜に戻るまで作業ができないので、バス内でウィルキンソンを飲みながらメモメモ。


Twitterにも書いたけど、メイドモデルは後方互換を無視できるなら、真っ新に作り変えたい部分である。ていうか自分自身構造を理解しきれていない。

なぜか知らないけど、メイドモデルに関しては無駄に継承階層が深い(スーパークラスが多い)せいで、どこに対してどういう読み込み処理をしているのかはっきり整理できてない。

継承元を変更するだけなら、ASMで書き換えればいいんだけど、それには読み込み構造を整理しておかないといけない。


そもそも、メイドモデルが使用しているクラスは、バニラのModelBaseクラスと互換性がない

メイドの状態をModelCapsという機構で管理しているので、そこは独自メソッドを用意せざるを得ないのだが、それだけ見ると、なぜバニラ非継承にしたのかが全く分からない。

LMMXから引き継いできて、いざ蓋を開けてみると、このように難解な部分が結構あるのだ。ていうかこれ本家からそのままな気が…


読み込み方にも問題がある。

現状、モデルの読み込みはmods下を手動で探索しているのだけれど、当初mods場所の取得方法がFMLInjectionDataから直接取得するというもので、これがなにを意味しているかというと、開発環境のビルドパスは自動で読み込んでくれないという、厄介な仕様だったのである。

その証拠に、ベースであるLMMXを開発環境でテストするには、コア部分を取り除いたパッケージをわざわざmods以下に配置しないといけないという問題を抱えていた。

しかもこれ、loadメソッド自体を共有する継承構造のせいで、一回で済ませればいいものを無駄に3回探索している。


さてどうやって切り替えようか。

先んじてメイドのモード読み込みに関しては、既にクラスパスからのパス取得と、探索を1回にしたうえでのHandler式に切り替えた。他の機構に関してもこちらに吸収すれば、ひとまず読み込み処理の問題は解決となる。

それをやりつつ、どうにかメイドモデル自体の構造をなんとかシンプルにできないか、いろいろ試すことにする。

0 件のコメント:

コメントを投稿