diff --git a/Common/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json b/Common/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json new file mode 100644 index 0000000000..fa866b683a --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json @@ -0,0 +1,9 @@ +{ + "values": [ + "hexcasting:amethyst_dust", + "minecraft:amethyst_shard", + "hexcasting:charged_amethyst", + "hexcasting:quenched_allay_shard", + "hexcasting:quenched_allay" + ] +} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java index 8230034ac1..db338e6ccb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java @@ -19,6 +19,7 @@ public static final class Items { public static final TagKey PHIAL_BASE = create("phial_base"); public static final TagKey GRANTS_ROOT_ADVANCEMENT = create("grants_root_advancement"); public static final TagKey SEAL_MATERIALS = create("seal_materials"); + public static final TagKey PHIAL_RAW_INGREDIENTS = create("phial_raw_ingredients"); public static final TagKey IMPETI = create("impeti"); public static final TagKey DIRECTRICES = create("directrices"); @@ -28,6 +29,7 @@ public static final class Items { public static final TagKey AMETHYST_BLOCKS = create("amethyst_blocks"); public static final TagKey QUENCHED_ALLAY_BLOCKS = create("quenched_allay_blocks"); + public static TagKey create(String name) { return create(modLoc(name)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java index 710c88f321..67aa2fc901 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.datagen.tag; import at.petrak.hexcasting.api.mod.HexTags; +import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.xplat.IXplatTags; import net.minecraft.core.HolderLookup; @@ -46,6 +47,11 @@ protected void addTags(HolderLookup.Provider provider) { add(tag(HexTags.Items.SEAL_MATERIALS), Items.HONEYCOMB); + add(tag(HexTags.Items.PHIAL_RAW_INGREDIENTS), + HexItems.AMETHYST_DUST.get(), Items.AMETHYST_SHARD, + HexItems.CHARGED_AMETHYST.get(), HexItems.QUENCHED_SHARD.get(), + HexBlocks.QUENCHED_ALLAY.get().asItem()); + this.copy(HexTags.Blocks.EDIFIED_LOGS, HexTags.Items.EDIFIED_LOGS); this.copy(HexTags.Blocks.EDIFIED_PLANKS, HexTags.Items.EDIFIED_PLANKS); this.copy(HexTags.Blocks.IMPETI, HexTags.Items.IMPETI); diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/utils/PhialRecipeStackBuilder.java b/Common/src/main/java/at/petrak/hexcasting/interop/utils/PhialRecipeStackBuilder.java index ffa8502bf1..d9d3e66002 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/utils/PhialRecipeStackBuilder.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/utils/PhialRecipeStackBuilder.java @@ -2,63 +2,62 @@ import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.api.mod.HexConfig; +import at.petrak.hexcasting.api.mod.HexTags; +import at.petrak.hexcasting.api.utils.MediaHelper; import at.petrak.hexcasting.common.items.magic.ItemMediaBattery; import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; import com.google.common.collect.Lists; import com.mojang.datafixers.util.Pair; +import java.util.Optional; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import java.util.List; +import net.minecraft.world.level.ItemLike; public class PhialRecipeStackBuilder { - private static ItemStack makeBattery(long unit, int size) { - return ItemMediaBattery.withMedia(new ItemStack(HexItems.BATTERY.get()), unit * size, unit * size); + private static ItemStack makeBattery(long media) { + return ItemMediaBattery.withMedia(new ItemStack(HexItems.BATTERY.get()), media, media); } - public static Pair, List> createStacks() { - List inputItems = Lists.newArrayList(); - List outputItems = Lists.newArrayList(); + private static final List FALLBACK_BATTERY_LIST = List.of( + HexItems.AMETHYST_DUST.get(), + Items.AMETHYST_SHARD, + HexItems.CHARGED_AMETHYST.get(), + HexItems.QUENCHED_SHARD.get(), + HexBlocks.QUENCHED_ALLAY.get().asItem() + ); - long dust = HexConfig.common().dustMediaAmount(); - long shard = HexConfig.common().shardMediaAmount(); - long charged = HexConfig.common().chargedCrystalMediaAmount(); - long quenchedShard = MediaConstants.QUENCHED_SHARD_UNIT; - long quenchedBlock = MediaConstants.QUENCHED_BLOCK_UNIT; + private static void addPhialRecipe(Item of, int count, List from, List to) { + ItemStack stack = new ItemStack(of, count); + long resultMedia = MediaHelper.extractMedia(stack, -1L, true, true); + from.add(stack); + to.add(makeBattery(resultMedia)); + } - if (dust > 0) { - inputItems.add(new ItemStack(HexItems.AMETHYST_DUST.get(), 1)); - outputItems.add(makeBattery(dust, 1)); - inputItems.add(new ItemStack(HexItems.AMETHYST_DUST.get(), 64)); - outputItems.add(makeBattery(dust, 64)); - } + public static Pair, List> createStacks() { + List inputItems = Lists.newArrayList(); + List outputItems = Lists.newArrayList(); - if (shard > 0) { - inputItems.add(new ItemStack(Items.AMETHYST_SHARD, 1)); - outputItems.add(makeBattery(shard, 1)); - inputItems.add(new ItemStack(Items.AMETHYST_SHARD, 64)); - outputItems.add(makeBattery(shard, 64)); - } + List toUse = BuiltInRegistries.ITEM.getTag(HexTags.Items.PHIAL_RAW_INGREDIENTS) + .map(h -> h.stream().map(Holder::value).toList()) + .orElse(FALLBACK_BATTERY_LIST); - if (charged > 0) { - inputItems.add(new ItemStack(HexItems.CHARGED_AMETHYST.get(), 1)); - outputItems.add(makeBattery(charged, 1)); - inputItems.add(new ItemStack(HexItems.CHARGED_AMETHYST.get(), 64)); - outputItems.add(makeBattery(charged, 64)); + for(Item i : toUse) { + addPhialRecipe(i, 1, inputItems, outputItems); + if(i.getDefaultMaxStackSize() > 1) { + addPhialRecipe(i, i.getDefaultMaxStackSize(), inputItems, outputItems); + } } - inputItems.add(new ItemStack(HexItems.QUENCHED_SHARD.get(), 1)); - outputItems.add(makeBattery(quenchedShard, 1)); - inputItems.add(new ItemStack(HexItems.QUENCHED_SHARD.get(), 64)); - outputItems.add(makeBattery(quenchedShard, 64)); - - inputItems.add(new ItemStack(HexBlocks.QUENCHED_ALLAY.get(), 1)); - outputItems.add(makeBattery(quenchedBlock, 1)); - inputItems.add(new ItemStack(HexBlocks.QUENCHED_ALLAY.get(), 64)); - outputItems.add(makeBattery(quenchedBlock, 64)); - return new Pair<>(inputItems, outputItems); } diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json new file mode 100644 index 0000000000..fa866b683a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json @@ -0,0 +1,9 @@ +{ + "values": [ + "hexcasting:amethyst_dust", + "minecraft:amethyst_shard", + "hexcasting:charged_amethyst", + "hexcasting:quenched_allay_shard", + "hexcasting:quenched_allay" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json new file mode 100644 index 0000000000..fa866b683a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_raw_ingredients.json @@ -0,0 +1,9 @@ +{ + "values": [ + "hexcasting:amethyst_dust", + "minecraft:amethyst_shard", + "hexcasting:charged_amethyst", + "hexcasting:quenched_allay_shard", + "hexcasting:quenched_allay" + ] +} \ No newline at end of file