package com.thebrokenrail.reliccraft.loot; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.squareup.moshi.JsonAdapter; import com.squareup.moshi.Moshi; import com.thebrokenrail.reliccraft.RelicCraft; import com.thebrokenrail.reliccraft.data.RelicData; import net.minecraft.item.ItemStack; import net.minecraft.loot.condition.LootCondition; import net.minecraft.loot.context.LootContext; import net.minecraft.loot.function.ConditionalLootFunction; import net.minecraft.loot.function.LootFunction; import net.minecraft.loot.function.LootFunctionType; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; public class RelicLootTableFunction extends ConditionalLootFunction { protected RelicLootTableFunction(LootCondition[] conditions) { super(conditions); } public ItemStack process(ItemStack stack, LootContext context) { CompoundTag tag = new CompoundTag(); Moshi moshi = new Moshi.Builder().build(); JsonAdapter jsonAdapter = moshi.adapter(RelicData.class); tag.putString("RelicData", jsonAdapter.toJson(RelicData.generate(context.getRandom()))); stack.setTag(tag); double chance = 1.0d; while (!(context.getRandom().nextDouble() > chance)) { chance = chance * 0.25d; } return stack; } @Override public LootFunctionType getType() { return Registry.LOOT_FUNCTION_TYPE.get(new Identifier(RelicCraft.NAMESPACE, "randomize_relic")); } public static class Serializer extends ConditionalLootFunction.Serializer { public Serializer() { super(); } @Override public RelicLootTableFunction fromJson(JsonObject json, JsonDeserializationContext context, LootCondition[] conditions) { return (RelicLootTableFunction) new Builder().build(); } } public static class Builder extends ConditionalLootFunction.Builder { @Override protected RelicLootTableFunction.Builder getThisBuilder() { return this; } public LootFunction build() { return new RelicLootTableFunction(getConditions()); } } }