Aller au contenu principal

Démarrage rapide

Ce guide t'amène de zéro à un premier écran fonctionnel qui s'affiche en jeu. Il suppose que tu as déjà un mod Forge 1.20.1 avec Java 17.


Étape 1 — Publier la lib en Maven local

Dans le répertoire d'ApocalyInterfaceLib :

gradlew publishToMavenLocal

Cela installe le JAR dans ~/.m2/repository/ca/tawess123/apocalyinterface/apocalyinterfacelib/1.0.0/.


Étape 2 — Modifier build.gradle de ton mod

2a. Déclarer le dépôt Maven local

Dans le bloc repositories {} (celui de la section dependencies, pas celui de buildscript) :

repositories {
mavenLocal() // ← ajouter cette ligne
}

2b. Déclarer la dépendance

dependencies {
minecraft "net.minecraftforge:forge:1.20.1-47.3.22"

// ApocalyInterfaceLib — bibliothèque UI côté client
implementation fg.deobf("ca.tawess123.apocalyinterface:apocalyinterfacelib:1.0.0")
}

fg.deobf() est indispensable pour les mods Forge : il réapplique le remapping des noms Mojang.


Étape 3 — Modifier mods.toml de ton mod

Dans src/main/resources/META-INF/mods.toml, ajouter un bloc de dépendance. Remplacer monmod par le modId réel de ton mod :

[[dependencies.monmod]]
modId="apocalyinterfacelib"
mandatory=true
versionRange="[1.0,)"
ordering="AFTER"
side="CLIENT"
side="CLIENT" est obligatoire

La lib est cliente uniquement. Déclarer side="BOTH" provoque un crash côté serveur dédié.

ChampValeurPourquoi
mandatorytrueLa lib doit être présente pour que l'UI fonctionne
versionRange[1.0,)Accepte la 1.0.0 et toutes les versions supérieures
orderingAFTERLa lib est initialisée avant ton mod
sideCLIENTNe pas déclarer en BOTH — la lib n'existe pas côté serveur

Étape 4 — Créer ton premier écran

Voici un écran complet qui affiche le nom d'un joueur et ses coins. Copie ce code dans ton mod, adapte le package.

package ca.monmod.client.screen;

import ca.tawess123.apocalyinterface.api.data.DataSource;
import ca.tawess123.apocalyinterface.api.layout.Card;
import ca.tawess123.apocalyinterface.api.layout.Column;
import ca.tawess123.apocalyinterface.api.screen.ApocalyScreen;
import ca.tawess123.apocalyinterface.api.widget.Button;
import ca.tawess123.apocalyinterface.api.widget.KeyValueRow;
import ca.tawess123.apocalyinterface.api.widget.Label;
import net.minecraft.network.chat.Component;

public final class StatScreen extends ApocalyScreen {

private final String pseudo;
private final int coins;

public StatScreen(String pseudo, int coins) { // (1)
super(Component.translatable("monmod.screen.stats"), 220); // (2)
this.pseudo = pseudo;
this.coins = coins;
}

@Override
protected void buildLayout(Column root) { // (3)
root.add(Card.create() // (4)
.add(Label.builder()
.text("monmod.label.bonjour") // (5)
.value(DataSource.of(pseudo)) // (6)
.title() // (7)
.build())
.add(KeyValueRow.builder()
.key("monmod.row.coins")
.value(DataSource.of(coins + " ⬡"))
.build()));

root.add(Button.builder()
.text("monmod.btn.fermer")
.onClick(this::onClose) // (8)
.build());
}
}

Explication ligne par ligne :

AnnotationExplication
(1)Le constructeur reçoit les données. Tous les champs doivent être final — ils ne changent pas pendant la durée de vie de l'écran.
(2)super() prend le titre (clé i18n) et la largeur en pixels du panneau. Forge traduit la clé dans la langue active du client.
(3)buildLayout est appelée une fois à l'ouverture, puis à chaque redimensionnement. Tu ajoutes des widgets à root — pas de coordonnées.
(4)Card.create() crée un sous-panneau avec fond, bordure et padding. Les méthodes .add() sont chaînables.
(5).text() prend toujours une clé i18n, jamais un texte brut.
(6).value(DataSource.of(pseudo)) fourni la valeur affichée après le label. DataSource.of() crée une valeur statique.
(7).title() applique la couleur jaune ApocalyColors.TITLE au label.
(8)this::onClose est la méthode héritée de Screen — ferme l'écran proprement.

Étape 5 — Ouvrir l'écran

Depuis un packet S2C (production)

// Dans le handler du packet d'ouverture, côté client :
Minecraft.getInstance().execute(() ->
Minecraft.getInstance().setScreen(
new StatScreen(payload.pseudo(), payload.coins())
)
);

Depuis un KeyMapping (développement)

// Dans le tick handler de ton mod, pour tester rapidement :
if (MON_KEYBIND.consumeClick()) {
Minecraft.getInstance().setScreen(new StatScreen("Tawess123", 1500));
}

Étape 6 — Ajouter les clés i18n

Dans src/main/resources/assets/monmod/lang/fr_ca.json :

{
"monmod.screen.stats": "Mes Stats",
"monmod.label.bonjour": "Joueur : %s",
"monmod.row.coins": "Coins",
"monmod.btn.fermer": "Fermer"
}

Dans src/main/resources/assets/monmod/lang/en_us.json (requis par Forge même si ton mod est francophone) :

{
"monmod.screen.stats": "My Stats",
"monmod.label.bonjour": "Player: %s",
"monmod.row.coins": "Coins",
"monmod.btn.fermer": "Close"
}

Résultat attendu

Un panneau centré, 220 px de large, avec :

  • La barre de titre jaune affichant « Mes Stats »
  • Une card avec le nom du joueur en jaune et ses coins en cyan
  • Un bouton « Fermer » en bas

Aucun calcul de coordonnées, aucun appel OpenGL direct.


Étape suivante

  • Système de layout — comprendre Column, Row, Card, Grid, ScrollableColumn
  • Recettes — un hub complet avec boutons défilants (Clan Hub)