From 55714a8c3bd5e7380b2d9b8783dde5cce2f7b367 Mon Sep 17 00:00:00 2001 From: Drefvelin <54400154+Drefvelin@users.noreply.github.com> Date: Wed, 23 Sep 2026 21:50:32 +0000 Subject: [PATCH 1/2] fix: match sausage casing with the vanilla paper path v.paper is the TLibs check for real paper, so custom paper tools and scooped soup are no longer consumed as casing. Co-authored-by: Cursor --- .../cooking/sausagemaker/CasingPaper.java | 34 ++++--------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java b/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java index 165ce1d..4e0aa29 100644 --- a/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java +++ b/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java @@ -1,42 +1,20 @@ package net.tfminecraft.cooking.sausagemaker; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import net.tfminecraft.cooking.item.FoodItem; -import net.tfminecraft.cooking.util.LegacyModelData; +import net.tfminecraft.tlibs.TLibs; /** - * Sausage casing is plain vanilla paper. Cooking tools and scooped soup use - * paper as their base item, and those must stay in the player's hand. + * Sausage casing is vanilla paper. {@code v.paper} rejects custom items that + * only use paper as their base, such as the masher and a scooped bowl of soup. */ final class CasingPaper { + static final String PATH = "v.paper"; + private CasingPaper() {} static boolean isCasing(ItemStack stack) { - if (stack == null || stack.getType() != Material.PAPER || stack.getAmount() <= 0) { - return false; - } - if (hasCustomIdentity(stack)) { - return false; - } - return FoodItem.fromItem(stack) == null; - } - - private static boolean hasCustomIdentity(ItemStack stack) { - if (!stack.hasItemMeta()) { - return false; - } - ItemMeta meta = stack.getItemMeta(); - if (meta == null) { - return false; - } - if (meta.hasDisplayName() || meta.hasItemName() || meta.hasItemModel() - || meta.hasCustomModelDataComponent() || LegacyModelData.has(meta)) { - return true; - } - return !meta.getPersistentDataContainer().isEmpty(); + return TLibs.getItemAPI().getChecker().checkItemWithPath(stack, PATH); } } From ff8620e58dd560353680644b54b47e67289af427 Mon Sep 17 00:00:00 2001 From: Drefvelin <54400154+Drefvelin@users.noreply.github.com> Date: Wed, 23 Sep 2026 22:13:38 +0000 Subject: [PATCH 2/2] fix: ignore an empty paper stack when checking sausage casing v.paper does not look at stack size, so a sheet already reduced to zero must not count as casing. Co-authored-by: Cursor --- .../net/tfminecraft/cooking/sausagemaker/CasingPaper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java b/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java index 4e0aa29..baadc00 100644 --- a/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java +++ b/src/main/java/net/tfminecraft/cooking/sausagemaker/CasingPaper.java @@ -15,6 +15,8 @@ final class CasingPaper { private CasingPaper() {} static boolean isCasing(ItemStack stack) { - return TLibs.getItemAPI().getChecker().checkItemWithPath(stack, PATH); + return stack != null + && stack.getAmount() > 0 + && TLibs.getItemAPI().getChecker().checkItemWithPath(stack, PATH); } }