HexCasting/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsApiInterop.java
2023-05-10 13:52:09 -05:00

59 lines
2.3 KiB
Java

package at.petrak.hexcasting.fabric.interop.trinkets;
import at.petrak.hexcasting.api.misc.DiscoveryHandlers;
import at.petrak.hexcasting.common.items.HexBaubleItem;
import at.petrak.hexcasting.common.items.magic.ItemCreativeUnlocker;
import at.petrak.hexcasting.common.lib.HexItems;
import com.google.common.collect.Multimap;
import dev.emi.trinkets.api.SlotReference;
import dev.emi.trinkets.api.Trinket;
import dev.emi.trinkets.api.TrinketComponent;
import dev.emi.trinkets.api.TrinketsApi;
import dev.emi.trinkets.api.client.TrinketRendererRegistry;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.core.Registry;
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;
public class TrinketsApiInterop {
public static void init() {
Registry.ITEM.stream().forEach(item -> {
if (item instanceof HexBaubleItem bauble) {
TrinketsApi.registerTrinket(item, new Trinket() {
@Override
public Multimap<Attribute, AttributeModifier> getModifiers(ItemStack stack, SlotReference slot,
LivingEntity entity, UUID uuid) {
var map = Trinket.super.getModifiers(stack, slot, entity, uuid);
map.putAll(bauble.getHexBaubleAttrs(stack));
return map;
}
});
}
});
DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> {
Optional<TrinketComponent> optional = TrinketsApi.getTrinketComponent(player);
if (optional.isPresent()) {
TrinketComponent component = optional.get();
var equipped = component.getEquipped(stack -> ItemCreativeUnlocker.isDebug(stack, type));
if (!equipped.isEmpty()) {
return equipped.get(0).getB();
}
}
return ItemStack.EMPTY;
});
}
@Environment(EnvType.CLIENT)
public static void clientInit() {
TrinketRendererRegistry.registerRenderer(HexItems.SCRYING_LENS, new LensTrinketRenderer());
}
}