수색…


통사론

  • MODID = MOD의 식별자를 나타냅니다.
  • MODPath = mod 폴더에 대한 완전한 디렉토리 경로를 나타냅니다.

비고

이 주제에는 가장 많이 사용되는 패턴 / 예제와 단조로 Minecraft 응용 프로그램을 수정하기위한 잘 테스트 된 코드가 들어 있어야합니다. 어느 날 공식 문서를 대체 할 수 있을지도 모릅니다.

초기화 프 록시의 구현 패턴

이 예는 mod를 초기화하는 데 사용되는 Minecraft Mod Application에 대한 프록시 클래스를 구현하는 방법을 보여줍니다.

우선, 주로 사용되는 3 가지 메소드를 포함하는 기본 CommonProxy.java 클래스를 구현해야한다.

public class CommonProxy {
    public void preInit(FMLPreInitializationEvent e) {}
    public void init(FMLInitializationEvent e) {}
    public void postInit(FMLPostInitializationEvent e) {}
}

일반적으로 Mod에는 클라이언트 및 서버 코드에 대해 2 개의 다른 패키지가 있으므로 각 패키지에 다음과 같이 CommonProxy.java의 하위 클래스가 필요합니다.

public class ClientProxy extends CommonProxy {    
    @Override
    public void preInit(FMLPreInitializationEvent e) {
        super.preInit(e);
    }

    @Override
    public void init(FMLInitializationEvent e) {
        super.init(e);    
    }

    @Override
    public void postInit(FMLPostInitializationEvent e) {
        super.postInit(e);
    }
}

및 서버 :

public class ServerProxy extends CommonProxy {
    @Override
    public void preInit(FMLPreInitializationEvent e) {
        super.preInit(e);
    }

    @Override
    public void init(FMLInitializationEvent e) {
        super.init(e);
    }

    @Override
    public void postInit(FMLPostInitializationEvent e) {
        super.postInit(e);
    }
}

이 클래스를 생성 한 후에는 클라이언트 또는 서버 측에서만 실행해야하는 메소드로 확장 할 수 있지만 '기본'클래스의 메소드를 호출하면 두 클래스 모두에 연결할 수 있습니다.

마지막으로 런타임에 가져올 프록시를 정의해야합니다. 다음과 같이 @Mod 주석을 사용하여 기본 mod 클래스를 확장해야합니다.

private static final String CLIENTPROXY = "com.yourpackage.client.ClientProxy";
private static final String SERVERPROXY = "com.yourpackage.client.ServerProxy";    

@SidedProxy(clientSide = CLIENTPROXY, serverSide = SERVERPROXY)
public static CommonProxy PROXY;

이를 통해 Forge는 런타임에 어떤 클래스를 가져와야하는지 감지 할 수 있습니다. Mod의 초기화 메소드에서이 정적 PROXY 속성을 사용할 수 있습니다.

@EventHandler
public void init(FMLInitializationEvent event) {
    PROXY.init(event);
}

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
    PROXY.preInit(event);
}

@EventHandler
public void postInit(FMLPostInitializationEvent event) {
    PROXY.postInit(event);
}

MOD에 커스텀 사운드 추가하기

이 예에서는 MOD에 새 사운드를 추가하고 재생하는 방법을 보여줍니다. 우선 *.ogg 형식의 사운드 파일이 필요합니다. 다른 형식은 Minecraft 응용 프로그램에서 허용하지 않으므로 거부됩니다.

soundfile의 이름은 : sound1.ogg입니다.

사운드 파일을 다음 경로에 넣습니다.

/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg

'MODID'를 MOD 용으로 정의한 식별자로 대체하십시오.

다음으로 사용자 정의 사운드의 이름, 리소스 및 기타 사항을 정의하는 UTF-8 (표준) 인코딩의 sounds.json 을 만들어야합니다. 이 파일은 다음과 같습니다.

{
  "sound1": {
    "category" : "player",
    "sounds": [{
        "name": "MODID:sound1",
        "stream": false
      }
    ]
  },
  "sound2": {
    "category" : "ambient",
    "sounds": [{
        "name": "MODID:subfolder/sound2",
        "stream": true
      }
    ]
  }
}

이 소리에 대한 설명으로 .json.

정의 된 2 개의 사운드가 정의되어 있습니다. 다중 사운드를 추가하는 방법을 조사 할 수있는 예제를 추가했습니다. sound1 에는 카테고리 player 있고 두 번째는 ambient 카테고리입니다. 즉, 사운드 볼륨은 사용자가 플레이어 / 앰비언트 사운드에 설정 한 볼륨 설정의 영향을받습니다. name 은 사운드의 리소스를 가리키는 가장 중요한 속성입니다. MODID 는 MOD의 식별자이며 응용 프로그램이 파일의 mod에서 찾은 리소스를 검색 할 때 필수적입니다. 그렇지 않으면 Minecraft 리소스를 검색하여 찾을 수 없습니다. stream 속성은 사운드가 파일 시스템에서 스트리밍되는 것을 의미하며 4 초 이상의 사운드에만 필요합니다.

사용자 지정 sounds.json 파일은 다음 경로로 이동해야합니다.

/YourPath/src/main/resources/assets/MODID/sounds.json

이제 게임의 레지스트리에 사운드를로드 할 수 있습니다. 따라서 SoundEvent 초기화하고 등록을 처리하는 클래스를 만들어야합니다.

public class SoundRegistrator {
    public static final SoundEvent SOUND_1;
    public static final SoundEvent SOUND_2;

    static {
        SOUND_1 = addSoundsToRegistry("sound1");
        SOUND_2 = addSoundsToRegistry("sound2");
    }

    private static SoundEvent addSoundsToRegistry(String soundId) {
        ResourceLocation shotSoundLocation = new ResourceLocation("MODID", soundId);
        SoundEvent soundEvent = new SoundEvent(shotSoundLocation);
        soundEvent.setRegistryName(shotSoundLocation);
        return soundEvent;
    }           
}

나중에 SoundRegisterListener 를 만들어야합니다.

public class SoundRegisterListener {
        @SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
        public void registerSoundEvents(RegistryEvent.Register<SoundEvent> event) {
           event.getRegistry().registerAll(SoundRegistrator.SOUND_1,SoundRegistrator.SOUND_2);
        }   
}

다음과 같이 MinecraftForge.EVENT_BUS 등록하십시오.

MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());

마지막으로 사운드를 재생할 수 있습니다.

void playSound(SoundEvent sound) {
    try {
        if (Minecraft.getMinecraft().world.isRemote) {
            EntityPlayerSP player = Minecraft.getMinecraft().player;
            Minecraft.getMinecraft().world.playSound(player, player.getPosition(), sound, SoundCategory.PLAYERS, RandomGenerator.getNextRandomVolumeLoud(), 1.0F);
        }
    } catch (Exception ex) {
       //Error happened
    }
}

명령 보내기

이 예제는 코드에서 Minecraft에 '명령'을 실행하는 여러 가지 방법을 보여줍니다 :

EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");

SinglePlayer에서 명령을 보내는 방법



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow