frakier Posted August 3, 2020 Share Posted August 3, 2020 (edited) trying to use a config file to load a list of item:ids from a config file defined using defineList. ["minecraft:apple", "minecraft:dried_kelp", "minecraft:melon_slice",[minecraft.apple] to be used by TemptGoal as one example. this.goalSelector.addGoal(4, new TemptGoal(this, 1.2D, false, TEMPTATION_ITEMS)); TempGoal uses (Ingredient temptItemsIn). Since Ingredient does not have a ".add" how do I turn the array, a array, well any array into something I can pull from a config and into a Ingredient. Hard coded would look something like this... Ingredient TEMPTATION_ITEMS = Ingredient.fromItems(Items.CARROT, Items.POTATO, Items.BEETROOT); Anyone got any ideas or can point me in the right direction and I hop this makes sense. I saw the fromStream but it goes over my head and I have yet to find a good example of the streams being used. Thanks. Edited August 13, 2020 by frakier SOLVED Quote Link to comment Share on other sites More sharing options...
frakier Posted August 4, 2020 Author Share Posted August 4, 2020 (edited) I considered that, I know I can add a tags to a existing item, I've done that before. but say I create a tag //herbivore { "replace": false, "values": [ "minecraft:apple", "minecraft:dried_kelp", "minecraft:melon_slice", "minecraft:golden_apple", "minecraft:enchanted_golden_apple", "minecraft:carrot", "minecraft:beetroot", "minecraft:sweet_berries" ] } Then any mod that shows tags would show them and I have noticed that in those cases the list of "tags" is getting huge [was playing a modpack the tag list just kept going], should I be adding another on the pile? Figured a config file gave access to change the list but did not add to the overhead, but if you think that is the route to go I'll give it a try. Edited August 4, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 4, 2020 Share Posted August 4, 2020 This is what tags are for. Mods that make tags visible have the onus on them to not make it overwhelming. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 9, 2020 Author Share Posted August 9, 2020 On 8/3/2020 at 11:34 PM, Draco18s said: This is what tags are for. Mods that make tags visible have the onus on them to not make it overwhelming. My Internet has been more out than on for the past two weeks makes researching a pain. Anyway thinking this through, tell me if I'm wrong. Where a config could have items from any mod, probably a test for use or mod existing before use would be needed. ... With tags I can add items from minecraft or my current mod to say a carnivore tag. Then each other of my mods can do the same. That takes care of my mods interacting. For any third party mods they would have to implement the tag or.. 1. I would need to make a compat mod that uses tags to add to the carnivore tag or course it would fail on the first item not loaded so it would require a compat mod for each mod. 2. I would need to make a compat mod that tests for the existence of the mod I with to tag items in and add those dynamically [think that is a possibility i would need to research]? 3. Make resource pack that includes entries for each mod with a carnivore for each implement the tag. Did I miss anything and which would seem the most efficient and easy for the end user to simply add to a list. If #3 work the way I think [i need to research] it would work. Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 9, 2020 Share Posted August 9, 2020 There's a way to check on the Java side if a tag exists. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 9, 2020 Author Share Posted August 9, 2020 (edited) 2 hours ago, Draco18s said: There's a way to check on the Java side if a tag exists. yeah I do that already when checking to see if the user is wearing a specific collection of a suit of armor. the problem I'm pondering on now is one bad tag and the whole JSON file fails. So if the mod that is the target of a item in the json tag does not exist the whole tag fails to work. Think I'm going to experiment with the 3rd option, one resource pack that has the tags for ever potential item in desired mods. Then all someone has to do to add more to the tag is create the structure for the desired mod in the resource pack and add the carnivore.json with the items they want tagged for the mod. Going to go experiment soon, was hoping to get some pros and cons on the ideas though. Edited August 9, 2020 by frakier more info Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 9, 2020 Share Posted August 9, 2020 You could include a JSON tag file with no items in it. The whole point is that "an empty list" is still a valid list. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 9, 2020 Author Share Posted August 9, 2020 50 minutes ago, Draco18s said: You could include a JSON tag file with no items in it. The whole point is that "an empty list" is still a valid list. Just trying to figure out the best way to add to the carnivore tag and still allow for the end user to add more if they wish in the easiest manner. Not sure about the empty list. Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 10, 2020 Share Posted August 10, 2020 A tag with nothing in it generates an empty list. An empty list is special in that it contains zero items and is not null. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 10, 2020 Author Share Posted August 10, 2020 (edited) 1 hour ago, Draco18s said: A tag with nothing in it generates an empty list. An empty list is special in that it contains zero items and is not null. Oh I get what you are saying I did that with insectivore. Don't really have anything for insectivore in mind yet but know there will be eventually. Edited August 10, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
frakier Posted August 11, 2020 Author Share Posted August 11, 2020 (edited) I have a "resources\data\minecraft\tags\items\carnivore.json" { "replace": false, "values": [ "minecraft:porkchop", "minecraft:chicken", "minecraft:mutton", "minecraft:rabbit", "minecraft:beef", "minecraft:egg", "minecraft:cod", "minecraft:salmon", "minecraft:tropical_fish" ] } and I have "resources\data\mymod\tags\items\carnivore.json" { "replace": false, "values": [ "minecraft:porkchop" ] } note: yes this should be a raw meat item from my own mod in this tag group but for the particular mod I am working with there is not one, actually probably going to add one just to satisfy my own ODC but have not got around to it so porkchop it is. I can get the ingredients [don't get too hung up on code examples I'm cobbling them together to present the general ides without all the variables] that would make it harder to read without posting everything, which I can't post everything because it is someone elses mod that I am working on to send them as a quarantine gift [had a lot of time on my hands recently]. Ingredient CARNIVORE_TAGED_ITEMS = Ingredient.fromTag(ItemTags.getCollection().getOrCreate(new ResourceLocation(MyMOD.MODID, "carnivore")))); goalSelector.addGoal(4, new TemptGoal(this, 1.2D, false, CARNIVORE_TAGED_ITEMS)); When I test all that is returned is what is in my group tag reference [the lone porkchop] so that does not help much. Too much trouble to get a list of every tag group that could possibly be added and try to cobble them all together into one list. So trying another way.. I have a init called from the mainmod commonSetup where I collect the list of items like so using ForgeRegistries.ITEMS and I have a resource reload listener that will call the same init if the resources are reloaded. So quick and dirty i get a list of items.... IForgeRegistry<Item> test = ForgeRegistries.ITEMS; List<Item> temp = Lists.newArrayList();; for(Item i: test) { if(i.getTags().toString().contains("carnivore")) { //not the smoothest way but got to get it working to reine temp.add(i.asItem().getItem()); } } Now how to get those items in temp into Ingredient CARNIVORE_TAGED_ITEMS so i can use them in the goals. Or better yet get the items from ForgeRegistries.ITEMS using the the carnivore item group more directly bu that does not seem to be an option. Edited August 11, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 11, 2020 Share Posted August 11, 2020 1 hour ago, frakier said: "resources\data\minecraft\tags\items\carnivore.json" Don't put your mod's tags in the Minecraft domain, put them in yours. Its your mod's tag it belongs with YOUR mod, doesn't matter that they're vanilla items. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
Alpvax Posted August 11, 2020 Share Posted August 11, 2020 (edited) 6 hours ago, frakier said: "resources\data\minecraft\tags\items\carnivore.json" 6 hours ago, frakier said: "resources\data\mymod\tags\items\carnivore.json" These are 2 different tags ("minecraft:carnivore" and "mymod:carnivore" respectively). You should make 1 tag "mymod:carnivore" and add all the defaults to it (as in all the vanilla items, and your custom items if applicable), then if you want to add items in another mod, you also define the "mymod:carnivore" tag (not the "mysecondmod:carnivore", again that would be a different tag). As an extension on what draco said, the only time you should put tags in the minecraft domain is if you are overriding/adding to an existing vanilla tag. Edited August 11, 2020 by Alpvax Quote Link to comment Share on other sites More sharing options...
frakier Posted August 11, 2020 Author Share Posted August 11, 2020 (edited) OK so then what happens when another mod wants to add the carnivore tag to their own mod my mod will never see them because... Ingredient CARNIVORE_TAGED_ITEMS = Ingredient.fromTag(ItemTags.getCollection().getOrCreate(new ResourceLocation(MyMOD.MODID, "carnivore")))); goalSelector.addGoal(4, new TemptGoal(this, 1.2D, false, CARNIVORE_TAGED_ITEMS)); is only reading the internal omnivore tag, it does not even see the tag addition in the data pack while ForgeRegistries.ITEMS does see the addition from the datapack. All this code does is read the carnivore tag in the mod itself at the specified location. Now lets say i have four distinct mods, because not everyone wants the stoats mod, they can pick and choose, other mods have used this strategy rather than creating one huge monolithic mod [a strategy I like]. The monolithic mod would require a custom carnivore tag for the modpack it will run in [not that the above code would see it at all either].... goats, boars, stoats, snakes [whatever mods].. they are all individual lightweight mods with their own raw meat additions to the carnivore group. Then a few other people add the carnivore tag as well to their mods. The only way to get a complete list would be to look at the ForgeRegistries.ITEMS and get all the items that are associated with the carnivore tag otherwise you are only working with a local list, which will fail if even one item exists in the carnivore list without the associated mod loaded and as said with the above code it would all have to be in the mod file structure itself because the datapack is not seen by that code. There really should be something like.... Ingredient CARNIVORE_TAGED_ITEMS = ForgeRegistries.ITEMS.withTag("carnivore"); to work with. Going to look and see what the newest recommended 1.14.4 forge is to see if i am dealing with some problem. Going to take it up to 1.15 eventually but not yet. [nope 28.2.0 is recommended and that is what I have] Edited August 11, 2020 by frakier more readable Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 11, 2020 Share Posted August 11, 2020 2 hours ago, frakier said: ForgeRegistries.ITEMS.withTag("carnivore"); That's basically what Ingredient.fromTag is. It doesn't make sense to query the item registry, the item registry doesn't know or care about tags. Try also: new ItemTags.Wrapper(new ResourceLocation(...)); 1 Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 12, 2020 Author Share Posted August 12, 2020 (edited) On 8/11/2020 at 1:52 PM, Draco18s said: That's basically what Ingredient.fromTag is. It doesn't make sense to query the item registry, the item registry doesn't know or care about tags. Try also: new ItemTags.Wrapper(new ResourceLocation(...)); Worked that was what I needed.... added to MyModTags class where I handle all my tag group stuff [yeah, stuff, I could not think of a better word]. public static Tag<Item> makeWrapperTag(String p_199901_0_) { return new ItemTags.Wrapper(new ResourceLocation(p_199901_0_)); } then where I needed to use the tagged items i did something like this.... Ingredient CARNIVORE_TAGED_ITEMS = Ingredient.fromTag(makeWrapperTag("carnivore")); goalSelector.addGoal(4, new TemptGoal(this, 1.2D, false, CARNIVORE_TAGED_ITEMS)); Well I went around the world to get here, thanks again Draco18s and thanks Alpvax. [EDIT:] SORRY I WAS WRONG... only getting the minecraft tags this using carnivore this way. Doing this all the tagged items were found from inside the mod and from the datapack. Both those I put under minecraft and under my mod [see earlier comments above] I should probably change the title of this post to something like "Ingredient from Tags for goalSelector use. Edited August 12, 2020 by frakier thanks and wrapping up Quote Link to comment Share on other sites More sharing options...
frakier Posted August 12, 2020 Author Share Posted August 12, 2020 (edited) I may have spoke too soon. --Using wrapper code I talked about in the previous post only gets tagged items from minecraft "resources\data\minecraft\tags\items\carnivore.json" tagged items from inside the mod or from datapacks, totally ignores items tagged under "resources\data\mymod\tags\items\carnivore.json". So I put my debugging code back in and looped over ForgeRegistries.ITEMS to see if my items were there, they were and they were appropriately tagged. -using the code "Ingredient.fromTag(ItemTags.getCollection().getOrCreate(new ResourceLocation(MyMOD.MODID, "carnivore"))));" sees only mymods tagged items and ignores the items tagged in minecraft . So I am back to the same place I started, should not be this big a pain in the rear to collect up all items with a given tag regardless of mod that adds them when the items are tagged correctly in ForgeRegistries.ITEMS . Edited August 12, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
Alpvax Posted August 13, 2020 Share Posted August 13, 2020 You haven't understood what Draco and I told you. minecraft:carnivores is a completely unrelated tag to mymod:carnivores. There is no link between them AT ALL. You need to make a single tag (maybe myanimalmodid:carnivores), then for each of your expansion mods, you add to THAT tag. Not to a different tag for each mod. 1 Quote Link to comment Share on other sites More sharing options...
frakier Posted August 13, 2020 Author Share Posted August 13, 2020 (edited) 1 hour ago, Alpvax said: You haven't understood what Draco and I told you. minecraft:carnivores is a completely unrelated tag to mymod:carnivores. There is no link between them AT ALL. You need to make a single tag (maybe myanimalmodid:carnivores), then for each of your expansion mods, you add to THAT tag. Not to a different tag for each mod. So I have four mods and regardless of the modid I create a namespace/path [somecommonnamespace:carnivores] in tags for each mod then use the same namespace/path in every mod with the items from that mod I want included listed in it? I hope I understand that right... I'll give that a try because even though I have four mods I have branded them with a common name encompassing the four mods. Edited August 13, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 13, 2020 Share Posted August 13, 2020 Yes. That's how tags work. They are tied to a resource location. Just as minecraft:stone and somemode:stone are different, so too is minecraft:carnivore and mymod:carnivore. 1 Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 13, 2020 Author Share Posted August 13, 2020 (edited) 3 hours ago, Alpvax said: You haven't understood what Draco and I told you. minecraft:carnivores is a completely unrelated tag to mymod:carnivores. There is no link between them AT ALL. You need to make a single tag (maybe myanimalmodid:carnivores), then for each of your expansion mods, you add to THAT tag. Not to a different tag for each mod. Yeah that part went over my head because I let the four mods thing get in my head I was still trying to use the modid from each mod. 1 hour ago, Draco18s said: Yes. That's how tags work. They are tied to a resource location. Just as minecraft:stone and somemode:stone are different, so too is minecraft:carnivore and mymod:carnivore. Got it working now, just need to test more. Thanks again I knew it was in the ballpark but just could not see the resolution. all the mod tag groups are now under "resources\data\commonnamespace\tags\items\carnivore.json" in all four mods [and any other third party mods as well as datapacks] and then I do something like loc = new ResourceLocation("commonnamespace", "carnivore"); tagwrapper = new ItemTags.Wrapper(loc); ingredientlist = Ingredient.fromTag(tagwrapper); goalSelector.addGoal(4, new TemptGoal(this, 1.2D, false, ingredientlist)); Edited August 13, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
Draco18s Posted August 13, 2020 Share Posted August 13, 2020 (And I assume that "commonnamespace" is not literally "commonnamespace" but something identifiable to your mod.) 1 1 Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
frakier Posted August 14, 2020 Author Share Posted August 14, 2020 (edited) 23 hours ago, Draco18s said: (And I assume that "commonnamespace" is not literally "commonnamespace" but something identifiable to your mod.) Oh yeah the mod has a longer name where part of the longer name is common. Just used the part common to all the mods. Like MyModSameNameDogs MyModSameNameCats MyModSameNameBirds so using MyModSameName as the common element. Edited August 14, 2020 by frakier Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.