खोज…


एक इवेंट श्रोता बनाना

अपने तरीकों को पंजीकृत करने के लिए, EventHandler (s) वाले वर्ग को श्रोता इंटरफ़ेस को लागू करना होगा।

import org.bukkit.event.Listener;

public final class ListenerClass implements Listener {
}

आपको जावा कॉलगर्ल का विस्तार करने वाली कक्षा में अपने ऑनएनेबल मेथड में निम्न कॉल जोड़कर ईवेंट श्रोता को पंजीकृत करना होगा:

getServer().getPluginManager().registerEvents(new ListenerClass(), this);

अपने श्रोता वर्ग में किसी भी घटना को सुनने के लिए, आपको विधि पर @EventHandler एनोटेशन के साथ एक विधि बनानी होगी। ईवेंट प्रकार विधि के एकमात्र तर्क में टाइप द्वारा निर्दिष्ट किया गया है। आपकी इच्छानुसार विधि का नाम दिया जा सकता है।

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

public class ListenerClass implements Listener {
    @EventHandler
    public void onPlayerLogin(PlayerLoginEvent event) {
        event.getPlayer().sendMessage("Welcome to the server!");
    }
}

इवेंटहैंडलर पैरामीटर्स

org.bukkit.event.EventHandler एनोटेशन कुछ मापदंडों को स्वीकार करता है।

प्राथमिकता - आपके श्रोता की प्राथमिकता को दर्शाता है। निष्पादन के क्रम में छह अलग-अलग प्राथमिकताएँ हैं: LOWEST, LOW, NORMAL [डिफ़ॉल्ट], HIGH, उच्चतम, MONITOR। इन स्थिरांक का org.bukkit.event.EventPriority enum से है।

यदि आप किसी घटना के परिणाम को बदलना चाहते हैं, तो LOWEST से उच्चतम पर बहुत सावधानी से चुनें। LOWEST पर सामान्यीकृत सुरक्षा प्लगइन्स, नोर्मल पर अधिक विशिष्ट प्लगइन्स, और हाई पर प्लगइन्स को ओवरराइड करें। यदि आप किसी घटना के होने पर कार्रवाई करना चाहते हैं, लेकिन परिणाम नहीं बदलते हैं, तो MONITOR का उपयोग करें।

नोट: MONITOR प्राथमिकता का उपयोग केवल पढ़ने के लिए किया जाना चाहिए। किसी इवेंट के परिणामों को देखने के लिए प्लगइन्स को लॉग करने के लिए यह प्राथमिकता उपयोगी है और उन प्रकार के प्लगइन्स के साथ मानों को संशोधित करने में हस्तक्षेप हो सकता है।

नजरअंदाज कर दिया - एक बूलियन जो इंगित करता है कि क्या आपके श्रोता को आग लगनी चाहिए या नहीं, यदि घटना को रद्द कर दिया गया है इससे पहले कि वह इस घटना को संभालने के लिए श्रोता की बारी है। डिफ़ॉल्ट रूप से गलत।

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

public final class LoginListener implements Listener {
    @EventHandler
    public void normalLogin(PlayerLoginEvent event) {
        // Some code here
    }    

    @EventHandler(priority = EventPriority.HIGH)
    public void highLogin(PlayerLoginEvent event) {
        // Some code here
    }
}

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

कभी-कभी आपको अपना स्वयं का ईवेंट बनाने की आवश्यकता होती है, जिसे अन्य प्लगइन्स सुन सकते हैं (वॉल्ट, अन्य प्लगइन्स के बीच, यह करता है) और यहां तक कि रद्द भी। बुक्कट का इवेंट एपीआई इसे संभव बनाने की अनुमति देता है। आपको बस एक नई कक्षा बनाने की ज़रूरत है, इसमें 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());
}

घटनाओं या श्रोताओं को अन-रजिस्टर करना

आप अलग-अलग घटनाओं, संपूर्ण श्रोता वर्गों या अपने प्लगइन द्वारा पंजीकृत सभी घटनाओं या अन्य प्लगइन्स द्वारा भी पंजीकृत कर सकते हैं!

विशिष्ट घटना को अन-रजिस्टर करें

प्रत्येक ईवेंट क्लास में getHandlerList () स्टैटिक मेथड है, उसे कॉल करें और फिर आप .unregister () मेथड का उपयोग कर सकते हैं।

PlayerInteractEvent.getHandlerList().unregister(plugin);
// this will unregister all PlayerInteractEvent instances from the plugin
// you can also specify a listener class instead of plugin.

अब आप जानते हैं कि आपको अपने कस्टम ईवेंट में getHandlerList () की आवश्यकता क्यों होगी।

सभी घटनाओं को पंजीकृत करें

हैंडलरलिस्ट क्लास और उसके अनरिजिस्टर () स्टैटिक विधि का उपयोग करके आप आसानी से श्रोता वर्ग या प्लगइन्स से ईवेंट को अनरजिस्ट कर सकते हैं।

HandlerList.unregisterAll(plugin);
// this will unregister all events from the specified plugin
// you can also specify a listener class instead of plugin.


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