1+ package com.sybsuper.sybsafetyfirst.modules
2+
3+ import kotlinx.serialization.Serializable
4+ import org.bukkit.event.EventHandler
5+ import org.bukkit.event.inventory.InventoryClickEvent
6+ import org.bukkit.event.inventory.InventoryMoveItemEvent
7+ import org.bukkit.event.player.PlayerAttemptPickupItemEvent
8+ import org.bukkit.event.player.PlayerSwapHandItemsEvent
9+ import org.bukkit.inventory.ItemStack
10+
11+ class SmallerStacks : Module {
12+ override val description: String = " Reduces the maximum stack size of items."
13+ override var options: ModuleOptions = SmallerStacksOptions ()
14+ val typeSafeOptions
15+ get() = (options as ? SmallerStacksOptions )
16+ ? : error(" Options are not of type SmallerStacksOptions" )
17+
18+ @Serializable
19+ data class SmallerStacksOptions (
20+ override var enabled : Boolean = true ,
21+ /* *
22+ * The maximum stack size for all items.
23+ */
24+ var maxStackSize : Int = 31
25+ ) : ModuleOptions
26+
27+ fun patchItem (item : ItemStack ? ) {
28+ val meta = item?.itemMeta ? : return
29+ val maxStackSize = if (meta.hasMaxStackSize()) {
30+ meta.maxStackSize
31+ } else {
32+ item.type.maxStackSize
33+ }
34+ meta.setMaxStackSize(maxStackSize.coerceAtMost(typeSafeOptions.maxStackSize))
35+ item.itemMeta = meta
36+ }
37+
38+ @EventHandler(ignoreCancelled = true )
39+ fun on (event : InventoryClickEvent ) {
40+ patchItem(event.currentItem ? : return )
41+ }
42+
43+ @EventHandler(ignoreCancelled = true )
44+ fun on (event : PlayerAttemptPickupItemEvent ) {
45+ patchItem(event.item.itemStack)
46+ }
47+
48+ @EventHandler(ignoreCancelled = true )
49+ fun on (event : PlayerSwapHandItemsEvent ) {
50+ patchItem(event.mainHandItem ? : return )
51+ }
52+
53+ @EventHandler(ignoreCancelled = true )
54+ fun on (event : InventoryMoveItemEvent ) {
55+ patchItem(event.item ? : return )
56+ }
57+ }
0 commit comments