From c76e6f0778f4843e0de55b5878decca00bfeb0ce Mon Sep 17 00:00:00 2001
From: Noe Caratini <caratinin@gmail.com>
Date: Fri, 29 Apr 2022 19:09:49 +0100
Subject: [PATCH] fix(effect): Fixed HP/MP/CP not updating when receiving a
 MaxHp/MaxMP/MaxCp effect

The MaxHp/MaxMp/MaxCp effect are calling L2Character#addStatFunc which does not broadcast a status update packet.
Changed the call to L2Character#addStatFuncs which does handle broadcast.
---
 .../datapack/handlers/effecthandlers/pump/MaxCp.java  | 10 ++++------
 .../datapack/handlers/effecthandlers/pump/MaxHp.java  | 11 ++++-------
 .../datapack/handlers/effecthandlers/pump/MaxMp.java  | 10 ++++------
 3 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxCp.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxCp.java
index bb6a5f228f..a57ce4a71f 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxCp.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxCp.java
@@ -68,21 +68,19 @@ public final class MaxCp extends AbstractEffect {
 		
 		synchronized (charStat) {
 			switch (_type) {
-				case DIFF: {
-					charStat.getActiveChar().addStatFunc(new FuncAdd(Stats.MAX_CP, 1, this, _power, null));
+				case DIFF -> {
+					charStat.getActiveChar().addStatFuncs(new FuncAdd(Stats.MAX_CP, 1, this, _power, null));
 					if (_heal) {
 						effected.setCurrentCp((currentCp + _power));
 					}
-					break;
 				}
-				case PER: {
+				case PER -> {
 					final double maxCp = effected.getMaxCp();
-					charStat.getActiveChar().addStatFunc(new FuncMul(Stats.MAX_CP, 1, this, _power, null));
+					charStat.getActiveChar().addStatFuncs(new FuncMul(Stats.MAX_CP, 1, this, _power, null));
 					if (_heal) {
 						amount = (_power - 1) * maxCp;
 						effected.setCurrentCp(currentCp + amount);
 					}
-					break;
 				}
 			}
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxHp.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxHp.java
index e6e050cc19..4b325a87cf 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxHp.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxHp.java
@@ -68,22 +68,19 @@ public final class MaxHp extends AbstractEffect {
 		
 		synchronized (charStat) {
 			switch (_type) {
-				case DIFF: {
-					
-					charStat.getActiveChar().addStatFunc(new FuncAdd(Stats.MAX_HP, 1, this, _power, null));
+				case DIFF -> {
+					charStat.getActiveChar().addStatFuncs(new FuncAdd(Stats.MAX_HP, 1, this, _power, null));
 					if (_heal) {
 						effected.setCurrentHp((currentHp + _power));
 					}
-					break;
 				}
-				case PER: {
+				case PER -> {
 					final double maxHp = effected.getMaxHp();
-					charStat.getActiveChar().addStatFunc(new FuncMul(Stats.MAX_HP, 1, this, _power, null));
+					charStat.getActiveChar().addStatFuncs(new FuncMul(Stats.MAX_HP, 1, this, _power, null));
 					if (_heal) {
 						amount = (_power - 1) * maxHp;
 						effected.setCurrentHp(currentHp + amount);
 					}
-					break;
 				}
 			}
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxMp.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxMp.java
index 4b4bd0756b..fa02b091c3 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxMp.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/pump/MaxMp.java
@@ -70,21 +70,19 @@ public final class MaxMp extends AbstractEffect {
 		
 		synchronized (charStat) {
 			switch (_type) {
-				case DIFF: {
-					charStat.getActiveChar().addStatFunc(new FuncAdd(Stats.MAX_MP, 1, this, _power, null));
+				case DIFF -> {
+					charStat.getActiveChar().addStatFuncs(new FuncAdd(Stats.MAX_MP, 1, this, _power, null));
 					if (_heal) {
 						effected.setCurrentMp((currentMp + _power));
 					}
-					break;
 				}
-				case PER: {
+				case PER -> {
 					final double maxMp = effected.getMaxMp();
-					charStat.getActiveChar().addStatFunc(new FuncMul(Stats.MAX_MP, 1, this, _power, null));
+					charStat.getActiveChar().addStatFuncs(new FuncMul(Stats.MAX_MP, 1, this, _power, null));
 					if (_heal) {
 						amount = (_power - 1) * maxMp;
 						effected.setCurrentMp(currentMp + amount);
 					}
-					break;
 				}
 			}
 		}
-- 
GitLab