diff --git a/build.gradle b/build.gradle index fe9c1335..a42e32e6 100644 --- a/build.gradle +++ b/build.gradle @@ -95,8 +95,8 @@ dependencies { modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" //needed for trinkets, otherwise BetterEnd would require users to install trinkets - //1.19.3 modApi "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cca_version}" - //1.19.3 modCompileOnly "dev.emi:trinkets:${project.trinkets_version}" + modApi "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cca_version}" + modCompileOnly "dev.emi:trinkets:${project.trinkets_version}" modCompileOnly "dev.emi:emi:${emi_version}" //modRuntimeOnly "dev.emi:emi:${emi_version}" } diff --git a/gradle.properties b/gradle.properties index 09bec242..77f208a3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,7 +21,6 @@ archives_base_name=better-end patchouli_version=1.19-73-FABRIC bclib_version=2.2.4 rei_version=10.0.578 -jei_version=11.1.0.235 -emi_version=0.5.0+1.19.3 -trinkets_version=3.4.0 -cca_version=5.0.0-beta.1 +emi_version=0.6.2+1.19.3 +trinkets_version=3.5.0 +cca_version=5.1.0 diff --git a/src/main/java/org/betterx/betterend/integration/trinkets/Elytra.java b/src/main/java/org/betterx/betterend/integration/trinkets/Elytra.java index 72839a6e..fb1597d4 100644 --- a/src/main/java/org/betterx/betterend/integration/trinkets/Elytra.java +++ b/src/main/java/org/betterx/betterend/integration/trinkets/Elytra.java @@ -1,75 +1,88 @@ package org.betterx.betterend.integration.trinkets; -//import dev.emi.trinkets.api.SlotReference; -//import dev.emi.trinkets.api.TrinketComponent; -//import dev.emi.trinkets.api.TrinketsApi; -// -//import java.util.List; -//import java.util.Optional; -// -//public class Elytra { -// private static boolean isElytra(ItemStack stack) { -// return stack.getItem() instanceof ElytraItem -// || stack.getItem() instanceof FabricElytraItem; -// } -// -// public static void register() { -// BCLElytraUtils.slotProvider = (entity, slotGetter) -> { -// ItemStack itemStack = slotGetter.apply(EquipmentSlot.CHEST); -// if (isElytra(itemStack)) return itemStack; -// -// Optional oTrinketComponent = TrinketsApi.getTrinketComponent(entity); -// if (oTrinketComponent.isPresent()) { -// List> equipped = -// oTrinketComponent.get().getEquipped(Elytra::isElytra); -// -// if (!equipped.isEmpty()) return equipped.get(0).getB(); -// } -// return null; -// }; -// -// BCLElytraUtils.onBreak = (entity, chestStack) -> { -// Optional oTrinketComponent = TrinketsApi.getTrinketComponent(entity); -// if (oTrinketComponent.isPresent()) { -// List> equipped = -// oTrinketComponent.get().getEquipped(Elytra::isElytra); -// -// for (Tuple slot : equipped) { -// ItemStack slotStack = slot.getB(); -// if (slotStack == chestStack) { -// TrinketsApi.onTrinketBroken(slotStack, slot.getA(), entity); -// } -// } -// } -// }; -// -// EntityElytraEvents.CUSTOM.register(Elytra::useElytraTrinket); -// } -// -// private static boolean useElytraTrinket(LivingEntity entity, boolean tickElytra) { -// Optional oTrinketComponent = TrinketsApi.getTrinketComponent(entity); -// if (oTrinketComponent.isPresent()) { -// List> equipped = -// oTrinketComponent.get().getEquipped(Elytra::isElytra); -// -// for (Tuple slot : equipped) { -// ItemStack stack = slot.getB(); -// Item item = stack.getItem(); -// -// if (item instanceof ElytraItem) { -// if (ElytraItem.isFlyEnabled(stack)) { -// BCLElytraItem.vanillaElytraTick(entity, stack); -// return true; -// } -// } else if (item instanceof FabricElytraItem fabricElytraItem) { -// if (fabricElytraItem.useCustomElytra(entity, stack, tickElytra)) { -// return true; -// } -// } -// } -// } -// return false; -// } -//} +import org.betterx.bclib.items.elytra.BCLElytraItem; +import org.betterx.bclib.items.elytra.BCLElytraUtils; + +import net.minecraft.util.Tuple; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ElytraItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import net.fabricmc.fabric.api.entity.event.v1.EntityElytraEvents; +import net.fabricmc.fabric.api.entity.event.v1.FabricElytraItem; + +import dev.emi.trinkets.api.SlotReference; +import dev.emi.trinkets.api.TrinketComponent; +import dev.emi.trinkets.api.TrinketsApi; + +import java.util.List; +import java.util.Optional; + +public class Elytra { + private static boolean isElytra(ItemStack stack) { + return stack.getItem() instanceof ElytraItem + || stack.getItem() instanceof FabricElytraItem; + } + + public static void register() { + BCLElytraUtils.slotProvider = (entity, slotGetter) -> { + ItemStack itemStack = slotGetter.apply(EquipmentSlot.CHEST); + if (isElytra(itemStack)) return itemStack; + + Optional oTrinketComponent = TrinketsApi.getTrinketComponent(entity); + if (oTrinketComponent.isPresent()) { + List> equipped = + oTrinketComponent.get().getEquipped(Elytra::isElytra); + + if (!equipped.isEmpty()) return equipped.get(0).getB(); + } + return null; + }; + + BCLElytraUtils.onBreak = (entity, chestStack) -> { + Optional oTrinketComponent = TrinketsApi.getTrinketComponent(entity); + if (oTrinketComponent.isPresent()) { + List> equipped = + oTrinketComponent.get().getEquipped(Elytra::isElytra); + + for (Tuple slot : equipped) { + ItemStack slotStack = slot.getB(); + if (slotStack == chestStack) { + TrinketsApi.onTrinketBroken(slotStack, slot.getA(), entity); + } + } + } + }; + + EntityElytraEvents.CUSTOM.register(Elytra::useElytraTrinket); + } + + private static boolean useElytraTrinket(LivingEntity entity, boolean tickElytra) { + Optional oTrinketComponent = TrinketsApi.getTrinketComponent(entity); + if (oTrinketComponent.isPresent()) { + List> equipped = + oTrinketComponent.get().getEquipped(Elytra::isElytra); + + for (Tuple slot : equipped) { + ItemStack stack = slot.getB(); + Item item = stack.getItem(); + + if (item instanceof ElytraItem) { + if (ElytraItem.isFlyEnabled(stack)) { + BCLElytraItem.vanillaElytraTick(entity, stack); + return true; + } + } else if (item instanceof FabricElytraItem fabricElytraItem) { + if (fabricElytraItem.useCustomElytra(entity, stack, tickElytra)) { + return true; + } + } + } + } + return false; + } +} diff --git a/src/main/java/org/betterx/betterend/integration/trinkets/ElytraClient.java b/src/main/java/org/betterx/betterend/integration/trinkets/ElytraClient.java index 4e9c4835..2cacb7d8 100644 --- a/src/main/java/org/betterx/betterend/integration/trinkets/ElytraClient.java +++ b/src/main/java/org/betterx/betterend/integration/trinkets/ElytraClient.java @@ -1,22 +1,22 @@ package org.betterx.betterend.integration.trinkets; -//import net.minecraft.world.item.ElytraItem; -// -//import net.fabricmc.api.EnvType; -//import net.fabricmc.api.Environment; -//import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRenderEvents; -//import net.fabricmc.fabric.api.entity.event.v1.FabricElytraItem; -// -//import dev.emi.trinkets.api.TrinketsApi; -// -//@Environment(EnvType.CLIENT) -//public class ElytraClient { -// public static void register() { -// LivingEntityFeatureRenderEvents.ALLOW_CAPE_RENDER.register((player) -> TrinketsApi -// .getTrinketComponent(player) -// .map(trinketComponent -> trinketComponent.getEquipped( -// stack -> stack.getItem() instanceof ElytraItem || -// stack.getItem() instanceof FabricElytraItem -// ).size() == 0).orElse(true)); -// } -//} +import net.minecraft.world.item.ElytraItem; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRenderEvents; +import net.fabricmc.fabric.api.entity.event.v1.FabricElytraItem; + +import dev.emi.trinkets.api.TrinketsApi; + +@Environment(EnvType.CLIENT) +public class ElytraClient { + public static void register() { + LivingEntityFeatureRenderEvents.ALLOW_CAPE_RENDER.register((player) -> TrinketsApi + .getTrinketComponent(player) + .map(trinketComponent -> trinketComponent.getEquipped( + stack -> stack.getItem() instanceof ElytraItem || + stack.getItem() instanceof FabricElytraItem + ).size() == 0).orElse(true)); + } +}