サーチ…


構文

  • 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でコマンドを送信する



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow