package xyz.etztech.qol.listeners; import com.nisovin.shopkeepers.api.ShopkeepersPlugin; import com.nisovin.shopkeepers.api.shopkeeper.ShopkeeperRegistry; import com.nisovin.shopkeepers.api.shopkeeper.admin.regular.RegularAdminShopkeeper; import com.nisovin.shopkeepers.api.shopkeeper.offers.TradeOffer; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; import xyz.etztech.qol.QoL; import java.util.ArrayList; import java.util.List; public class HeadShopListener implements Listener{ private final QoL plugin; private final ShopkeepersPlugin shopkeepersAPI; public HeadShopListener(QoL plugin) { this.plugin = plugin; plugin.getServer().getPluginManager().registerEvents(this, plugin); this.shopkeepersAPI = ShopkeepersPlugin.getInstance(); } @EventHandler public void onJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); if (shopkeepersAPI != null && player.hasPermission("qol.head_shop")) { int shopKeeperID = plugin.getConfig().getInt("head_shop.id", -1); if (shopKeeperID != -1) { ShopkeeperRegistry shopkeeperRegistry = shopkeepersAPI.getShopkeeperRegistry(); RegularAdminShopkeeper donorHeadShop = (RegularAdminShopkeeper) shopkeeperRegistry.getShopkeeperById(shopKeeperID); if (donorHeadShop != null) { // Remove the head if it already exists. This is done to refresh the skin of the head. List tradeOffers = new ArrayList<>(donorHeadShop.getOffers()); tradeOffers.removeIf(tradeOffer -> { SkullMeta itemOfferMeta = (SkullMeta)tradeOffer.getResultItem().getItemMeta(); return itemOfferMeta.getOwningPlayer().getUniqueId() == player.getUniqueId(); }); donorHeadShop.setOffers(tradeOffers); // Add the head to the shop int diamondPrice = plugin.getConfig().getInt("head_shop.price", 2); ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD); SkullMeta skullMeta = (SkullMeta) playerHead.getItemMeta(); skullMeta.setOwningPlayer(player); skullMeta.setDisplayName(player.getDisplayName()); playerHead.setItemMeta(skullMeta); TradeOffer donorHeadTrade = TradeOffer.create(playerHead, new ItemStack(Material.DIAMOND, diamondPrice), null); donorHeadShop.addOffer(donorHeadTrade); } } } } }