package tc.oc.commons.bukkit.chat; import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; import com.google.common.collect.ImmutableSet; import net.md_5.bungee.api.chat.BaseComponent; import tc.oc.api.bukkit.users.BukkitUserStore; import tc.oc.api.docs.virtual.UserDoc; import tc.oc.api.minecraft.MinecraftService; import tc.oc.commons.bukkit.nick.Identity; import tc.oc.commons.core.chat.Components; /** * Renders a player's flair only */ @Singleton public class FlairRenderer implements PartialNameRenderer { private final MinecraftService minecraftService; private final BukkitUserStore userStore; @Inject protected FlairRenderer(MinecraftService minecraftService, BukkitUserStore userStore) { this.minecraftService = minecraftService; this.userStore = userStore; } @Override public String getLegacyName(Identity identity, NameType type) { if(!(type.style.contains(NameFlag.FLAIR) && type.reveal)) return ""; final UserDoc.Identity user; if(identity.getPlayerId() instanceof UserDoc.Identity) { // Flair may already be stashed inside the Identity user = (UserDoc.Identity) identity.getPlayerId(); } else { user = userStore.tryUser(identity.getPlayerId()); } if(user == null) return ""; final Set<String> realms = ImmutableSet.copyOf(minecraftService.getLocalServer().realms()); return user.minecraft_flair() .stream() .filter(flair -> realms.contains(flair.realm)) .map(flair -> flair.text) .reduce("", String::concat); } @Override public BaseComponent getComponentName(Identity identity, NameType type) { return Components.fromLegacyText(getLegacyName(identity, type)); } }