주로

Fabric 키 바인딩의 예시와 함수화 본문

게임/마인크래프트

Fabric 키 바인딩의 예시와 함수화

_주로 2024. 9. 30. 08:02
반응형
import net.fabricmc.api.ClientModInitializer;

import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import org.lwjgl.glfw.GLFW;

import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;

public class Client implements ClientModInitializer {

    private static final MinecraftClient client = MinecraftClient.getInstance();
    private static KeyBinding exampleKeyBinding;

    @Override
    public void onInitializeClient() {
        // 키바인딩 등록 (GLFW.GLFW_KEY_G는 기본 G 키)
        exampleKeyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
                "key.examplemod.example_action",  // 키바인딩 이름 (번역 키)
                InputUtil.Type.KEYSYM,            // 입력 타입 (키보드, 마우스 등)
                GLFW.GLFW_KEY_G,                  // 기본 키 값 (여기서는 G)
                "category.examplemod.bindings"    // 카테고리 이름 (설정 메뉴에서 나타나는 위치)
        ));

        // 클라이언트 틱 이벤트 등록
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            // 키가 눌렸는지 확인
            if (exampleKeyBinding.wasPressed()) {
                // 키가 눌렸을 때 실행할 코드
                client.player.sendMessage(Text.literal("G key was pressed!"), false);
            }
        });
    }
}

 

 

 

 

함수화(?), 클래스화.

 

 

KeyBindingManager.java

import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;

public class KeyBindingManager {
    @FunctionalInterface
    public interface KeyAction {
        void execute();
    }

    public static void registerKeyBinding(String description, int keyType, KeyAction action) {
        // 키 바인딩을 생성
        KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
                description,                  // 키 설명
                InputUtil.Type.KEYSYM,         // 키 타입
                keyType,                      // 키 번호 (예: GLFW.GLFW_KEY_O)
                "Category"                 // 카테고리
        ));

        // Fabric API를 통해 키 이벤트 처리
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            if (keyBinding.wasPressed()) {
                action.execute();  // 키가 눌렸을 때 전달된 함수 실행
            }
        });
    }
}

 

 

MainClient.java

package com.mineplanetmod.main.client;

import net.fabricmc.api.ClientModInitializer;

import net.minecraft.client.MinecraftClient;
import org.lwjgl.glfw.GLFW;

public class mainClient implements ClientModInitializer {
    private static final MinecraftClient client = MinecraftClient.getInstance();

    @Override
    public void onInitializeClient() {
        KeyBindingManager.registerKeyBinding("ALERT 'G' PRESSED",GLFW.GLFW_KEY_G, XarvisalphaClient::f);
    }

    private static void f()
    {
        Utilities.sendClientChatMessage(client, "'G' KEY PRESSED");
    }
}
반응형
Comments