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
6.2 KiB
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.OreBreakEventHandlerdispatche l'XP et appelleConfigurableOreDropsProcedure.- Feature toggles : câblés (commit
48a0d797) viaConfigGatedFeaturesModifier+ les biome modifiersdata/custom_ore_gen/neoforge/biome_modifier/add_*_ores.json(typecustom_ore_gen:config_gated_features). Cela gate la génération des ores, pas l'enregistrement des blocs.- Outils : lisent
TOOL_STATSconfig (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
// 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
- Allez dans Workspace procedures
- Cliquez sur Add new procedure
- Nommez-la :
configurable_ore_drops - 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 :
- Ouvrez le bloc dans MCreator (ex:
Shard Diamond Ore) - Allez dans l'onglet Triggers
- Pour "When block destroyed by player" ou "After block destroyed by explosion"
- 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.
- Pour Shard Diamond Ore :
Étape 4 : Rebuild le Mod
Après avoir modifié les blocs dans MCreator :
- Cliquez sur Build → Build mod
- 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 :
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 :
// 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 :
@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 :
- Lancez le mod une fois pour générer le fichier de config
- Fermez le jeu
- Ouvrez
config/custom_ore_gen-common.toml - Modifiez
pickaxeDurability = 500 - Relancez le jeu
- Craft une pioche en Shard Diamond
- 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).