package io.github.lucaseasedup.logit.config.observers; import io.github.lucaseasedup.logit.account.Account; import io.github.lucaseasedup.logit.config.Property; import io.github.lucaseasedup.logit.config.PropertyObserver; import io.github.lucaseasedup.logit.persistence.AirBarSerializer; import io.github.lucaseasedup.logit.persistence.ExperienceSerializer; import io.github.lucaseasedup.logit.persistence.HealthBarSerializer; import io.github.lucaseasedup.logit.persistence.HungerBarSerializer; import io.github.lucaseasedup.logit.persistence.LocationSerializer; import io.github.lucaseasedup.logit.persistence.PersistenceSerializer; import java.util.Arrays; import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.entity.Player; public final class SerializerObserver extends PropertyObserver { @Override public void update(Property p) { if (getAccountManager() == null || getPersistenceManager() == null) return; Class<? extends PersistenceSerializer> clazz = null; switch (p.getPath()) { case "waitingRoom.enabled": clazz = LocationSerializer.class; break; case "forceLogin.obfuscate.air": clazz = AirBarSerializer.class; break; case "forceLogin.obfuscate.health": clazz = HealthBarSerializer.class; break; case "forceLogin.obfuscate.experience": clazz = ExperienceSerializer.class; break; case "forceLogin.obfuscate.hunger": clazz = HungerBarSerializer.class; break; default: break; } if (clazz != null) { if (p.getBoolean()) { enableSerializer(clazz); } else { disableSerializer(clazz); } } } private void enableSerializer(Class<? extends PersistenceSerializer> clazz) { for (Player player : Bukkit.getOnlinePlayers()) { if (getSessionManager().isSessionAlive(player)) continue; Account account = getAccountManager().selectAccount( player.getName(), Arrays.asList( keys().username(), keys().persistence() ) ); if (account != null) { getPersistenceManager().serializeUsing(account, player, clazz); } } try { getPersistenceManager().registerSerializer(clazz); } catch (ReflectiveOperationException ex) { log(Level.WARNING, "Could not register serializer: " + clazz.getSimpleName(), ex); } } private void disableSerializer(Class<? extends PersistenceSerializer> clazz) { for (Player player : Bukkit.getOnlinePlayers()) { Account account = getAccountManager().selectAccount( player.getName(), Arrays.asList( keys().username(), keys().persistence() ) ); if (account != null) { getPersistenceManager().unserializeUsing(account, player, clazz); } } getPersistenceManager().unregisterSerializer(clazz); } }