diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java index 24a9ec876..37babc654 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java @@ -37,6 +37,7 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Tickable; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import java.util.UUID; @@ -61,7 +62,7 @@ public class SnifferEntity extends AnimalEntity implements Tickable { @Override protected void setDimensions(Pose pose) { - if (this.flags.contains(EntityFlag.DIGGING)) { + if (getFlag(EntityFlag.DIGGING)) { setBoundingBoxHeight(DIGGING_HEIGHT); setBoundingBoxWidth(definition.width()); } else { @@ -69,6 +70,11 @@ public class SnifferEntity extends AnimalEntity implements Tickable { } } + @Override + public boolean canEat(Item item) { + return session.getTagCache().isSnifferFood(item); + } + public void setSnifferState(ObjectEntityMetadata entityMetadata) { SnifferState snifferState = entityMetadata.getValue(); @@ -82,7 +88,7 @@ public class SnifferEntity extends AnimalEntity implements Tickable { setDimensions(pose); - if (this.flags.contains(EntityFlag.DIGGING)) { + if (getFlag(EntityFlag.DIGGING)) { digTicks = DIG_END; } else { // Handles situations where the DIGGING state is exited earlier than expected, diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 851b8c20e..fbd768b70 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -64,6 +64,7 @@ public class TagCache { private IntList foxFood; private IntList piglinLoved; private IntList smallFlowers; + private IntList snifferFood; public TagCache() { // Ensure all lists are non-null @@ -101,6 +102,7 @@ public class TagCache { this.foxFood = IntList.of(itemTags.get("minecraft:fox_food")); this.piglinLoved = IntList.of(itemTags.get("minecraft:piglin_loved")); this.smallFlowers = IntList.of(itemTags.get("minecraft:small_flowers")); + this.snifferFood = IntList.of(itemTags.get("minecraft:sniffer_food")); // Hack btw boolean emulatePost1_13Logic = itemTags.get("minecraft:signs").length > 1; @@ -137,6 +139,7 @@ public class TagCache { this.foxFood = IntLists.emptyList(); this.piglinLoved = IntLists.emptyList(); this.smallFlowers = IntLists.emptyList(); + this.snifferFood = IntLists.emptyList(); } public boolean isAxolotlTemptItem(Item item) { @@ -167,6 +170,10 @@ public class TagCache { return smallFlowers.contains(itemStack.getJavaId()); } + public boolean isSnifferFood(Item item) { + return snifferFood.contains(item.javaId()); + } + public boolean isAxeEffective(BlockMapping blockMapping) { return axeEffective.contains(blockMapping.getJavaBlockId()); }