package com.rsscripting.rswarehouse.variantsdamaged; import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; import com.rsscripting.rswarehouse.utils.ItemStackUtils; import com.rsscripting.rswarehouse.utils.RSMenuUtils; import com.rsscripting.rswarehouse.model.DamagedVariant; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.List; public class DamagedVariantsTransactionMenu { public static void open( Player player, int damagedVariantId, int amount ) { String title; if (amount > 0) { title = "Deposit: " + String.format( "%,d", amount ); } else if (amount < 0) { title = "Withdraw: " + String.format( "%,d", Math.abs( amount ) ); } else { title = "Amount: 0"; } Inventory menu = Bukkit.createInventory( new RSMenuHolder( "DAMAGED_ITEM_ACTION" ), 27, Component.text( title ).color( NamedTextColor.BLUE ) ); /* |-------------------------------------------------------------------------- | FILLER |-------------------------------------------------------------------------- */ for (int i = 0; i < menu.getSize(); i++) { menu.setItem( i, RSMenuUtils.createFillerPane() ); } /* |-------------------------------------------------------------------------- | CENTER ITEM |-------------------------------------------------------------------------- */ DamagedVariant damagedVariant = DamagedVariantsDAO.getDamagedVariantById( damagedVariantId ); if (damagedVariant != null) { ItemStack item = ItemStackUtils.deserialize( damagedVariant.serializedItem() ); if (item != null) { ItemMeta meta = item.getItemMeta(); if (meta != null) { long playerHas = getPlayerItemCount( player, item ); meta.lore( List.of( Component.text( "In Stock: " + String.format( "%,d", damagedVariant.quantity() ) ).color( NamedTextColor.LIGHT_PURPLE ), Component.text( "Player Has: " + String.format( "%,d", playerHas ) ).color( NamedTextColor.GREEN ), Component.text( " " ), Component.text( "Click to complete transaction." ).color( NamedTextColor.YELLOW ) ) ); item.setItemMeta( meta ); } menu.setItem( 13, item ); } } /* |-------------------------------------------------------------------------- | WITHDRAW |-------------------------------------------------------------------------- */ ItemStack subtract64 = RSMenuUtils.createMenuItem( Material.RED_WOOL, "§cSubtract 64" ); subtract64.setAmount( 64 ); menu.setItem( 9, subtract64 ); ItemStack subtract16 = RSMenuUtils.createMenuItem( Material.RED_WOOL, "§cSubtract 16" ); subtract16.setAmount( 16 ); menu.setItem( 10, subtract16 ); ItemStack subtract1 = RSMenuUtils.createMenuItem( Material.RED_WOOL, "§cSubtract 1" ); subtract1.setAmount( 1 ); menu.setItem( 11, subtract1 ); /* |-------------------------------------------------------------------------- | DEPOSIT |-------------------------------------------------------------------------- */ ItemStack add1 = RSMenuUtils.createMenuItem( Material.GREEN_WOOL, "§cAdd 1" ); add1.setAmount( 1 ); menu.setItem( 15, add1 ); ItemStack add16 = RSMenuUtils.createMenuItem( Material.GREEN_WOOL, "§cAdd 16" ); add16.setAmount( 16 ); menu.setItem( 16, add16 ); ItemStack add64 = RSMenuUtils.createMenuItem( Material.GREEN_WOOL, "§cAdd 64" ); add64.setAmount( 64 ); menu.setItem( 17, add64 ); /* |-------------------------------------------------------------------------- | BACK |-------------------------------------------------------------------------- */ menu.setItem( 4, RSMenuUtils.createMenuItem( Material.OAK_DOOR, "§eReturn to main menu." ) ); player.openInventory( menu ); } public static long getPlayerItemCount( Player player, ItemStack target ) { long count = 0; for (ItemStack item : player.getInventory().getContents()) { if (item == null) { continue; } if ( item.isSimilar( target ) ) { count += item.getAmount(); } } return count; } }