pala M2: tooltip XP POG via LORE serveur + craft verifie conforme wiki
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user