minecraft
フォージを使った改造
サーチ…
構文
- 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にはClientとServer Codeの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);
}
}
このクラスを作成した後は、クライアント側またはサーバー側でのみ実行する必要があるメソッドによってそれらを拡張できますが、 'base'クラスのメソッドを呼び出すと、それらを両方に割り当てることもできます。
最後に、実行時に使用するプロキシを定義する必要があります。メインの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アプリケーションでは許可されず、拒否されます。
サウンドファイルの名前は: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
、2番目のカテゴリは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でコマンドを送信する