From 2e7666897013bd4787999771794142472b5ac28f Mon Sep 17 00:00:00 2001 From: WakelessSloth56 Date: Thu, 27 Oct 2022 22:16:46 +0800 Subject: [PATCH] feat(game.item): method for getting suspicious stew effects --- .../arnicalib/game/item/ItemNbtUtils.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemNbtUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemNbtUtils.java index 0713aaa4..5987648c 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemNbtUtils.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemNbtUtils.java @@ -1,12 +1,17 @@ package org.auioc.mcmod.arnicalib.game.item; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; +import org.apache.commons.lang3.tuple.Pair; import net.minecraft.network.chat.Component; +import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.animal.axolotl.Axolotl; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.SignItem; +import net.minecraft.world.item.SuspiciousStewItem; public class ItemNbtUtils { @@ -27,7 +32,7 @@ public static Optional getSignTexts(ItemStack itemStack) { if (itemStack.getItem() instanceof SignItem && itemStack.hasTag()) { var nbt = BlockItem.getBlockEntityData(itemStack); if (nbt != null) { - var texts = new Component[4]; + final var texts = new Component[4]; for (int i = 0; i < 4; ++i) { var key = "Text" + (i + 1); if (nbt.contains(key, 8)) { @@ -40,4 +45,27 @@ public static Optional getSignTexts(ItemStack itemStack) { return Optional.empty(); } + public static Optional>> getSuspiciousStewEffects(ItemStack itemStack) { + if (itemStack.getItem() instanceof SuspiciousStewItem && itemStack.hasTag()) { + var nbt = itemStack.getTag(); + if (nbt != null && nbt.contains("Effects", 9)) { + var eNbtList = nbt.getList("Effects", 10); + if (!eNbtList.isEmpty()) { + int l = eNbtList.size(); + final var list = new ArrayList>(l); + for (int i = 0; i < l; ++i) { + var eNbt = eNbtList.getCompound(i); + int duration = 160; + if (eNbt.contains("EffectDuration", 3)) duration = eNbt.getInt("EffectDuration"); + var effect = MobEffect.byId(eNbt.getByte("EffectId")); + effect = net.minecraftforge.common.ForgeHooks.loadMobEffect(eNbt, "forge:effect_id", effect); + list.add(Pair.of(effect, duration)); + } + return Optional.of(list); + } + } + } + return Optional.empty(); + } + }