私がしていることは、プレーヤーがPlayerInteractEvent
を使用して空気を右クリックしているかどうかを確認しています。プレーヤーのターゲットブロックを取得して、それを「ブロック」という名前の変数として保存します。ボタンを押す(遠くから)
これはすべてうまくいきましたが、私はこのブロックがボタンであるかどうかをチェックし、そうであれば "プッシュ"しますが、それは正しいことではありません。
私は、私はそうのように電力を供給し、それを設定し、その種類は実にボタンだったかどうかのチェック後org.bukkit.material.Button
にブロックをキャストしようとしている: ((Button) block.getState().getData()).setPowered(true);
が、それは私がその後、試してみましたので、何もしませんでした:block.setData((byte) (block.getData() | 0x8)));
を、そのそれをオンにしたが、それは上にとどまった。
これを正しく行うにはどうすればよいですか?
@SuppressWarnings("deprecation")
@EventHandler
public void onPlayerInteraction(PlayerInteractEvent e) {
if (e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
Block block = e.getPlayer().getTargetBlock((Set<Material>) null, 200);
if (block.getType().equals(Material.STONE_BUTTON) || block.getType().equals(Material.WOOD_BUTTON)) {
block.setData((byte) (block.getData() | 0x8));
}
}
}
PS:私はSpigot 1.12.2 API
を使用しています。ここ
は完全なコードです。
ああ、そう、あなたは空気のイベントで右クリックを自動的にbukkitによりキャンセルしたため、キャンセルignoreは追加する必要があります。 '@EventHandler(ignoreCancelled = true)'を試してください。 – i0xHeX
コメントボックスには、「コメントを使用して詳細情報を求めたり、改善を提案する」と表示されます。単に「これは機能しません」と言っても何が間違っているかを見つけるのに役立ちません。 – Moira
さて、私はボタンをクリックする方法を考えましたが、今はプレイヤーが手元にアイテムを持っていないときに右クリックを検出している別の問題があります。 –