package joshie.harvest.core.loot;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import joshie.harvest.api.core.ISizedProvider;
import joshie.harvest.api.core.Size;
import net.minecraft.item.Item;
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.Locale;
import java.util.Random;
public class SetSizeable extends LootFunction {
private final ISizedProvider provider;
private final Object object;
private final Size size;
@SuppressWarnings("ConstantConditions")
public SetSizeable(LootCondition[] conditionsIn, String sizeable, String object, String size) {
super(conditionsIn);
provider = (ISizedProvider)Item.REGISTRY.getObject(new ResourceLocation(sizeable));
this.object = provider.getObjectFromString(object);
this.size = Size.valueOf(size.toUpperCase(Locale.ENGLISH));
}
@Override
@SuppressWarnings("unchecked")
public ItemStack apply(ItemStack stack, Random rand, LootContext context) {
if (stack.getItem() instanceof ISizedProvider) {
ISizedProvider provider = (ISizedProvider)stack.getItem();
return provider.getStackOfSize(object, size, 1);
} else return stack;
}
public static class Serializer extends LootFunction.Serializer<SetSizeable> {
public Serializer() {
super(new ResourceLocation("hf_set_sizeable"), SetSizeable.class);
}
public void serialize(JsonObject object, SetSizeable functionClazz, JsonSerializationContext serializationContext) {
object.addProperty("item", ((Item)functionClazz.provider).getRegistryName().toString());
object.addProperty("object", functionClazz.object.toString());
object.addProperty("size", functionClazz.size.name());
}
public SetSizeable deserialize(JsonObject object, JsonDeserializationContext deserializationContext, LootCondition[] conditionsIn) {
return new SetSizeable(conditionsIn, object.get("item").getAsString(), object.get("object").getAsString(), object.get("size").getAsString());
}
}
}