pala M-mixin: pipeline mixin + XP craft (pain/tarte) et cuisson (viandes)

This commit is contained in:
Anaïs Saraiva
2026-10-19 03:23:31 +02:00
parent baf29d5c11
commit 58441d5048
6 changed files with 95 additions and 0 deletions
+7
View File
@@ -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 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. textures legacy pour les tetes). VERIFIE : build SUCCESSFUL, boot Done, 0 erreur.
UNVERIFIED en jeu (GUI + fuel). 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 + - 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 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. (creatif, cheats), /give, pose de bloc, inventaire, F3+T. Screens : scratch vis*.png.
@@ -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());
}
}
}
}
@@ -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());
}
}
}
@@ -11,6 +11,7 @@
"main": ["fr.surviepote.pala.Pala"], "main": ["fr.surviepote.pala.Pala"],
"client": ["fr.surviepote.pala.PalaClient"] "client": ["fr.surviepote.pala.PalaClient"]
}, },
"mixins": ["pala.mixins.json"],
"depends": { "depends": {
"fabricloader": ">=0.16.0", "fabricloader": ">=0.16.0",
"fabric-api": "*", "fabric-api": "*",
@@ -0,0 +1,11 @@
{
"required": true,
"package": "fr.surviepote.pala.mixin",
"mixins": [
"PalaCraftXpMixin",
"PalaSmeltXpMixin"
],
"injectors": {
"defaultRequire": 1
}
}
Binary file not shown.