From 610dc597fb4d10bba54d820e3ff52793f5a95b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=C3=AFs=20Saraiva?= <53227802+Kisakay@users.noreply.github.com> Date: Sun, 18 Oct 2026 23:54:37 +0200 Subject: [PATCH] pala M3: crusher fidele legacy (fruits/luck/auto-generate) + furnace mixed fuels + gate fermier 8 --- PALAMOD_CDC.md | 20 +++-- .../pala/machine/PalaMachineBlock.java | 13 +++ .../pala/machine/PalaMachineBlockEntity.java | 85 ++++++++++++++++-- server/mods/pala-0.2.1.jar | Bin 326880 -> 328288 bytes 4 files changed, 103 insertions(+), 15 deletions(-) diff --git a/PALAMOD_CDC.md b/PALAMOD_CDC.md index 1635139..120cbc1 100644 --- a/PALAMOD_CDC.md +++ b/PALAMOD_CDC.md @@ -154,8 +154,12 @@ BreakBlockUnderCrops* portees partiellement). Fruits + graines PORTES en items. graines/fruits, chance nugget endium (metier fermier), cuisson eggplant→lingot amethyste (wiki minerais). Crusher consomme : eggplants, chervil, kiwanos, orangeblues. ECART VERIFIE (grep 2026-10-18) : aucun CUSTOM:Chervil dans CUSTOM_MAPPING.json (0 match) — le chervil wiki n'existe pas dans -le portage (ni item ni bloc). TODO:chervil : creer l'item/plante ou mapper vers un synonyme -(liste des fruits : egg_plant_fruit, kiwano, okami_fruit, orange_blue_fruit PORTES). +le portage (ni item ni bloc). TODO:chervil : TRANCHE M3 (grep+legacy) : les textures chervil.png/chervils.png sont deja +utilisees par okami (seeds=fruit, VERIFIE models), aucun asset okami* n'existe, et le mapping +crusher legacy donne okami->titane = le role wiki du chervil ("donne des lingots de titane", +corpus VERIFIE). Hypothese : chervil (wiki actuel) == okami (legacy). RESTE : confirmation +visuelle en jeu (comparer chervils.png au fruit chervil du wiki) avant de clore. Raison : pas de +doublon cree sans preuve. ### 1.7 Metiers (4) @@ -490,6 +494,9 @@ avant M4 (TODO:crafts-machines). (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. - M2 LIVRE (partiel) 2026-10-18 23:45 : tooltip XP POG via composant LORE serveur (ItemLore verifie au javap ; niveau + "XP : x / seuil" maj a chaque casse, ligne MAX au niv.25 ; conserve sur evolution). Craft POG VERIFIE dans data (pattern "#AB/C/C" = 1 pioche amethyste + @@ -497,10 +504,11 @@ avant M4 (TODO:crafts-machines). VERIFIE : build SUCCESSFUL, boot Done, 0 erreur. UNVERIFIED : affichage tooltip en jeu (pas de joueur), paliers OS wiki non implementes (TODO:pog-os : seuils one-shot 11/21/26/31. Raison : M2 lore d'abord, OS ensuite). - 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. +- M3 LIVRE 2026-10-18 23:51 : crusher fidele legacy (fruits->lingots : eggplant/amethyste, + okami/titane, kiwano/paladium, orange_blue/nugget endium ; fuels = 5 mixed coals, creative infini, + conso 20 %/tick, luck 1/128, auto-generate a 1.0 ; NE cuit plus de minerais) + furnace accepte + mixed coals + gate fermier 8 a l'ouverture du crusher. VERIFIE : build SUCCESSFUL, boot Done, + 0 erreur. UNVERIFIED en jeu : cycle fruit->lingot avec joueur, gate a fermier<8. - 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/machine/PalaMachineBlock.java b/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlock.java index 6376011..e9a5e97 100644 --- a/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlock.java +++ b/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlock.java @@ -1,7 +1,9 @@ package fr.surviepote.pala.machine; 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.InteractionResult; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Player; @@ -16,6 +18,9 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; +import fr.surviepote.pala.PalaBlocks; +import fr.surviepote.pala.core.PalaJobs; + // Blocs machines Pala (PaladiumCrusherGUI / PaladiumFurnaceGUI, type 1 = lies au bloc). // Minimum fonctionnel : bloc + block entity + inventaire 9 slots expose via // le menu vanilla Dispenser (3x3, slots 0/1 entree+combustible, slot 2 sortie, @@ -49,6 +54,14 @@ public class PalaMachineBlock extends Block implements EntityBlock { @Override protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hit) { + // M3 (wiki crusher : "disponible a partir du niveau 8" fermier, VERIFIE). + if (!level.isClientSide() && state.is(PalaBlocks.PALADIUM_CRUSHER) + && player instanceof ServerPlayer sp && PalaJobs.levelOf(sp, "fermier") < 8) { + sp.sendSystemMessage(Component.literal( + "§cCrusher verrouille : fermier niveau 8 requis (actuel : " + + PalaJobs.levelOf(sp, "fermier") + ").")); + return InteractionResult.FAIL; + } if (!level.isClientSide() && level.getBlockEntity(pos) instanceof MenuProvider provider) { player.openMenu(provider); } diff --git a/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlockEntity.java b/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlockEntity.java index cf841ac..829f18b 100644 --- a/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlockEntity.java +++ b/mods/pala/src/main/java/fr/surviepote/pala/machine/PalaMachineBlockEntity.java @@ -1,5 +1,7 @@ package fr.surviepote.pala.machine; +import java.util.Map; + import fr.surviepote.pala.PalaBlockEntities; import fr.surviepote.pala.PalaBlocks; import fr.surviepote.pala.PalaItems; @@ -11,6 +13,7 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.DispenserMenu; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.entity.BlockEntity; @@ -19,16 +22,37 @@ import net.minecraft.world.level.storage.ValueInput; import net.minecraft.world.level.storage.ValueOutput; // Block entity partagee crusher/furnace. Inventaire 9 slots (menu vanilla -// Dispenser 3x3) : slot 0 = entree, slot 1 = combustible (charbon), -// slot 2 = sortie. Cuisson : minerai de paladium -> lingot (le crusher -// cuit 2x plus vite, a la place du bouton Generate du legacy : TODO). +// Dispenser 3x3) : slot 0 = entree, slot 1 = combustible, slot 2 = sortie. +// +// M3 — crusher fidele au legacy (ProcedurePaladiumCrusherUpdateTick + +// ProcedurePaladiumCrusherGenerateButton, legacy-src-backup) : +// - slot 0 = fruit (eggplant->amethyste, okami->titane, kiwano->paladium, +// orange_blue->nugget endium). Le wiki actuel cite "chervil"->titane ; les +// textures chervil* sont deja utilisees par okami (fruit+seeds) et aucun +// asset okami* n'existe => equivalence chervil==okami (TODO:chervil, a +// confirmer visuellement, pas de doublon cree) ; +// - slot 1 = mixed coal (legacy : pala+creative ; wiki actuel : aussi gold, +// amethyste, titane => les 4 + creative). Creative = infini (legacy) ; +// sinon 20 % de consommer 1/tick (legacy) ; +// - "luck" += 1/128 par tick (legacy 0.0078125), gate luck < 1 ; +// - auto-generate a luck >= 1 (legacy : bouton manuel a proba luck ; a luck=1 +// le succes est certain => meme resultat sans GUI custom ; ECART documente) ; +// - le crusher NE cuit plus de minerais (legacy+wiki : fruits uniquement). +// Furnace : minerais pala + combustible charbon vanilla ET mixed coals. public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider { private static final int COOK_TIME_FURNACE = 200; - private static final int COOK_TIME_CRUSHER = 100; + private static final double LUCK_PER_TICK = 1.0 / 128.0; + + private static final Map CRUSHER_RESULTS = Map.of( + PalaItems.EGG_PLANT_FRUIT, PalaItems.AMETHYST_INGOT, + PalaItems.OKAMI_FRUIT, PalaItems.TITANE_INGOT, + PalaItems.KIWANO, PalaItems.PALADIUM_INGOT, + PalaItems.ORANGE_BLUE_FRUIT, PalaItems.ENDIUM_NUGGET); private final SimpleContainer inventory = new SimpleContainer(9); private int progress; + private double luck; public PalaMachineBlockEntity(BlockPos pos, BlockState state) { super(PalaBlockEntities.MACHINE, pos, state); @@ -39,17 +63,52 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider } public void serverTick() { + if (isCrusher()) { + crusherTick(); + } else { + furnaceTick(); + } + } + + private void crusherTick() { + ItemStack fruit = inventory.getItem(0); + ItemStack fuel = inventory.getItem(1); + ItemStack output = inventory.getItem(2); + Item result = CRUSHER_RESULTS.get(fruit.getItem()); + if (result == null || luck >= 1.0 || !isMixedFuel(fuel)) { + return; + } + boolean infinite = fuel.is(PalaItems.CREATIVE_MIXED_COAL); + if (output.isEmpty() || (output.is(result) + && output.getCount() + 1 <= output.getMaxStackSize())) { + fruit.shrink(1); + if (!infinite && Math.random() < 0.2) { + fuel.shrink(1); + } + luck = Math.min(1.0, luck + LUCK_PER_TICK); + if (luck >= 1.0) { + if (output.isEmpty()) { + inventory.setItem(2, new ItemStack(result)); + } else { + output.grow(1); + } + luck = 0.0; + } + setChanged(); + } + } + + private void furnaceTick() { ItemStack input = inventory.getItem(0); ItemStack fuel = inventory.getItem(1); ItemStack output = inventory.getItem(2); ItemStack result = smeltResult(input); - boolean canCook = !result.isEmpty() && isFuel(fuel) + boolean canCook = !result.isEmpty() && isFurnaceFuel(fuel) && (output.isEmpty() || (ItemStack.isSameItemSameComponents(output, result) && output.getCount() + result.getCount() <= output.getMaxStackSize())); if (canCook) { progress++; - int target = isCrusher() ? COOK_TIME_CRUSHER : COOK_TIME_FURNACE; - if (progress >= target) { + if (progress >= COOK_TIME_FURNACE) { progress = 0; input.shrink(1); fuel.shrink(1); @@ -76,8 +135,14 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider return ItemStack.EMPTY; } - private static boolean isFuel(ItemStack stack) { - return stack.is(Items.COAL) || stack.is(Items.CHARCOAL); + private static boolean isMixedFuel(ItemStack stack) { + return stack.is(PalaItems.PALA_MIXED_COAL) || stack.is(PalaItems.CREATIVE_MIXED_COAL) + || stack.is(PalaItems.AMETHYST_MIXED_COAL) || stack.is(PalaItems.TITANE_MIXED_COAL) + || stack.is(PalaItems.GOLD_MIXED_COAL); + } + + private static boolean isFurnaceFuel(ItemStack stack) { + return stack.is(Items.COAL) || stack.is(Items.CHARCOAL) || isMixedFuel(stack); } @Override @@ -85,6 +150,7 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider super.saveAdditional(output); inventory.storeAsItemList(output.list("Items", ItemStack.CODEC)); output.putInt("Progress", progress); + output.putDouble("Luck", luck); } @Override @@ -92,6 +158,7 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider super.loadAdditional(input); inventory.fromItemList(input.listOrEmpty("Items", ItemStack.CODEC)); progress = input.getIntOr("Progress", 0); + luck = input.getDoubleOr("Luck", 0.0); } @Override diff --git a/server/mods/pala-0.2.1.jar b/server/mods/pala-0.2.1.jar index 379ef8dc2b8b8a7d9b32c71e625a22a564732f4b..952e41f35896e4fdb0e09d81c24d3e7a56a02a48 100644 GIT binary patch delta 18028 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