Skip to content

Commit 3ff43d9

Browse files
Fix NPE when washing machine contains untrimmed armour
+ return items left in the GUI when closed
1 parent 4d56bee commit 3ff43d9

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

src/main/java/me/eccentric_nz/TARDIS/rooms/laundry/WashingMachineListener.java

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.bukkit.event.EventHandler;
1212
import org.bukkit.event.inventory.ClickType;
1313
import org.bukkit.event.inventory.InventoryClickEvent;
14+
import org.bukkit.event.inventory.InventoryCloseEvent;
1415
import org.bukkit.inventory.InventoryView;
1516
import org.bukkit.inventory.ItemStack;
1617
import 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

Comments
 (0)