이 게시판에 글을 작성하시려면 인증 개발자 권한이 필요합니다. 언제든지 지원해주세요(바로가기).

API or 라이브러리

쉽게 명령어를 추가하자 - EzFramework

KingCjy 2020.02.05 조회 수 196 추천 수 3
마인크래프트 버전 모두,1.5.2계열,1.8계열,1.12계열,1.15계열 
API 종속성 Bukkit,Spigot 

Ezframework

Download Maven Central Build Status License

Ezframework는 Bukkit에서 사용할 수 있는 IOC 기반 커맨드 프레임워크입니다.

사용 방법

Maven

io.github.kingcjyezframework-core1.1.1org.apache.maven.pluginsmaven-compiler-plugin1.8
                1.8-parameters

Gradle

dependencies {
    implementation 'io.github.kingcjy:ezframework-core:1.1.1'
}

compileJava.options.compilerArgs = ['-parameters']

초기화

class Main extends JavaPlugin {
    @Override
    public void onEnable() {
        EzFramework.run(this);
    }
}

커맨드 추가


@EzCommand("message")
public class MessageCommand {

// /message 
    @Command("")
    public void broadcastMessage(@PathVariable String message) {
        Bukkit.broadcastMessage(message);
    }

// /message 
    @Command("")
    public void messageToPlayer(@PathVariable String playerName, @PathVariable String message) {
        Player player = Bukkit.getPlayer(playerName);

        if(player != null) {
            player.sendMessage(message);
        }
    }
}

명령어 오류

command: /message

@EzCommand("message")
public class Send {
    @NotFound
    public void notFound(@Sender Player player) {
        player.sendMessage("[Server] -----------------------");
        player.sendMessage("[Server] /message ");
        player.sendMessage("[Server] /message ");
        player.sendMessage("[Server] -----------------------");
    }
    ...
}

파라미터 추가

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Sender {
}

@Component
public class SenderMethodParameterProvider implements HandlerMethodParameterProvider {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterAnnotation(Sender.class) != null && parameter.getParameterType().equals(Player.class);
    }

    @Override
    public Object resolveParameter(CommandArgs commandArgs, MethodParameter parameter) {
        Player player = (Player) commandArgs.getCommandSender();
        return player;
    }
}

@EzCommand("message")
public class Send {
    @Command("help")
    public void sendMessage(@Sender Player player) {
        player.sendMessage("[Server] -----------------------");
        player.sendMessage("[Server] /message ");
        player.sendMessage("[Server] /message ");
        player.sendMessage("[Server] -----------------------");
    }
    ...
}

기본 제공 파라미터

@Command("")
public void onCommand(CommandArgs commandArgs, CommandSender commandSender, Command command, @PathVariable String placeholder) {

}

@PathVariable

@Command("message send ")
public void sendMessage(@PathVariable String playerName, @PathVariable String message)

@PathVariable 은 공백 단위로 파라미터가 주입됩니다. 예시) /message send KingCjy hi -> playerName: KingCjy, message: hi

하지만 마지막 placeholdermessage 는 공백을 무시합니다. 예시) /message send KingCjy hi my name is KingCjy ->playerName: KingCjy, message: hi my name is KingCjy

이벤트 등록

@EzEvent 어노테이션을 붙이면 자동으로 이벤트에 등록됩니다.

getServer().getPluginManager().registerEvents(Listener listener, JavaPlugin javaplugin);를 대신 합니다.

@EzEvent
public class JoinEvent implements Listener {

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        player.sendMessage("[TestPlugin]: 환영합니다!");
    }
}

Help 명령어 자동생성

@GenerateHelpCommand, @Description

@GenerateHelpCommand
@EzCommand("message")
public class MessageCommand {
    @Command("send ")
    @Description("플레이어에게 메세지를 보냅니다.")
    public void messageToPlayer(@PathVariable String playerName, @PathVariable String message) {
        Player player = Bukkit.getPlayer(playerName);

        if(player != null) {
            player.sendMessage(message);
        }
    }

    @Command("broadcast ")
    @Description("플레이어 전체에게 메세지를 보냅니다.")
    public void broadcastMessage(@PathVariable String message) {
        Bukkit.broadcastMessage(message);
    }
}

기본 메세지

/message help

-------- [EzFramework] --------
/message send  - 플레이어에게 메세지를 보냅니다.
/message broadcast  - 플레이어 전체에게 메세지를 보냅니다.
-------------------------------

메세지 커스텀

resource/me/kingcjy/ezframework/resource/help.ez 추가

default

-------- [EzFramework] --------§3{help.command} - {help.description}
-------------------------------

커스텀


-------------------------------
-------- [내 플러그인!!] ---------
§3{help.command} - {help.description}

-------------------------------

결과

-------------------------------
-------- [내 플러그인!!] ---------
/message send  - 플레이어에게 메세지를 보냅니다.
/message broadcast  - 플레이어 전체에게 메세지를 보냅니다.
-------------------------------

사용 예제

예제 >> GITHUB


3개의 댓글

아이스틴
2020.02.05

쉽.,쿤효!

WintChoco
2020.02.05

감사합니다~

DDang_
2020.02.05

감사합니다

고급 자료실

인증 개발자 분들이 창작하신 고급 자료들을 만나보실 수 있습니다!

마인크래프트 버전
API 종속성
조회 수 제목 글쓴이
1756 [1] [뉴플래닛] 유저와 함께 성장하는 서버, 그곳에는 저희가 있습니다! 14 루타카
696 [2] [HK] 마인크래프트 개발 디스코드 - 컨텐츠를 만들고 서버 어드민이 되어보자! 5 DC
355 [3] [베개서버] [신생] 인생약탈 서버가 상위버전에서 활보 중이라구요? 2 오리야
68 모델링 공방 : 커뮤니티 개편 기념 공모전 개최!! U 박동백
863 새로워진 한마포 창작자로 수익과 함께 활동해보세요! 10 U 프리루트
269 유저 커뮤니티 개설 신청을 다시 받기 시작했습니다! 6 U 프리루트
745 일부 SNS 로그인 지원 중단 및 안내 가이드 (카카오, 트위터) 14 프리루트
850 한디포 이용 가이드! 처음 온 분은 읽어둡시다! 20 초스터
658 한디포 이용 규칙 25 초스터
701 한마포 AD : 새로운 게시판 공지 광고 안내 7 프리루트
381 [유틸] [1.12.2] 간편 버킷 실행기 1 레도
339 [유틸] [1.15.2] 간편 버킷 실행기 2 레도
332 [플러그인] TrafficLogger 1.0 / 서버 트래픽을 최적화해봅시다 4 Skywolf46
124 [API or 라이브러리] MCVersions: 마인크래프트 버전 정보 라이브러리 5 HeartPattern
94 [기타] Exhibitionism: 클래스,메서드,필드를 노출시키는 프로그램 2 HeartPattern
192 [API or 라이브러리] CommandAnnotation / 명령어 등록을 더 쉽고 편리하게. 3 Skywolf46
238 [기타] MC-Remapper: 마인크래프트 난독화 제거 툴 5 HeartPattern
196 [API or 라이브러리] 쉽게 명령어를 추가하자 - EzFramework 3 KingCjy
1 [API or 라이브러리] MCVersions: 마인크래프트 버전 정보 라이브러리 HeartPattern
130 [유틸] IntegratedMessageUtil / 전버전 호환 메시지/플레이스홀더 관리 유틸 4 Skywolf46
258 [API or 라이브러리] ReflectedNBTWrapper / 전버전 호환 NBT 라이브러리 10 Skywolf46

개발자 최신글
https://www.koreaminecraft.net/files/thumbnails/647/773/001/262x150.crop.jpg
버그를... 발견한거 같..습니다?

WintChoco

2020-06-05

0

https://www.koreaminecraft.net/files/thumbnails/572/773/001/262x150.crop.jpg

스크린샷

마크하다 예뻐서 찍어봄 ㅇㅅㅇ 2

재협

2020-06-05

0