Skip to content

Commit

Permalink
Port recipe datagens
Browse files Browse the repository at this point in the history
  • Loading branch information
artemisSystem committed Jul 27, 2024
1 parent 93c56ca commit b6beb56
Show file tree
Hide file tree
Showing 11 changed files with 429 additions and 944 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,23 @@
import net.minecraft.world.level.biome.Biome;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import vazkii.botania.api.recipe.StateIngredient;

import java.util.function.Function;

public class OrechidIgnemRecipe extends OrechidRecipe {
public OrechidIgnemRecipe(StateIngredient input, StateIngredient output, int weight,
CacheableFunction successFunction, int weightBonus, TagKey<Biome> biomes) {
@Nullable CacheableFunction successFunction, int weightBonus, TagKey<Biome> biomes) {
super(input, output, weight, successFunction, weightBonus, biomes);
}

public OrechidIgnemRecipe(StateIngredient input, StateIngredient output, int weight,
@Nullable CacheableFunction successFunction) {
this(input, output, weight, successFunction, 0, null);
}

private OrechidIgnemRecipe(OrechidRecipe orechidRecipe) {
this(orechidRecipe.getInput(), orechidRecipe.getOutput(), orechidRecipe.getWeight(),
orechidRecipe.getSuccessFunction().orElse(null), orechidRecipe.getWeightBonus(),
Expand Down
96 changes: 22 additions & 74 deletions Xplat/src/main/java/vazkii/botania/data/recipes/BrewProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,16 @@
*/
package vazkii.botania.data.recipes;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.block.Blocks;

import org.jetbrains.annotations.Nullable;

import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.brew.Brew;
import vazkii.botania.common.brew.BotaniaBrews;
import vazkii.botania.common.crafting.BotaniaRecipeTypes;
import vazkii.botania.common.crafting.BotanicalBreweryRecipe;
import vazkii.botania.common.item.BotaniaItems;

import static vazkii.botania.common.lib.ResourceLocationHelper.prefix;
Expand All @@ -42,74 +34,30 @@ public String getName() {

@Override
public void buildRecipes(RecipeOutput consumer) {
consumer.accept(new FinishedRecipe(idFor("speed"), BotaniaBrews.speed, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SUGAR), Ingredient.of(Items.REDSTONE)));
consumer.accept(new FinishedRecipe(idFor("strength"), BotaniaBrews.strength, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.BLAZE_POWDER), Ingredient.of(Items.GLOWSTONE_DUST)));
consumer.accept(new FinishedRecipe(idFor("haste"), BotaniaBrews.haste, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SUGAR), Ingredient.of(Items.GOLD_NUGGET)));
consumer.accept(new FinishedRecipe(idFor("healing"), BotaniaBrews.healing, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GLISTERING_MELON_SLICE), Ingredient.of(Items.POTATO)));
consumer.accept(new FinishedRecipe(idFor("jump_boost"), BotaniaBrews.jumpBoost, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.FEATHER), Ingredient.of(Items.CARROT)));
consumer.accept(new FinishedRecipe(idFor("regeneration"), BotaniaBrews.regen, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GHAST_TEAR), Ingredient.of(Items.GLOWSTONE_DUST)));
consumer.accept(new FinishedRecipe(idFor("weak_regeneration"), BotaniaBrews.regenWeak, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GHAST_TEAR), Ingredient.of(Items.REDSTONE)));
consumer.accept(new FinishedRecipe(idFor("resistance"), BotaniaBrews.resistance, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.IRON_INGOT), Ingredient.of(Items.LEATHER)));
consumer.accept(new FinishedRecipe(idFor("fire_resistance"), BotaniaBrews.fireResistance, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.MAGMA_CREAM), Ingredient.of(Blocks.NETHERRACK)));
consumer.accept(new FinishedRecipe(idFor("water_breathing"), BotaniaBrews.waterBreathing, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.PRISMARINE_CRYSTALS), Ingredient.of(Items.GLOWSTONE_DUST)));
consumer.accept(new FinishedRecipe(idFor("invisibility"), BotaniaBrews.invisibility, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SNOWBALL), Ingredient.of(Items.GLOWSTONE_DUST)));
consumer.accept(new FinishedRecipe(idFor("night_vision"), BotaniaBrews.nightVision, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SPIDER_EYE), Ingredient.of(Items.GOLDEN_CARROT)));
consumer.accept(new FinishedRecipe(idFor("absorption"), BotaniaBrews.absorption, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GOLDEN_APPLE), Ingredient.of(Items.POTATO)));

consumer.accept(new FinishedRecipe(idFor("overload"), BotaniaBrews.overload, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.BLAZE_POWDER), Ingredient.of(Items.SUGAR), Ingredient.of(Items.GLOWSTONE_DUST), Ingredient.of(BotaniaItems.manaSteel), Ingredient.of(Items.SPIDER_EYE)));
consumer.accept(new FinishedRecipe(idFor("soul_cross"), BotaniaBrews.soulCross, Ingredient.of(Items.NETHER_WART), Ingredient.of(Blocks.SOUL_SAND), Ingredient.of(Items.PAPER), Ingredient.of(Items.APPLE), Ingredient.of(Items.BONE)));
consumer.accept(new FinishedRecipe(idFor("feather_feet"), BotaniaBrews.featherfeet, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.FEATHER), Ingredient.of(Items.LEATHER), Ingredient.of(ItemTags.WOOL)));
consumer.accept(new FinishedRecipe(idFor("emptiness"), BotaniaBrews.emptiness, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GUNPOWDER), Ingredient.of(Items.ROTTEN_FLESH), Ingredient.of(Items.BONE), Ingredient.of(Items.STRING), Ingredient.of(Items.ENDER_PEARL)));
consumer.accept(new FinishedRecipe(idFor("bloodthirst"), BotaniaBrews.bloodthirst, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.FERMENTED_SPIDER_EYE), Ingredient.of(Items.LAPIS_LAZULI), Ingredient.of(Items.FIRE_CHARGE), Ingredient.of(Items.IRON_INGOT)));
consumer.accept(new FinishedRecipe(idFor("allure"), BotaniaBrews.allure, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.COD), Ingredient.of(Items.QUARTZ), Ingredient.of(Items.GOLDEN_CARROT)));
consumer.accept(new FinishedRecipe(idFor("clear"), BotaniaBrews.clear, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.QUARTZ), Ingredient.of(Items.EMERALD), Ingredient.of(Items.MELON_SLICE)));
consumer.accept(idFor("speed"), new BotanicalBreweryRecipe(BotaniaBrews.speed, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SUGAR), Ingredient.of(Items.REDSTONE)), null);
consumer.accept(idFor("strength"), new BotanicalBreweryRecipe(BotaniaBrews.strength, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.BLAZE_POWDER), Ingredient.of(Items.GLOWSTONE_DUST)), null);
consumer.accept(idFor("haste"), new BotanicalBreweryRecipe(BotaniaBrews.haste, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SUGAR), Ingredient.of(Items.GOLD_NUGGET)), null);
consumer.accept(idFor("healing"), new BotanicalBreweryRecipe(BotaniaBrews.healing, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GLISTERING_MELON_SLICE), Ingredient.of(Items.POTATO)), null);
consumer.accept(idFor("jump_boost"), new BotanicalBreweryRecipe(BotaniaBrews.jumpBoost, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.FEATHER), Ingredient.of(Items.CARROT)), null);
consumer.accept(idFor("regeneration"), new BotanicalBreweryRecipe(BotaniaBrews.regen, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GHAST_TEAR), Ingredient.of(Items.GLOWSTONE_DUST)), null);
consumer.accept(idFor("weak_regeneration"), new BotanicalBreweryRecipe(BotaniaBrews.regenWeak, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GHAST_TEAR), Ingredient.of(Items.REDSTONE)), null);
consumer.accept(idFor("resistance"), new BotanicalBreweryRecipe(BotaniaBrews.resistance, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.IRON_INGOT), Ingredient.of(Items.LEATHER)), null);
consumer.accept(idFor("fire_resistance"), new BotanicalBreweryRecipe(BotaniaBrews.fireResistance, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.MAGMA_CREAM), Ingredient.of(Blocks.NETHERRACK)), null);
consumer.accept(idFor("water_breathing"), new BotanicalBreweryRecipe(BotaniaBrews.waterBreathing, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.PRISMARINE_CRYSTALS), Ingredient.of(Items.GLOWSTONE_DUST)), null);
consumer.accept(idFor("invisibility"), new BotanicalBreweryRecipe(BotaniaBrews.invisibility, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SNOWBALL), Ingredient.of(Items.GLOWSTONE_DUST)), null);
consumer.accept(idFor("night_vision"), new BotanicalBreweryRecipe(BotaniaBrews.nightVision, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.SPIDER_EYE), Ingredient.of(Items.GOLDEN_CARROT)), null);
consumer.accept(idFor("absorption"), new BotanicalBreweryRecipe(BotaniaBrews.absorption, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GOLDEN_APPLE), Ingredient.of(Items.POTATO)), null);

consumer.accept(idFor("overload"), new BotanicalBreweryRecipe(BotaniaBrews.overload, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.BLAZE_POWDER), Ingredient.of(Items.SUGAR), Ingredient.of(Items.GLOWSTONE_DUST), Ingredient.of(BotaniaItems.manaSteel), Ingredient.of(Items.SPIDER_EYE)), null);
consumer.accept(idFor("soul_cross"), new BotanicalBreweryRecipe(BotaniaBrews.soulCross, Ingredient.of(Items.NETHER_WART), Ingredient.of(Blocks.SOUL_SAND), Ingredient.of(Items.PAPER), Ingredient.of(Items.APPLE), Ingredient.of(Items.BONE)), null);
consumer.accept(idFor("feather_feet"), new BotanicalBreweryRecipe(BotaniaBrews.featherfeet, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.FEATHER), Ingredient.of(Items.LEATHER), Ingredient.of(ItemTags.WOOL)), null);
consumer.accept(idFor("emptiness"), new BotanicalBreweryRecipe(BotaniaBrews.emptiness, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.GUNPOWDER), Ingredient.of(Items.ROTTEN_FLESH), Ingredient.of(Items.BONE), Ingredient.of(Items.STRING), Ingredient.of(Items.ENDER_PEARL)), null);
consumer.accept(idFor("bloodthirst"), new BotanicalBreweryRecipe(BotaniaBrews.bloodthirst, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.FERMENTED_SPIDER_EYE), Ingredient.of(Items.LAPIS_LAZULI), Ingredient.of(Items.FIRE_CHARGE), Ingredient.of(Items.IRON_INGOT)), null);
consumer.accept(idFor("allure"), new BotanicalBreweryRecipe(BotaniaBrews.allure, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.COD), Ingredient.of(Items.QUARTZ), Ingredient.of(Items.GOLDEN_CARROT)), null);
consumer.accept(idFor("clear"), new BotanicalBreweryRecipe(BotaniaBrews.clear, Ingredient.of(Items.NETHER_WART), Ingredient.of(Items.QUARTZ), Ingredient.of(Items.EMERALD), Ingredient.of(Items.MELON_SLICE)), null);
}

private static ResourceLocation idFor(String s) {
return prefix("brew/" + s);
}

protected static class FinishedRecipe implements net.minecraft.data.recipes.FinishedRecipe {
private final ResourceLocation id;
private final Brew brew;
private final Ingredient[] inputs;

private FinishedRecipe(ResourceLocation id, Brew brew, Ingredient... inputs) {
this.id = id;
this.brew = brew;
this.inputs = inputs;
}

@Override
public void serializeRecipeData(JsonObject json) {
json.addProperty("brew", BotaniaAPI.instance().getBrewRegistry().getKey(brew).toString());
JsonArray ingredients = new JsonArray();
for (Ingredient ingr : inputs) {
ingredients.add(ingr.toJson());
}
json.add("ingredients", ingredients);
}

@Override
public ResourceLocation getId() {
return id;
}

@Override
public RecipeSerializer<?> getType() {
return BotaniaRecipeTypes.BREW_SERIALIZER;
}

@Nullable
@Override
public JsonObject serializeAdvancement() {
return null;
}

@Nullable
@Override
public ResourceLocation getAdvancementId() {
return null;
}
}
}
133 changes: 24 additions & 109 deletions Xplat/src/main/java/vazkii/botania/data/recipes/ElvenTradeProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,21 @@
*/
package vazkii.botania.data.recipes;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Blocks;

import org.jetbrains.annotations.Nullable;

import vazkii.botania.common.block.BotaniaBlocks;
import vazkii.botania.common.crafting.BotaniaRecipeTypes;
import vazkii.botania.common.helper.ItemNBTHelper;
import vazkii.botania.common.crafting.ElvenTradeRecipe;
import vazkii.botania.common.crafting.LexiconElvenTradeRecipe;
import vazkii.botania.common.item.BotaniaItems;
import vazkii.botania.common.lib.BotaniaTags;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;

import static vazkii.botania.common.lib.ResourceLocationHelper.prefix;

public class ElvenTradeProvider extends BotaniaRecipeProvider {
Expand All @@ -41,54 +31,33 @@ public ElvenTradeProvider(PackOutput packOutput) {
}

@Override
public void buildRecipes(Consumer<net.minecraft.data.recipes.FinishedRecipe> consumer) {
consumer.accept(new FinishedElvenRecipe(id("dreamwood_log"), new ItemStack(BotaniaBlocks.dreamwoodLog), Ingredient.of(BotaniaBlocks.livingwoodLog)));
consumer.accept(new FinishedElvenRecipe(id("dreamwood"), new ItemStack(BotaniaBlocks.dreamwood), Ingredient.of(BotaniaBlocks.livingwood)));
public void buildRecipes(RecipeOutput consumer) {
consumer.accept(id("dreamwood_log"), new ElvenTradeRecipe(singleOutput(BotaniaBlocks.dreamwoodLog), Ingredient.of(BotaniaBlocks.livingwoodLog)), null);
consumer.accept(id("dreamwood"), new ElvenTradeRecipe(singleOutput(BotaniaBlocks.dreamwood), Ingredient.of(BotaniaBlocks.livingwood)), null);

Ingredient manaDiamond = Ingredient.of(BotaniaTags.Items.GEMS_MANA_DIAMOND);
Ingredient manaSteel = Ingredient.of(BotaniaTags.Items.INGOTS_MANASTEEL);
consumer.accept(new FinishedElvenRecipe(id("elementium"), new ItemStack(BotaniaItems.elementium), manaSteel, manaSteel));
consumer.accept(new FinishedElvenRecipe(id("elementium_block"), new ItemStack(BotaniaBlocks.elementiumBlock), Ingredient.of(BotaniaBlocks.manasteelBlock), Ingredient.of(BotaniaBlocks.manasteelBlock)));

consumer.accept(new FinishedElvenRecipe(id("pixie_dust"), new ItemStack(BotaniaItems.pixieDust), Ingredient.of(BotaniaItems.manaPearl)));
consumer.accept(new FinishedElvenRecipe(id("dragonstone"), new ItemStack(BotaniaItems.dragonstone), manaDiamond));
consumer.accept(new FinishedElvenRecipe(id("dragonstone_block"), new ItemStack(BotaniaBlocks.dragonstoneBlock), Ingredient.of(BotaniaBlocks.manaDiamondBlock)));

consumer.accept(new FinishedElvenRecipe(id("elf_quartz"), new ItemStack(BotaniaItems.elfQuartz), Ingredient.of(Items.QUARTZ)));
consumer.accept(new FinishedElvenRecipe(id("elf_glass"), new ItemStack(BotaniaBlocks.elfGlass), Ingredient.of(BotaniaBlocks.manaGlass)));
Ingredient manaSteelBlock = Ingredient.of(BotaniaBlocks.manasteelBlock);
consumer.accept(id("elementium"), new ElvenTradeRecipe(singleOutput(BotaniaItems.elementium), manaSteel, manaSteel), null);
consumer.accept(id("elementium_block"), new ElvenTradeRecipe(singleOutput(BotaniaBlocks.elementiumBlock), manaSteelBlock, manaSteelBlock), null);

consumer.accept(new FinishedElvenRecipe(id("iron_return"), new ItemStack(Items.IRON_INGOT), Ingredient.of(Items.IRON_INGOT)));
consumer.accept(new FinishedElvenRecipe(id("iron_block_return"), new ItemStack(Blocks.IRON_BLOCK), Ingredient.of(Blocks.IRON_BLOCK)));
consumer.accept(new FinishedElvenRecipe(id("ender_pearl_return"), new ItemStack(Items.ENDER_PEARL), Ingredient.of(Items.ENDER_PEARL)));
consumer.accept(new FinishedElvenRecipe(id("diamond_return"), new ItemStack(Items.DIAMOND), Ingredient.of(Items.DIAMOND)));
consumer.accept(new FinishedElvenRecipe(id("diamond_block_return"), new ItemStack(Blocks.DIAMOND_BLOCK), Ingredient.of(Blocks.DIAMOND_BLOCK)));
consumer.accept(id("pixie_dust"), new ElvenTradeRecipe(singleOutput(BotaniaItems.pixieDust), Ingredient.of(BotaniaItems.manaPearl)), null);
consumer.accept(id("dragonstone"), new ElvenTradeRecipe(singleOutput(BotaniaItems.dragonstone), Ingredient.of(BotaniaItems.manaDiamond)), null);
consumer.accept(id("dragonstone_block"), new ElvenTradeRecipe(singleOutput(BotaniaBlocks.dragonstoneBlock), Ingredient.of(BotaniaBlocks.manaDiamondBlock)), null);

consumer.accept(new FinishedRecipe() {
@Override
public void serializeRecipeData(JsonObject obj) {}
consumer.accept(id("elf_quartz"), new ElvenTradeRecipe(singleOutput(BotaniaItems.elfQuartz), Ingredient.of(Items.QUARTZ)), null);
consumer.accept(id("elf_glass"), new ElvenTradeRecipe(singleOutput(BotaniaBlocks.elfGlass), Ingredient.of(BotaniaBlocks.manaGlass)), null);

@Override
public ResourceLocation getId() {
return id("lexicon_elven");
}
consumer.accept(id("iron_return"), new ElvenTradeRecipe(singleOutput(Items.IRON_INGOT), Ingredient.of(Items.IRON_INGOT)), null);
consumer.accept(id("iron_block_return"), new ElvenTradeRecipe(singleOutput(Blocks.IRON_BLOCK), Ingredient.of(Blocks.IRON_BLOCK)), null);
consumer.accept(id("ender_pearl_return"), new ElvenTradeRecipe(singleOutput(Items.ENDER_PEARL), Ingredient.of(Items.ENDER_PEARL)), null);
consumer.accept(id("diamond_return"), new ElvenTradeRecipe(singleOutput(Items.DIAMOND), Ingredient.of(Items.DIAMOND)), null);
consumer.accept(id("diamond_block_return"), new ElvenTradeRecipe(singleOutput(Blocks.DIAMOND_BLOCK), Ingredient.of(Blocks.DIAMOND_BLOCK)), null);

@Override
public RecipeSerializer<?> getType() {
return BotaniaRecipeTypes.LEXICON_ELVEN_TRADE_SERIALIZER;
}

@Nullable
@Override
public JsonObject serializeAdvancement() {
return null;
}
consumer.accept(id("lexicon_elven"), new LexiconElvenTradeRecipe(), null);
}

@Nullable
@Override
public ResourceLocation getAdvancementId() {
return null;
}
});
private static ItemStack[] singleOutput(ItemLike output) {
return new ItemStack[] { new ItemStack(output) };
}

private static ResourceLocation id(String path) {
Expand All @@ -99,58 +68,4 @@ private static ResourceLocation id(String path) {
public String getName() {
return "Botania elven trade recipes";
}

protected static class FinishedElvenRecipe implements FinishedRecipe {
private final ResourceLocation id;
private final List<Ingredient> inputs;
private final List<ItemStack> outputs;

public FinishedElvenRecipe(ResourceLocation id, ItemStack output, Ingredient... inputs) {
this(id, Arrays.asList(inputs), Collections.singletonList(output));
}

protected FinishedElvenRecipe(ResourceLocation id, List<Ingredient> inputs, List<ItemStack> outputs) {
this.id = id;
this.inputs = inputs;
this.outputs = outputs;
}

@Override
public void serializeRecipeData(JsonObject json) {
JsonArray in = new JsonArray();
for (Ingredient ingr : inputs) {
in.add(ingr.toJson());
}

JsonArray out = new JsonArray();
for (ItemStack s : outputs) {
out.add(ItemNBTHelper.serializeStack(s));
}

json.add("ingredients", in);
json.add("output", out);
}

@Override
public ResourceLocation getId() {
return id;
}

@Override
public RecipeSerializer<?> getType() {
return BotaniaRecipeTypes.ELVEN_TRADE_SERIALIZER;
}

@Nullable
@Override
public JsonObject serializeAdvancement() {
return null;
}

@Nullable
@Override
public ResourceLocation getAdvancementId() {
return null;
}
}
}
Loading

0 comments on commit b6beb56

Please sign in to comment.