From 58441d50488c7c68b5133529d95495dbbe6b8503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=C3=AFs=20Saraiva?= <53227802+Kisakay@users.noreply.github.com> Date: Mon, 19 Oct 2026 03:23:31 +0200 Subject: [PATCH] pala M-mixin: pipeline mixin + XP craft (pain/tarte) et cuisson (viandes) --- PALAMOD_CDC.md | 7 +++ .../pala/mixin/PalaCraftXpMixin.java | 43 ++++++++++++++++++ .../pala/mixin/PalaSmeltXpMixin.java | 33 ++++++++++++++ mods/pala/src/main/resources/fabric.mod.json | 1 + mods/pala/src/main/resources/pala.mixins.json | 11 +++++ server/mods/pala-0.2.1.jar | Bin 404214 -> 407151 bytes 6 files changed, 95 insertions(+) create mode 100644 mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaCraftXpMixin.java create mode 100644 mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaSmeltXpMixin.java create mode 100644 mods/pala/src/main/resources/pala.mixins.json diff --git a/PALAMOD_CDC.md b/PALAMOD_CDC.md index cc406da..40218aa 100644 --- a/PALAMOD_CDC.md +++ b/PALAMOD_CDC.md @@ -563,6 +563,13 @@ avant M4 (TODO:crafts-machines). SUCCESS sinon la GUI ne s'ouvre pas — lecon). Tetes + modifieurs : M-grinder-4 (pas de textures legacy pour les tetes). VERIFIE : build SUCCESSFUL, boot Done, 0 erreur. UNVERIFIED en jeu (GUI + fuel). +- M-mixin LIVRE 2026-10-19 ~03:25 : pipeline mixin sans loom (pala.mixins.json + entree + fabric.mod.json, pas de refmap : noms Mojang non obfusques) + 2 mixins : craft (pain 1 XP + niv.1+, tarte citrouille 4 XP niv.11+, via ResultSlot.checkTakeAchievements) et cuisson + (4 viandes 10 XP chasseur niv.1+, lapin exclu, via FurnaceResultSlot.onTake). Signatures + 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. - 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/mixin/PalaCraftXpMixin.java b/mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaCraftXpMixin.java new file mode 100644 index 0000000..1808ffa --- /dev/null +++ b/mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaCraftXpMixin.java @@ -0,0 +1,43 @@ +package fr.surviepote.pala.mixin; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ResultSlot; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import fr.surviepote.pala.core.PalaJobs; + +// M-mixin (wiki metiers, VERIFIE) : XP au craft, sans event fabric existant. +// Fermier : pain = 1 XP (niveau 1+), tarte citrouille = 4 XP (niveau 11+), par item pris. +// Injection en TAIL de checkTakeAchievements (appele a chaque prise du resultat). +@Mixin(ResultSlot.class) +public class PalaCraftXpMixin { + + @Shadow + @Final + private Player player; + + @Inject(method = "checkTakeAchievements", at = @At("TAIL")) + private void pala$craftXp(ItemStack stack, CallbackInfo ci) { + if (!(player instanceof ServerPlayer sp) || stack.isEmpty()) { + return; + } + String id = net.minecraft.core.registries.BuiltInRegistries.ITEM.getKey(stack.getItem()) + .toString(); + if (id.equals("minecraft:bread")) { + if (PalaJobs.levelOf(sp, "fermier") >= 1) { + PalaJobs.addXp(sp, "fermier", 1.0 * stack.getCount()); + } + } else if (id.equals("minecraft:pumpkin_pie")) { + if (PalaJobs.levelOf(sp, "fermier") >= 11) { + PalaJobs.addXp(sp, "fermier", 4.0 * stack.getCount()); + } + } + } +} diff --git a/mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaSmeltXpMixin.java b/mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaSmeltXpMixin.java new file mode 100644 index 0000000..de20fbe --- /dev/null +++ b/mods/pala/src/main/java/fr/surviepote/pala/mixin/PalaSmeltXpMixin.java @@ -0,0 +1,33 @@ +package fr.surviepote.pala.mixin; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.FurnaceResultSlot; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import fr.surviepote.pala.core.PalaJobs; + +// M-mixin (wiki chasseur, VERIFIE) : cuisson des viandes = 10 XP chasseur (niveau 1+), +// par item pris. Lapin exclu (wiki : "sauf pour le lapin"). +// Injection en TAIL de onTake (signature vanilla verifiee au javap). +@Mixin(FurnaceResultSlot.class) +public class PalaSmeltXpMixin { + + @Inject(method = "onTake", at = @At("TAIL")) + private void pala$smeltXp(Player player, ItemStack stack, CallbackInfo ci) { + if (!(player instanceof ServerPlayer sp) || stack.isEmpty()) { + return; + } + String id = net.minecraft.core.registries.BuiltInRegistries.ITEM.getKey(stack.getItem()) + .toString(); + boolean viande = id.equals("minecraft:cooked_beef") || id.equals("minecraft:cooked_mutton") + || id.equals("minecraft:cooked_porkchop") || id.equals("minecraft:cooked_chicken"); + if (viande && PalaJobs.levelOf(sp, "chasseur") >= 1) { + PalaJobs.addXp(sp, "chasseur", 10.0 * stack.getCount()); + } + } +} diff --git a/mods/pala/src/main/resources/fabric.mod.json b/mods/pala/src/main/resources/fabric.mod.json index 2f7482a..30338f6 100644 --- a/mods/pala/src/main/resources/fabric.mod.json +++ b/mods/pala/src/main/resources/fabric.mod.json @@ -11,6 +11,7 @@ "main": ["fr.surviepote.pala.Pala"], "client": ["fr.surviepote.pala.PalaClient"] }, + "mixins": ["pala.mixins.json"], "depends": { "fabricloader": ">=0.16.0", "fabric-api": "*", diff --git a/mods/pala/src/main/resources/pala.mixins.json b/mods/pala/src/main/resources/pala.mixins.json new file mode 100644 index 0000000..4cdfde0 --- /dev/null +++ b/mods/pala/src/main/resources/pala.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "fr.surviepote.pala.mixin", + "mixins": [ + "PalaCraftXpMixin", + "PalaSmeltXpMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/server/mods/pala-0.2.1.jar b/server/mods/pala-0.2.1.jar index 522923855dc99be0bc3ae63bfe408dfe881cbf27..971a9946b62ff7a3a8d957d91538414fb3ac4eb3 100644 GIT binary patch delta 19807 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