Files
custom_ore_gem/CONFIG_INTEGRATION_GUIDE.md
T
feldenr dfff76b0f9 test+fix: deep generation tests + bug cleanup (licence, docs, deps)
Two cohesive passes that harden the latitude worldgen and clean up
long-standing inconsistencies.

== Bug fixes & doc alignment ==
- licence: set MIT in gradle.properties and neoforge.mods.toml
  (was "Not specified" - blocks distribution)
- OreAuditHandler: fix javadoc that referenced a non-existent system
  property; the trigger is the .oreaudit marker file. Add an explicit
  warning about the System.exit(0) and point to LatitudeGameTest as the
  non-destructive alternative
- KubeJS: remove the dead kubejs_version, the commented dependency and
  all README claims about an "automatic KubeJS script"/KubeJSIntegration
  class that no longer exists. Vanilla ore removal is now native via the
  neoforge:remove_features biome modifier
- README: refresh the technical header (1.21.1 / NeoForge 21.1.219 /
  Java 21 / v3.2, was 1.20.1/Forge/Java17/v2.1.5) and the shard-diamond
  surface note (both variants are generated, gated by shardDiamondOre)
- CLAUDE.md / CONFIG_INTEGRATION_GUIDE.md: mark the feature toggles and
  tool stats as wired (they read ModConfigs at runtime); correct the
  "hardcoded tools" claim

== Generation tests (56 unit + 6 GameTest, all green) ==
- Extract the pure geometry of LatitudeBiomeSource into LatitudeMath
  (temperature, 3-zone underground model, spawn safe zone, dual-octave
  selector index). LatitudeBiomeSource now delegates to it, so one
  source of truth drives both runtime and tests - no behaviour drift
- LatitudeMathTest (21): temperature clamp/monotonicity, zone boundaries
  without gaps, Deep Dark / cave threshold predicates, spawn-safe square
  symmetry, selector index bounds + near-uniform distribution
- BiomeBandTest (18): fromTemperature boundary cases, surface/ocean
  pool non-empty, cave biomes never in a surface pool
- ModConfigsTest (+2 guards): every ConfigHelper toggle string maps to
  a real FeatureToggleConfig field, so a typo cannot silently produce a
  dead toggle (default: return true)
- LatitudeGameTest (+4 server tests): determinism (1485 pts, 0 mismatch),
  no cave biome at surface (160k samples, 0 leak), surface continuity
  (7% transitions - large biomes), climate gradient (north=cold 100%,
  south=hot 100%, equator cold 0%)

== Build ==
- build.gradle: addModdingDependenciesTo(sourceSets.test) so pure unit
  tests can reference Minecraft types without a full game server
- neoforge.mods.toml: optional BOP/create/mekanism dependencies removed;
  declared with mandatory=false + versionRange="[0,)" they broke mod
  loading when the mods were absent ("requires X 0 or above"). Optional
  integration is already handled via data tags (required:false) and
  data-only recipes that no-op if the mod is missing
- gradlew: restore executable bit

Verification: ./gradlew test build -> BUILD SUCCESSFUL, 56/56 unit tests
            ./gradlew runGameTestServer -> 6/6 GameTests passed in 840ms
2026-06-20 22:33:06 +02:00

165 lines
6.2 KiB
Markdown

# Guide d'Intégration de la Configuration
> **Alerte statut (post-migration NeoForge 1.21, v3.2)** : ce guide décrit l'ancienne approche MCreator. La majorité des intégrations « restantes » ci-dessous sont **désormais réalisées** :
> - **Drops de minerais** : gérés par `CustomOreLootModifier` (Global Loot Modifier auto-enregistré), pas par une procédure de bloc MCreator. `OreBreakEventHandler` dispatche l'XP et appelle `ConfigurableOreDropsProcedure`.
> - **Feature toggles** : câblés (commit `48a0d797`) via `ConfigGatedFeaturesModifier` + les biome modifiers `data/custom_ore_gen/neoforge/biome_modifier/add_*_ores.json` (type `custom_ore_gen:config_gated_features`). Cela gate la **génération** des ores, pas l'enregistrement des blocs.
> - **Outils** : lisent `TOOL_STATS` config (`ModConfigs.isLoaded() ? config : fallback`).
> Les étapes MCreator détaillées plus bas sont conservées à titre historique mais ne sont plus nécessaires.
## Vue d'Ensemble
Le système de configuration est maintenant en place. Voici ce qui a été implémenté :
## ✅ Déjà Fonctionnel
### 1. Stats des Outils (Shard Diamond)
Les outils utilisent **déjà** les valeurs de configuration !
Fichier : `src/main/java/net/mcreator/customoregen/item/Sharddiamond*Item.java`
```java
// La durabilité est lue depuis la configuration
public int getUses() {
return ModConfigs.TOOL_STATS.shardDiamondPickaxeDurability.get();
}
```
**Pour tester :** Modifiez `pickaxeDurability` dans `config/custom_ore_gen-common.toml` après le premier lancement.
### 2. Procédure de Drops Configurables
Une procédure Java a été créée pour gérer les drops configurables.
Fichier : `src/main/java/net/mcreator/customoregen/procedures/ConfigurableOreDropsProcedure.java`
## 🔧 Intégration Restante (Requiert MCreator)
Pour que les drops de minerais utilisent la configuration, vous devez lier la procédure aux blocs via MCreator.
### Étape 1 : Ouvrir MCreator
Ouvrez votre workspace MCreator pour ce mod.
### Étape 2 : Créer une Procédure
1. Allez dans **Workspace procedures**
2. Cliquez sur **Add new procedure**
3. Nommez-la : `configurable_ore_drops`
4. Dans la procédure, ajoutez un appel à la procédure Java :
**Dans MCreator, utilisez les blocs suivants :**
- **Event trigger**: `On block destroyed by player/explosion`
- **Condition**: `Has ore data` → vérifiez si c'est un de vos minerais
- **Action**: Call custom procedure → `ConfigurableOreDropsProcedure`
### Étape 3 : Lier la Procédure aux Blocs
Pour chaque minerai que vous voulez rendre configurable :
1. Ouvrez le bloc dans MCreator (ex: `Shard Diamond Ore`)
2. Allez dans l'onglet **Triggers**
3. Pour **"When block destroyed by player"** ou **"After block destroyed by explosion"**
4. Ajoutez la procédure avec le paramètre `oreType` :
- Pour Shard Diamond Ore : `oreType = "shard_diamond"`
- Pour Concentrated Diamond Ore : `oreType = "concentrated_diamond"`
- Pour Ash Coal Ore : `oreType = "ash_coal"`
- Etc.
### Étape 4 : Rebuild le Mod
Après avoir modifié les blocs dans MCreator :
1. Cliquez sur **Build****Build mod**
2. Le code sera régénéré avec vos liaisons
## 📊 Configuration des Features Toggles
Les options d'activation/désactivation des fonctionnalités sont définies dans `ModConfigs.java` :
```java
enableShardDiamondTools = true
enableShardDiamondOre = true
enableConcentratedOres = true
etc.
```
Pour implémenter ces toggles, vous devrez ajouter des conditions dans :
- L'enregistrement des blocs (pour la génération)
- L'enregistrement des items (pour les outils)
- Les recettes de craft
### Exemple d'Implémentation des Toggles
Dans `CustomOreGenModBlocks.java` ou votre classe d'enregistrement :
```java
// Au lieu d'enregistrer directement :
// SHARDDIAMONDBLOCKORE.register(bus);
// Faites :
if (ModConfigs.FEATURES.enableShardDiamondOre.get()) {
SHARDDIAMONDBLOCKORE.register(bus);
}
```
## 🎯 Ce Que Vous Poulez Faire Maintenant
### Option 1 : Utiliser MCreator pour Intégrer les Drops
- Ouvrez MCreator
- Liez la procédure `ConfigurableOreDropsProcedure` à vos blocs
- Rebuild
### Option 2 : Modifier Directement les Blocs Java
Pour chaque bloc de minerai, modifiez la méthode `onDestroy` pour appeler la procédure.
Exemple pour `SharddiamondblockoreBlock.java` :
```java
@Override
public void onDestroy(Level world, BlockPos pos, BlockState state) {
Entity entity = // obtenir l'entité qui mine
ConfigurableOreDropsProcedure.execute(
world,
pos.getX(),
pos.getY(),
pos.getZ(),
entity,
"shard_diamond"
);
}
```
### Option 3 : Continuer avec les Loot Tables Actuelles
Les loot tables JSON actuelles continueront de fonctionner. La configuration des drops n'affectera le jeu que si vous intégrez la procédure.
## 📝 Résumé des Fichiers Modifiés
| Fichier | Statut | Description |
|---------|--------|-------------|
| `ModConfigs.java` | ✅ Créé | Classe de configuration principale |
| `ConfigHelper.java` | ✅ Créé | Classe utilitaire pour accéder aux configs |
| `ConfigurableOreDropsProcedure.java` | ✅ Créé | Procédure pour les drops configurables |
| `SharddiamondpickaxeItem.java` | ✅ Modifié | Utilise les configs |
| `SharddiamondshovelItem.java` | ✅ Modifié | Utilise les configs |
| `SharddiamondaxeItem.java` | ✅ Modifié | Utilise les configs (et bug de réparation corrigé) |
| `CustomOreGenMod.java` | ✅ Modifié | Enregistre la configuration |
| `custom_ore_gen-common.toml` | ✅ Créé | Fichier de config par défaut |
## 🚀 Test
Pour tester que les outils utilisent bien les configs :
1. Lancez le mod une fois pour générer le fichier de config
2. Fermez le jeu
3. Ouvrez `config/custom_ore_gen-common.toml`
4. Modifiez `pickaxeDurability = 500`
5. Relancez le jeu
6. Craft une pioche en Shard Diamond
7. Vérifiez qu'elle a bien 500 de durabilité (F3 + H pour voir les stats avancées)
## 💡 Besoin d'Aide ?
Si vous avez besoin d'aide pour intégrer la configuration via MCreator, n'hésitez pas à demander !
---
**Note** : Le système de configuration est en place et fonctionne pour les outils. Pour les drops et la génération des minerais, l'intégration dépend de comment vous voulez procéder (via MCreator ou modification directe du code).