Reload feature, vault integration, complete all
- /shop - /shop reload - Buy Item by left click - Sell Item by right click - Sell all with middle/shift click - Items to execute commands - Automatic pages - Automatic menu rowmaster
							parent
							
								
									1e4f3dab01
								
							
						
					
					
						commit
						3a5cd8cda1
					
				| @ -1,6 +1,81 @@ | |||||||
| package pw.hamzantal.shopreborn | package pw.hamzantal.shopreborn | ||||||
| 
 | 
 | ||||||
|  | import org.bukkit.Bukkit | ||||||
| import org.bukkit.ChatColor | import org.bukkit.ChatColor | ||||||
|  | import org.bukkit.Material | ||||||
|  | import org.bukkit.configuration.ConfigurationSection | ||||||
|  | import org.bukkit.entity.Player | ||||||
|  | import org.bukkit.inventory.Inventory | ||||||
|  | import org.bukkit.inventory.ItemStack | ||||||
| 
 | 
 | ||||||
| val String.c | val String.c: String | ||||||
|     get() = ChatColor.translateAlternateColorCodes('&', this) |     get() = ChatColor.translateAlternateColorCodes('&', this) | ||||||
|  | 
 | ||||||
|  | fun Material.prettyName() = name.split("_").joinToString(" ") { it.toLowerCase().capitalize() } | ||||||
|  | 
 | ||||||
|  | fun ItemStack.setLore(s: String): ItemStack { | ||||||
|  |     return apply { | ||||||
|  |         itemMeta = itemMeta.apply { | ||||||
|  |             lore = listOf(s.c) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fun ItemStack.addLore(s: String): ItemStack { | ||||||
|  |     return apply { | ||||||
|  |         itemMeta = itemMeta.apply { | ||||||
|  |             lore = lore + s.c | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fun makeInventory(size: Int, title: String, menuRow: Int = -1, items: List<ShopConfig.Block>, page: Int): Inventory { | ||||||
|  |     return Bukkit.createInventory(null, size, title.c).apply { | ||||||
|  |         if (menuRow > 0) { | ||||||
|  |             val buttons = GlobalConfig.main.buttons | ||||||
|  |             for (i in menuRow until menuRow + 9) { | ||||||
|  |                 setItem(i, buttons.pane) | ||||||
|  |             } | ||||||
|  |             setItem(menuRow, buttons.previous) | ||||||
|  |             setItem(menuRow + 4, buttons.menu) | ||||||
|  |             setItem(menuRow + 8, buttons.forward) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         val dropping = (page - 1) * (size - kotlin.math.max(0, menuRow)) | ||||||
|  |         items.drop(dropping).forEach { | ||||||
|  |             if (firstEmpty() != -1) setItem(firstEmpty(), it.item) | ||||||
|  |             else return@apply | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fun String.mixPlaceholder(amount: Int = 0, price: Double = 0.0): String = | ||||||
|  |     replace("%AMOUNT%", amount.toString()) | ||||||
|  |         .replace( | ||||||
|  |             "%PRICE%", | ||||||
|  |             price.withCurrency() | ||||||
|  |         ) | ||||||
|  |         .c | ||||||
|  | 
 | ||||||
|  | fun Double.withCurrency() = String.format("%s%.2f", GlobalConfig.messages.currency, this) | ||||||
|  | 
 | ||||||
|  | fun ConfigurationSection.asItem(buy: Double = -1.0, sell: Double = -1.0): ItemStack { | ||||||
|  |     val material = Material.valueOf(getString("material").toUpperCase()) | ||||||
|  |     val item = ItemStack(material, getInt("quantity", 1), getInt("damage", 0).toShort()) | ||||||
|  | 
 | ||||||
|  |     item.itemMeta = item.itemMeta.apply { | ||||||
|  |         displayName = getString("name", "").c | ||||||
|  |         val configLore = getStringList("lore").map { it.c }.toMutableList() | ||||||
|  |         val messages = GlobalConfig.messages | ||||||
|  | 
 | ||||||
|  |         if (buy > 0) configLore += messages.buyLore.mixPlaceholder(price = buy) | ||||||
|  |         if (sell > 0) configLore += messages.sellLore.mixPlaceholder(price = sell) | ||||||
|  | 
 | ||||||
|  |         lore = configLore | ||||||
|  |     } | ||||||
|  |     return item | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | infix fun Player.containing(item: ItemStack): Int { | ||||||
|  |     return inventory.contents.sumBy { if (it?.isSimilar(item) == true) it.amount else 0 } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue