56 lines
2.1 KiB
Java
56 lines
2.1 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.nbt.CompoundTag;
|
|
import net.minecraft.util.Identifier;
|
|
|
|
public class RelicLootTableFunction extends ConditionalLootFunction {
|
|
private 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;
|
|
}
|
|
|
|
public static class Factory extends ConditionalLootFunction.Factory<RelicLootTableFunction> {
|
|
public Factory() {
|
|
super(new Identifier(RelicCraft.NAMESPACE, "randomize_relic"), RelicLootTableFunction.class);
|
|
}
|
|
|
|
@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());
|
|
}
|
|
}
|
|
} |