ProjectAres/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/listeners/LocaleListener.java

39 lines
1.4 KiB
Java

package tc.oc.commons.bukkit.listeners;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLocaleChangeEvent;
import tc.oc.api.bukkit.users.BukkitUserStore;
import tc.oc.api.docs.virtual.UserDoc;
import tc.oc.api.users.UserService;
import tc.oc.commons.core.plugin.PluginFacet;
/**
* Saves the player's locale on {@link PlayerLocaleChangeEvent}, which fires when
* the server receives a ClientSettings packet, and the locale is different from
* the current value. The client always sends this packet just after connecting,
* and Bungee also re-sends the packet on every server change.
*
* Because we initialize the locale from the DB on login, we normally won't get
* this event. It will only fire when the player has actually changed their locale.
*/
@Singleton
public class LocaleListener implements Listener, PluginFacet {
private final BukkitUserStore userStore;
private final UserService userService;
@Inject LocaleListener(BukkitUserStore userStore, UserService userService) {
this.userStore = userStore;
this.userService = userService;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onLocaleChange(PlayerLocaleChangeEvent event) {
userService.update(userStore.getUser(event.getPlayer()), (UserDoc.Locale) event::getNewLocale);
}
}