Bukkit 플러그인 개발 튜토리얼 - 모니터
모니터. - Listener.
학습 목표
감청기의 의미를 이해하다
감청기는 개발자로 하여금 관련 검측 조작을 간소화할 수 있다. 예를 들어 유저 이동, 유저 말하기, 서버 닫기...등, 서버에서 일부 작업을 하면 - BukkitAPI의 org를 터치합니다.bukkit.이벤트 패키지의 내용: org.bukkit.event.player #AsyncPlayer Chat Event(javadoc에 따르면 이 클래스는 유저가 비동기적으로 말할 때의 사건을 처리하는 데 사용된다는 것을 알 수 있습니다)
모니터 등록 이해
이벤트를 등록하려면 JavaDoc의 주석이 어떻게 쓰였는지 봐야 돼요.
org를 엽니다.bukkit.이벤트 아래에서 우리는 주해 EventHandler, 인터페이스 Listener를 볼 수 있다
정신이 없어요?차 한잔 마시고 오세요~ 그럼 위의 주석이 있으면 저희가 정보를 얻을 수 있어요.
그래서 저희가 다음 코드를 쓸 수 있어요.
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
public final class Tutorial1 extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getLogger().info("onEnable has been invoked!");
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
event.getPlayer().sendMessage("chat!");
}
}
그러면 우리는 코드를 컴파일하고 포장하여plugins 폴더에 넣고 게임에 들어가서 말을 하면 onChat 방법이 실행되지 않은 것을 발견할 수 있습니다. 왜 그런지요?플러그인 관리자라는 Bukkit이 제공하는 플러그인 관리 클래스를 살펴보겠습니다. 방법을 볼 수 있습니다.
registerEvents(Listener listener, Plugin plugin)는 전송된 감청기 클래스의 모든 이벤트를 등록합니다.
그러면 저희가 onEnable에 다음 코드를 입력하도록 하겠습니다.
Bukkit.getPluginManager().registerEvents(this, this);
테스트를 다시 컴파일하면 onChat 방법의 내용이 촉발되는 것을 발견할 수 있다
전체 코드:
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
public final class Tutorial1 extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getLogger().info("onEnable has been invoked!");
// , ,
// ChatListener
// Bukkit.getPluginManager.registerEvents(new ChatListener(), this);
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
event.getPlayer().sendMessage("chat!");
}
}
@EventHandler 메모의 역할
그러면 우리는 이미 감청기의 등록 조작을 배웠다. 그러면 이 EventHandler를 연구해 보자. 우리 먼저register Events () 방법의 구체적인 실현을 보자.
public void registerEvents(Listener listener, Plugin plugin) {
......
for (Map.Entry, Set> entry : plugin.getPluginLoader().createRegisteredListeners(listener, plugin).entrySet()) {
getEventListeners(getRegistrationClass((Class)entry.getKey())).registerAll((Collection)entry.getValue());
}
}
우리는 get Registration Class () 방법을 보았고, 이 방법이 무엇을 했는지 다시 한 번 봅시다
public Map, Set> createRegisteredListeners(Listener listener, Plugin plugin) {
Validate.notNull(plugin, "Plugin can not be null");
Validate.notNull(listener, "Listener can not be null");
this.server.getPluginManager().useTimings();
Map, Set> ret = new HashMap();
Method[] privateMethods;
try {
Method[] publicMethods = listener.getClass().getMethods();
privateMethods = listener.getClass().getDeclaredMethods();
Set methods = new HashSet(publicMethods.length + privateMethods.length, 1.0F);
for (Method method : publicMethods) {
methods.add(method);
}
for (Method method : privateMethods) {
methods.add(method);
}
}
catch (NoClassDefFoundError e) {
plugin.getLogger().severe("Plugin " + plugin.getDescription().getFullName() + " has failed to register events for " + listener.getClass() + " because " + e.getMessage() + " does not exist.");
return ret;
}
Set methods;
for (final Method method : methods) {
EventHandler eh = (EventHandler)method.getAnnotation(EventHandler.class);
......
}
그러면 우리는 위의 코드에서 BukkitAPI가 전송된 Listener 구현 클래스를 검사한 다음에 전송된 Listener 구현 클래스의 모든 방법을 반사한 다음에 필요한 일을 한 후에 이벤트를 등록할 수 있음을 발견할 수 있다
위의 코드에 근거하여 우리는 다음과 같은 결론을 얻을 수 있다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.