From 5bdc02c4744910ef9e40ce5f77d39d116ae801eb Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 14 Jun 2023 13:30:50 +0200 Subject: [PATCH] Re-Enabled Trinkets --- build.gradle | 6 +- gradle.properties | 6 +- .../java/org/betterx/betterend/BetterEnd.java | 8 +- .../betterend/client/BetterEndClient.java | 8 +- .../integration/trinkets/Elytra.java | 170 +++++++++--------- .../integration/trinkets/ElytraClient.java | 40 ++--- src/main/resources/fabric.mod.json | 2 +- 7 files changed, 120 insertions(+), 120 deletions(-) diff --git a/build.gradle b/build.gradle index b7f69017..1c4d720d 100644 --- a/build.gradle +++ b/build.gradle @@ -96,9 +96,9 @@ dependencies { modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" //needed for trinkets, otherwise BetterEnd would require users to install trinkets -// modApi "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cca_version}" -// 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-fabric:${emi_version}:api" modLocalRuntime "dev.emi:emi-fabric:${emi_version}" diff --git a/gradle.properties b/gradle.properties index 6d3f00ba..0811dc8e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,6 +21,6 @@ archives_base_name=better-end patchouli_version=1.19-73-FABRIC bclib_version=3.0.4 rei_version=12.0.622 -emi_version=1.0.2+1.20 -trinkets_version=3.6.0 -cca_version=5.1.0 +emi_version=1.0.3+1.20 +trinkets_version=3.7.0 +cca_version=5.2.1 diff --git a/src/main/java/org/betterx/betterend/BetterEnd.java b/src/main/java/org/betterx/betterend/BetterEnd.java index 0abbc88f..02bab17d 100644 --- a/src/main/java/org/betterx/betterend/BetterEnd.java +++ b/src/main/java/org/betterx/betterend/BetterEnd.java @@ -8,6 +8,7 @@ import org.betterx.betterend.commands.CommandRegistry; import org.betterx.betterend.config.Configs; import org.betterx.betterend.effects.EndPotions; import org.betterx.betterend.integration.Integrations; +import org.betterx.betterend.integration.trinkets.Elytra; import org.betterx.betterend.recipe.builders.InfusionRecipe; import org.betterx.betterend.registry.*; import org.betterx.betterend.tab.CreativeTabs; @@ -80,10 +81,9 @@ public class BetterEnd implements ModInitializer { } }); - //TODO: 1.20 Re-enable when Trinkets is back -// if (RUNS_TRINKETS) { -// org.betterx.betterend.integration.trinkets.Elytra.register(); -// } + if (RUNS_TRINKETS) { + Elytra.register(); + } } public static ResourceLocation makeID(String path) { diff --git a/src/main/java/org/betterx/betterend/client/BetterEndClient.java b/src/main/java/org/betterx/betterend/client/BetterEndClient.java index 88835747..c711949b 100644 --- a/src/main/java/org/betterx/betterend/client/BetterEndClient.java +++ b/src/main/java/org/betterx/betterend/client/BetterEndClient.java @@ -1,5 +1,6 @@ package org.betterx.betterend.client; +import org.betterx.betterend.BetterEnd; import org.betterx.betterend.client.render.BetterEndSkyRenderer; import org.betterx.betterend.events.ItemTooltipCallback; import org.betterx.betterend.interfaces.MultiModelItem; @@ -48,10 +49,9 @@ public class BetterEndClient implements ClientModInitializer { if (ClientOptions.isCustomSky()) { DimensionRenderingRegistry.registerSkyRenderer(Level.END, new BetterEndSkyRenderer()); } -//TODO: 1.20 Re-Enable with Trinkets -// if (BetterEnd.RUNS_TRINKETS) { -// org.betterx.betterend.integration.trinkets.ElytraClient.register(); -// } + if (BetterEnd.RUNS_TRINKETS) { + org.betterx.betterend.integration.trinkets.ElytraClient.register(); + } } public static void registerTooltips() { 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 8d27ff41..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,88 +1,88 @@ package org.betterx.betterend.integration.trinkets; -//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; -// } -//} -// +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)); + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0e7280d3..af3ec9c3 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -59,7 +59,7 @@ "blockus": ">=2.0.2", "nourish": ">=1.2.0", "colored_lights": ">=1.0.3", - "trinkets": ">=3.4.0" + "trinkets": ">=3.7.0" }, "custom": { "bclib": {