pala M-recompenses: lots de palier wiki (formule + extras) + furnace complete

This commit is contained in:
Anaïs Saraiva
2026-10-19 03:32:59 +02:00
parent 8e280e751f
commit 52c3229684
5 changed files with 98 additions and 3 deletions
@@ -106,7 +106,11 @@ public final class PalaConfig {
java.util.List.of("pala:creative_mixed_coal"));
public Map<String, String> 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<String> furnaceFuels = new java.util.ArrayList<>(java.util.List.of(
"minecraft:coal", "minecraft:charcoal"));
@@ -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<String> 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;
@@ -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;
}
}
}