bukkit
आदेश
खोज…
वाक्य - विन्यास
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
एक कमान संभालना
कमांड को संभालने के लिए, आपके पास एक क्लास होना चाहिए जो CommandExecutor इंटरफ़ेस को लागू करता है। JavaPlugin वर्ग (आपका प्लगइन का मुख्य वर्ग) पहले से ही इसे लागू करता है।
CommandExecutor इंटरफ़ेस को लागू करते समय, निम्न विधि को लागू किया जाना चाहिए:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true; ///Should return false if you want to show the usage
}
प्रेषक वह है जिसने आदेश भेजा है। यह एक प्लेयर या कंसोल हो सकता है।
CMD वह कमांड है जिसे आप सुन रहे हैं, जैसा कि plugin.yml में घोषित किया गया है। लेबल के साथ भ्रमित होने की नहीं।
लेबल इस कमांड को निष्पादित करने के लिए उपयोग किया जाने वाला उपनाम है, यह स्लैश के बाद प्रेषक प्रकार है।
और आखिरकार, तर्क वे तर्क हैं जो प्रेषक ने आपकी कमांड भेजने के लिए उपयोग किए होंगे।
एक संभावित कमांड के रूप में जा सकते हैं
/ केरुकर बताओ, केरूकर!
बताएं कि आपका लेबल होगा, और आपके कमांड के रूप में भी परिभाषित किया जा सकता है यदि आपने plugin.yml में ऐसा कहा है;
'कर्कर', 'हाय,', 'कर्कर!' आपके args क्रमशः 0, 1 और 2 हैं
एक वापसी के रूप में, आप शायद हमेशा सच लौटना चाहेंगे जब आपको इस तरह से सब कुछ होने की उम्मीद थी। यदि आप प्रेषक को अपने plugin.yml में परिभाषित कमांड का उपयोग दिखाना चाहते हैं, तो आपको गलत लौटना चाहिए
एक सरल सेट GameMode कमांड (/ ग्राम) )
यह उदाहरण onCommand का उपयोग करने का एक बहुत ही मूल उदाहरण दिखाता है। मैं सीधे onCommand में आपके आदेशों को संसाधित करने का सुझाव नहीं देता, लेकिन यह इस सरल मामले के लिए चाल करता है।
इस उदाहरण में हम खिलाड़ी के गेममोड को सेट करने का प्रयास करते हैं।
पहली चीज़ जो हमें करने की ज़रूरत है, वह यह सुनिश्चित करें कि प्रेषक एक ConsoleCommandSender नहीं है, क्योंकि हम कंसोल के गेमकोड को सेट नहीं कर सकते हैं। यह (प्रेषक इंस्टोफ़ प्लेयर) के साथ किया जाता है।
अगला, हम चाहते हैं कि खिलाड़ी टाइप करे / gm CREATIVE (या जो कभी अन्य गेममोड हो) तो हमें 2 चीजों की जांच करनी होगी:
- सुनिश्चित करें कि वे 1 तर्क (रचनात्मक) में पास हों
- सुनिश्चित करें कि उनकी कमान "ग्राम" थी
हमने ये जांच पूरी की: args.length == 1 && लेबल.equalsIgnoreCase ("ग्राम")
अब हम जानते हैं कि खिलाड़ी "/ gm x" टाइप करता है।
अगली चीज़ जो हमें करने की ज़रूरत है वह है आर्ग्स [0] को गेमकोड ऑब्जेक्ट में बदलना ताकि हम इसे प्लेयर पर लागू कर सकें। यह GameMode.valueOf (स्ट्रिंग) के साथ किया जा सकता है, हालांकि, जावा गणन प्रलेखन के अनुसार, यदि एक स्ट्रिंग को valueOf () में पारित किया जाता है जो किसी गणना से मेल नहीं खाता है, तो यह एक अवैध अप्रमाणन अपवाद होगा - इसलिए हमें यह सुनिश्चित करना होगा उसे पकड़ लो।
एक बार हमारे पास गेममोड होने के बाद, हम आगे जा सकते हैं और बस p.setGameMode (gm) का उपयोग करेंगे और खिलाड़ी का गेममोड बदल जाएगा। इस मामले में कि हमने एक अपवाद पकड़ा है - हम बस एक स्टेटमेंट का प्रिंट आउट लेते हैं और गलत रिटर्न करते हैं।
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
final Player p = (Player) sender;
if (args.length == 1 && label.equalsIgnoreCase("gm")) {
try {
GameMode gm = GameMode.valueOf(args[0]);
p.setGameMode(gm);
p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
return true;
} catch (IllegalArgumentException e) {
p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
return false;
}
}
}
return false;
}
कमान मुख्य वर्ग में नहीं
यदि आपके पास बहुत सारी कमांड हैं, तो आपको उन सभी को मुख्य कक्षा में नहीं रखना चाहिए।
एक नया वर्ग बनाएं और इसे
CommandExecutor
लागूCommandExecutor
निम्न को वर्ग में जोड़ें:
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { }
अपने मुख्य वर्ग में ऑनएनेबल में जोड़ें (कमांड के नाम के साथ कमांड का नाम बदलें और कमांड एक्ज़िक्यूटर क्लास के नाम के साथ):
getCommand("commandName").setExecutor(new CommandExecutor());