package joshie.harvest.core.loot; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import joshie.harvest.core.base.block.BlockHFEnum; import joshie.harvest.core.base.item.ItemBlockHF; import joshie.harvest.core.base.item.ItemHFEnum; import joshie.harvest.core.base.item.ItemHFFoodEnum; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.world.storage.loot.LootContext; import net.minecraft.world.storage.loot.conditions.LootCondition; import net.minecraft.world.storage.loot.functions.LootFunction; import java.util.Random; public class SetEnum extends LootFunction { private final String name; public SetEnum(LootCondition[] conditionsIn, String name) { super(conditionsIn); this.name = name; } public ItemStack apply(ItemStack stack, Random rand, LootContext context) { if (stack.getItem() instanceof ItemHFFoodEnum) { ItemStack ret = ((ItemHFFoodEnum)stack.getItem()).getStackFromEnumString(name); ret.stackSize = stack.stackSize; ///Update the size return ret; } else if (stack.getItem() instanceof ItemHFEnum) { ItemStack ret = ((ItemHFEnum)stack.getItem()).getStackFromEnumString(name); ret.stackSize = stack.stackSize; ///Update the size return ret; } else if (stack.getItem() instanceof ItemBlockHF && ((ItemBlockHF)stack.getItem()).getBlock() instanceof BlockHFEnum) { ItemStack ret = ((BlockHFEnum)((ItemBlockHF)stack.getItem()).getBlock()).getStackFromEnumString(name); ret.stackSize = stack.stackSize; return ret; } return stack; } public static class Serializer extends LootFunction.Serializer<SetEnum> { public Serializer() { super(new ResourceLocation("hf_set_enum"), SetEnum.class); } public void serialize(JsonObject object, SetEnum functionClazz, JsonSerializationContext serializationContext) { object.addProperty("enum", functionClazz.name); } public SetEnum deserialize(JsonObject object, JsonDeserializationContext deserializationContext, LootCondition[] conditionsIn) { return new SetEnum(conditionsIn, object.get("enum").getAsString()); } } }