https://linen.dev logo
自分の電車のみにアクションを限定させる
# forum
r
話題変更しまして自分の運転している電車のみアクションを限定化する方法についてです
var atoBoolean = (!NGTUtilClient.getMinecraft().field_71462_r && Keyboard.isKeyDown(Keyboard.KEY_K)); if (dataMap.getBoolean("isKkeyDown") != atoBoolean) { dataMap.setBoolean("isKkeyDown", atoBoolean, 3); } Kキーを押すと"isKkeyDown"がtrueになるような構文ですが、シングルの時点で車両に乗ってない時、別の車両に乗っているとき遠く離れた時でも実行されてしまいます。 これを自分の乗っている車両(具体的には運転席と車掌スクリプトの動作範囲内)に限定させるにはどうすればいいでしょうか
見た感じサーバースクリプト側の設定が必要なようでHI03さんの車掌スクリプトが参考になるかと
e
Detect if the driver is the same as the one who press the key in Render Script, and then send the operation to server script via datamap
y
私もキー検出の競合対策で以前カイザァさんに教えて頂いた対象の絞り込みを実装しているのですが、 先日行われた夏の咲島祭2023マルチイベントにて、付近の別の電車entityの運転者のキー入力と干渉しているような挙動があり、解決法があれば私も知りたく思います…… https://discord.com/channels/799152792518393917/801085432556552262/895648708518088714
h
大雑把な考えとしては「車両の運転席に乗車しているプレイヤー == クライアントプレイヤー」という条件分岐を組むと、車両に乗っている自分だけが条件分岐を達することができます(描画スクリプトの場合)
Copy code
js
importPackage(Packages.jp.ngt.ngtlib.util);//NGTUtil

//1.7.10
if (entity.field_70153_n == NGTUtil.getClientPlayer()){
  //処理
}

//1.12.2
if (entity.func_184187_bx() == NGTUtil.getClientPlayer()){
  //処理
}
ここでいう処理は車両(entity)に乗ってるプレイヤーの描画スクリプトだけが実行できるため、dataMapの競合が実質的になくなります