diff --git a/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItem.java b/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItem.java index 324d7104..34e10c20 100644 --- a/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItem.java +++ b/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItem.java @@ -23,10 +23,11 @@ package dev.onyxstudios.cca.mixin.item.common; import dev.onyxstudios.cca.api.v3.component.ComponentContainer; -import dev.onyxstudios.cca.internal.base.DynamicContainerFactory; import dev.onyxstudios.cca.internal.item.CardinalItemInternals; import dev.onyxstudios.cca.internal.item.ItemCaller; +import dev.onyxstudios.cca.internal.item.ItemComponentContainerFactory; import nerdhub.cardinal.components.api.event.ItemComponentCallback; +import nerdhub.cardinal.components.api.event.ItemComponentCallbackV2; import net.fabricmc.fabric.api.event.Event; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -35,14 +36,20 @@ @Mixin(Item.class) public abstract class MixinItem implements ItemCaller { - @Unique private final Event cardinal_componentsEvent = CardinalItemInternals.createItemComponentsEvent(); - @Unique private DynamicContainerFactory cardinal_containerFactory; + @Unique private final Event cardinal_componentsEventV2 = CardinalItemInternals.createItemComponentsEventV2(); + @Unique private final Event cardinal_componentsEvent = CardinalItemInternals.createItemComponentsEvent(this.cardinal_componentsEventV2); + @Unique private ItemComponentContainerFactory cardinal_containerFactory; @Override public Event cardinal_getItemComponentEvent() { return this.cardinal_componentsEvent; } + @Override + public Event cardinal_getItemComponentEventV2() { + return this.cardinal_componentsEventV2; + } + @Override public ComponentContainer cardinal_createComponents(ItemStack stack) { //noinspection ConstantConditions @@ -50,6 +57,6 @@ public ComponentContainer cardinal_createComponents(ItemStack stack) { if (this.cardinal_containerFactory == null) { this.cardinal_containerFactory = CardinalItemInternals.createItemStackContainerFactory((Item) (Object) this); } - return this.cardinal_containerFactory.create(stack); + return this.cardinal_containerFactory.create((Item) (Object) this, stack); } } diff --git a/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItemStack.java b/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItemStack.java index f4a2959e..7d2decae 100644 --- a/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItemStack.java +++ b/cardinal-components-item/src/main/java/dev/onyxstudios/cca/mixin/item/common/MixinItemStack.java @@ -33,7 +33,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import org.jetbrains.annotations.Nullable; -import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -94,7 +93,7 @@ private void serialize(CompoundTag tag, CallbackInfoReturnable cir) @Shadow public abstract void removeSubTag(String key); - @Inject(method = "(Lnet/minecraft/nbt/CompoundTag;)V", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/item/ItemStack;count:I", shift = At.Shift.AFTER)) + @Inject(method = "(Lnet/minecraft/nbt/CompoundTag;)V", at = @At("RETURN")) private void initComponentsNBT(CompoundTag tag, CallbackInfo ci) { // Keep data without deserializing Tag componentData = tag.get(AbstractComponentContainer.NBT_KEY); diff --git a/src/testmod/java/dev/onyxstudios/componenttest/TestStaticComponentInitializer.java b/src/testmod/java/dev/onyxstudios/componenttest/TestStaticComponentInitializer.java index beefda55..5d70dd1d 100644 --- a/src/testmod/java/dev/onyxstudios/componenttest/TestStaticComponentInitializer.java +++ b/src/testmod/java/dev/onyxstudios/componenttest/TestStaticComponentInitializer.java @@ -30,6 +30,8 @@ import nerdhub.cardinal.components.api.ComponentRegistry; import nerdhub.cardinal.components.api.ComponentType; import net.minecraft.util.Identifier; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -38,6 +40,7 @@ import java.util.List; public final class TestStaticComponentInitializer implements StaticComponentInitializer { + public static final Logger LOGGER = LogManager.getLogger("Component Test Bootstrap"); // note: the actual ComponentKey must not be registered in this class' , to avoid circular initialization public static final Identifier ALT_VITA_ID = new Identifier("componenttest", "alt-vita"); @@ -53,13 +56,13 @@ public Collection getSupportedComponentKeys() { @Override public void finalizeStaticBootstrap() { - CardinalComponentsTest.LOGGER.info("CCA Bootstrap complete!"); + LOGGER.info("CCA Bootstrap complete!"); ComponentType altVita = ComponentRegistry.INSTANCE.registerIfAbsent(ALT_VITA_ID, Vita.class); CardinalComponentsTest.TestCallback.EVENT.register((uuid, p, components) -> components.put(altVita, new BaseVita())); ComponentContainer.Factory.Builder<@Nullable Void> builder = ComponentContainer.Factory.builder(Void.class); for (int i = 127; i >= 0; i--) { builder.component(ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier("-.-", "-random/test." + i), Vita.class), v -> new BaseVita()); } - CardinalComponentsTest.LOGGER.info(builder.build().createContainer(null)); + LOGGER.info(builder.build().createContainer(null)); } }