diff --git a/PALAMOD_CDC.md b/PALAMOD_CDC.md index 6476711..6acb892 100644 --- a/PALAMOD_CDC.md +++ b/PALAMOD_CDC.md @@ -32,7 +32,7 @@ n'utilise ni l'un ni l'autre). Conclusion : OCR automatique des images wiki = NO Decision : les patterns de craft retiennent (1) le texte wiki "Ressources necessaires" quand present, (2) les slots exacts de elements/*.mod.json (90 recettes, donnees machine VERIFIEES, ex §3.1), (3) le reste est marque UNVERIFIED et devra etre releve en jeu via JEI (screenshots table de craft). -TODO:OCR-fiable : re-essayer l'OCR uniquement sur images >= 50 Ko ou captures JEI en jeu. Raison : +TODO:ocr-fiable : re-essayer l'OCR uniquement sur images >= 50 Ko ou captures JEI en jeu. Raison : en dessous de ce seuil, hallucination demontree sur 3/3 echantillons. Reference existante (etat des lieux, PAS copiee) : mods/pala/ : @@ -58,8 +58,8 @@ Convention : [PORTE] = present dans mods/pala/src ou data/ (partiel = logique in | Famille | Minerai | Lingot/gemme | Bloc | Worldgen wiki (VERIFIE) | Mapping | |---|---|---|---|---|---| -| Amethyste | amethyst_ore [PORTE] | amethyst_ingot [PORTE] | amethyst_ore_block [PORTE] | filons 1-8, couches 6-10 + deep ocean des couche 25 | worldgen PORTE (overworld), couches UNVERIFIED | -| Titane | titane_ore [PORTE] | titane_ingot [PORTE] | titane_ore_block [PORTE] | deep ocean + grottes, filons 1-8, couches 6-10 | PORTE (overworld+end). ECART : wiki ne cite pas l'End → verifier | +| Amethyste | amethyst_ore [PORTE] | amethyst_ingot [PORTE] | amethyst_ore_block [PORTE] | filons 1-8, couches 6-10 + deep ocean des couche 25 | M1 : size 8, trapezoid 6-10, placed deep uniform 25-40 (4 biomes deep) | +| Titane | titane_ore [PORTE] | titane_ingot [PORTE] | titane_ore_block [PORTE] | deep ocean + grottes, filons 1-8, couches 6-10 | M1 : idem amethyste. ECART : wiki ne cite pas l'End → verifier | | Paladium | paladium_ore [PORTE] | paladium_ingot [PORTE] | paladium_ore_block [PORTE] | page minerais (texte tronque JS, re-crawl partiel) | PORTE, couches UNVERIFIED | | Paladium vert | paladium_green_ore [PORTE] | paladium_green_ingot [PORTE] | paladium_green_ore_block [PORTE] | idem | PORTE, obtention (fonderie ?) UNVERIFIED | | Trixium | trixium_ore [PORTE] | trixium_gem [PORTE] | trixium_ore_block [PORTE] | idem | PORTE | @@ -69,8 +69,10 @@ Convention : [PORTE] = present dans mods/pala/src ou data/ (partiel = logique in Drops/smelting : *_ore_smelting + block<->lingot 9x/1x/9x dans elements (ex AmethystBlockOreRecipe shapeless 1 bloc → 9 lingots VERIFIE). Patterns compacts standards : VERIFIE via elements. -TODO:worldgen-couches : calibrer chaque placed_feature (count/size/hauteur) sur les donnees wiki -(couches 6-10 + deep ocean). Raison : le portage injecte en overworld sans contrainte de hauteur. +TODO:worldgen-couches : RESTE pour paladium/trixium/findium/green (tailles MCreator conservees : +4/8/3/4, hauteurs 18/25/33/18 — non relues en detail wiki) + borne max deep 40 UNVERIFIED +(wiki dit "a partir de la couche 25" sans max ; 25-40 choisi, TrapezoidHeight verifie au unzip). +Lecon M1 VERIFIEE au boot : minecraft:triangle N'EXISTE PAS en 26.3 (crash datapacks) → trapezoid. ### 1.2 Outils et armes @@ -450,8 +452,9 @@ avant M4 (TODO:crafts-machines). - Features wiki couvertes (entree CDC) : ~210 (§1.14). Portage existant : ~120 (assets+registres). Logique specifiee restant a implementer : ~90. Couverture spec : 100 % des pages FR Java ingestionnees. -- TODO explicites : 11 nommes (grep 2026-10-18 : ocr-fiable, worldgen-couches, broadsword, - crafts-machines, chervil, commandes-exactes, ghost, luckperms, runclient, mcp-ocular, shebang) +- TODO explicites : 12 nommes (grep : ocr-fiable, worldgen-couches, broadsword, + crafts-machines, chervil, commandes-exactes, ghost, luckperms, runclient, mcp-ocular, shebang, + java-home) + 4 points UNVERIFIED (seuils XP 6-100, durees sticks, valeurs armures wiki vs MCreator, patterns machines images). - Methode : WAVES (crawl 137 articles → stub JS isoles → re-crawl navigateur → verifie) + ETERNAL CODE @@ -474,7 +477,7 @@ avant M4 (TODO:crafts-machines). (biomesoplenty/clumps/glitchcore/patpat, message standard "ignorer hors dev"). Serveur arrete apres test (port 25565 libere), eula.txt restaure a false, server.properties/packetfixer.properties restaures (le boot ne change que leurs timestamps). -- M0 LIVRE 2026-10-18 23:35 (commit a suivre) : package core (PalaConfig JSON rechargeable +- M0 LIVRE 2026-10-18 23:35 (commit 86cc852, pousse) : package core (PalaConfig JSON rechargeable 22 entrees minerXp wiki, PalaStorage joueurs JSON + flush 5 s, PalaPermissions rangs+noeuds, PalaJobs moteur XP/niveaux, PalaCore lifecycle), /pala reload|info|rank, /jobs, /nether gate mineur niv.3, hook XP dans PalaToolEvents. VERIFIE : ./gradlew compileJava+build @@ -485,6 +488,11 @@ avant M4 (TODO:crafts-machines). cd mods/pala && nix-shell /shell.nix --run "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))); ./gradlew build". TODO:java-home : fixer shell.nix racine (export JAVA_HOME jdk25) pour ne plus bricoler. Raison : decouvert en testant (3 essais). +- M1 LIVRE 2026-10-18 23:40 : worldgen amethyste/titane calibre wiki (size 8, trapezoid 6-10, + placed deep 25-40 + injection 4 biomes deep ocean), /pala orestats (scan + histo Y). + VERIFIE : build SUCCESSFUL, boot Done (0.345s), config persistee ("config existante"), + 0 ERROR/Exception/datapack au log. UNVERIFIED en jeu : /pala orestats (pas de joueur connecte + pendant le test) + distribution reelle sur nouveaux chunks. - Client/mod : ./gradlew runClient dans mods/pala/ : NON LANCE (session : pas d'affichage ; screenshots ocular impossibles ici). TODO:runclient : 1 screenshot/feature dans mods/pala/docs/screens/ avant M10. Raison : environnement headless, a faire sur poste avec X. diff --git a/mods/pala/src/main/java/fr/surviepote/pala/PalaCommands.java b/mods/pala/src/main/java/fr/surviepote/pala/PalaCommands.java index b407f58..bedc618 100644 --- a/mods/pala/src/main/java/fr/surviepote/pala/PalaCommands.java +++ b/mods/pala/src/main/java/fr/surviepote/pala/PalaCommands.java @@ -57,6 +57,13 @@ public final class PalaCommands { .then(Commands.literal("info") .requires(source -> isAdmin(source)) .executes(command -> info(command.getSource()))) + .then(Commands.literal("orestats") + .requires(source -> isAdmin(source)) + .then(Commands.argument("rayon", + com.mojang.brigadier.arguments.IntegerArgumentType.integer(8, 32)) + .executes(command -> orestats(command.getSource(), + com.mojang.brigadier.arguments.IntegerArgumentType + .getInteger(command, "rayon"))))) .then(Commands.literal("rank") .requires(source -> isAdmin(source)) .then(joueurArg))); @@ -87,6 +94,63 @@ public final class PalaCommands { return Command.SINGLE_SUCCESS; } + // M1 : prospecte les minerais pala dans un cube de rayon N autour du joueur. + // Affiche comptes par minerai + histogramme Y (8 bandes de 16) pour amethyste/titane. + // Test distribution worldgen (couches 6-10 + deep ocean). Rayon capé à 32 (65^3 lectures). + private static int orestats(CommandSourceStack source, int rayon) { + ServerPlayer player = source.getPlayer(); + if (player == null) { + source.sendFailure(Component.literal("§cCommande joueur uniquement.")); + return 0; + } + ServerLevel level = player.level(); + BlockPos center = player.blockPosition(); + java.util.Map counts = new java.util.HashMap<>(); + java.util.Map histo = new java.util.HashMap<>(); + net.minecraft.world.level.block.Block[] ores = {PalaBlocks.AMETHYST_ORE, PalaBlocks.TITANE_ORE, + PalaBlocks.PALADIUM_ORE, PalaBlocks.PALADIUM_GREEN_ORE, PalaBlocks.TRIXIUM_ORE, + PalaBlocks.FINDIUM_ORE, PalaBlocks.KISAKAY_ORE}; + for (int dx = -rayon; dx <= rayon; dx++) { + for (int dy = -rayon; dy <= rayon; dy++) { + for (int dz = -rayon; dz <= rayon; dz++) { + BlockPos pos = center.offset(dx, dy, dz); + net.minecraft.world.level.block.state.BlockState state = level.getBlockState(pos); + for (net.minecraft.world.level.block.Block ore : ores) { + if (state.is(ore)) { + String id = net.minecraft.core.registries.BuiltInRegistries.BLOCK + .getKey(ore).toString(); + counts.merge(id, 1, Integer::sum); + if (ore == PalaBlocks.AMETHYST_ORE || ore == PalaBlocks.TITANE_ORE) { + int[] bars = histo.computeIfAbsent(id, k -> new int[8]); + int band = Math.min(7, Math.max(0, (pos.getY() + 64) / 16)); + bars[band]++; + } + break; + } + } + } + } + } + StringBuilder out = new StringBuilder("§6[Orestats r=" + rayon + "]"); + java.util.List ids = new java.util.ArrayList<>(counts.keySet()); + java.util.Collections.sort(ids); + for (String id : ids) { + out.append("\n§e").append(id).append(" §7x§a").append(counts.get(id)); + int[] bars = histo.get(id); + if (bars != null) { + out.append(" §8Y[-64..63 par 16]="); + for (int b = 0; b < bars.length; b++) { + out.append(bars[b]).append(b < bars.length - 1 ? "/" : ""); + } + } + } + if (ids.isEmpty()) { + out.append("\n§7aucun minerai pala dans la zone."); + } + source.sendSuccess(() -> Component.literal(out.toString()), false); + return Command.SINGLE_SUCCESS; + } + private static int rank(CommandSourceStack source, ServerPlayer target, String rank) { if (!PalaConfig.get().rankNodes.containsKey(rank)) { source.sendFailure(Component.literal("§cRang inconnu : " + rank)); diff --git a/mods/pala/src/main/java/fr/surviepote/pala/PalaWorldgen.java b/mods/pala/src/main/java/fr/surviepote/pala/PalaWorldgen.java index 8ab14c7..185e212 100644 --- a/mods/pala/src/main/java/fr/surviepote/pala/PalaWorldgen.java +++ b/mods/pala/src/main/java/fr/surviepote/pala/PalaWorldgen.java @@ -5,6 +5,7 @@ import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; import net.minecraft.core.registries.Registries; import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.placement.PlacedFeature; @@ -50,5 +51,16 @@ public final class PalaWorldgen { BiomeSelectors.foundInOverworld().or(BiomeSelectors.foundInTheEnd()), GenerationStep.Decoration.UNDERGROUND_ORES, key("titane_ore")); addOverworld("trixium_ore"); + // M1 (wiki minerais, VERIFIE) : amethyste + titane des la couche 25 dans les + // fonds marins des biomes deep ocean (les 4 variants). Placed *_deep dedies. + addDeepOcean("amethyst_ore_deep"); + addDeepOcean("titane_ore_deep"); + } + + private static void addDeepOcean(String path) { + BiomeModifications.addFeature( + BiomeSelectors.includeByKey(Biomes.DEEP_OCEAN, Biomes.DEEP_LUKEWARM_OCEAN, + Biomes.DEEP_COLD_OCEAN, Biomes.DEEP_FROZEN_OCEAN), + GenerationStep.Decoration.UNDERGROUND_ORES, key(path)); } } diff --git a/mods/pala/src/main/resources/data/pala/worldgen/feature/amethyst_ore.json b/mods/pala/src/main/resources/data/pala/worldgen/feature/amethyst_ore.json index 1a857a6..8f1e3b1 100644 --- a/mods/pala/src/main/resources/data/pala/worldgen/feature/amethyst_ore.json +++ b/mods/pala/src/main/resources/data/pala/worldgen/feature/amethyst_ore.json @@ -1,7 +1,7 @@ { "type": "minecraft:ore", "discard_chance_on_air_exposure": 0.0, - "size": 5, + "size": 8, "targets": [ { "state": "pala:amethyst_ore", diff --git a/mods/pala/src/main/resources/data/pala/worldgen/feature/titane_ore.json b/mods/pala/src/main/resources/data/pala/worldgen/feature/titane_ore.json index 1be9bef..70f6f7d 100644 --- a/mods/pala/src/main/resources/data/pala/worldgen/feature/titane_ore.json +++ b/mods/pala/src/main/resources/data/pala/worldgen/feature/titane_ore.json @@ -1,7 +1,7 @@ { "type": "minecraft:ore", "discard_chance_on_air_exposure": 0.0, - "size": 4, + "size": 8, "targets": [ { "state": "pala:titane_ore", diff --git a/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore.json b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore.json index 42ced2e..cc997e0 100644 --- a/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore.json +++ b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore.json @@ -11,12 +11,12 @@ { "type": "minecraft:height_range", "height": { - "type": "minecraft:uniform", + "type": "minecraft:trapezoid", "min_inclusive": { - "absolute": 1 + "absolute": 6 }, "max_inclusive": { - "absolute": 25 + "absolute": 10 } } }, diff --git a/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore_deep.json b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore_deep.json new file mode 100644 index 0000000..2e874a8 --- /dev/null +++ b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/amethyst_ore_deep.json @@ -0,0 +1,27 @@ +{ + "feature": "pala:amethyst_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 25 + }, + "max_inclusive": { + "absolute": 40 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore.json b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore.json index 3e3e6a3..4bbd986 100644 --- a/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore.json +++ b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore.json @@ -11,12 +11,12 @@ { "type": "minecraft:height_range", "height": { - "type": "minecraft:uniform", + "type": "minecraft:trapezoid", "min_inclusive": { - "absolute": 1 + "absolute": 6 }, "max_inclusive": { - "absolute": 19 + "absolute": 10 } } }, diff --git a/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore_deep.json b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore_deep.json new file mode 100644 index 0000000..b753386 --- /dev/null +++ b/mods/pala/src/main/resources/data/pala/worldgen/placed_feature/titane_ore_deep.json @@ -0,0 +1,27 @@ +{ + "feature": "pala:titane_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 25 + }, + "max_inclusive": { + "absolute": 40 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/server/mods/pala-0.2.1.jar b/server/mods/pala-0.2.1.jar index 55b184b..3300cc8 100644 Binary files a/server/mods/pala-0.2.1.jar and b/server/mods/pala-0.2.1.jar differ