diff --git a/src/main/java/me/glaremasters/guilds/utils/GuiUtils.java b/src/main/java/me/glaremasters/guilds/utils/GuiUtils.java index 665b83ea0..b771e80a7 100644 --- a/src/main/java/me/glaremasters/guilds/utils/GuiUtils.java +++ b/src/main/java/me/glaremasters/guilds/utils/GuiUtils.java @@ -23,10 +23,13 @@ */ package me.glaremasters.guilds.utils; +import com.cryptomorin.xseries.SkullUtils; import com.cryptomorin.xseries.XMaterial; +import me.glaremasters.guilds.guild.GuildMember; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import java.util.Arrays; import java.util.HashSet; @@ -55,9 +58,32 @@ public static ItemStack createItem(String material, String name, List lo ItemBuilder builder = new ItemBuilder(item); builder.setName(StringUtils.color(name)); if (!lore.isEmpty()) { - builder.setLore(lore.stream().map(StringUtils ::color).collect(Collectors.toList())); + builder.setLore(lore.stream().map(StringUtils::color).collect(Collectors.toList())); } builder.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + return builder.build(); } + + /** + * Creates a skull item of the player in the guild + * + * @param member the GuildMember instace of a player + * @param name the name for the item + * @param lore the lore for the item + * @return formatted skull texture of a member + */ + public static ItemStack createSkullItem(GuildMember member, String name, List lore) { + final ItemStack head = XMaterial.PLAYER_HEAD.parseItem(); + final ItemMeta meta = head.getItemMeta(); + SkullUtils.applySkin(meta, member.getTexture()); + + meta.setDisplayName(StringUtils.color(name)); + if (!lore.isEmpty()) { + meta.setLore(lore.stream().map(StringUtils::color).collect(Collectors.toList())); + } + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + head.setItemMeta(meta); + return head; + } } diff --git a/src/main/kotlin/me/glaremasters/guilds/guild/GuildMember.kt b/src/main/kotlin/me/glaremasters/guilds/guild/GuildMember.kt index b039dc515..2c6e3b5c6 100644 --- a/src/main/kotlin/me/glaremasters/guilds/guild/GuildMember.kt +++ b/src/main/kotlin/me/glaremasters/guilds/guild/GuildMember.kt @@ -31,6 +31,7 @@ import java.util.UUID class GuildMember(val uuid: UUID, var role: GuildRole) { var joinDate: Long = 0 var lastLogin: Long = 0 + var texture: String = "" val isOnline: Boolean get() = asOfflinePlayer.isOnline diff --git a/src/main/kotlin/me/glaremasters/guilds/guis/MembersGUI.kt b/src/main/kotlin/me/glaremasters/guilds/guis/MembersGUI.kt index a769ae80a..23bb780a3 100644 --- a/src/main/kotlin/me/glaremasters/guilds/guis/MembersGUI.kt +++ b/src/main/kotlin/me/glaremasters/guilds/guis/MembersGUI.kt @@ -101,7 +101,12 @@ class MembersGUI(private val guilds: Guilds, private val settingsManager: Settin .replace("{status}", status)) } - val item = GuiItem(GuiUtils.createItem(settingsManager.getProperty(GuildInfoMemberSettings.MEMBERS_MATERIAL), settingsManager.getProperty(GuildInfoMemberSettings.MEMBERS_NAME).replace("{player}", name.toString()), updated)) + val item = if (!member.texture.isNullOrEmpty()) { + GuiItem(GuiUtils.createSkullItem(member, settingsManager.getProperty(GuildInfoMemberSettings.MEMBERS_NAME).replace("{player}", name.toString()), updated)) + } else { + GuiItem(GuiUtils.createItem(settingsManager.getProperty(GuildInfoMemberSettings.MEMBERS_MATERIAL), settingsManager.getProperty(GuildInfoMemberSettings.MEMBERS_NAME).replace("{player}", name.toString()), updated)) + } + item.setAction { event -> event.isCancelled = true } diff --git a/src/main/kotlin/me/glaremasters/guilds/listeners/PlayerListener.kt b/src/main/kotlin/me/glaremasters/guilds/listeners/PlayerListener.kt index 03ff362a0..b264574c6 100644 --- a/src/main/kotlin/me/glaremasters/guilds/listeners/PlayerListener.kt +++ b/src/main/kotlin/me/glaremasters/guilds/listeners/PlayerListener.kt @@ -24,10 +24,12 @@ package me.glaremasters.guilds.listeners import ch.jalu.configme.SettingsManager +import com.cryptomorin.xseries.SkullUtils import java.io.IOException import java.util.UUID import java.util.concurrent.TimeUnit import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.configuration.sections.GuildListSettings import me.glaremasters.guilds.configuration.sections.GuildSettings import me.glaremasters.guilds.configuration.sections.PluginSettings import me.glaremasters.guilds.guild.GuildHandler @@ -107,6 +109,17 @@ class PlayerListener(private val guilds: Guilds, private val settingsManager: Se guild.updateGuildSkull(player, settingsManager) } + @EventHandler + fun PlayerJoinEvent.onMemberSkullUpdate() { + if (!settingsManager.getProperty(GuildListSettings.USE_DEFAULT_TEXTURE)) { + val guild = guildHandler.getGuild(player) ?: return + val member = guild.getMember(player.uniqueId) + val skull = SkullUtils.getSkull(member.uuid) + val texture = SkullUtils.getSkinValue(skull.itemMeta!!) + member.texture = texture!! + } + } + @EventHandler fun PlayerJoinEvent.onPermCheck() { guildHandler.addGuildPerms(permission, player)