package tc.oc.pgm.match;
import java.util.UUID;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
import me.anxuiz.settings.SettingManager;
import tc.oc.api.bukkit.users.BukkitUserStore;
import tc.oc.api.docs.PlayerId;
import tc.oc.api.docs.SimplePlayerId;
import tc.oc.api.docs.User;
import tc.oc.api.docs.UserId;
import tc.oc.commons.bukkit.settings.SettingManagerProvider;
import tc.oc.commons.core.inject.ChildInjectorFactory;
import tc.oc.commons.core.inject.InjectorScoped;
import tc.oc.commons.core.inject.Manifest;
import tc.oc.pgm.match.inject.ForMatchUser;
public class MatchUserManifest extends Manifest {
private final PlayerId playerId;
private final UUID uuid;
MatchUserManifest(User user) {
this.playerId = SimplePlayerId.copyOf(user);
this.uuid = user.uuid();
}
@Provides PlayerId playerId() { return playerId; }
@Provides @ForMatchUser UUID uuid() { return uuid; }
@Override
protected void configure() {
bind(MatchUserContext.class).in(InjectorScoped.class);
install(new MatchFacetContextManifest<>(MatchUserFacet.class, MatchUserContext.class));
// Bind this explicitly, so it gets the correct parent injector
bind(new TypeLiteral<ChildInjectorFactory<MatchPlayer>>(){});
// Eagerly create the PlayerId from the User
bind(UserId.class).to(PlayerId.class).asEagerSingleton();
}
// Bind a dynamic User instance that is always fresh
@Provides @InjectorScoped
User user(UserId userId, BukkitUserStore userStore) {
return userStore.getEverfreshUser(userId);
}
@Provides
SettingManager settingManager(User user, SettingManagerProvider provider) {
return provider.getManager(user);
}
}