From 7cd69170a53ef33aaeb3f68bad200ba5038dc93a Mon Sep 17 00:00:00 2001 From: Darshan Phaldesai Date: Sun, 15 Dec 2024 01:00:30 -0700 Subject: [PATCH] rework reagent data generation --- .../enderio/data_maps/item/vat_reagent.json | 3 - .../data/enderio/tags/item/explosives.json | 5 +- .../enderio/tags/item/natural_lights.json | 4 +- .../data/enderio/tags/item/sunflower.json | 4 +- .../com/enderio/machines/EnderIOMachines.java | 4 +- .../data/reagentdata/ReagentDataProvider.java | 112 ------------------ .../data/reagentdata/ReagentProvider.java | 62 ++++++++++ .../data/tag/MachineItemTagsProvider.java | 37 +++++- 8 files changed, 105 insertions(+), 126 deletions(-) delete mode 100644 enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentDataProvider.java create mode 100644 enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentProvider.java diff --git a/enderio-machines/src/generated/resources/data/enderio/data_maps/item/vat_reagent.json b/enderio-machines/src/generated/resources/data/enderio/data_maps/item/vat_reagent.json index 6150ec4572..53275ba343 100644 --- a/enderio-machines/src/generated/resources/data/enderio/data_maps/item/vat_reagent.json +++ b/enderio-machines/src/generated/resources/data/enderio/data_maps/item/vat_reagent.json @@ -30,9 +30,6 @@ "minecraft:sugar_cane": { "#c:crops": 0.5 }, - "minecraft:sunflower": { - "#enderio:sunflower": 1.0 - }, "minecraft:torchflower": { "#enderio:sunflower": 1.2 } diff --git a/enderio-machines/src/generated/resources/data/enderio/tags/item/explosives.json b/enderio-machines/src/generated/resources/data/enderio/tags/item/explosives.json index 3ffc9abec9..2cb453b06e 100644 --- a/enderio-machines/src/generated/resources/data/enderio/tags/item/explosives.json +++ b/enderio-machines/src/generated/resources/data/enderio/tags/item/explosives.json @@ -1,8 +1,9 @@ { "values": [ - "minecraft:tnt", + "minecraft:fire_charge", "minecraft:firework_star", "minecraft:firework_rocket", - "minecraft:fire_charge" + "minecraft:gunpowder", + "minecraft:tnt" ] } \ No newline at end of file diff --git a/enderio-machines/src/generated/resources/data/enderio/tags/item/natural_lights.json b/enderio-machines/src/generated/resources/data/enderio/tags/item/natural_lights.json index dedbd3c838..4af1fd50b3 100644 --- a/enderio-machines/src/generated/resources/data/enderio/tags/item/natural_lights.json +++ b/enderio-machines/src/generated/resources/data/enderio/tags/item/natural_lights.json @@ -4,6 +4,8 @@ "minecraft:sea_pickle", "minecraft:glow_ink_sac", "minecraft:glow_lichen", - "minecraft:glow_berries" + "minecraft:glow_berries", + "minecraft:glowstone", + "minecraft:sea_lantern" ] } \ No newline at end of file diff --git a/enderio-machines/src/generated/resources/data/enderio/tags/item/sunflower.json b/enderio-machines/src/generated/resources/data/enderio/tags/item/sunflower.json index 4adf420f9b..4d693d8d67 100644 --- a/enderio-machines/src/generated/resources/data/enderio/tags/item/sunflower.json +++ b/enderio-machines/src/generated/resources/data/enderio/tags/item/sunflower.json @@ -1,6 +1,6 @@ { "values": [ - "minecraft:sunflower", - "minecraft:torchflower" + "minecraft:torchflower", + "minecraft:sunflower" ] } \ No newline at end of file diff --git a/enderio-machines/src/main/java/com/enderio/machines/EnderIOMachines.java b/enderio-machines/src/main/java/com/enderio/machines/EnderIOMachines.java index 0537c60b57..b82ab52eb9 100644 --- a/enderio-machines/src/main/java/com/enderio/machines/EnderIOMachines.java +++ b/enderio-machines/src/main/java/com/enderio/machines/EnderIOMachines.java @@ -21,7 +21,7 @@ import com.enderio.machines.common.menu.PreviewMachineSlot; import com.enderio.machines.common.tag.MachineTags; import com.enderio.machines.data.advancements.MachinesAdvancementGenerator; -import com.enderio.machines.data.reagentdata.ReagentDataProvider; +import com.enderio.machines.data.reagentdata.ReagentProvider; import com.enderio.machines.data.recipes.AlloyRecipeProvider; import com.enderio.machines.data.recipes.EnchanterRecipeProvider; import com.enderio.machines.data.recipes.FermentingRecipeProvider; @@ -115,8 +115,8 @@ public static void gatherData(GatherDataEvent event) { provider.addSubProvider(event.includeServer(), new MachineEntityTypeTagsProvider(packOutput, lookupProvider, event.getExistingFileHelper())); var b = new MachineBlockTagsProvider(packOutput, lookupProvider, event.getExistingFileHelper()); provider.addSubProvider(event.includeServer(), b); + provider.addSubProvider(event.includeServer(), new ReagentProvider(packOutput, lookupProvider)); // Reagent Data needs to be before ItemTags provider.addSubProvider(event.includeServer(), new MachineItemTagsProvider(packOutput, lookupProvider, b.contentsGetter(), event.getExistingFileHelper())); - provider.addSubProvider(event.includeServer(), new ReagentDataProvider(packOutput, lookupProvider, event.getExistingFileHelper())); generator.addProvider(true, provider); provider.addSubProvider(event.includeServer(), new AdvancementProvider(packOutput, event.getLookupProvider(), event.getExistingFileHelper(), diff --git a/enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentDataProvider.java b/enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentDataProvider.java deleted file mode 100644 index 893aa40c94..0000000000 --- a/enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentDataProvider.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.enderio.machines.data.reagentdata; - -import com.enderio.EnderIOBase; -import com.enderio.machines.common.datamap.VatReagent; -import com.enderio.machines.common.tag.MachineTags; -import net.minecraft.core.HolderLookup; -import net.minecraft.core.registries.Registries; -import net.minecraft.data.CachedOutput; -import net.minecraft.data.DataProvider; -import net.minecraft.data.PackOutput; -import net.minecraft.data.tags.IntrinsicHolderTagsProvider; -import net.minecraft.tags.TagKey; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; -import net.neoforged.neoforge.common.Tags; -import net.neoforged.neoforge.common.data.DataMapProvider; -import net.neoforged.neoforge.common.data.ExistingFileHelper; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; - -public class ReagentDataProvider implements DataProvider { - - private final TagsProvider tagsProvider; - private final DataProvider dataProvider; - - public ReagentDataProvider(PackOutput packOutput, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) { - tagsProvider = new TagsProvider(packOutput, lookupProvider, existingFileHelper); - dataProvider = new DataProvider(packOutput, lookupProvider); - } - - protected void gather() { - addReagent(Items.SUGAR_CANE, Tags.Items.CROPS, 0.5D); - - addReagent(Items.GLOWSTONE_DUST, MachineTags.ItemTags.NATURAL_LIGHTS, 0.25D); - addReagent(Items.SEA_PICKLE, MachineTags.ItemTags.NATURAL_LIGHTS, 0.25D); - addReagent(Items.GLOW_INK_SAC, MachineTags.ItemTags.NATURAL_LIGHTS, 0.5D); - addReagent(Items.GLOW_LICHEN, MachineTags.ItemTags.NATURAL_LIGHTS, 0.20D); - addReagent(Items.GLOW_BERRIES, MachineTags.ItemTags.NATURAL_LIGHTS, 0.15D); - - addReagent(Items.FIRE_CHARGE, MachineTags.ItemTags.EXPLOSIVES, 0.5D); - addReagent(Items.FIREWORK_STAR, MachineTags.ItemTags.EXPLOSIVES, 0.4D); - addReagent(Items.FIREWORK_ROCKET, MachineTags.ItemTags.EXPLOSIVES, 0.4D); - addReagent(Items.GUNPOWDER, MachineTags.ItemTags.EXPLOSIVES, 0.25D); - - addReagent(Items.SUNFLOWER, MachineTags.ItemTags.SUNFLOWER, 1D); - addReagent(Items.TORCHFLOWER, MachineTags.ItemTags.SUNFLOWER, 1.2D); - } - - @Override - public CompletableFuture run(CachedOutput pOutput) { - gather(); - List> list = new ArrayList<>(); - list.add(tagsProvider.run(pOutput)); - list.add(dataProvider.run(pOutput)); - return CompletableFuture.allOf(list.toArray(CompletableFuture[]::new)); - } - - public void addReagent(Item item, TagKey tag, double value) { - tagsProvider.addItemTag(tag, item); - dataProvider.addData(tag, item, value); - } - - @Override - public String getName() { - return "Fermenting Reagent Datamaps"; - } - - private static class TagsProvider extends IntrinsicHolderTagsProvider { - private final Map, List> tagsMap = new HashMap<>(); - - protected TagsProvider(PackOutput packOutput, CompletableFuture provider, @Nullable ExistingFileHelper existingFileHelper) { - super(packOutput, Registries.ITEM, provider, item -> item.builtInRegistryHolder().key(), EnderIOBase.REGISTRY_NAMESPACE, existingFileHelper); - } - - public void addItemTag(TagKey tag, Item item) { - tagsMap.computeIfAbsent(tag, it -> new ArrayList<>()).add(item); - } - - @Override - protected void addTags(HolderLookup.Provider pProvider) { - tagsMap.forEach((key, value) -> { - var tag = this.tag(key); - value.forEach(tag::add); - }); - } - } - - private static class DataProvider extends DataMapProvider { - private final Map, Double>> data = new HashMap<>(); - - protected DataProvider(PackOutput packOutput, CompletableFuture lookupProvider) { - super(packOutput, lookupProvider); - } - - public void addData(TagKey tag, Item item, double value) { - data.computeIfAbsent(item, it -> new HashMap<>()).put(tag, value); - } - - @Override - protected void gather() { - var builder = builder(VatReagent.DATA_MAP); - data.forEach((item, map) -> { - builder.add(item.builtInRegistryHolder(), map, false); - }); - } - } -} diff --git a/enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentProvider.java b/enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentProvider.java new file mode 100644 index 0000000000..ca476aa975 --- /dev/null +++ b/enderio-machines/src/main/java/com/enderio/machines/data/reagentdata/ReagentProvider.java @@ -0,0 +1,62 @@ +package com.enderio.machines.data.reagentdata; + +import com.enderio.machines.common.datamap.VatReagent; +import com.enderio.machines.common.tag.MachineTags; +import com.enderio.machines.data.tag.MachineItemTagsProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.data.DataMapProvider; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +public class ReagentProvider extends DataMapProvider { + + private final Map, Double>> dataMap = new HashMap<>(); + + public ReagentProvider(PackOutput packOutput, CompletableFuture lookupProvider) { + super(packOutput, lookupProvider); + } + + protected void gather() { + reagent(Items.SUGAR_CANE, Tags.Items.CROPS, 0.5D); + + reagent(Items.GLOWSTONE_DUST, MachineTags.ItemTags.NATURAL_LIGHTS, 0.25D); + reagent(Items.SEA_PICKLE, MachineTags.ItemTags.NATURAL_LIGHTS, 0.25D); + reagent(Items.GLOW_INK_SAC, MachineTags.ItemTags.NATURAL_LIGHTS, 0.5D); + reagent(Items.GLOW_LICHEN, MachineTags.ItemTags.NATURAL_LIGHTS, 0.20D); + reagent(Items.GLOW_BERRIES, MachineTags.ItemTags.NATURAL_LIGHTS, 0.15D); + + reagent(Items.FIRE_CHARGE, MachineTags.ItemTags.EXPLOSIVES, 0.5D); + reagent(Items.FIREWORK_STAR, MachineTags.ItemTags.EXPLOSIVES, 0.4D); + reagent(Items.FIREWORK_ROCKET, MachineTags.ItemTags.EXPLOSIVES, 0.4D); + reagent(Items.GUNPOWDER, MachineTags.ItemTags.EXPLOSIVES, 0.25D); + + reagent(Items.TORCHFLOWER, MachineTags.ItemTags.SUNFLOWER, 1.2D); + + var builder = builder(VatReagent.DATA_MAP); + dataMap.forEach((item, map) -> { + builder.add(item.builtInRegistryHolder(), map, false); + }); + } + + public void reagent(Item item, TagKey tag, double value) { + MachineItemTagsProvider.tag(tag, item); + reagentValue(tag, item, value); + } + + public void reagentValue(TagKey tag, Item item, double value) { + dataMap.computeIfAbsent(item, it -> new HashMap<>()).put(tag, value); + } + + @Override + public String getName() { + return "Fermenting Reagent Datamaps"; + } + +} diff --git a/enderio-machines/src/main/java/com/enderio/machines/data/tag/MachineItemTagsProvider.java b/enderio-machines/src/main/java/com/enderio/machines/data/tag/MachineItemTagsProvider.java index c02ef6eb06..6a5c6fc9a9 100644 --- a/enderio-machines/src/main/java/com/enderio/machines/data/tag/MachineItemTagsProvider.java +++ b/enderio-machines/src/main/java/com/enderio/machines/data/tag/MachineItemTagsProvider.java @@ -5,23 +5,52 @@ import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.neoforged.neoforge.common.data.ExistingFileHelper; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; public class MachineItemTagsProvider extends ItemTagsProvider { + private static final Map, List> tags = new HashMap<>(); + public MachineItemTagsProvider(PackOutput output, CompletableFuture lookupProvider, CompletableFuture> blockTags, ExistingFileHelper existingFileHelper) { super(output, lookupProvider, blockTags, EnderIOBase.REGISTRY_NAMESPACE, existingFileHelper); } @Override protected void addTags(HolderLookup.Provider provider) { - tag(MachineTags.ItemTags.EXPLOSIVES).add(Items.TNT, Items.FIREWORK_STAR, Items.FIREWORK_ROCKET, Items.FIRE_CHARGE); - tag(MachineTags.ItemTags.NATURAL_LIGHTS).add(Items.GLOWSTONE_DUST, Items.GLOWSTONE, Items.SEA_LANTERN, Items.SEA_PICKLE, Items.GLOW_LICHEN, Items.GLOW_BERRIES, Items.GLOW_INK_SAC); - tag(MachineTags.ItemTags.SUNFLOWER).add(Items.SUNFLOWER); - tag(MachineTags.ItemTags.BLAZE_POWDER).add(Items.BLAZE_POWDER); + tag(MachineTags.ItemTags.EXPLOSIVES, Items.TNT, Items.FIREWORK_STAR, Items.FIREWORK_ROCKET, Items.FIRE_CHARGE); + tag(MachineTags.ItemTags.NATURAL_LIGHTS, Items.GLOWSTONE_DUST, Items.GLOWSTONE, Items.SEA_LANTERN, Items.SEA_PICKLE, Items.GLOW_LICHEN, Items.GLOW_BERRIES, Items.GLOW_INK_SAC); + tag(MachineTags.ItemTags.SUNFLOWER, Items.SUNFLOWER); + tag(MachineTags.ItemTags.BLAZE_POWDER, Items.BLAZE_POWDER); + + tags.forEach((key, list) -> { + var holder = tag(key); + list.forEach(holder::add); + } + ); + } + + // helpers for tags. since tags can be added by external files, this prevents duplicates. + public static void tag(TagKey tag, Item item) { + var items = tags.computeIfAbsent(tag, t -> new ArrayList<>()); + if(!items.contains(item)) + items.add(item); + } + + public static void tag(TagKey tag, Item ... itemList) { + var items = tags.computeIfAbsent(tag, t -> new ArrayList<>()); + for (Item item: itemList) { + if(!items.contains(item)) + items.add(item); + } } }