From 0c7026aa65d4dc52bf15ef8d2ef746df0766a0bf Mon Sep 17 00:00:00 2001 From: laforetbrut Date: Thu, 26 Mar 2026 15:11:38 +0100 Subject: [PATCH] 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 --- src/main/java/vip/fubuki/playersync/sync/VanillaSync.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java index c6719bb..4a0596c 100644 --- a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java +++ b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java @@ -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 effects = LocalJsonUtil.StringToEntryMap(effectData); for (Map.Entry entry : effects.entrySet()) { CompoundTag effectTag = NbtUtils.snbtToStructure(deserializeString(entry.getValue()));