From 2c9b7aa2ec6ea35637e54be4da1698650dc6310d Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 14:19:00 +0900 Subject: [PATCH 1/7] never defer registration on Fabric --- .../hexcasting/fabric/xplat/FabricRegister.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java index 18c9ff8e45..d9659ad79d 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java @@ -14,18 +14,10 @@ public class FabricRegister implements IXplatRegister { private final Registry register; - private final Map map; @SuppressWarnings("unchecked") public FabricRegister(ResourceKey> registryKey) { this.register = (Registry) BuiltInRegistries.REGISTRY.get(registryKey.location()); - this.map = new HashMap<>(); - } - - @SuppressWarnings("unchecked") - public FabricRegister(ResourceKey> registryKey, Map map) { - this.register = (Registry) BuiltInRegistries.REGISTRY.get(registryKey.location()); - this.map = map; } @@ -39,14 +31,12 @@ public Supplier register(String id, Supplier provider) { @Override public Holder registerHolder(String id, Supplier provider) { T value = provider.get(); - map.put(id, value); + Registry.register(register, modLoc(id), value); return register.wrapAsHolder(value); } @Override public void registerAll() { - map.forEach((string, value) -> - Registry.register(register, modLoc(string), value) - ); + // This is fabric. we register eagerly. } } From 61b304980607a0bacf635c1cc022bd3369c7e8b1 Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 14:20:35 +0900 Subject: [PATCH 2/7] actually make ItemLens give the proper attributes --- .../java/at/petrak/hexcasting/common/items/ItemLens.java | 9 +++++++++ .../java/at/petrak/hexcasting/common/lib/HexItems.java | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java index 5f9772ec4d..d882f67584 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java @@ -9,11 +9,13 @@ import net.minecraft.core.dispenser.BlockSource; import net.minecraft.core.dispenser.OptionalDispenseItemBehavior; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.level.block.DispenserBlock; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +30,13 @@ public class ItemLens extends Item implements HexBaubleItem { // Wearable, public static final AttributeModifier SCRY_SIGHT = new AttributeModifier( HexAPI.modLoc("scrying_lens_sight"), 1.0, AttributeModifier.Operation.ADD_VALUE); + public static final ItemAttributeModifiers MODIFIERS = ItemAttributeModifiers.builder() + .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.HAND) + .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.HEAD) + .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.HAND) + .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.HEAD) + .build(); + public ItemLens(Properties pProperties) { super(pProperties); DispenserBlock.registerBehavior(this, new OptionalDispenseItemBehavior() { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index 0bfe66b01c..92ce07c7b2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -75,7 +75,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemLens SCRYING_LENS = make("lens", new ItemLens( IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) - .stacksTo(1))); + .stacksTo(1).attributes(ItemLens.MODIFIERS))); public static final ItemAbacus ABACUS = make("abacus", new ItemAbacus(unstackable())); public static final ItemThoughtKnot THOUGHT_KNOT = make("thought_knot", new ItemThoughtKnot(unstackable())); From 2ad949042d7efc230d66577b2b539cd18e9deeb4 Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 14:27:33 +0900 Subject: [PATCH 3/7] fix various build/devenv issues --- Common/src/main/resources/hexplat.accesswidener | 6 +++--- Fabric/gradle.properties | 2 +- Neoforge/build.gradle | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Common/src/main/resources/hexplat.accesswidener b/Common/src/main/resources/hexplat.accesswidener index 613c5818a0..181ba7db3a 100644 --- a/Common/src/main/resources/hexplat.accesswidener +++ b/Common/src/main/resources/hexplat.accesswidener @@ -5,6 +5,6 @@ accessible field net/minecraft/client/renderer/RenderType$CompositeState texture accessible class net/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard accessible class net/minecraft/world/item/crafting/Ingredient$Value accessible method net/minecraft/world/item/crafting/Ingredient (Ljava/util/stream/Stream;)V -#accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V -#accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; -#accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; +accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V +accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; +accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties index 1f90d104cf..aa9eee0b7e 100644 --- a/Fabric/gradle.properties +++ b/Fabric/gradle.properties @@ -1,6 +1,6 @@ platform=fabric -fabricVersion=0.92.8+1.21.1 +fabricVersion=0.116.12+1.21.1 fabricLoaderVersion=0.14.21 fabricLanguageKotlinVersion=1.13.7+kotlin.2.2.21 diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 9403d9e761..29ef26c904 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -104,7 +104,7 @@ dependencies { modImplementation "com.illusivesoulworks.caelus:caelus-neoforge:$caelusVersion" modImplementation "com.samsthenerd.inline:inline-neoforge:1.21.1-1.2.2-74" // needed for inline to run - modRuntimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") + modRuntimeOnly("me.shedaniel.cloth:cloth-config-neoforge:$clothConfigVersion") modRuntimeOnly "com.samsthenerd.inline:inline-neoforge:$minecraftVersion-$inlineVersion" modRuntimeOnly "dev.architectury:architectury-neoforge:$architecturyVersion" From b401b099e0e9f339d4339bab3daaee8647638cf1 Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 14:28:37 +0900 Subject: [PATCH 4/7] move Fabric back to Trinkets and remove unnecessary and broken NF Accessories dep --- .github/workflows/pr.yml | 3 +- Common/build.gradle | 3 - .../petrak/hexcasting/interop/HexInterop.java | 2 +- Fabric/build.gradle | 4 +- Fabric/gradle.properties | 2 +- .../accessories/AccessoriesApiInterop.java | 62 ----------------- .../LensAccessoryRenderer.java | 13 ++-- .../interop/trinkets/TrinketsInterop.java | 66 +++++++++++++++++++ .../fabric/xplat/FabricClientXplatImpl.java | 6 +- .../fabric/xplat/FabricXplatImpl.java | 6 +- .../tags/{items => item}/head/face.json | 0 Neoforge/build.gradle | 14 +--- .../resources/META-INF/neoforge.mods.toml | 7 +- gradle.properties | 1 - 14 files changed, 84 insertions(+), 105 deletions(-) delete mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java rename Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/{accessories => trinkets}/LensAccessoryRenderer.java (70%) create mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java rename Fabric/src/main/resources/data/trinkets/tags/{items => item}/head/face.json (100%) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index af60e5eec9..36395a98b0 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -76,11 +76,10 @@ jobs: 'https://cdn.modrinth.com/data/9s6osm5g/versions/izKINKFg/cloth-config-15.0.140-neoforge.jar' 'https://github.com/SuperKnux/HexMod/raw/refs/heads/indev/1.21.1/libs/paucal-0.7.1-noelle+1.21.1-neoforge.jar' 'https://cdn.modrinth.com/data/fin1PX4m/versions/FhE1RJsR/inline-neoforge-1.21.1-1.2.2.jar' - 'https://cdn.modrinth.com/data/jtmvUHXj/versions/Fb55Fgjz/accessories-neoforge-1.1.0-beta.53%2B1.21.1.jar' 'https://cdn.modrinth.com/data/nU0bVIaL/versions/BIogJv2D/Patchouli-1.21.1-93-NEOFORGE.jar' 'https://cdn.modrinth.com/data/lhGA9TYQ/versions/ZxYGwlk0/architectury-13.0.8-neoforge.jar' 'https://cdn.modrinth.com/data/40FYwb4z/versions/KsfI4QsR/caelus-neoforge-7.0.1%2B1.21.1.jar' - 'https://cdn.modrinth.com/data/ccKDOlHs/versions/NMCHU6DZ/owo-lib-neoforge-0.12.15.5-beta.1%2B1.21.jar' + 'https://cdn.modrinth.com/data/vvuO3ImH/versions/yohfFbgD/curios-neoforge-9.5.1%2B1.21.1.jar' runs-on: ubuntu-latest steps: - uses: actions/setup-java@v4 diff --git a/Common/build.gradle b/Common/build.gradle index 1f2de764ed..410f7d0098 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -24,8 +24,6 @@ repositories { } maven { url "https://maven.shedaniel.me/" } - // accessories - maven { url 'https://maven.wispforest.io/releases' } // EMI maven { url = "https://maven.terraformersmc.com/releases/" } } @@ -44,7 +42,6 @@ dependencies { // === OPTIONAL DEPS === modCompileOnly "dev.emi:emi-xplat-intermediary:${emiVersion}:api" - modCompileOnly "io.wispforest:accessories-common:$accessoriesVersion" // === OTHER STUFF === compileOnly "org.jetbrains:annotations:$jetbrainsAnnotationsVersion" diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java b/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java index f0c878373b..6ecbc2d40f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java @@ -20,7 +20,7 @@ public static final class Forge { } public static final class Fabric { - public static final String ACCESSORIES_API_ID = "accessories"; + public static final String TRINKETS_API_ID = "trinkets"; } public static void init() { diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 1e077ed838..abb601e4b1 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -110,8 +110,6 @@ repositories { } // pehkui maven { url = "https://jitpack.io" } - // accessories - maven { url 'https://maven.wispforest.io/releases' } // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: flatDir { @@ -132,7 +130,7 @@ dependencies { // dear mod devs, don't put the platform in the middle of your version code modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-FABRIC-SNAPSHOT" modImplementation "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" - modImplementation "io.wispforest:accessories-fabric:$accessoriesVersion" + modImplementation "dev.emi:trinkets:${trinketsVersion}" modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:$cardinalComponentsVersion" // modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-util:$cardinalComponentsVersion" diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties index aa9eee0b7e..43ea94066f 100644 --- a/Fabric/gradle.properties +++ b/Fabric/gradle.properties @@ -12,7 +12,7 @@ serializationHooksVersion=0.4.99999 #entityReachVersion=2.3.0 #gravityApiVersion=1.0.6 -trinketsVersion=3.7.0 +trinketsVersion=3.10.0 modmenuVersion=7.0.1 diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java deleted file mode 100644 index 2d89b7e612..0000000000 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java +++ /dev/null @@ -1,62 +0,0 @@ -package at.petrak.hexcasting.fabric.interop.accessories; - -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 io.wispforest.accessories.api.AccessoriesAPI; -import io.wispforest.accessories.api.AccessoriesCapability; -import io.wispforest.accessories.api.Accessory; -import io.wispforest.accessories.api.attributes.AccessoryAttributeBuilder; -import io.wispforest.accessories.api.slot.SlotEntryReference; -import io.wispforest.accessories.api.slot.SlotReference; -import java.util.List; -import java.util.Optional; -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.item.ItemStack; - -import static io.wispforest.accessories.api.client.AccessoriesRendererRegistry.registerRenderer; - -public class AccessoriesApiInterop { - public static void init() { - BuiltInRegistries.ITEM.stream().forEach(item -> { - if (item instanceof HexBaubleItem bauble) { - AccessoriesAPI.registerAccessory(item, new Accessory() { - @Override - public void getDynamicModifiers(ItemStack stack, SlotReference slot, AccessoryAttributeBuilder builder) { - bauble.getHexBaubleAttrs(stack).forEach(builder::addExclusive); - } - }); - } - }); - - - DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { - AccessoriesCapability slots = AccessoriesCapability.get(player); - if (slots != null) { - var stack2 = slots.getEquipped(stack -> ItemCreativeUnlocker.isDebug(stack, type)); - if (stack2 != null) return stack2.getFirst().stack(); - } - return ItemStack.EMPTY; - }); - - DiscoveryHandlers.addExtraEquipmentDiscoverer(player -> { - Optional optional = AccessoriesCapability.getOptionally(player); - if (optional.isPresent()) { - AccessoriesCapability component = optional.get(); - return component.getEquipped(i -> !i.isEmpty()).stream() - .map(SlotEntryReference::stack) - .toList(); - } - return List.of(); - }); - } - - @Environment(EnvType.CLIENT) - public static void clientInit() { - registerRenderer(HexItems.SCRYING_LENS, LensAccessoryRenderer::new); - } -} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/LensAccessoryRenderer.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensAccessoryRenderer.java similarity index 70% rename from Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/LensAccessoryRenderer.java rename to Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensAccessoryRenderer.java index 2e80525fe5..acce18aa9e 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/LensAccessoryRenderer.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensAccessoryRenderer.java @@ -1,10 +1,10 @@ -package at.petrak.hexcasting.fabric.interop.accessories; +package at.petrak.hexcasting.fabric.interop.trinkets; import at.petrak.hexcasting.common.lib.HexItems; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import io.wispforest.accessories.api.client.AccessoryRenderer; -import io.wispforest.accessories.api.slot.SlotReference; +import dev.emi.trinkets.api.SlotReference; +import dev.emi.trinkets.api.client.TrinketRenderer; import net.minecraft.client.Minecraft; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.PlayerModel; @@ -19,12 +19,11 @@ * @author WireSegal * Created at 9:50 AM on 7/25/22. */ -public class LensAccessoryRenderer implements AccessoryRenderer { +public class LensAccessoryRenderer implements TrinketRenderer { @Override - @SuppressWarnings("unchecked") - public void render(ItemStack stack, SlotReference slotReference, PoseStack matrices, EntityModel model, MultiBufferSource multiBufferSource, int light, float v, float v1, float v2, float v3, float v4, float v5) { + public void render(ItemStack stack, SlotReference slotReference, EntityModel model, PoseStack matrices, MultiBufferSource multiBufferSource, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { if (stack.is(HexItems.SCRYING_LENS) && - model instanceof PlayerModel playerModel && slotReference.entity() instanceof Player) { + model instanceof PlayerModel playerModel && entity instanceof Player) { // from https://github.com/Creators-of-Create/Create/blob/ee33823ed0b5084af10ed131a1626ce71db4c07e/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java new file mode 100644 index 0000000000..ca48e08389 --- /dev/null +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java @@ -0,0 +1,66 @@ +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 java.util.List; +import java.util.Optional; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +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 static dev.emi.trinkets.api.client.TrinketRendererRegistry.registerRenderer; + +public class TrinketsInterop { + public static void init() { + BuiltInRegistries.ITEM.stream().forEach(item -> { + if (item instanceof HexBaubleItem bauble) { + TrinketsApi.registerTrinket(item, new Trinket() { + @Override + public Multimap, AttributeModifier> getModifiers(ItemStack stack, SlotReference slot, LivingEntity entity, ResourceLocation slotIdentifier) { + return bauble.getHexBaubleAttrs(stack); + } + }); + } + }); + + + DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { + Optional slots = TrinketsApi.getTrinketComponent(player); + if (slots.isPresent()) { + var stack2 = slots.get().getEquipped(stack -> ItemCreativeUnlocker.isDebug(stack, type)); + if (stack2 != null) return stack2.getFirst().getB(); + } + return ItemStack.EMPTY; + }); + + 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(); + }); + } + + @Environment(EnvType.CLIENT) + public static void clientInit() { + registerRenderer(HexItems.SCRYING_LENS, new LensAccessoryRenderer()); + } +} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java index bd5048cdfe..1cc21331a5 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java @@ -3,7 +3,7 @@ import at.petrak.hexcasting.api.client.ClientCastingStack; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; import at.petrak.hexcasting.fabric.client.ExtendedTexture; -import at.petrak.hexcasting.fabric.interop.accessories.AccessoriesApiInterop; +import at.petrak.hexcasting.fabric.interop.trinkets.TrinketsInterop; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import at.petrak.hexcasting.xplat.IXplatAbstractions; @@ -44,8 +44,8 @@ public void setRenderLayer(Block block, RenderType type) { @Override public void initPlatformSpecific() { - if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Fabric.ACCESSORIES_API_ID)) { - AccessoriesApiInterop.clientInit(); + if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Fabric.TRINKETS_API_ID)) { + TrinketsInterop.clientInit(); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index 5d18904532..da2040d71c 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -25,7 +25,7 @@ import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; -import at.petrak.hexcasting.fabric.interop.accessories.AccessoriesApiInterop; +import at.petrak.hexcasting.fabric.interop.trinkets.TrinketsInterop; import at.petrak.hexcasting.fabric.recipe.FabricUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; @@ -109,8 +109,8 @@ public boolean isModPresent(String id) { @Override public void initPlatformSpecific() { - if (this.isModPresent(HexInterop.Fabric.ACCESSORIES_API_ID)) { - AccessoriesApiInterop.init(); + if (this.isModPresent(HexInterop.Fabric.TRINKETS_API_ID)) { + TrinketsInterop.init(); } } diff --git a/Fabric/src/main/resources/data/trinkets/tags/items/head/face.json b/Fabric/src/main/resources/data/trinkets/tags/item/head/face.json similarity index 100% rename from Fabric/src/main/resources/data/trinkets/tags/items/head/face.json rename to Fabric/src/main/resources/data/trinkets/tags/item/head/face.json diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 29ef26c904..a703429fc3 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -77,10 +77,6 @@ repositories { } maven { url "https://maven.shedaniel.me/" } - // accessories - maven { url 'https://maven.wispforest.io/releases' } - // sinytra connector or something?? accessories needs it - maven { url 'https://maven.su5ed.dev/releases' } } dependencies { @@ -113,16 +109,10 @@ dependencies { modCompileOnly "dev.emi:emi-neoforge:${emiVersion}:api" modRuntimeOnly "dev.emi:emi-neoforge:${emiVersion}" - modImplementation "io.wispforest:accessories-neoforge:$accessoriesVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") - + // "Required due to issues with JIJ dependency resolving in arch or something" - // https://github.com/wisp-forest/accessories - forgeRuntimeLibrary("io.wispforest:endec:0.1.8") - forgeRuntimeLibrary("io.wispforest.endec:gson:0.1.5") - forgeRuntimeLibrary("io.wispforest.endec:netty:0.1.4") - forgeRuntimeLibrary("io.wispforest.endec:jankson:0.1.5") forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-reflect:2.1.20") forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-stdlib:2.1.20") forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.20") @@ -131,8 +121,6 @@ dependencies { forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.10.2") forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.1") forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.1") - forgeRuntimeLibrary("blue.endless:jankson:1.2.2") - forgeRuntimeLibrary("blue.endless:jankson:0.1.5") } def generatedResources = project(":Common").file("src/generated/resources") diff --git a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml index 6b5b68b202..75ffd0b01d 100644 --- a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -59,9 +59,4 @@ modId = "inline" mandatory = true versionRange = "[1.21.1-1.2.2,)" ordering = "NONE" -side = "BOTH" - -[[dependencies.hexcasting]] -modId = "accessories" -mandatory = false -versionRange = "[1.1.0-beta.16+1.21.1,)" \ No newline at end of file +side = "BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 770f7b5d25..66a9c4c872 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,6 @@ fabric_loader_version=0.16.14 # haha not anymore it's from mavenLocal paucalVersion=0.7.1-noelle patchouliVersion=88 -accessoriesVersion=1.1.0-beta.16+1.21.1 emiVersion=1.1.18+1.21.1 From 1a336e21c331d39151e3f01951958d86f931c082 Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 14:55:07 +0900 Subject: [PATCH 5/7] add Trinkets and Curios as optional deps --- Fabric/src/main/resources/fabric.mod.json | 3 ++- Neoforge/src/main/resources/META-INF/neoforge.mods.toml | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index 1f5ad84f67..e10288500a 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -62,7 +62,8 @@ }, "suggests": { "pehkui": ">=3.7.6", - "modmenu": ">=7.0.1" + "modmenu": ">=7.0.1", + "trinkets": ">=3.10.0" }, "custom": { "cardinal-components": [ diff --git a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml index 75ffd0b01d..c75ea52caa 100644 --- a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -59,4 +59,11 @@ modId = "inline" mandatory = true versionRange = "[1.21.1-1.2.2,)" ordering = "NONE" +side = "BOTH" + +[[dependencies.hexcasting]] +modId = "curios" +type = "optional" +versionRange = "[9.5.1,)" +ordering = "NONE" side = "BOTH" \ No newline at end of file From 041b329b549557fe674867a1f35e090aac86d046 Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 14:56:14 +0900 Subject: [PATCH 6/7] remove superfluous mandatory entry for NF mods.toml --- Neoforge/src/main/resources/META-INF/neoforge.mods.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml index c75ea52caa..460ef91cc1 100644 --- a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -21,42 +21,36 @@ config = "hexcasting_forge.mixins.json" [[dependencies.hexcasting]] modId = "neoforge" -mandatory = true versionRange = "[21,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "minecraft" -mandatory = true versionRange = "[1.21.1,1.21.10)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "paucal" -mandatory = true versionRange = "[0.7.1,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "patchouli" -mandatory = true versionRange = "[1.21-80,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "caelus" -mandatory = true versionRange = "[7.0.1+1.21.1,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "inline" -mandatory = true versionRange = "[1.21.1-1.2.2,)" ordering = "NONE" side = "BOTH" From e3ddb1b37778109811c906f134504265b51560b9 Mon Sep 17 00:00:00 2001 From: Skye Date: Wed, 1 Jul 2026 15:24:21 +0900 Subject: [PATCH 7/7] fix rendering with Trinkets, rename to LensTrinketRenderer --- ...ensAccessoryRenderer.java => LensTrinketRenderer.java} | 8 +++++--- .../fabric/interop/trinkets/TrinketsInterop.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) rename Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/{LensAccessoryRenderer.java => LensTrinketRenderer.java} (85%) diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensAccessoryRenderer.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensTrinketRenderer.java similarity index 85% rename from Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensAccessoryRenderer.java rename to Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensTrinketRenderer.java index acce18aa9e..8cdf397292 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensAccessoryRenderer.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensTrinketRenderer.java @@ -8,10 +8,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; @@ -19,16 +19,18 @@ * @author WireSegal * Created at 9:50 AM on 7/25/22. */ -public class LensAccessoryRenderer implements TrinketRenderer { +public class LensTrinketRenderer implements TrinketRenderer { @Override public void render(ItemStack stack, SlotReference slotReference, EntityModel model, PoseStack matrices, MultiBufferSource multiBufferSource, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { if (stack.is(HexItems.SCRYING_LENS) && - model instanceof PlayerModel playerModel && entity instanceof Player) { + model instanceof PlayerModel playerModel && entity instanceof AbstractClientPlayer player) { // from https://github.com/Creators-of-Create/Create/blob/ee33823ed0b5084af10ed131a1626ce71db4c07e/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java // Translate and rotate with our head matrices.pushPose(); + TrinketRenderer.followBodyRotations(entity, playerModel); + TrinketRenderer.translateToFace(matrices, playerModel, player, headYaw, headPitch); // Translate and scale to our head matrices.translate(0, 0, 0.3); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java index ca48e08389..4bff15f353 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsInterop.java @@ -61,6 +61,6 @@ public Multimap, AttributeModifier> getModifiers(ItemStack sta @Environment(EnvType.CLIENT) public static void clientInit() { - registerRenderer(HexItems.SCRYING_LENS, new LensAccessoryRenderer()); + registerRenderer(HexItems.SCRYING_LENS, new LensTrinketRenderer()); } }