minecraft
Modding avec Forge
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