ActuallyAdditions/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/TargetNBTIngredient.java

76 lines
2.5 KiB
Java
Raw Normal View History

2021-10-12 23:19:47 +02:00
package de.ellpeck.actuallyadditions.mod.crafting;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
2024-03-02 21:23:08 +01:00
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
2021-10-12 23:19:47 +02:00
import net.minecraftforge.common.crafting.IIngredientSerializer;
2021-11-13 18:02:42 +01:00
import javax.annotation.Nonnull;
2021-10-12 23:19:47 +02:00
import java.util.stream.Stream;
public class TargetNBTIngredient extends Ingredient {
2024-03-02 21:23:08 +01:00
public TargetNBTIngredient(Stream<? extends Value> itemLists) {
2021-10-12 23:19:47 +02:00
super(itemLists);
}
@Override
2021-11-13 18:02:42 +01:00
@Nonnull
2021-10-12 23:19:47 +02:00
public IIngredientSerializer<? extends Ingredient> getSerializer() {
return SERIALIZER;
}
2024-03-02 21:23:08 +01:00
public static TargetNBTIngredient of(ItemLike itemProvider) {
return new TargetNBTIngredient(Stream.of(new ItemValue(new ItemStack(itemProvider))));
2021-10-12 23:19:47 +02:00
}
public static TargetNBTIngredient of(ItemStack itemStack) {
2024-03-02 21:23:08 +01:00
return new TargetNBTIngredient(Stream.of(new ItemValue(itemStack)));
2021-10-12 23:19:47 +02:00
}
2021-11-13 18:02:42 +01:00
@Nonnull
2024-03-02 21:23:08 +01:00
public static TargetNBTIngredient of(@Nonnull TagKey tag) {
return new TargetNBTIngredient(Stream.of(new TagValue(tag)));
2021-10-12 23:19:47 +02:00
}
@Override
2021-11-13 18:02:42 +01:00
@Nonnull
2021-10-12 23:19:47 +02:00
public JsonElement toJson() {
JsonObject tmp = super.toJson().getAsJsonObject();
tmp.addProperty("type", Serializer.NAME.toString());
return tmp;
}
public static Serializer SERIALIZER = new Serializer();
public static class Serializer implements IIngredientSerializer<TargetNBTIngredient> {
public static ResourceLocation NAME = new ResourceLocation(ActuallyAdditions.MODID, "nbt_target");
@Override
2021-11-13 18:02:42 +01:00
@Nonnull
2024-03-02 21:23:08 +01:00
public TargetNBTIngredient parse(FriendlyByteBuf buffer) {
return new TargetNBTIngredient(Stream.generate(() -> new ItemValue(buffer.readItem())).limit(buffer.readVarInt()));
2021-10-12 23:19:47 +02:00
}
@Override
2021-11-13 18:02:42 +01:00
@Nonnull
public TargetNBTIngredient parse(@Nonnull JsonObject json) {
2021-10-12 23:19:47 +02:00
return new TargetNBTIngredient(Stream.of(Ingredient.valueFromJson(json)));
}
@Override
2024-03-02 21:23:08 +01:00
public void write(FriendlyByteBuf buffer, TargetNBTIngredient ingredient) {
2021-10-12 23:19:47 +02:00
ItemStack[] items = ingredient.getItems();
buffer.writeVarInt(items.length);
for (ItemStack stack : items)
buffer.writeItem(stack);
}
}
}