をプレイヤーがコマンドを実行した場合、あなたはどこかでプレイヤーのUUIDを格納する必要が知るために:
これは私が試したものです。まず、Set<UUID>
を作成して、コマンドを実行したすべてのプレイヤーのすべての一意のIDを一時的に保存します。このセットに格納されているプレイヤーを見ると、コマンドを実行したことがわかります。 UUID
は36文字の文字列で、すべてのプレーヤーでユニークで、すべてのサーバーで同じです。 Set
は次のようになります。
final Set<UUID> players = new HashSet<>();
次に、あなたのコマンドを作成する必要があります。
@Override
public boolean onCommand(CommandSender sender, Command cmd, String cl, String[] args) {
//Check if your command was executed
if(cmd.getName().equalsIgnorecase("yourCommand")){
//Check if the executor of the command is a player and not a commandblock or console
if(sender instanceof Player){
Player player = (Player) sender;
//Add the player's unique ID to the set
players.add(player.getUniqueId());
}
}
}
さて、次に何をするか、プレイヤーが本をクリックしたときに見にPlayerInteractEvent
をリッスンです:私はこのようなことを行うだろう。あなたのプレーヤーがSet
にいるとわかると、彼らはコマンドを実行したことを知っています。
@EventHandler
public void onInteract(PlayerInteractEvent event){
//Check if the player right clicked.
if(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK){
//Check if the Set contains this player
if(players.contains(event.getPlayer().getUniqueId()){
//Check if the player had an item in their hand
if(event.getPlayer().getItemInHand().getType() == Material.BOOK){
//Remove player from the set so they have to execute the command again before right clicking the book again
players.remove(event.getPlayer().getUniqueId());
//Here you can do whatever you want to do when the player executed the command and right clicks a book.
}
}
}
}
それでは、私がやったことは、プレイヤーがコマンドを実行したとき、Set
に保存され:ここで私はEventHandler
があることになるだろう方法です。次にPlayerInteractEvent
を聞きます。これは基本的にプレーヤーが対話するたびに呼び出されるコールバックメソッドです。これは、プレイヤーがプレッシャープレートを歩いているとき、ブロック上を右か左にクリックしたときなどです。
その中でPlayerInteractEvent
には、プレイヤーが右クリックした場合にそのプレーヤーが格納されているかどうかがチェックされますブロック内を右クリックして、プレイヤーが手に本を持っているかどうかを確認します。それでも問題がなければ、Set
からプレイヤーを削除して、同じ操作を実行するためにもう一度コマンドを実行する必要があります。
イベントを登録してListener
を実装することも忘れないでください。
Set
について詳しく知りたい場合は、Javadocsはhereです。
なぜ複数回実行されるタスクの中にイベントリスナーを登録したいのですか?リッスンしたいイベントごとに、リスナー内に1つのメソッドを実装するだけで済みます(このメソッドはイベントが発生するたびに呼び出され、繰り返しタスクは必要ありません)。 –
このコマンドを実行すると、書籍を右クリックするまで右クリックしているかどうか確認したいです。 –
これは別の方法で行う必要があります。イベントは一度しか登録できません。私はPlayerInteractEventを登録し、プレーヤーが書籍を右クリックするたびに、クリックした時間とその名前をリストに挿入します。プレイヤーがコマンドを実行するたびに、最近彼らが本を右クリックしたかどうかを確認することができます。 –