bir yere oyuncunun UUID'sini saklamak zorunda bilmek. Her şeyden önce, komutu çalıştıran tüm oyuncuların tüm Unique ID'lerini geçici olarak saklayan bir Set<UUID>
yaratırsınız, böylece bu sette saklanan bir oyuncu gördüğünüzde, komutu uyguladıklarını bilirsiniz. Bir UUID
, her oyuncu için benzersiz olan ve her sunucuda aynı olan 36 karakterlik bir dizedir. Böyle Set
olun:
final Set<UUID> players = new HashSet<>();
Sonraki size komutu yapmak gerekir. Böyle yapayım:
@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());
}
}
}
Şimdi ne yapacağım oyuncu kitabı tıkladığında PlayerInteractEvent
görmek için dinlemek olduğunu. Oynatıcının Set
’da olduğunu görürseniz, komutu uyguladıklarını biliyorsunuzdur. , Oyuncu komutu çalıştırıldığında
@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.
}
}
}
}
Yani ne yaptık olduğunu onlara Set
saklamak: İşte EventHandler
o olması nedeniyledir. Sonra PlayerInteractEvent
'u dinleyin. Bu temelde, bir oyuncu her etkileşiminde çağrılan bir geri çağırma yöntemidir. Bir oyuncu oyuncu o Set
saklanır eğer oyuncu sağ tıklandığında ise bir blokta veya havada bir oyuncu sağ veya sol tıklama o PlayerInteractEvent
yılında
, ben, çek vs. zaman, bir pressureplate adımları bu olabilir Havada veya sağda bir blok tıkladıktan sonra oyuncunun elinde bir kitap olup olmadığını kontrol edin. Bu doğruysa, oyuncuyu Set
'dan kaldırırım, böylece aynı eylemi gerçekleştirmek için komutu bir kez daha çalıştırmaları gerekir. Ayrıca olayları kaydetmeyi ve Listener
'u uygulamayı da unutmayın.
Set
hakkında daha fazla bilgi edinmek isterseniz, Javadocs here bulunabilir.
Neden birden çok kez çalıştırılacak bir görev içinde bir olay dinleyicisi kaydetmek istiyorsunuz? Dinlemek istediğiniz her etkinlik için, bir dinleyicinin içinde sadece bir yöntem uygulamanız gerekir (bu yöntem etkinliğin her tetiklendiğinde çağrılır, yinelenen bir göreve gerek yoktur). –
Bu komutu çalıştırıyorlarsa bir kitabın sağ tıklatılıp tıklanmadıklarını kontrol etmek istiyorum. –
Bir kitabın sağ tıklamasına rağmen, bunun farklı bir şekilde yapılması gerekecek. Etkinlikler sadece bir kez kaydedilebilir. PlayerInteractEvent'i kaydettiririm ve bir oyuncu bir kitaba sağ tıklarsa, tıkladıkları zamanı ve isimlerini bir listeye ekler. Daha sonra, oyuncu komutu her çalıştırdığında, kitapla yakın zamanda tıklanmış olup olmadığını kontrol edebilirsiniz. –