Fix stale effects persisting on server transfer

Effects from the local server .dat file persisted when the player had
no effects saved in the DB. removeAllEffects() was only called inside
the if-block that checks for saved effect data, so it was skipped when
effectData was null/empty. Now effects are ALWAYS cleared before
restoring from DB.

SOL Onion food diversity is already synced via the generic NeoForge
attachment system (FoodPlayerData is a NeoForge attachment).

Vyrriox
This commit is contained in:
laforetbrut 2026-03-26 15:11:38 +01:00
parent 2e0269ee62
commit 0c7026aa65

View File

@ -355,10 +355,13 @@ public class VanillaSync {
}
}
// Restore Effects
// FIX: ALWAYS clear effects before restoring to prevent stale local effects
// from persisting when DB has no saved effects (e.g. player had no effects on previous server)
serverPlayer.removeAllEffects();
// Restore Effects from DB (if any)
String effectData = rs2.getString("effects");
if (effectData != null && effectData.length() > 2) {
serverPlayer.removeAllEffects();
Map<Integer, String> effects = LocalJsonUtil.StringToEntryMap(effectData);
for (Map.Entry<Integer, String> entry : effects.entrySet()) {
CompoundTag effectTag = NbtUtils.snbtToStructure(deserializeString(entry.getValue()));