From 19efbb49421619020d35330391bb5f81f9601f26 Mon Sep 17 00:00:00 2001 From: enjarai Date: Sun, 5 Jun 2022 09:44:26 +0200 Subject: [PATCH] Fix mixin conflicts for 1.18.2 --- build.gradle | 2 +- gradle.properties | 2 +- src/main/java/Andrew6rant/tiered/Tiered.java | 42 ++++++++++ .../tiered/mixin/ItemStackMixin.java | 76 ------------------- src/main/resources/tiered.mixins.json | 1 - 5 files changed, 44 insertions(+), 79 deletions(-) delete mode 100644 src/main/java/Andrew6rant/tiered/mixin/ItemStackMixin.java diff --git a/build.gradle b/build.gradle index 78bd6bf4..2266d391 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ dependencies { modImplementation "com.github.emilyploszaj:step-height-entity-attribute:v1.0.1" include "com.github.emilyploszaj:step-height-entity-attribute:v1.0.1" - modImplementation "curse.maven:iceberg-539382:3535221" + modImplementation "curse.maven:iceberg-539382:3675784" } processResources { diff --git a/gradle.properties b/gradle.properties index b43e060c..d80af996 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ maven_group=io.github.Andrew6rant archives_base_name=tiered # Dependencies -fabric_version=0.54.0+1.18.2 +fabric_version=0.55.1+1.18.2 cardinal_version=2.7.4+ reach_entity_attributes_version=2.1.1+ mod_menu_version=1.14+ \ No newline at end of file diff --git a/src/main/java/Andrew6rant/tiered/Tiered.java b/src/main/java/Andrew6rant/tiered/Tiered.java index 5b57f357..c8081728 100644 --- a/src/main/java/Andrew6rant/tiered/Tiered.java +++ b/src/main/java/Andrew6rant/tiered/Tiered.java @@ -12,6 +12,7 @@ import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.event.client.ItemTooltipCallback; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.fabricmc.fabric.api.item.v1.ModifyItemAttributeModifiersCallback; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.loader.api.FabricLoader; @@ -28,6 +29,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.UUID; public class Tiered implements ModInitializer { @@ -65,6 +69,7 @@ public void onInitialize() { TieredItemTags.init(); CustomEntityAttributes.init(); registerAttributeSyncer(); + registerAttributeModifier(); if(FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { // setupModifierLabel(); @@ -177,4 +182,41 @@ public static void registerAttributeSyncer() { packetSender.sendPacket(ATTRIBUTE_SYNC_PACKET, packet); }); } + + public static void registerAttributeModifier() { + // Registering an event instead of using a mixin. + // because why try to work around fapi's modifications when you can just use them? + ModifyItemAttributeModifiersCallback.EVENT.register((itemStack, slot, modifiers) -> { + if(itemStack.getSubNbt(Tiered.NBT_SUBTAG_KEY) != null) { + Identifier tier = new Identifier(itemStack.getOrCreateSubNbt(Tiered.NBT_SUBTAG_KEY).getString(Tiered.NBT_SUBTAG_DATA_KEY)); + + if(!itemStack.hasNbt() || !itemStack.getNbt().contains("AttributeModifiers", 9)) { + PotentialAttribute potentialAttribute = Tiered.ATTRIBUTE_DATA_LOADER.getItemAttributes().get(tier); + + if(potentialAttribute != null) { + potentialAttribute.getAttributes().forEach(template -> { + // get required equipment slots + if(template.getRequiredEquipmentSlots() != null) { + List requiredEquipmentSlots = new ArrayList<>(Arrays.asList(template.getRequiredEquipmentSlots())); + + if(requiredEquipmentSlots.contains(slot)) { + template.realize(modifiers, slot); + } + } + + // get optional equipment slots + if(template.getOptionalEquipmentSlots() != null) { + List optionalEquipmentSlots = new ArrayList<>(Arrays.asList(template.getOptionalEquipmentSlots())); + + // optional equipment slots are valid ONLY IF the equipment slot is valid for the thing + if(optionalEquipmentSlots.contains(slot) && Tiered.isPreferredEquipmentSlot(itemStack, slot)) { + template.realize(modifiers, slot); + } + } + }); + } + } + } + }); + } } diff --git a/src/main/java/Andrew6rant/tiered/mixin/ItemStackMixin.java b/src/main/java/Andrew6rant/tiered/mixin/ItemStackMixin.java deleted file mode 100644 index ecea240b..00000000 --- a/src/main/java/Andrew6rant/tiered/mixin/ItemStackMixin.java +++ /dev/null @@ -1,76 +0,0 @@ -package Andrew6rant.tiered.mixin; - -import com.google.common.collect.LinkedListMultimap; -import com.google.common.collect.Multimap; -import Andrew6rant.tiered.Tiered; -import Andrew6rant.tiered.api.PotentialAttribute; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@Mixin(ItemStack.class) -public abstract class ItemStackMixin { - - @Shadow public abstract NbtCompound getOrCreateSubNbt(String key); - - @Shadow public abstract NbtCompound getNbt(); - - @Shadow public abstract boolean hasNbt(); - - @Shadow public abstract NbtCompound getSubNbt(String key); - - @Redirect( - method = "getAttributeModifiers", - at = @At(value = "INVOKE", target = "Lnet/minecraft/item/Item;getAttributeModifiers(Lnet/minecraft/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;") - ) - private Multimap go(Item item, EquipmentSlot slot) { - Multimap mods = item.getAttributeModifiers(slot); - Multimap newMap = LinkedListMultimap.create(); - newMap.putAll(mods); - - if(getSubNbt(Tiered.NBT_SUBTAG_KEY) != null) { - Identifier tier = new Identifier(getOrCreateSubNbt(Tiered.NBT_SUBTAG_KEY).getString(Tiered.NBT_SUBTAG_DATA_KEY)); - - if(!hasNbt() || !getNbt().contains("AttributeModifiers", 9)) { - PotentialAttribute potentialAttribute = Tiered.ATTRIBUTE_DATA_LOADER.getItemAttributes().get(tier); - - if(potentialAttribute != null) { - potentialAttribute.getAttributes().forEach(template -> { - // get required equipment slots - if(template.getRequiredEquipmentSlots() != null) { - List requiredEquipmentSlots = new ArrayList<>(Arrays.asList(template.getRequiredEquipmentSlots())); - - if(requiredEquipmentSlots.contains(slot)) { - template.realize(newMap, slot); - } - } - - // get optional equipment slots - if(template.getOptionalEquipmentSlots() != null) { - List optionalEquipmentSlots = new ArrayList<>(Arrays.asList(template.getOptionalEquipmentSlots())); - - // optional equipment slots are valid ONLY IF the equipment slot is valid for the thing - if(optionalEquipmentSlots.contains(slot) && Tiered.isPreferredEquipmentSlot((ItemStack) (Object) this, slot)) { - template.realize(newMap, slot); - } - } - }); - } - } - } - - return newMap; - } -} diff --git a/src/main/resources/tiered.mixins.json b/src/main/resources/tiered.mixins.json index 330c956a..1c6954f5 100644 --- a/src/main/resources/tiered.mixins.json +++ b/src/main/resources/tiered.mixins.json @@ -4,7 +4,6 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "InventoryAccessor", - "ItemStackMixin", "LivingEntityMixin", "PlayerEntityMixin", "ServerPlayerEntityMixin",