본문 바로가기

플러그인 라이브러리 공유

마인크래프트 GUI 개발을 쉽게: Bukkit-View

반응형

※ 해당 포스팅은 기초적인 자바(Java) 언어를 숙지해야 쉽게 접하실 수 있습니다 ※

 

오늘 소개할 라이브러리는 GUI 개발의 번거로움을 해소해 주는 효율적인 도구입니다.

많은 플러그인 개발자들이 경험하는 GUI 작업의 복잡성과 오류 발생의 문제를 해결하기

위해 설계된 이 라이브러리는 사용이 간편하며, 안정적인 GUI 개발을 가능하게 합니다.

 

BukkitAPI를 사용한 인벤토리 클릭 이벤트 구현의 문제

    • 다중 코드 작성 : BukkitAPI를 사용하여 각 클릭 이벤트를 구현하려면 다양한 코드 조각들이 필요합니다. 단순한 기능을 추가하기 위해서도 상당한 양의 코드 작성이 요구됩니다.
    • 복잡한 이벤트 : 여러 클릭 이벤트를 인벤토리에 추가할 때마다 관리의 복잡성이 증가합니다. 이는 코드의 가독성을 낮추며, 유지보수를 어렵게 만듭니다.
    • 오류 발생 가능성 증가: 다양한 값들을 비교하고 관리해야 함에 따라, 작은 실수나 누락으로 인한 오류 발생 가능성이 높아집니다. 이는 개발자에게 부담을 주고 프로그램의 안정성을 위협합니다

이러한 문제점들은 사소한 기능 하나 구현으로도 시간 소모가 심하여 개발자에게 상당한 부담을 줍니다.

 

Bukkit-View를 사용한 인벤토리 클릭 이벤트 구현의 장점

  • 함수형 프로그래밍 접근: 깔끔하고 효율적인 코드를 강조하며, 명령형 프로그래밍에서 흔한 부작용을 줄입니다.
  • 간소화된 GUI 관리: 마인크래프트에서 사용자 인터페이스 생성 및 관리를 용이하게 하여 프로세스를 단순화합니다.
  • 효율적인 개발: GUI 구현에 필요한 시간과 노력을 줄여 개발 과정을 간소화합니다

Bukkit-View를 사용함으로 코드의 가독성을 올릴 수 있으며 시간적으로도 이득을 보실 수 있습니다.


Bukkit-View 

BukkitView는 Bukkit API를 사용하는 마인크래프트 서버 개발자들을 위해 특별히 설계된 라이브러리입니다.

이 라이브러리는 인벤토리 관련 작업을 간편하게 만들어주며, 특히 인벤토리 아이템 추가와 이벤트 처리를

동시에 수행할 수 있는 기능을 제공합니다..

 

프로젝트 적용

Gradle

repositories {
    mavenCentral()
}

dependencies {
    implementation("io.typecraft:bukkit-view-core:5.1.2")
}

 

Maven

<dependencies>
    <dependency>
        <groupId>io.typecraft</groupId>
        <artifactId>bukkit-view-core</artifactId>
        <version>5.1.2</version>
    </dependency>
</dependencies>



[ EX ] ChestView 간단 사용법

public class TestPlugin extends JavaPlugin implements CommandExecutor {
    
    @Override
    public void onEnable() {
        getCommand("Test").setExecutor(this); // 커맨드 등록
    }

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
        if (!label.equals("Test")) {
            return false;
        }

        Map<Integer, ViewControl> controls = new HashMap<>();
        controls.put(4, ViewControl.of(getDiamond(), e -> {
            Player player = e.getClicker();
            player.kickPlayer("다이아몬드를 클릭하셔서 추방 당하셨습니다.");
            return ViewAction.CLOSE;
        }));
        ViewContents contents = ViewContents.ofControls(controls);
        ChestView view = ChestView.just("예시", 1, contents);
        BukkitView.openView(view, (Player) sender, this);
        return false;
    }
    
    private ItemStack getDiamond() {
        List<String> lores = Arrays.asList("클릭 시 서버에서 추방 됩니다.", "자신 있으면 눌러보던가");
        return BukkitItem.of(Material.DIAMOND, 1, (short) 0, "다이아몬드", lores, 0, new HashMap<>()).build();
    }
    
}

 

[ EX ] 모든 아이템을 제공하는 GUI

public PageViewLayout page() {
    List<Function<PageContext, ViewControl>> pagingContents =
            Arrays.stream(Material.values())
                    .filter(mat -> mat.isItem() && !mat.isAir())
                    .map(material -> (Function<PageContext, ViewControl>) ctx ->
                            ViewControl.of(
                                    new ItemStack(material),
                                    e -> {
                                        Player player = e.getClicker();
                                        Inventory inventory = player.getInventory()
                                        inventory.addItem(new ItemStack(material));
                                        return ViewAction.NOTHING;
                                    }
                            ))
                    .collect(Collectors.toList());
    return PageViewLayout.ofDefault("materials", 6, Material.STONE_BUTTON, pagingContents);
}

public void open() {
    BukkitView.openView(page().toView(1), player, plugin);
}

 


오늘 포스팅한 라이브러리를 사용하면 플러그인 개발을 쉽게 하실 수 있다고 생각합니다.

라이브러리의 자세한 함수 및 사용방법은 본문 아래의 Github 에서 확인하실 수 있습니다

글 읽어주셔서 감사합니다. 궁금하신 점 댓글 남겨주시면 좋을 거 같습니다.

반응형