This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
RelicCraft/src/main/java/com/thebrokenrail/reliccraft/loot/RelicLootTableFunction.java

63 lines
2.3 KiB
Java

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<RelicData> 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<RelicLootTableFunction> {
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<RelicLootTableFunction.Builder> {
@Override
protected RelicLootTableFunction.Builder getThisBuilder() {
return this;
}
public LootFunction build() {
return new RelicLootTableFunction(getConditions());
}
}
}