From b7096da8efabf8b375253d46efe692753f44f9ee Mon Sep 17 00:00:00 2001 From: modmuss50 <modmuss50@gmail.com> Date: Tue, 29 Nov 2022 18:18:29 +0000 Subject: [PATCH] Check stack size in FabricItemGroupEntries (#2705) * Check stack size in FabricItemGroupEntries * Add stack to message --- .../itemgroup/v1/FabricItemGroupEntries.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroupEntries.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroupEntries.java index bb3bb9dbb..d213ff3bb 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroupEntries.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroupEntries.java @@ -87,6 +87,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { @Override public void add(ItemStack stack, ItemGroup.StackVisibility visibility) { if (isEnabled(stack)) { + checkStack(stack); + switch (visibility) { case PARENT_AND_SEARCH_TABS -> { this.displayStacks.add(stack); @@ -114,6 +116,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { */ public void prepend(ItemStack stack, ItemGroup.StackVisibility visibility) { if (isEnabled(stack)) { + checkStack(stack); + switch (visibility) { case PARENT_AND_SEARCH_TABS -> { this.displayStacks.add(0, stack); @@ -395,6 +399,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { * Adds the {@link ItemStack} before the first match, if no matches the {@link ItemStack} is appended to the end of the {@link ItemGroup}. */ private static void addBefore(Predicate<ItemStack> predicate, Collection<ItemStack> newStacks, List<ItemStack> addTo) { + checkStacks(newStacks); + for (int i = 0; i < addTo.size(); i++) { if (predicate.test(addTo.get(i))) { addTo.subList(i, i).addAll(newStacks); @@ -407,6 +413,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { } private static void addAfter(Predicate<ItemStack> predicate, Collection<ItemStack> newStacks, List<ItemStack> addTo) { + checkStacks(newStacks); + // Iterate in reverse to add after the last match for (int i = addTo.size() - 1; i >= 0; i--) { if (predicate.test(addTo.get(i))) { @@ -420,6 +428,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { } private static void addBefore(ItemStack anchor, Collection<ItemStack> newStacks, List<ItemStack> addTo) { + checkStacks(newStacks); + for (int i = 0; i < addTo.size(); i++) { if (ItemStack.canCombine(anchor, addTo.get(i))) { addTo.subList(i, i).addAll(newStacks); @@ -432,6 +442,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { } private static void addAfter(ItemStack anchor, Collection<ItemStack> newStacks, List<ItemStack> addTo) { + checkStacks(newStacks); + // Iterate in reverse to add after the last match for (int i = addTo.size() - 1; i >= 0; i--) { if (ItemStack.canCombine(anchor, addTo.get(i))) { @@ -445,6 +457,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { } private static void addBefore(ItemConvertible anchor, Collection<ItemStack> newStacks, List<ItemStack> addTo) { + checkStacks(newStacks); + Item anchorItem = anchor.asItem(); for (int i = 0; i < addTo.size(); i++) { @@ -459,6 +473,8 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { } private static void addAfter(ItemConvertible anchor, Collection<ItemStack> newStacks, List<ItemStack> addTo) { + checkStacks(newStacks); + Item anchorItem = anchor.asItem(); // Iterate in reverse to add after the last match @@ -472,4 +488,20 @@ public class FabricItemGroupEntries implements ItemGroup.Entries { // Anchor not found, add to end addTo.addAll(newStacks); } + + private static void checkStacks(Collection<ItemStack> stacks) { + for (ItemStack stack : stacks) { + checkStack(stack); + } + } + + private static void checkStack(ItemStack stack) { + if (stack.isEmpty()) { + throw new IllegalArgumentException("Cannot add empty stack"); + } + + if (stack.getCount() != 1) { + throw new IllegalArgumentException("Stack size must be exactly 1 for stack: " + stack); + } + } }