1111import org .bukkit .event .EventHandler ;
1212import org .bukkit .event .inventory .ClickType ;
1313import org .bukkit .event .inventory .InventoryClickEvent ;
14+ import org .bukkit .event .inventory .InventoryCloseEvent ;
1415import org .bukkit .inventory .InventoryView ;
1516import org .bukkit .inventory .ItemStack ;
1617import org .bukkit .inventory .meta .ArmorMeta ;
@@ -55,7 +56,8 @@ public void onArchitecturalBlueprintClick(InventoryClickEvent event) {
5556 case 21 -> processTrims (view ); // wash off trim patterns
5657 case 23 -> processDyed (view ); // remove dye color from leather armour and wool / carpets
5758 case 26 -> close (player );
58- default -> { }
59+ default -> {
60+ }
5961 }
6062 }
6163
@@ -66,14 +68,16 @@ private void processTrims(InventoryView view) {
6668 Material material = armour .getType ();
6769 if (Tag .ITEMS_TRIMMABLE_ARMOR .isTagged (material )) {
6870 ArmorMeta meta = (ArmorMeta ) armour .getItemMeta ();
69- ArmorTrim trim = meta .getTrim ();
70- TrimPattern tp = trim .getPattern ();
71- NamespacedKey key = RegistryAccess .registryAccess ().getRegistry (RegistryKey .TRIM_PATTERN ).getKey (tp );
72- ItemStack template = ItemStack .of (getTemplate (key ));
73- view .setItem (i + 9 , template );
74- meta .setTrim (null );
75- armour .setItemMeta (meta );
76- view .setItem (i , armour );
71+ if (meta .hasTrim ()) {
72+ ArmorTrim trim = meta .getTrim ();
73+ TrimPattern tp = trim .getPattern ();
74+ NamespacedKey key = RegistryAccess .registryAccess ().getRegistry (RegistryKey .TRIM_PATTERN ).getKey (tp );
75+ ItemStack template = ItemStack .of (getTemplate (key ));
76+ view .setItem (i + 9 , template );
77+ meta .setTrim (null );
78+ armour .setItemMeta (meta );
79+ view .setItem (i , armour );
80+ }
7781 }
7882 }
7983 }
@@ -112,4 +116,20 @@ private void processDyed(InventoryView view) {
112116 }
113117 }
114118 }
119+
120+ @ EventHandler
121+ public void onWashingMachineClose (InventoryCloseEvent event ) {
122+ if (!(event .getInventory ().getHolder (false ) instanceof WashingMachineInventory )) {
123+ return ;
124+ }
125+ Player player = ((Player ) event .getPlayer ());
126+ // drop any user placed items in the inventory
127+ InventoryView view = event .getView ();
128+ for (int s = 0 ; s < 18 ; s ++) {
129+ ItemStack userStack = view .getItem (s );
130+ if (userStack != null ) {
131+ player .getWorld ().dropItemNaturally (player .getLocation (), userStack );
132+ }
133+ }
134+ }
115135}
0 commit comments