Recherche…


Syntaxe

  • MODID = représente l'identifiant du MOD
  • MODPath = représente le chemin complet du répertoire qualifié vers votre dossier mod

Remarques

Ce sujet devrait contenir la plupart des modèles / exemples utilisés et du code bien testé pour modifier l'application Minecraft avec forge. Peut-être que cela peut remplacer la documentation officielle un jour.

Modèle d'implémentation pour les proxys d'initialisation

Cet exemple vous montre comment implémenter des classes proxy pour votre application Minecraft Mod, qui sont utilisées pour initialiser votre mod.

Tout d'abord, vous devrez implémenter la classe CommonProxy.java de base qui contient la méthode 3 principalement utilisée:

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

Normalement, votre mod dispose de deux packages différents pour le code client et serveur, vous aurez donc besoin dans chaque package d'une classe enfant CommonProxy.java comme:

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);
    }
}

et pour le serveur:

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);
    }
}

Une fois que vous avez créé ces classes, vous pouvez les étendre par des méthodes qui ne doivent s'exécuter que du côté client ou serveur, mais vous pouvez également les associer aux deux si vous appelez les méthodes dans la classe 'base'.

Enfin, vous devez définir quel proxy est pris à l'exécution. Vous devez étendre votre classe de mod principal avec l'annotation @Mod , en:

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;

Cela permettra à Forge de détecter quelle classe doit être prise à l'exécution. Dans les méthodes d'initialisation de votre Mod, vous pouvez maintenant utiliser cette propriété statique 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);
}

Ajout de sons personnalisés à votre MOD

Cet exemple vous montre comment ajouter de nouveaux sons à votre MOD et les lire. Tout d'abord, vous avez besoin d'un fichier audio au format *.ogg . Tout autre format n'est pas autorisé par l'application Minecraft et sera rejeté.

Le fichier son a le nom: sound1.ogg

Placez le fichier son sous le chemin suivant:

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

Remplacez 'MODID' par l'identifiant que vous avez défini pour votre MOD

Ensuite, vous devez créer un sounds.json en UTF-8 (Standard) qui définit le nom, la ressource, ... et d'autres éléments pour votre son personnalisé. Ce fichier ressemblera à:

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

Comme explication pour ce sounds.json.

Deux sons définis sont définis, et j'ai ajouté un exemple sur la manière d'ajouter des sons multiples. sound1 a la catégorie player le second est de catégorie ambient ce qui signifie que le volume du son est affecté par les réglages de volume que l'utilisateur a définis pour les sons du lecteur / ambiant. name est la propriété la plus importante car elle pointe vers la ressource du son. Le MODID est l'identifiant de votre MOD et est obligatoire car l'Application va chercher dans les ressources de votre mod pour le fichier, sinon il cherchera dans les ressources Minecraft et ne trouvera rien. La propriété stream signifie que le son sera diffusé depuis le système de fichiers, ce qui n'est nécessaire que pour les sons de plus de 4 secondes.

Votre fichier sounds.json personnalisé doit se sounds.json sous le chemin suivant:

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

Vous pourrez maintenant charger les sons dans le registre du jeu. Vous devez donc créer une classe qui initialise SoundEvent et qui gère l'enregistrement.

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;
    }           
}

Ensuite, vous devez créer un 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);
        }   
}

et l'enregistrer sur le MinecraftForge.EVENT_BUS comme:

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

Enfin, vous pourrez jouer vos sons:

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
    }
}

Envoi d'une commande

Cet exemple vous montre différentes manières d’exécuter des «commandes» pour Minecraft à partir du code:

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

envoyer une commande dans SinglePlayer



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow