Skip to content

Commit 7d4744c

Browse files
authored
fix: proper food item check (#6372)
1 parent 5930c3d commit 7d4744c

4 files changed

Lines changed: 25 additions & 15 deletions

File tree

src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import meteordevelopment.meteorclient.systems.modules.Categories;
1212
import meteordevelopment.meteorclient.systems.modules.Module;
1313
import meteordevelopment.meteorclient.systems.modules.Modules;
14+
import meteordevelopment.meteorclient.utils.Utils;
1415
import meteordevelopment.meteorclient.utils.misc.input.KeyAction;
1516
import meteordevelopment.meteorclient.utils.player.FindItemResult;
1617
import meteordevelopment.meteorclient.utils.player.InvUtils;
@@ -250,7 +251,7 @@ private boolean usableItem() {
250251
return mc.player.getMainHandItem().getItem() == Items.BOW
251252
|| mc.player.getMainHandItem().getItem() == Items.TRIDENT
252253
|| mc.player.getMainHandItem().getItem() == Items.CROSSBOW
253-
|| mc.player.getMainHandItem().getItem().components().has(DataComponents.FOOD);
254+
|| Utils.isFood(mc.player.getMainHandItem());
254255
}
255256

256257
@Override

src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoEat.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public class AutoEat extends Module {
5454
Items.SPIDER_EYE,
5555
Items.SUSPICIOUS_STEW
5656
)
57-
.filter(item -> item.components().get(DataComponents.FOOD) != null)
57+
.filter(Utils::isFood)
5858
.bypassFilterWhenSavingAndLoading()
5959
.build()
6060
);
@@ -148,7 +148,7 @@ private void onTick(TickEvent.Pre event) {
148148
}
149149

150150
// Check if the item in current slot is not food anymore
151-
if (mc.player.getInventory().getItem(slot).get(DataComponents.FOOD) == null) {
151+
if (!Utils.isFood(mc.player.getInventory().getItem(slot))) {
152152
int newSlot = findSlot();
153153

154154
// Stop if no food found
@@ -270,10 +270,11 @@ public boolean shouldEat() {
270270
slot = findSlot();
271271
if (slot == -1) return false;
272272

273-
FoodProperties food = mc.player.getInventory().getItem(slot).get(DataComponents.FOOD);
274-
if (food == null) return false;
273+
ItemStack item = mc.player.getInventory().getItem(slot);
274+
FoodProperties prop = item.get(DataComponents.FOOD);
275+
if (prop == null || !Utils.isFood(item)) return false;
275276

276-
return (mc.player.getFoodData().needsFood() || food.canAlwaysEat());
277+
return (mc.player.getFoodData().needsFood() || prop.canAlwaysEat());
277278
}
278279

279280
/**
@@ -283,8 +284,7 @@ public boolean shouldEat() {
283284
private int findSlot() {
284285
// prefer offhand
285286
Item offHandItem = mc.player.getOffhandItem().getItem();
286-
FoodProperties offHandFood = offHandItem.components().get(DataComponents.FOOD);
287-
if (offHandFood != null && !blacklist.get().contains(offHandItem)) return SlotUtils.OFFHAND;
287+
if (Utils.isFood(offHandItem) && !blacklist.get().contains(offHandItem)) return SlotUtils.OFFHAND;
288288

289289
// if offhand empty, prefer best in hotbar
290290
int slot = findBestFood(SlotUtils.HOTBAR_START, SlotUtils.HOTBAR_END);
@@ -306,6 +306,7 @@ private int findBestFood(int start, int end) {
306306
// Skip if item isn't food
307307
ItemStack stack = mc.player.getInventory().getItem(i);
308308
FoodProperties food = stack.get(DataComponents.FOOD);
309+
if (!Utils.isFood(stack)) continue;
309310
if (food == null) continue;
310311

311312
// Skip if item is in blacklist

src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import net.minecraft.client.player.ClientInput;
4545
import net.minecraft.core.BlockPos;
4646
import net.minecraft.core.Direction;
47-
import net.minecraft.core.component.DataComponents;
4847
import net.minecraft.network.chat.Component;
4948
import net.minecraft.network.chat.MutableComponent;
5049
import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket;
@@ -1168,7 +1167,7 @@ protected void tick(HighwayBuilder b) {
11681167
eject = false;
11691168
break;
11701169
}
1171-
if (stack.has(DataComponents.FOOD) && !Modules.get().get(AutoEat.class).blacklist.get().contains(stack.getItem())) {
1170+
if (Utils.isFood(stack) && !Modules.get().get(AutoEat.class).blacklist.get().contains(stack.getItem())) {
11721171
eject = false;
11731172
break;
11741173
}
@@ -1431,7 +1430,7 @@ protected void start(HighwayBuilder b) {
14311430
stop = false;
14321431
break;
14331432
}
1434-
if (b.restockTask.food && stack.has(DataComponents.FOOD) && !Modules.get().get(AutoEat.class).blacklist.get().contains(stack.getItem())) {
1433+
if (b.restockTask.food && Utils.isFood(stack) && !Modules.get().get(AutoEat.class).blacklist.get().contains(stack.getItem())) {
14351434
stop = false;
14361435
break;
14371436
}
@@ -1451,7 +1450,7 @@ protected void start(HighwayBuilder b) {
14511450
boolean restockOccurred = (
14521451
(b.restockTask.materials && (hasItem(b, stack -> stack.getItem() instanceof BlockItem bi && b.blocksToPlace.get().contains(bi.getBlock())) || b.blocksToPlace.get().contains(Blocks.OBSIDIAN) && countItem(b, itemStack -> itemStack.getItem() == Items.ENDER_CHEST) > b.saveEchests.get())) ||
14531452
(b.restockTask.pickaxes && countItem(b, itemStack -> itemStack.is(ItemTags.PICKAXES)) > b.savePickaxes.get()) ||
1454-
(b.restockTask.food && hasItem(b, itemStack -> itemStack.has(DataComponents.FOOD) && !Modules.get().get(AutoEat.class).blacklist.get().contains(itemStack.getItem())))
1453+
(b.restockTask.food && hasItem(b, itemStack -> Utils.isFood(itemStack) && !Modules.get().get(AutoEat.class).blacklist.get().contains(itemStack.getItem())))
14551454
);
14561455

14571456
if (restockOccurred) {
@@ -1529,7 +1528,7 @@ protected void tick(HighwayBuilder b) {
15291528
if (b.restockTask.pickaxes)
15301529
slotsPulled += countSlots(b, itemStack -> itemStack.is(ItemTags.PICKAXES)) - b.savePickaxes.get();
15311530
if (b.restockTask.food)
1532-
slotsPulled += countSlots(b, itemStack -> itemStack.has(DataComponents.FOOD) && !Modules.get().get(AutoEat.class).blacklist.get().contains(itemStack.getItem()));
1531+
slotsPulled += countSlots(b, itemStack -> Utils.isFood(itemStack) && !Modules.get().get(AutoEat.class).blacklist.get().contains(itemStack.getItem()));
15331532

15341533

15351534
// whether we have pulled the minimum amount of items we want
@@ -1644,7 +1643,7 @@ private boolean restockItems(HighwayBuilder b, Container inv) {
16441643
if (grabFromInventory(inv, itemStack -> itemStack.is(ItemTags.PICKAXES))) return true;
16451644
}
16461645
if (b.restockTask.food) {
1647-
return grabFromInventory(inv, itemStack -> itemStack.has(DataComponents.FOOD) && !Modules.get().get(AutoEat.class).blacklist.get().contains(itemStack.getItem()));
1646+
return grabFromInventory(inv, itemStack -> Utils.isFood(itemStack) && !Modules.get().get(AutoEat.class).blacklist.get().contains(itemStack.getItem()));
16481647
}
16491648

16501649
return false;
@@ -1673,7 +1672,7 @@ private void setShulkerPredicate(HighwayBuilder b) {
16731672
return true;
16741673
}
16751674
if (b.restockTask.pickaxes && stack.is(ItemTags.PICKAXES)) return true;
1676-
if (b.restockTask.food && stack.has(DataComponents.FOOD) && !Modules.get().get(AutoEat.class).blacklist.get().contains(stack.getItem()))
1675+
if (b.restockTask.food && Utils.isFood(stack) && !Modules.get().get(AutoEat.class).blacklist.get().contains(stack.getItem()))
16771676
return true;
16781677
}
16791678

src/main/java/meteordevelopment/meteorclient/utils/Utils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,15 @@ private static boolean hasEnchantment(Object2IntMap<Holder<Enchantment>> itemEnc
199199
return false;
200200
}
201201

202+
public static boolean isFood(ItemStack stack) {
203+
return isFood(stack.getItem());
204+
}
205+
206+
// Not every food item in minecraft is consumable for some reason (e.g. buckets of any fish)
207+
public static boolean isFood(Item item) {
208+
return item.components().has(DataComponents.FOOD) && item.components().has(DataComponents.CONSUMABLE);
209+
}
210+
202211
public static int getRenderDistance() {
203212
return Math.max(mc.options.renderDistance().get(), ((ClientPacketListenerAccessor) mc.getConnection()).meteor$getServerChunkRadius());
204213
}

0 commit comments

Comments
 (0)