Minecraft 1.14.4 Forge Mod의 작성 그 2 【기본적인 파일의 배치】

소개



Minecraft 1.12.2 때에 비해 쓰기가 크게 바뀌는 인상을 받았습니다.
기본 파일을 배치하고 Minecraft가 Mod를로드하는 곳으로 이동합니다.



2019/10/29 아래 예외가 발생하기 때문에 pack.mcmeta 수정
Caused by: com.google.gson.stream.MalformedJsonException: Expected name at line 5 column 6 path $.pack.pack_format

💻 개발 환경



여기서 환경은 다음과 같이 합니다.
  • Windows 10
  • JDK 8u211
  • Minecraft 1.14.4
  • Minecraft Forge 1.14.4 (28.1.0)
  • IntelliJ IDEA 2019.1.4

  • 패키지 만들기



    우선은 패키지(폴더)를 작성해 둡니다.
    패키지 이름을 지정하는 방법에는 일반적인 결정 방법이 있습니다.
  • GroupId: 조직 이름. 일반적으로 역에서 도메인을 쓰는 형식
  • ArtifactId: 프로젝트 이름

  • 이에 따라 이름을 결정했을 때 패키지를 만들면 다음과 같습니다.


    품목



    GroupId
    kr.yuyu

    ArtifactId
    biwako_mod

    C:\Users\HIRO\IdeaProjects\biwako_mod
    └─src
        └─main
            ├─java
            │  └─jp
            │      └─yuyu
            │          └─biwako_mod
            └─resources
                └─assets
                    └─biwako_mod
    

    pack.mcmeta



    리소스 팩의 세부 사항을 설명하는 파일입니다.
    전회 떨어뜨려 온 Mdk, forge-1.14.4-28.1.0-mdk.zip 속에 샘플이 들어 있기 때문에 그것을 참고로 써 보겠습니다.resources 폴더에 파일을 만듭니다.

    1.7 이전에는 "pack_format": 1로, 1.8 이후부터는 "pack_format": 2로, 1.11 이후부터 1.12까지는 "pack_format": 3으로, 1.13 이후는 "pack_format":4로 해야 합니다.

    리소스 팩 / 만드는 법 - Minecraft Japan Wiki - Atwiki

    이번에는 Minecraft 1.14.4이므로 "pack_format":4입니다.
    └─resources
        │  *pack.mcmeta
        │
        └─assets
            └─biwako_mod
    

    pack.mcmeta
    {
        "pack": {
            "description": "Biwako Mod resources",
            "pack_format": 4
        }
    }
    

    mods.toml



    Mod 정보를 기재하는 파일입니다.
    Minecraft 1.12.2에서는 mcmod.info이었던 것이군요.

    마찬가지로 forge-1.14.4-28.1.0-mdk.zip 안에 샘플이 들어 있기 때문에 그것을 참고로 써 보겠습니다.
    resources/META-INF 폴더를 만들고 그 안에 mods.toml를 넣습니다.
    또한 로고 파일을 resources 폴더에 넣고 파일 경로를 지정합니다.
    └─resources
        │  pack.mcmeta
        │  *logo.png
        │
        ├─assets
        │  └─biwako_mod
        │
        └─*META-INF
                *mods.toml
    

    mods.moml
    # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
    modLoader="javafml" #mandatory
    # A version range to match for said mod loader - for regular FML @Mod it will be the forge version
    loaderVersion="[28,)" #mandatory (28 is current forge version)
    # A list of mods - how many allowed here is determined by the individual mod loader
    [[mods]] #mandatory
    # The modid of the mod
    modId="biwako_mod" #mandatory
    # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
    version="1.0.0"
    # A display name for the mod
    displayName="Biwako Mod" #mandatory
    # A URL for the "homepage" for this mod, displayed in the mod UI
    displayURL="https://github.com/Hiroya-W/biwakoMC" #optional
    # A file name (in the root of the mod JAR) containing a logo for display
    logoFile="logo.png" #optional
    # A text field displayed in the mod UI
    authors="Hiroya_W" #optional
    # The description text for the mod (multi line!) (#mandatory)
    description='''
    Biwako is the largest lake in Japan.
    '''
    # A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
    [[dependencies.biwako_mod]] #optional
        # the modid of the dependency
        modId="forge" #mandatory
        # Does this dependency have to exist - if not, ordering below must be specified
        mandatory=true #mandatory
        # The version range of the dependency
        versionRange="[28,)" #mandatory
        # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
        ordering="NONE"
        # Side this dependency is applied on - BOTH, CLIENT or SERVER
        side="BOTH"
    # Here's another dependency
    [[dependencies.biwako_mod]]
        modId="minecraft"
        mandatory=true
        versionRange="[1.14.4]"
        ordering="NONE"
        side="BOTH"
    

    메인 클래스



    만들기


    BiwakoMod.java 를 다음 위치에 배치합니다.
    └─src
        └─main
            ├─java
            │  └─jp
            │      └─yuyu
            │          └─biwako_mod
            │                  *BiwakoMod.java
    

    히나형


  • @Mod 어노테이션에는 MOD_ID 이름만 기술한다.
    그래서 1.12.2에서 MOD_NAME
  • MOD_VERSION 어노테이션이있는 클래스의 생성자에 초기화 처리의 리스너를 등록한다.
  • mods.toml 메소드가 1.12.2의 @Mod 메소드에 상당한다.
  • setup는 클라이언트 측에서만 실행되는 초기화 프로세스를 설명한다.
    1.12.2의 preInit에 해당한다.

  • 자세한 것은 【Forge】1.13.2에서의 자작한 Entity와 EntityRender의 등록 방법 에 상세하게 쓰여졌습니다.

    그리고, 아마 이것이 메인 클래스의 편지지가 된다.

    BiwakoMod.java
    package jp.yuyu.biwako_mod;
    
    import net.minecraft.block.Block;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.RegistryEvent;
    import net.minecraftforge.eventbus.api.SubscribeEvent;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
    import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
    import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    
    // The value here should match an entry in the META-INF/mods.toml file
    @Mod(BiwakoMod.MOD_ID)
    public class BiwakoMod
    {
        public static final String MOD_ID = "biwako_mod";
    
        // Directly reference a log4j logger.
        private static final Logger LOGGER = LogManager.getLogger();
    
        public BiwakoMod() {
            // Register the setup method for modloading
            FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
            // Register the doClientStuff method for modloading
            FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
            // Register ourselves for server and other game events we are interested in
            MinecraftForge.EVENT_BUS.register(this);
        }
    
        private void setup(final FMLCommonSetupEvent event)
        {
            // some preinit code
            LOGGER.info("HELLO FROM PREINIT");
        }
    
        private void doClientStuff(final FMLClientSetupEvent event) {
            // do something that can only be done on the client
            LOGGER.info("HELLO FROM Client Setup");
        }
    
        // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
        // Event bus for receiving Registry Events)
        @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
        public static class RegistryEvents {
            @SubscribeEvent
            public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
                // register a new block here
                LOGGER.info("HELLO from Register Block");
            }
        }
    }
    

    Minecraft 시작





    Github 에서 프로젝트를 게시하고 있습니다.

    좋은 웹페이지 즐겨찾기