From 6f6b4acbe5480dc89bec39c5d327318a0d2908bf Mon Sep 17 00:00:00 2001 From: JustinasLa Date: Wed, 30 Sep 2026 11:53:34 +0200 Subject: [PATCH] fix: keep other plugins' slot display for food on their furniture PlateManager.addItem had a stray semicolon after its furniture check, so every food item placed on any InteractibleFurniture slot got the cooking display pose (flat, full size). Salt on magic pedestals showed oversized. Only apply cooking display data to Cooking-owned furniture. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../cooking/cache/FurnitureCache.java | 6 +++ .../cooking/manager/PlateManager.java | 2 +- .../cooking/cache/CookingFurnitureTest.java | 37 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/test/java/net/tfminecraft/cooking/cache/CookingFurnitureTest.java diff --git a/src/main/java/net/tfminecraft/cooking/cache/FurnitureCache.java b/src/main/java/net/tfminecraft/cooking/cache/FurnitureCache.java index 26cd27b..2ac8dc3 100644 --- a/src/main/java/net/tfminecraft/cooking/cache/FurnitureCache.java +++ b/src/main/java/net/tfminecraft/cooking/cache/FurnitureCache.java @@ -90,4 +90,10 @@ public static boolean isBowl(Furniture f) { public static boolean isMealHolder(Furniture f) { return isBowl(f) || isPlate(f); } + + // Other plugins' furniture (pedestals, displays) keeps its own slot display. + public static boolean isCookingFurniture(Furniture f) { + return f.getType() != null + && f.getType().getItemPath().toLowerCase().startsWith("ia.tfmc_cooking:"); + } } diff --git a/src/main/java/net/tfminecraft/cooking/manager/PlateManager.java b/src/main/java/net/tfminecraft/cooking/manager/PlateManager.java index 63a2907..e0a3b87 100644 --- a/src/main/java/net/tfminecraft/cooking/manager/PlateManager.java +++ b/src/main/java/net/tfminecraft/cooking/manager/PlateManager.java @@ -244,7 +244,7 @@ public void interact(FurnitureInteractEvent e) { @EventHandler public void addItem(FurnitureSlotItemAddEvent e) { Furniture f = e.getFurniture(); - if(FurnitureCache.isMealHolder(f)); + if(!FurnitureCache.isCookingFurniture(f)) return; ItemStack item = e.getItem(); FoodItem fi = FoodItem.fromItem(item); if(fi == null) return; diff --git a/src/test/java/net/tfminecraft/cooking/cache/CookingFurnitureTest.java b/src/test/java/net/tfminecraft/cooking/cache/CookingFurnitureTest.java new file mode 100644 index 0000000..60a5e48 --- /dev/null +++ b/src/test/java/net/tfminecraft/cooking/cache/CookingFurnitureTest.java @@ -0,0 +1,37 @@ +package net.tfminecraft.cooking.cache; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.junit.jupiter.api.Test; + +import net.tfminecraft.interactiblefurniture.furniture.Furniture; +import net.tfminecraft.interactiblefurniture.furniture.FurnitureType; + +class CookingFurnitureTest { + + @Test + void cookingFurnitureIsRecognised() { + assertTrue(FurnitureCache.isCookingFurniture(furniture("ia.tfmc_cooking:plate"))); + } + + @Test + void magicPedestalIsNotCookingFurniture() { + assertFalse(FurnitureCache.isCookingFurniture(furniture("ia.tfmc:pedestal"))); + } + + @Test + void furnitureWithoutTypeIsNotCookingFurniture() { + assertFalse(FurnitureCache.isCookingFurniture(mock(Furniture.class))); + } + + private static Furniture furniture(String itemPath) { + FurnitureType type = mock(FurnitureType.class); + when(type.getItemPath()).thenReturn(itemPath); + Furniture furniture = mock(Furniture.class); + when(furniture.getType()).thenReturn(type); + return furniture; + } +}