team packetのmode fieldをskript-reflectで記述したときにうまく動かない
Minecraft 1.12.2 (非PR)
skript 2.5.3
skript-refrect 2.2.3
ProtocolLib 4.8.0
その他:
SkQuery 3.6.4
SkBee 1.10.2(scoreboardはオフ)
Mundosk 1.8.6
16 Replies
Mundoskを用いてteam packetのremove fieldを実行し、その後skript-reflectに書き換えたところ、Mode fieldの書き換えがうまくいきませんでした。
1つ目、2つ目、4つ目の"#"で置き換えても問題なく動きましたが、3つ目を置き換えると
がコンソールに出力され、うまく動作しませんでした。
試したこと:
- write(0, 1)にする → 同じ出力
- #の置き換えの組み合わせをすべて試す → 同じ出力 getIntegers()が含まれていないときは正常に動く
- getBytes().write(0, 1)およびgetBytes().write(0, 1.byteValue()) → エラー
- getIntegers().write(0.intValue(), 1.intValue()) → コンソールへの出力はないが、何も起こらない
疑問:
- wikiだとfield typeがByteになっているのに、Mundoskではintで指定してうまく動作するのはなぜか
- intがいきなり1から始まるのはなぜか
int pnum 0
ではないのかやりたいことと背景:
1.17.1で視点主によって違う色の発光を見せたい
glowのタイミングも視点主によって変えたい
1.17.1ではThat packet Addon(ロード時のエラー),skirt(ロード時のエラー),mundosk(ver非対応),morkazsk(中身空)が動かなかった
metadata packetを用いた発光はskUnityで見つけ、skript-reflectで正常に動作することを確認
team packetを用いたものがthat packet addon環境のものしか見つからなかったため、skript-reflectで書くことにした
1.12.2のmundoskと比べながらsk-reflectでteam packetが動くようにする(見たところpacketの構造は1.12.2と1.17.1で変わっていない)
とりあえずteam createの前に、実験しやすいremoveで試す
参考:
skirtの同機能(ここではgetIntegers().write(0, 1)で動いている?
https://github.com/MrsDarth/Skirt/blob/master/src/main/java/io/github/mrsdarth/skirt/protocolLib/elements/EffGlowColor.java
Protocol 1.12.2時点でのwiki
https://web.archive.org/web/20170920155527/https://wiki.vg/Protocol#Player_Position_And_Look_.28clientbound.29:~:text=of%20entity%27s%20passengers-,Teams,-Creates%20and%20updates
GitHub
Skirt/EffGlowColor.java at master · MrsDarth/Skirt
Contribute to MrsDarth/Skirt development by creating an account on GitHub.
結構頑張ったんですけど自分じゃどうにもならなさそうだったので助けてほしいです。
お願いします。
うまく動作しないというのは、何も起こらなかったということです。
バニラコマンドで色付きのチームを作って、それを消すパケットを送ることで色の変化を見て検証してます。
あ
できました
結局なんでIntの1なのかはわからない・・・
skriptにはfloatとかintはない
整数はlongだし少数はdouble
って決まってる
variables.csvとかみたらわかる
パケットで扱うときは変換したほうがいいってことですね
getIntegers().write(1.intValue(), 1.intValue())が動いて
getIntegers().write(1, 1.intValue())が動かないのはわかるんですけど、
getStrings().write(0, "glow")はなんで動くんでしょうか
もしかして:1.17でもskript-packetは使える
このエラーはfieldに対しての書き込みが失敗したってことだから
そのfieldがintなのにlongを書き込もうとして失敗してるから
エラー履いてる
write()は
write(int index, T value)のことで
indexはlongわたしても問題ない
てことはgetIntegers().write(1, 1.intValue())mo
動くはずなのか
そういうこと
一番上に来るはずのintのindexが0じゃなくて1から始まってるのはたまたまですか?
1.17でやってみたら0になってたんですけど
一番上に来る?
indexはフィールドごとに0から始まると思ってたんですけど、1つしかないはずのintのindexがなぜか0でなく1だったのが
不思議で
です
上からフィールドタイプごとに0,1,2,3,....って割り当てられてるっていう解釈です
Teamnameはstringで最初なので0,ModeはByte(≒int)で最初なので0
その辺はprotocollibの仕様だから
よくわからん
あんま考えなくていいところですね
てことはprotocollibとprotorolのwikiにずれがある可能性があるのか