minecraft
Forge로 모딩하기
수색…
통사론
- 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에서 명령을 보내는 방법