Minecraft Plugin 개발 전 숙지

SheepDuck·2024년 8월 8일

Minecraft

목록 보기
2/3

블로그 글의 형식을 더 깔끔하고 보기 좋게 다듬어 드리겠습니다. 다음은 정리된 형태의 블로그 글입니다:


개발 전 참고 사이트

위 링크를 참고하여 기본적인 학습을 진행하세요.

프로젝트 구조 살펴보기

Plugin StructurePlugin Main Class
현재 선택된 파일이 main 파일입니다.main 파일을 보면, 위와 같이 플러그인 활성화 및 비활성화 시 동작하는 메소드들이 정의되어 있습니다.

build.gradle 설정

ShadowJar 설정

ShadowJar는 라이브러리와 의존성을 함께 묶어 하나의 JAR 파일로 만들어주는 플러그인입니다. 일반 JAR 파일을 생성하면 의존하는 라이브러리가 포함되지 않아 플러그인에 오류가 발생할 수 있습니다. ShadowJar를 사용하면 이러한 문제를 해결할 수 있습니다.

  • 일반 JAR의 문제점

    • 플러그인이 의존하는 라이브러리가 누락될 수 있습니다.
    • 서버에 이미 필요한 라이브러리가 있는 경우에는 상관이 없지만, 동일 라이브러리가 여러 개 있을 경우 클래스 충돌이 발생할 수 있습니다.
  • 해결 방법

    • ShadowJar를 사용하여 플러그인에 필요한 모든 라이브러리를 함께 묶어 JAR 파일을 생성합니다.

Lombok

Lombok은 Java 코드에서 getter, setter 등을 자동으로 생성해주는 라이브러리입니다. 이를 통해 코드가 깔끔해지고 유지보수가 용이해집니다.

MongoDB Driver

MongoDB를 사용하기 위한 드라이버입니다.

build.gradle 파일 설정

아래는 작자가 애용하는 build.gradle 파일의 설정입니다:

plugins {
    id 'java'
    id "com.github.johnrengelman.shadow" version "8.1.1"
}

// ShadowJar 설정
shadowJar {
    manifest {
        attributes 'Main-Class': 'my.package.MyMain'
    }
    // JAR 추출 디렉토리
    destinationDirectory.set(file("/Users/admin/Desktop/project/MineServer/plugins"))
}

group = 'org.dev'
version = '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    maven {
        name = "papermc-repo"
        url = "https://repo.papermc.io/repository/maven-public/"
    }
    maven {
        name = "sonatype"
        url = "https://oss.sonatype.org/content/groups/public/"
    }
}

dependencies {
    // libs 내의 JAR 파일을 의존성으로 추가
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    // MongoDB 드라이버
    implementation 'org.mongodb:mongodb-driver-sync:4.11.0'
    // Lombok
    annotationProcessor 'org.projectlombok:lombok:1.18.30'
    compileOnly 'org.projectlombok:lombok:1.18.30'
    // Paper API
    compileOnly "io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT"
}

// Java 버전 설정
def targetJavaVersion = 17
java {
    def javaVersion = JavaVersion.toVersion(targetJavaVersion)
    sourceCompatibility = javaVersion
    targetCompatibility = javaVersion
    if (JavaVersion.current() < javaVersion) {
        toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
    }
}

tasks.withType(JavaCompile).configureEach {
    if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
        options.release = targetJavaVersion
    }
}

processResources {
    def props = [version: version]
    inputs.properties props
    filteringCharset 'UTF-8'
    filesMatching('plugin.yml') {
        expand props
    }
}

Minecraft 서버 구조

Minecraft 서버는 크게 Bungeecord와 Bukkit 서버로 나눌 수 있습니다.

번지(Bungeecord) 서버

역할

  • Proxy 서버로서 플레이어의 접속을 중계합니다.
  • 여러 Minecraft 서버를 연결하여 플레이어가 서버 간에 이동할 수 있도록 합니다.

특징

  • 중앙 관리: 여러 서버를 통합적으로 관리합니다.
  • 서버 간 이동: 플레이어가 여러 서버를 자유롭게 이동할 수 있습니다.
  • 플러그인 지원: 서버 관리, 채팅 통합 등의 기능을 추가할 수 있습니다.

버킷(Bukkit) 서버

역할

  • 실제 게임 플레이를 제공하는 서버입니다.
  • 게임 월드와 플레이어 상호작용을 처리합니다.

특징

  • 플러그인 지원: 다양한 기능을 추가할 수 있습니다 (예: 경제 시스템, 미니게임).
  • 독립적 운영: 각각의 서버는 독립적으로 운영됩니다.
  • 성능 관리: 게임 성능과 안정성을 관리합니다.

Minecraft 서버 구조도

  • Bungeecord 서버: 플레이어와 서버 간의 중개 역할.
  • Bukkit 서버: 실제 게임 플레이와 월드 관리.
profile
code sheepDuck

0개의 댓글