pala M1: worldgen amethyste/titane calibre wiki (size 8, trapezoid 6-10, deep ocean) + /pala orestats

This commit is contained in:
Anaïs Saraiva
2026-10-18 23:44:02 +02:00
parent 86cc852c81
commit cc7a5f7c77
10 changed files with 154 additions and 16 deletions
+16 -8
View File
@@ -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 <repo>/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.
@@ -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<String, Integer> counts = new java.util.HashMap<>();
java.util.Map<String, int[]> 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<String> 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));
@@ -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));
}
}
@@ -1,7 +1,7 @@
{
"type": "minecraft:ore",
"discard_chance_on_air_exposure": 0.0,
"size": 5,
"size": 8,
"targets": [
{
"state": "pala:amethyst_ore",
@@ -1,7 +1,7 @@
{
"type": "minecraft:ore",
"discard_chance_on_air_exposure": 0.0,
"size": 4,
"size": 8,
"targets": [
{
"state": "pala:titane_ore",
@@ -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
}
}
},
@@ -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"
}
]
}
@@ -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
}
}
},
@@ -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"
}
]
}
Binary file not shown.