diff --git a/Common/src/main/java/at/petrak/hexcasting/api/misc/DiscoveryHandlers.java b/Common/src/main/java/at/petrak/hexcasting/api/misc/DiscoveryHandlers.java index d94f526066..3bc17b122c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/misc/DiscoveryHandlers.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/misc/DiscoveryHandlers.java @@ -6,9 +6,11 @@ import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; +import java.util.function.Function; public class DiscoveryHandlers { private static final List> DEBUG_DISCOVERER = new ArrayList<>(); + private static final List>> EXTRA_EQUIPMENT_DISCOVERY = new ArrayList<>(); public static ItemStack findDebugItem(Player player, String type) { for (var discoverer : DEBUG_DISCOVERER) { @@ -20,7 +22,19 @@ public static ItemStack findDebugItem(Player player, String type) { return ItemStack.EMPTY; } + public static List collectExtraEquipments(Player player) { + List stacks = new ArrayList<>(); + for (var discoverer : EXTRA_EQUIPMENT_DISCOVERY) { + stacks.addAll(discoverer.apply(player)); + } + return stacks; + } + public static void addDebugItemDiscoverer(BiFunction discoverer) { DEBUG_DISCOVERER.add(discoverer); } + + public static void addExtraEquipmentDiscoverer(Function> discoverer) { + EXTRA_EQUIPMENT_DISCOVERY.add(discoverer); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/MediaHelper.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/MediaHelper.kt index c237ac52be..e247de4414 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/MediaHelper.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/MediaHelper.kt @@ -4,6 +4,7 @@ package at.petrak.hexcasting.api.utils import at.petrak.hexcasting.api.HexAPI import at.petrak.hexcasting.api.addldata.ADMediaHolder +import at.petrak.hexcasting.api.misc.DiscoveryHandlers import at.petrak.hexcasting.xplat.IXplatAbstractions import net.minecraft.server.level.ServerPlayer import net.minecraft.util.Mth @@ -64,7 +65,7 @@ fun extractMedia( fun scanPlayerForMediaStuff(player: ServerPlayer): List { val sources = mutableListOf() - (player.inventory.items + player.inventory.armor + player.inventory.offhand).forEach { + (player.inventory.items + player.inventory.armor + player.inventory.offhand + DiscoveryHandlers.collectExtraEquipments(player)).forEach { val holder = HexAPI.instance().findMediaHolder(it) if (holder?.canProvide() == true) { sources.add(holder) diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsApiInterop.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsApiInterop.java index 54e51ed446..88fc6a8d32 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsApiInterop.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsApiInterop.java @@ -13,13 +13,13 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.util.Tuple; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; -import java.util.Optional; -import java.util.UUID; +import java.util.*; public class TrinketsApiInterop { public static void init() { @@ -37,6 +37,16 @@ public Multimap getModifiers(ItemStack stack, Slot } }); + DiscoveryHandlers.addExtraEquipmentDiscoverer(player -> { + Optional optional = TrinketsApi.getTrinketComponent(player); + if (optional.isPresent()) { + TrinketComponent component = optional.get(); + return component.getEquipped(i -> !i.isEmpty()).stream() + .map(Tuple::getB) + .toList(); + } + return List.of(); + }); DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { Optional optional = TrinketsApi.getTrinketComponent(player); diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java b/Forge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java index dfb750c35a..ddade7c4d0 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java @@ -19,7 +19,7 @@ import top.theillusivec4.curios.api.SlotTypePreset; import top.theillusivec4.curios.api.type.capability.ICurio; -import java.util.UUID; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; public class CuriosApiInterop { @@ -55,6 +55,21 @@ public static ICapabilityProvider curioCap(ItemStack stack) { public static void init() { + DiscoveryHandlers.addExtraEquipmentDiscoverer(player -> { + List result = new ArrayList<>(); + player.getCapability(CuriosCapability.INVENTORY).ifPresent(handler -> { + for (var stacksHandler : handler.getCurios().values()) { + var stacks = stacksHandler.getStacks(); + for (int i = 0; i < stacks.getSlots(); i++) { + var stack = stacks.getStackInSlot(i); + if (stack.isEmpty()) continue; + result.add(stack); + } + } + }); + return result; + }); + DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { AtomicReference result = new AtomicReference<>(ItemStack.EMPTY); player.getCapability(CuriosCapability.INVENTORY).ifPresent(handler -> {