From a30b0c2398f2c9f3ebb6262cbaf8c31f4dbf6938 Mon Sep 17 00:00:00 2001 From: John Rowley Date: Sat, 13 Jun 2026 18:56:11 -0700 Subject: [PATCH] feat: add ability to T search for contents of inventory covers --- src/main/java/com/gtnh/findit/FindIt.java | 5 ++ .../handler/GregTechCoverChestProvider.java | 60 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/main/java/com/gtnh/findit/handler/GregTechCoverChestProvider.java diff --git a/src/main/java/com/gtnh/findit/FindIt.java b/src/main/java/com/gtnh/findit/FindIt.java index 19ab097..dde3ee9 100644 --- a/src/main/java/com/gtnh/findit/FindIt.java +++ b/src/main/java/com/gtnh/findit/FindIt.java @@ -10,6 +10,7 @@ import com.gtnh.findit.handler.BackpackProvider; import com.gtnh.findit.handler.DraconicEvolutionProvider; import com.gtnh.findit.handler.ForestryStackFilterProvider; +import com.gtnh.findit.handler.GregTechCoverChestProvider; import com.gtnh.findit.handler.MinecraftProvider; import com.gtnh.findit.handler.ProjectRedExplorationProvider; import com.gtnh.findit.handler.ThaumcraftProvider; @@ -95,6 +96,10 @@ public void preInit(FMLPreInitializationEvent event) { this.pluginsList.add(new ThaumcraftProvider()); } + if (this.isGregTechLoaded) { + this.pluginsList.add(new GregTechCoverChestProvider()); + } + this.pluginsList.add(new MinecraftProvider()); } diff --git a/src/main/java/com/gtnh/findit/handler/GregTechCoverChestProvider.java b/src/main/java/com/gtnh/findit/handler/GregTechCoverChestProvider.java new file mode 100644 index 0000000..12de144 --- /dev/null +++ b/src/main/java/com/gtnh/findit/handler/GregTechCoverChestProvider.java @@ -0,0 +1,60 @@ +package com.gtnh.findit.handler; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.forge.IItemHandler; +import com.gtnh.findit.IStackFilter; +import com.gtnh.findit.IStackFilter.IStackFilterProvider; +import com.gtnh.findit.service.itemfinder.FindItemRequest; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.common.covers.Cover; +import gregtech.common.covers.CoverChest; + +public class GregTechCoverChestProvider implements IStackFilterProvider { + + @Override + public IStackFilter getFilter(EntityPlayer player, TileEntity tileEntity) { + if (!(tileEntity instanceof ICoverable coverable)) { + return null; + } + + return request -> { + for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (!coverable.hasCoverAtSide(side)) { + continue; + } + + if (coverChestMatches(player, request, coverable.getCoverAtSide(side))) { + return true; + } + } + + return false; + }; + } + + @Override + public IStackFilter getFilter(EntityPlayer player, ItemStack stack) { + return null; + } + + private static boolean coverChestMatches(EntityPlayer player, FindItemRequest request, Cover cover) { + if (!(cover instanceof CoverChest coverChest)) { + return false; + } + + IItemHandler items = coverChest.getItems(); + for (int slot = 0; slot < items.getSlots(); slot++) { + ItemStack slotItem = items.getStackInSlot(slot); + if (slotItem != null && request.isStackSatisfies(player, slotItem)) { + return true; + } + } + + return false; + } +}