खोज…


परिचय

जब बुककिट के अंदर कुछ होता है, तो एक ईवेंट कहा जाता है, इसलिए हर प्लगइन यह तय कर सकता है कि जब भी कुछ होता है तो क्या करना है।

एक ईवेंट तब कहा जाता है जब कोई खिलाड़ी किसी ब्लॉक को खेलने की कोशिश करता है, जब एक इकाई तिरस्कृत होती है, जब कोई व्यक्ति लॉग इन करता है ... प्लगइन्स विशिष्ट घटनाओं को सुन सकते हैं और इसके साथ कई अलग-अलग तरीकों से निपट सकते हैं, उदाहरण के लिए, जब एक व्यवस्थापक को संदेश भेजते हैं PlayerLoginEvent के माध्यम से एक खिलाड़ी लॉग इन करता है।

वाक्य - विन्यास

  • बुक्कट.गेटप्लुगिनमैनगर ()। रजिस्टरएवेंट्स (श्रोता एल, प्लगिन पी);

टिप्पणियों

किसी घटना को पंजीकृत करते समय, यदि आप इसे दो बार पंजीकृत नहीं कर रहे हैं, तो देख लें! या आपका प्लगइन पंजीकृत घटना के लिए दो बार कार्य करेगा।

विशिष्ट घटनाओं को कैसे प्रबंधित करें, इसके लिए एक अतिरिक्त नज़र डालें:

श्रोता वर्ग के अंदर घटनाओं को पंजीकृत करें

import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;

public class MyEventListener implements Listener {

    /**
     * Constructor
     */
    public MyEventListener(Main plugin){
        //register Events of this class
        //with methode: registerEvents(Listener, Plugin);
        plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }      

    /**
     * A Event with HIGH priority
     */
    @EventHandler(priority = EventPriority.HIGH) //An EventHandler annotation
    public void onPlayerLogin(PlayerLoginEvent event){  //A bukkit event
        event.getPlayer().sendMessage("Welcome.");
    }
    /**
     * A Event with NORMAL (default) priority
     */
    @EventHandler    
    public void onPlayerQuit(PlayerQuitEvent event){ 
        Bukkit.broadcastMessage(event.getPlayer().getName() + " left the Server.");
    }
        

}

/**
 * Main class
 */
public class Main extends JavaPlugin {
    public void onEnable(){
        //Register Events
        new MyEventListener(this);
    }
}

अपने मुख्य वर्ग के लिए घटनाओं का पंजीकरण

public class Main extends JavaPlugin {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);   
    }
  
    @EventHandler
    public void yourEvent(Event e) {
    //...
    }
}

घटनाएँ सुनकर

बुककैट एक इवेंट आधारित प्रणाली का उपयोग करता है जो प्लगइन डेवलपर्स को दुनिया में होने वाले सर्वर और विशिष्ट कार्यों के साथ बातचीत करने और संशोधित करने की अनुमति देता है।


इवेंट हैंडलर बनाना

ईवेंट हैंडलर वे विधियाँ हैं, जिन्हें उनके ईवेंट होने पर कॉल किया जाता है। वे आम तौर पर सार्वजनिक होते हैं और सम्मेलन के द्वारा on{EventNameStem} नामांकित on{EventNameStem} । हालाँकि, सभी हैंडलर के पास @EventHandler एनोटेशन होना चाहिए, साथ ही इसके ईवेंट को केवल पैरामीटर के रूप में रखना चाहिए। यहां PlayerJoinEvent लिए एक इवेंट हैंडलर का एक उदाहरण है

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    //Run when a player joins
}

नोट: बुक्किट घटनाओं के लिए नामकरण प्रारूप {Source}{Action}({Target})Event । इन ईवेंट नामों के कुछ उदाहरण हैं: PlayerInteractEvent या BlockBreakEvent या PlayerJoinEventस्पिगोट जावदोस्क पर सभी घटनाओं की एक सूची पाई जा सकती है


घटनाएँ दर्ज करना

केवल एक इवेंट हैंडलर बनाना ही पर्याप्त नहीं है कि बुककिट आपके इवेंट में इवेंट कॉल भेजना शुरू कर सके। आपको इसे PluginManager इंटरफ़ेस के माध्यम से भी पंजीकृत करना होगा।

घटनाओं को पंजीकृत करने का सबसे आम तरीका एक वर्ग बनाना है जो श्रोता इंटरफ़ेस को लागू करता है और इसका उपयोग आपके इवेंट हैंडलर को लपेटता है।

public class EventListener implements Listener { //Implements the Listener interface

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        //Run when a player joins
    }

}

यह श्रोता वर्ग और उसके सभी कार्यक्रम तब आपके मुख्य प्लगइन वर्ग में इस तरह पंजीकृत हो सकते हैं:

@Override
public void onEnable(){
    Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}

कस्टम ईवेंट बनाना

कभी-कभी आपको अपना स्वयं का ईवेंट बनाने की आवश्यकता होती है, जिसे अन्य प्लगइन्स सुन सकते हैं (वॉल्ट, अन्य प्लगइन्स के बीच, यह करता है) और यहां तक कि रद्द भी। बुक्कट का इवेंट एपीआई इसे संभव बनाने की अनुमति देता है। आपको बस एक नई कक्षा बनाने की ज़रूरत है, इसमें Event विस्तार करें, हैंडलर जोड़ें और अपनी ईवेंट आवश्यकताओं (जैसे प्लेयर या संदेश) की विशेषताओं को जोड़ें।

import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

public final class CustomEvent extends Event {
    private static final HandlerList handlers = new HandlerList();
    private String message;

    public CustomEvent(String example) {
        message = example;
    }

    public String getMessage() {
        return message;
    }

    public HandlerList getHandlers() {
        return handlers;
    }

    public static HandlerList getHandlerList() {
        return handlers;
    }
}

अपने कस्टम ईवेंट को कॉल करना

आप अपने ईवेंट बनाने और कॉल करने के नियंत्रण में हैं, जहाँ आप कॉल करते हैं यह पूरी तरह से आप पर निर्भर है। यहाँ एक उदाहरण है

// Create the event here
CustomEvent event = new CustomEvent("Sample Message");
// Call the event
Bukkit.getServer().getPluginManager().callEvent(event);
Bukkit.getServer().broadcastMessage(event.getMessage());

याद रखें: आप अपनी घटनाओं के नियंत्रण में हैं। यदि आप इसे नहीं कहते हैं, और इस पर कार्य करते हैं, तो ऐसा नहीं होता है!

एक कस्टम घटना को सुनकर

एक कस्टम घटना को सुनना एक सामान्य घटना को सुनने के समान है।

import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;

public final class CustomListener implements Listener {
    
    @EventHandler
    public void onCustomEvent(CustomEvent event) {
    // Some code here
    }
}

अपने CustomEvent रद्दी बनाना

यदि आप कभी भी अपने ईवेंट को रद्द करना चाहते हैं, तो बस implements Cancellable , boolean cancelled और एक गेटर और सेटर करें:

import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Cancellable;

public final class CustomEvent extends Event implements Cancellable {
    private static final HandlerList handlers = new HandlerList();
    private String message;
    private boolean cancelled;

    public CustomEvent(String example) {
        message = example;
    }

    public String getMessage() {
        return message;
    }

    public boolean isCancelled() {
        return cancelled;
    }

    public void setCancelled(boolean cancel) {
        cancelled = cancel;
    }

    public HandlerList getHandlers() {
        return handlers;
    }

    public static HandlerList getHandlerList() {
        return handlers;
    }
}

बाद में, आप जांचेंगे कि क्या किसी प्लगइन ने कस्टम ईवेंट रद्द कर दिया है।

// Create the event here
CustomEvent event = new CustomEvent("Sample Message");
// Call the event
Bukkit.getServer().getPluginManager().callEvent(event);
// Check if the event is not cancelled
if (!event.isCancelled()) {
    Bukkit.getServer().broadcastMessage(event.getMessage());
}

बेसिक इवेंट हैंडलिंग

बुककैट एक इवेंट आधारित प्रणाली का उपयोग करता है जो प्लगइन डेवलपर्स को दुनिया में होने वाले सर्वर और विशिष्ट कार्यों के साथ बातचीत करने और संशोधित करने की अनुमति देता है।


इवेंट हैंडलर बनाना

ईवेंट हैंडलर वे विधियाँ हैं, जिन्हें उनके ईवेंट होने पर कॉल किया जाता है। वे आम तौर पर सार्वजनिक होते हैं और सम्मेलन के द्वारा on{EventNameStem} नामांकित on{EventNameStem} । हालाँकि, सभी हैंडलर के पास @EventHandler एनोटेशन होना चाहिए, साथ ही इसके ईवेंट को केवल पैरामीटर के रूप में रखना चाहिए। यहां PlayerJoinEvent लिए एक इवेंट हैंडलर का एक उदाहरण है

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    //Run when a player joins
}

नोट: बुक्किट घटनाओं के लिए नामकरण प्रारूप {Source}{Action}({Target})Event । इन ईवेंट नामों के कुछ उदाहरण हैं: PlayerInteractEvent या BlockBreakEvent या PlayerJoinEventस्पिगोट जावदोस्क पर सभी घटनाओं की एक सूची पाई जा सकती है


घटनाएँ दर्ज करना

केवल एक इवेंट हैंडलर बनाना ही पर्याप्त नहीं है कि बुककिट आपके इवेंट में इवेंट कॉल भेजना शुरू कर सके। आपको इसे PluginManager इंटरफ़ेस के माध्यम से भी पंजीकृत करना होगा।

घटनाओं को पंजीकृत करने का सबसे आम तरीका एक वर्ग बनाना है जो श्रोता इंटरफ़ेस को लागू करता है और इसका उपयोग आपके इवेंट हैंडलर को लपेटता है।

public class EventListener implements Listener { //Implements the Listener interface

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        //Run when a player joins
    }

}

यह श्रोता वर्ग और उसके सभी कार्यक्रम तब आपके मुख्य प्लगइन वर्ग में इस तरह पंजीकृत हो सकते हैं:

@Override
public void onEnable(){
    Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}

इवेंट प्राथमिकताएँ

बुककिट में एक सिस्टम है, जिसे इवेंट प्रायोरिटीज़ कहा जाता है, जिससे प्लगइन्स को सही पुरानी घटनाओं को संभालने में मदद मिल सके। सात प्राथमिकताएं (पहले निष्पादित से अंतिम तक पुराने में) हैं:

  • सबसे कम
  • कम
  • सामान्य (डिफ़ॉल्ट)
  • उच्च
  • उच्चतम
  • मॉनिटर

यदि आप बहुत सारी घटनाओं (जैसे सुरक्षा प्लगइन) को रद्द करने की योजना बना रहे हैं, तो समस्याओं से बचने के लिए कम प्राथमिकता (या सबसे कम) का उपयोग करना अच्छा होगा।

आपको कभी भी MONITOR की किसी घटना के परिणाम को संशोधित नहीं करना चाहिए।

@EventHandler //same as @EventHandler(priority = EventPriority.NORMAL)
public void onLogin(PlayerLoginEvent event) {
    // normal login
}

@EventHandler(priority = EventPriority.HIGH)
public void onLogin(PlayerLoginEvent event) {
    // high login
}

और जानकारी:



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow