MaxMpFinalizer doesn't take the maxMP parameter of the items into account. Maybe it's calculated outside it in the private version, but it is not working at all on the Free one.
This should fix it:
diff --git a/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxMpFinalizer.java b/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxMpFinalizer.java
index 15296e78ea8056757ad8d3c0baf2c2f998fc2a24..59fb0d319dad9999d6f8516c537a4fe09808436d 100644
--- a/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxMpFinalizer.java
+++ b/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxMpFinalizer.java
@@ -21,6 +21,7 @@ import java.util.OptionalDouble;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PetInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.stats.BaseStat;
import org.l2jmobius.gameserver.model.stats.IStatFunction;
import org.l2jmobius.gameserver.model.stats.Stat;
@@ -47,6 +48,12 @@ public class MaxMpFinalizer implements IStatFunction
if (player != null)
{
baseValue = player.getTemplate().getBaseMpMax(player.getLevel());
+
+ // Add MaxMP bonus from items
+ for (ItemInstance item : player.getInventory().getPaperdollItems(ItemInstance::isEquipped))
+ {
+ baseValue += item.getItem().getStats(stat, 0);
+ }
}
}
final double menBonus = creature.getMEN() > 0 ? BaseStat.MEN.calcBonus(creature) : 1.;
Cheers!