pala M2: tooltip XP POG via LORE serveur + craft verifie conforme wiki

This commit is contained in:
Anaïs Saraiva
2026-10-18 23:48:42 +02:00
parent cc7a5f7c77
commit 3330b5bd04
3 changed files with 39 additions and 4 deletions
@@ -48,6 +48,7 @@ public final class PalaToolEvents {
private static final Set<Item> GOD_PICKAXES = new HashSet<>();
private static final Map<Item, GodLevel> GOD_UPGRADES = new java.util.HashMap<>();
private static final Map<Item, Integer> GOD_NUMBERS = new java.util.HashMap<>();
static {
Item base = PalaItems.PICKAXE_OF_THE_GOD;
@@ -83,6 +84,9 @@ public final class PalaToolEvents {
for (Item item : chain) {
GOD_PICKAXES.add(item);
}
for (int i = 0; i < chain.length; i++) {
GOD_NUMBERS.put(chain[i], i);
}
for (int i = 0; i < thresholds.length; i++) {
GOD_UPGRADES.put(chain[i], new GodLevel(chain[i], thresholds[i], chain[i + 1]));
}
@@ -112,21 +116,28 @@ public final class PalaToolEvents {
if (held != null && GOD_PICKAXES.contains(held)) {
if (held == PalaItems.PICKAXE_OF_THE_GOD_LEVEL25) {
sp.giveExperiencePoints(1);
setGodLore(hand, 25, -1, -1);
} else {
GodLevel upgrade = GOD_UPGRADES.get(held);
if (upgrade != null) {
double value = hand.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY)
.copyTag().getDoubleOr("level", -1.0) + 1.0;
int godLevel = GOD_NUMBERS.getOrDefault(held, 0);
if (value >= upgrade.threshold()) {
sp.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(upgrade.next(), 1));
ItemStack evolved = new ItemStack(upgrade.next(), 1);
GodLevel next = GOD_UPGRADES.get(upgrade.next());
setGodLore(evolved, godLevel + 1, 0,
next == null ? -1 : next.threshold());
sp.setItemSlot(EquipmentSlot.MAINHAND, evolved);
sp.sendSystemMessage(Component.literal("§2Your "
+ new ItemStack(held).getItemName().getString()
+ " §2Leveled Up to "
+ new ItemStack(upgrade.next()).getItemName().getString()));
+ evolved.getItemName().getString()));
} else {
final double stored = value;
CustomData.update(DataComponents.CUSTOM_DATA, hand,
tag -> tag.putDouble("level", stored));
setGodLore(hand, godLevel, stored, upgrade.threshold());
sp.sendOverlayMessage(Component.literal("§6You Need to Mine "
+ (int) (upgrade.threshold() - stored) + " §6To Level Up"));
}
@@ -295,4 +306,20 @@ public final class PalaToolEvents {
static boolean isGodPickaxe(Item item) {
return GOD_PICKAXES.contains(item);
}
// M2 (wiki POG, VERIFIE) : le niveau est dans le nom (lang), le nombre d'XP vers le
// niveau suivant va dans le tooltip via le composant LORE (serveur -> client vanilla).
// stored/threshold < 0 : ligne MAX (niveau 25) ou objectif inconnu.
private static void setGodLore(ItemStack stack, int level, double stored, double threshold) {
java.util.List<Component> lines;
if (stored < 0 || threshold < 0) {
lines = java.util.List.of(Component.literal("§6Niveau " + level + " §8(MAX)"));
} else {
lines = java.util.List.of(
Component.literal("§6Niveau " + level),
Component.literal("§7XP : " + (int) stored + " / " + (int) threshold));
}
stack.set(DataComponents.LORE,
new net.minecraft.world.item.component.ItemLore(lines));
}
}