Skip to content

🗂️ Catégories Repliables

ParamètreSpécification
Composant SystèmeCollapsibleCategoryRuleEntry (Classe interne)
Mixin EnglobantAbstractGameRulesScreenRuleListMixin
Classe Ciblenet.minecraft.client.gui.screens.worldselection.AbstractGameRulesScreen.RuleList
Icônes d'ÉtatDéplié : | Replié :
Format du Badge de Nombre (N rules) (ChatFormatting.GRAY)
Couleur au Survol0x22FFFFFF (25% rectangle blanc translucide)
Ligne de Séparation Basse0x44AAAAAA (Ligne discrète)
Couleur du TexteSurvolé : 0xFFFFFFAA | Standard : 0xFFFFFFFF
Son de Clicnet.minecraft.sounds.SoundEvents.UI_BUTTON_CLICK (Volume : 1.0F)
Type de NarrationNarratedElementType.TITLE (NarrationPriority.HOVERED)

📖 Vue d'Ensemble

Dans Minecraft Vanilla, les noms de catégories sont des étiquettes statiques (CategoryRuleEntry), listant toutes les règles dans un long volet défilant. Avec de nombreux mods, la liste devient difficile à lire.

Collapsible Categories remplace ces étiquettes par des widgets interactifs CollapsibleCategoryRuleEntry qui s'ouvrent et se ferment à la demande.


🎨 Disposition Visuelle et Hiérarchie

┌─────────────────────────────────────────────────────────────────────────────┐
│ [ Expand All ]                                             [ Collapse All ] │ ◄── GlobalActionsRuleEntry (Index 0)
├─────────────────────────────────────────────────────────────────────────────┤
│ ▼ ⚔️ Mobs (14 rules)                                                        │ ◄── CollapsibleCategoryRuleEntry (Expanded)
│ ─────────────────────────────────────────────────────────────────────────── │
│   mobGriefing                                                     [ ON ]    │ ◄── Child RuleEntry
│   doMobSpawning                                                   [ ON ]    │ ◄── Child RuleEntry
│   doMobLoot                                                       [ ON ]    │ ◄── Child RuleEntry
├─────────────────────────────────────────────────────────────────────────────┤
│ ▶ 👤 Player (8 rules)                                                       │ ◄── CollapsibleCategoryRuleEntry (Collapsed)
│ ─────────────────────────────────────────────────────────────────────────── │
│ ▼ 🌧️ Updates (6 rules)                                                      │ ◄── CollapsibleCategoryRuleEntry (Expanded)
│ ─────────────────────────────────────────────────────────────────────────── │
│   doFireTick                                                      [ ON ]    │ ◄── Child RuleEntry
│   randomTickSpeed                                                 [ 3  ]    │ ◄── Child RuleEntry
└─────────────────────────────────────────────────────────────────────────────┘

⚙️ Mécanismes Techniques

1. Algorithme de Comptage des Règles

Dans updateVisibleEntries(), le mod compte les règles jusqu'à la prochaine catégorie :

java
int childCount = 0;
for (int j = i + 1; j < this.collapsible_game_rules$allEntries.size(); j++) {
    if (this.collapsible_game_rules$allEntries.get(j) instanceof AbstractGameRulesScreen.CategoryRuleEntry) {
        break;
    }
    childCount++;
}

2. Pipeline de Rendu (extractContent)

S'appuie sur GuiGraphicsExtractor :

  1. Encadré au survol : Trace un fond 0x22FFFFFF entre [getX() - 2, getY()] et [getX() + getWidth() + 2, getY() + 24].
  2. Flèche et Texte : Préfixe ( ou ), nom de la catégorie et badge gris ( (N rules)).
  3. Centrage : Centré horizontalement sur getContentXMiddle() avec décalage vertical getContentY() + 5.
  4. Séparateur Inférieur : Une ligne 0x44AAAAAA à getY() + 23 délimite chaque catégorie.

3. Gestion des Clics

Dans mouseClicked(MouseButtonEvent event, boolean doubleClick) :

  • Clic Gauche (event.button() == 0) ou Clic Droit (event.button() == 1) :
    1. Lance toggleAction.run().
    2. Enregistre l'état dans GameRuleStateConfig.
    3. Joue le son Vanilla : SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F).
    4. Déclenche updateVisibleEntries() pour adapter la liste.
    5. Met à jour les dimensions avec updateSizeAndPosition(...).

4. Accessibilité et Narration d'Écran

Implémente NarratableEntry :

  • Priorité : NarrationPriority.HOVERED
  • Sortie : Transmet le titre en tant que NarratedElementType.TITLE aux lecteurs d'écran.

🔗 Documentation Associée

Official documentation & web portal for Dasik Igaijinn mods.