diff --git a/PALAMOD_CDC.md b/PALAMOD_CDC.md index d93fe90..5c4c231 100644 --- a/PALAMOD_CDC.md +++ b/PALAMOD_CDC.md @@ -576,6 +576,11 @@ avant M4 (TODO:crafts-machines). verifiees au javap. VERIFIE : build SUCCESSFUL, boot Done, 0 erreur mixin. UNVERIFIED en jeu (prise en main : seul un craft/fourneau avec joueur le prouvera). TODO:craft-xp et TODO:smelt-xp CLOS. +- M-recompenses LIVRE 2026-10-19 ~03:35 : lots de palier wiki (pages Recompenses relues en + live) : formule 5N pala + 5N trixium + 500N $ (niv.2-19), 105/105/10500 (niv.20) + extras + existants (findium, amethyste, graines, pepite endium). ECART : lots speciaux inexistants + (voidstone, excavatrices...) => TODO:recompenses-items. + furnaceSmelts completee (6 minerais). + VERIFIE : build SUCCESSFUL, boot Done, 0 erreur. UNVERIFIED en jeu (level-up joueur). - Client/mod : boucle visuelle OPERATIONNELLE 2026-10-19 (Xvfb :99 + runClient SDL x11 + captures Java Robot + pilotage xdotool + vision_analyze) : menu, Select World, monde New World (creatif, cheats), /give, pose de bloc, inventaire, F3+T. Screens : scratch vis*.png. diff --git a/mods/pala/src/main/java/fr/surviepote/pala/core/PalaConfig.java b/mods/pala/src/main/java/fr/surviepote/pala/core/PalaConfig.java index bd45e95..15fd7c2 100644 --- a/mods/pala/src/main/java/fr/surviepote/pala/core/PalaConfig.java +++ b/mods/pala/src/main/java/fr/surviepote/pala/core/PalaConfig.java @@ -106,7 +106,11 @@ public final class PalaConfig { java.util.List.of("pala:creative_mixed_coal")); public Map furnaceSmelts = new HashMap<>(Map.of( "pala:paladium_ore", "pala:paladium_ingot", - "pala:paladium_green_ore", "pala:paladium_green_ingot")); + "pala:paladium_green_ore", "pala:paladium_green_ingot", + "pala:amethyst_ore", "pala:amethyst_ingot", + "pala:titane_ore", "pala:titane_ingot", + "pala:trixium_ore", "pala:trixium_gem", + "pala:findium_ore", "pala:findium_gem")); public java.util.List furnaceFuels = new java.util.ArrayList<>(java.util.List.of( "minecraft:coal", "minecraft:charcoal")); diff --git a/mods/pala/src/main/java/fr/surviepote/pala/core/PalaJobs.java b/mods/pala/src/main/java/fr/surviepote/pala/core/PalaJobs.java index f6128fc..9fd4376 100644 --- a/mods/pala/src/main/java/fr/surviepote/pala/core/PalaJobs.java +++ b/mods/pala/src/main/java/fr/surviepote/pala/core/PalaJobs.java @@ -11,7 +11,8 @@ import net.minecraft.world.level.block.state.BlockState; // Metiers : XP et niveaux (M0 = moteur minimal, tables completes en M5). // Wiki VERIFIE : 4 metiers (mineur, fermier, chasseur, alchimiste), ~100 niveaux, -// table XP mineur par bloc (PalaConfig.minerXp). Courbe et recompenses : UNVERIFIED (M5). +// table XP mineur par bloc (PalaConfig.minerXp). Recompenses de palier : PalaRewards +// (M-recompenses, formule wiki 5N/5N/500N + extras). public final class PalaJobs { public static final List JOBS = List.of("mineur", "fermier", "chasseur", "alchimiste"); @@ -42,7 +43,7 @@ public final class PalaJobs { data.level++; player.sendSystemMessage(Component.literal( "§6[Metier] §e" + job + " §7niveau §a" + data.level + " §7atteint !")); - // TODO:recompenses-m5 : lots par palier (voidstone niv.2, /nether niv.3...). Raison : M5. + PalaRewards.grant(player, job, data.level); } PalaStorage.get().markDirty(); return data.level; diff --git a/mods/pala/src/main/java/fr/surviepote/pala/core/PalaRewards.java b/mods/pala/src/main/java/fr/surviepote/pala/core/PalaRewards.java new file mode 100644 index 0000000..98cb4f6 --- /dev/null +++ b/mods/pala/src/main/java/fr/surviepote/pala/core/PalaRewards.java @@ -0,0 +1,85 @@ +package fr.surviepote.pala.core; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import fr.surviepote.pala.PalaItems; + +// M-recompenses (wiki pages Recompenses des 4 metiers, relues en live 2026-10-19) : +// niveaux 2-19 : 5N paladium + 5N trixium + 500N $ ; niveau 20 : 105/105/10 500. +// Niveaux 21+ : rien (tables wiki jusqu'a 20). Niveau 1 : rien (tables des 2). +// Extras (items EXISTANTS uniquement) : mineur/fermier 3 = 2 findium ; mineur 5, +// fermier 5, chasseur 8 = 16 amethyste ; fermier 7 = 64 graines eggplant (= fikutsi, +// wiki "eggplant seed") ; fermier 9 = 1 amethyste compressee ; fermier 13 = 64 graines +// okami (wiki "chervil seed", hypothese chervil==okami) ; fermier 17 = 64 graines kiwano ; +// niveau 20 (4 metiers) = 1 pepite endium. +// ECART : lots speciaux (voidstone, excavatrices, cobblebreaker, tanks, cages...) et +// crafts debloques = items inexistants => TODO:recompenses-items (M-machines/M8). +// Chasseur 10 (2 empty bow modifier) : texture sans item => non donne (meme TODO). +public final class PalaRewards { + + private PalaRewards() { + } + + /** Attribue le lot de passage au niveau (appele depuis PalaJobs.addXp). */ + public static void grant(ServerPlayer player, String job, int level) { + if (level < 2 || level > 20) { + return; + } + PalaStorage storage = PalaStorage.get(); + double money = level == 20 ? 10500.0 : 500.0 * level; + int gems = level == 20 ? 105 : 5 * level; + storage.data(player.getUUID()).money += money; + give(player, PalaItems.PALADIUM_INGOT, gems); + give(player, PalaItems.TRIXIUM_GEM, gems); + // Extras wiki (items existants). + if ((job.equals("mineur") || job.equals("fermier")) && level == 3) { + give(player, PalaItems.FINDIUM_GEM, 2); + } + if ((job.equals("mineur") && level == 5) || (job.equals("fermier") && level == 5) + || (job.equals("chasseur") && level == 8)) { + give(player, PalaItems.AMETHYST_INGOT, 16); + } + if (job.equals("fermier") && level == 7) { + give(player, PalaItems.FIKUTSI_SEEDS, 64); + } + if (job.equals("fermier") && level == 9) { + give(player, PalaItems.COMPRESSED_AMETHYST, 1); + } + if (job.equals("fermier") && level == 13) { + give(player, PalaItems.OKAMI_SEEDS, 64); + } + if (job.equals("fermier") && level == 17) { + give(player, PalaItems.KIWANO_SEEDS, 64); + } + if (level == 20) { + give(player, PalaItems.ENDIUM_NUGGET, 1); + } + storage.markDirty(); + player.sendSystemMessage(Component.literal("§6[Recompense] §7Niveau " + level + " " + job + + " : §e" + gems + " paladium, " + gems + " trixium, " + + String.format("%.0f", money) + " $ §7(+ extras éventuels).")); + } + + private static void give(ServerPlayer player, Item item, int count) { + int rest = count; + while (rest > 0) { + int part = Math.min(rest, item.getDefaultMaxStackSize()); + ItemStack stack = new ItemStack(item, part); + if (!player.getInventory().add(stack)) { + ServerLevel level = player.level(); + BlockPos pos = player.blockPosition(); + ItemEntity entity = new ItemEntity(level, pos.getX() + 0.5, pos.getY() + 0.5, + pos.getZ() + 0.5, stack); + entity.setPickUpDelay(10); + level.addFreshEntity(entity); + } + rest -= part; + } + } +} diff --git a/server/mods/pala-0.2.1.jar b/server/mods/pala-0.2.1.jar index 2dcc74b..076c611 100644 Binary files a/server/mods/pala-0.2.1.jar and b/server/mods/pala-0.2.1.jar differ