|
6 | 6 | import java.util.List; |
7 | 7 | import java.util.Map; |
8 | 8 | import java.util.Set; |
| 9 | +import java.util.function.BiConsumer; |
9 | 10 | import java.util.function.Consumer; |
10 | 11 | import java.util.stream.IntStream; |
11 | 12 | import mekanism.api.chemical.ChemicalStack; |
|
27 | 28 | import mekanism.common.base.TagCache; |
28 | 29 | import mekanism.common.block.interfaces.IHasTileEntity; |
29 | 30 | import mekanism.common.capabilities.Capabilities; |
| 31 | +import mekanism.common.util.EnumUtils; |
30 | 32 | import net.minecraft.client.gui.GuiGraphics; |
31 | 33 | import net.minecraft.client.gui.components.Tooltip; |
32 | 34 | import net.minecraft.client.gui.screens.Screen; |
33 | 35 | import net.minecraft.core.Holder; |
34 | 36 | import net.minecraft.core.component.DataComponents; |
35 | 37 | import net.minecraft.sounds.SoundEvents; |
36 | 38 | import net.minecraft.world.effect.MobEffectInstance; |
| 39 | +import net.minecraft.world.entity.EquipmentSlot; |
| 40 | +import net.minecraft.world.entity.ai.attributes.Attribute; |
| 41 | +import net.minecraft.world.entity.ai.attributes.AttributeModifier; |
37 | 42 | import net.minecraft.world.item.BlockItem; |
38 | 43 | import net.minecraft.world.item.Item; |
39 | 44 | import net.minecraft.world.item.ItemStack; |
40 | 45 | import net.minecraft.world.item.SpawnEggItem; |
41 | 46 | import net.minecraft.world.item.alchemy.PotionContents; |
42 | | -import net.minecraft.world.item.component.ItemAttributeModifiers; |
43 | 47 | import net.minecraft.world.item.enchantment.ItemEnchantments; |
44 | 48 | import net.minecraft.world.level.block.Block; |
45 | 49 | import net.neoforged.neoforge.capabilities.ItemCapability; |
@@ -161,11 +165,15 @@ public void setTargetSlot(@Nullable Object newTarget) { |
161 | 165 | tags.put(DictionaryTagType.MOB_EFFECT, List.copyOf(effectTags)); |
162 | 166 | } |
163 | 167 | //Get any attribute tags |
164 | | - ItemAttributeModifiers modifiers = itemStack.get(DataComponents.ATTRIBUTE_MODIFIERS); |
165 | | - if (modifiers != null && !modifiers.modifiers().isEmpty()) { |
| 168 | + Set<Holder<Attribute>> attributes = new HashSet<>(); |
| 169 | + BiConsumer<Holder<Attribute>, AttributeModifier> attributeCollector = (holder, modifier) -> attributes.add(holder); |
| 170 | + for (EquipmentSlot slotType : EnumUtils.EQUIPMENT_SLOT_TYPES) { |
| 171 | + itemStack.forEachModifier(slotType, attributeCollector); |
| 172 | + } |
| 173 | + if (!attributes.isEmpty()) { |
166 | 174 | //Only add them though if it has any attributes at all |
167 | | - tags.put(DictionaryTagType.ATTRIBUTE, TagCache.getTagsAsStrings(modifiers.modifiers().stream() |
168 | | - .flatMap(attribute -> attribute.attribute().tags()) |
| 175 | + tags.put(DictionaryTagType.ATTRIBUTE, TagCache.getTagsAsStrings(attributes.stream() |
| 176 | + .flatMap(Holder::tags) |
169 | 177 | .distinct() |
170 | 178 | )); |
171 | 179 | } |
|
0 commit comments