Skip to content

LeagueLugas/SpringMC-Core

Repository files navigation

SpringMC Framework

Maven Central

Spring Boot의 개발 방식에서 영감을 받아, 마인크래프트 플러그인 개발의 ��산성을 향상시키기 위해 만들어진 코틀린 기반 프레임워크입니다. 어노테이션 기반의 DI(의존성 주입)와 다양한 모듈을 통해 반복적이고 불필요한 코드를 줄여보세요!

설치 (Installation)

Maven, Gradle 설정

Maven

<dependency>
    <groupId>io.github.leaguelugas</groupId>
    <artifactId>springmc-core</artifactId>
    <version>LATEST_VERSION</version>
</dependency>

Gradle (Groovy)

implementation 'io.github.leaguelugas:springmc-core:LATEST_VERSION'

Gradle (Kotlin)

implementation("io.github.leaguelugas:springmc-core:LATEST_VERSION")

주요 기능 (Features)

SpringMC는 @Component 계열 어노테이션(@Service, @Command, @EventListener 등)이 붙은 클래스를 자동으로 스캔하여 DI 컨테이너(Bean)에 등록합니다. 등록된 객체는 다른 클래스에서 주입받아 쉽게 사용할 수 있습니다.

1. 의존성 주입 (Dependency Injection)

플러그인의 메인 클래스에 @SpringMCMain 어노테이션을 붙여주세요. 이 어노테이션이 없으면 프레임워크가 정상적으로 동작하지 않습니다.

@SpringMCMain
class MyPlugin : SpringMC() {
    override fun onEnable() {
        super.onEnable() // onEnable을 오버라이드 할 경우, 반드시 super.onEnable()을 호출해야 합니다.
        logger.info("MyPlugin has been enabled!")
    }
}

@Service 어노테이션으로 비즈니스 로직을 정의하고, 다른 곳에서 생성자나 필드를 통해 주입받을 수 있습니다.

@Service
class UserManager {
    fun getUser(name: String): User {
        // ...
    }
}

// 생성자 주입 예시
@Component
class GameManager(private val userManager: UserManager) {
    fun startGame(playerName: String) {
        val user = userManager.getUser(playerName)
        // ...
    }
}

2. 커맨드 (Commands)

@Command 어노테이션 하나로 커맨드를 간단하게 등록할 수 있습니다.

@Command(
    command = "hello",
    description = "Sends a greeting.",
    usage = "/hello",
    permission = "myplugin.hello",
    aliases = ["hi", "greeting"]
)
class HelloCommand : SpringCommand {
    override fun execute(sender: CommandSender, args: Array<String>) {
        sender.sendMessage("Hello, world!")
    }
}

3. 이벤트 리스너 (Event Listeners)

@EventListener를 클래스에 붙여 이벤트를 처리하는 리스너를 등록합니다.

@EventListener
class PlayerJoinListener : SpringListener {

    @EventHandler // Bukkit의 @EventHandler 사용
    fun onPlayerJoin(event: PlayerJoinEvent) {
        event.player.sendMessage("Welcome to the server!")
    }
}

4. 스케줄러 (Schedulers)

@Scheduled 어노테이션을 사용해 동기/비동기 작업을 간단하게 예약할 수 있습니다.

  • delay: 최초 실행까지의 대기 시간 (tick)
  • period: 반복 실행 간격 (tick)
  • async: true로 설정 시 비동기 실행
@Component
class BroadcastTask {

    // 20틱(1초) 후 최초 실행, 1200틱(1분)마다 반복
    @Scheduled(delay = 20L, period = 1200L)
    fun broadcastMessage() {
        Bukkit.broadcastMessage("This is a scheduled broadcast!")
    }

    // 100틱(5초) 후 비동기로 한 번 실행
    @Scheduled(delay = 100L, async = true)
    fun runAsyncTask() {
        // ... 오래 걸리는 비동기 작업
    }
}

About

A Framework for development minecraft plugin

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages