https://linen.dev logo
【KaizPatch】照明モデルの描画スクリプトが上手く動かない
# forum
y
純正1.7.10/1.12.2で正常稼働を確認している照明モデルの描画スクリプトが、何故かKaizPatchX-1.7.1では正常に動きません。余り難しいコードのスクリプトではないのですが、何か原因に心当たりある方居ませんでしょうか?
KaizPatchX1.6.1では動いていた気がするんですが、どこが原因かさっぱり見当が付かず困っています……
h
見た感じ特に問題はなさそうなので、signalLevelDatamapの値をセットするところ(おそらくサーバースクリプト側?)の方で正常な値をセットできてない可能性はないでしょうか?
y
例えばサーバスクリプト側ではこんな感じなのですが、1.7.10純正RTMや1.12.2では上手く動作しているので破綻して居そうな感じではないのですが、どのあたりに原因が有るのか分からなくて……
h
ちょっとコードの量が多いので見るだけで検証するのは難しそうですね・・・ 具体的にどう正常に動かないかもわからないのでなんとも言えませんが、原因を探る方法としてデバッグログとNGTLog.debug(String)を使ってログ内に変数の中身を出力するなどして調べることもできます。 ・ログの有効化 ランチャー起動→左下にある[設定]→[Minecraft: Java Editionの起動時に出力ログを開く]にチェックを入れる ・スクリプトにログ出力を仕込む importPackage(Packages.jp.ngt.ngtlib.io);を設置 以下、調べたい地点で NGTLog.debug("文字列");を仕込みます。 例えば、var signalLevel = ◯◯という変数があったとしてそれを出力する場合、以下のように書いて出力することができます。 NGTLog.debug("signalLevel : " + signalLevel); また、デバッグ出力はそこまでコードが通っているかどうかについても調べることができます(出力されない=そこまで到達していないと考えられる) 以下個人的に気になった点(関連性があるかは不明) 1. おまじないの下にある1.12向けの処理でcommandBlockPosが不使用 2. searchInputPosWorldのgetLoadedTileEntityListは配列ではなくList型 →List型の長さはentities.size()、中身はentities.get(i)で取得します
y
ありがとうございます。ちょっと検証してみます……
k
詳しく見ていないので何ともですが、自分はGL11.glPushMatrix();/GL11.glPopMatrix();の位置な気がしますね... PassによってGL11.glPopMatrix();が実行されない場合があるので、先頭のGL11.glPushMatrix();を削除して、pass==0とpass==2にGL11.glPushMatrix();を入れてあげるともしかしたら治るかもしれないです
y
なるほど……後ほど検証してみます。情報ありがとうございます。
GL11.glPushMatrix();/GL11.glPopMatrix();の位置の修正を試してみましたが、上手く行きませんでした。 そのほかの検証により信号機entityへの出力や連携機能などは正常に動作している(サーバースクリプト上の処理は上手く行っている)事が分かったので、何らかの影響で描画面のみがうまく作動していないように思えます。
また、表示が機能しないながらも数値(000)の描画は上手く行っていることから、描画構文自体が動いていないわけでもなさそうです
あと、RTMのATCモデルEntityでは描画面の動作が確認されているため、設置物型(TileEntity)のみ不具合が生じているようです
k
家帰ってきたのでちゃんと見てみたのですがスクリプトは問題無さそうでした 可能であればモデルパック確認させていただきたいです
粗末なコードで恐縮ですが、よろしくお願い致します……
k
試しにsignalLevelDatamap=(Int)3とsignalLevelDatamap=(Int)333を入れてみたところこうなったので描画は問題無さそう...?
y
うーん……原因が分からないですね…… 純正1.7.10と、1.12.2では動作を確認しています
昔のバージョンでは正常に動いていた記憶が有ったので検証したところ、だいぶ前のKaizPatchX-1.5.2では動作しました。1.6台以降はダメっぽいです
k
使い方がいまいちよくわからないので、正常に動いてる状態のモデル(とコマブロ?)を設置したワールドデータを貰いたいです
基本的な機能をセットアップ済みのワールドを用意しました。純正1.7.10.41のワールドですが、Kaiz版で読み込んでも置き換えがかかると思います……
こちらが必須パック(不具合当該のパック)になります。前提パック等は有りません
よろしくお願いいたします。
k
完全に理解
DataMap#setInt(key, value, flag)のflagが1の場合、KaizPatchではクライアント側で保存されないためこのような現象が発生します
setInt/setString/SetBoolean等も同様
これは、サーバー側からSYNC flagのみを設定した場合に無限にパケットが行き来するためです。
クライアント側での値の保存が必要な場合、flagを3に設定いただくと正常に動作します。
この動作は1.6.0からの正常な動作でありまた仕様であるため、恐れ入りますがKaizPatch側の修正の予定はありません。
y
なるほど、同期と保存を両方行うflag値にすればよかったんですね!私としても原因が判明しとても助かりました!ありがとうございます……