# TagEventJS This event is fired when a tag collection is loaded, to modify it with script. You can add and remove tags for items, blocks, fluids and entity types. This goes into server scripts.

Tags are per item/block/fluid/entity type and as such cannot be added based on things like NBT data!

##### Parent class [EventJS](https://mods.latvian.dev/books/kubejs-legacy/page/eventjs) ##### Can be cancelled No #### Variables and Functions
NameTypeInfo
type[String](https://mods.latvian.dev/books/kubejs-legacy/page/string)Tag collection type.
get([String](https://mods.latvian.dev/books/kubejs-legacy/page/string) tag)TagWrapperReturns specific tag container which you can use to add or remove objects to. tag parameter can be something like 'forge:ingots/copper'. If tag doesn't exist, it will create a new one.
add([String](https://mods.latvian.dev/books/kubejs-legacy/page/string) tag, [String](https://mods.latvian.dev/books/kubejs-legacy/page/string)\[\]/Regex ids)TagWrapperShortcut method for event.get(tag).add(ids).
remove([String](https://mods.latvian.dev/books/kubejs-legacy/page/string) tag, [String](https://mods.latvian.dev/books/kubejs-legacy/page/string)\[\]/Regex ids)TagWrapperShortcut method for event.get(tag).remove(ids).
removeAll([String](https://mods.latvian.dev/books/kubejs-legacy/page/string) tag)TagWrapperShortcut method for event.get(tag).removeAll().
removeAllTagsFrom(String\[\] ids)voidRemoves all tags from object
### TagWrapper class #### Variables and Functions
NameTypeInfo
add([String](https://mods.latvian.dev/books/kubejs-legacy/page/string)\[\]/Regex ids)TagWrapper (itself)Adds an object to this tag. If string starts with # then it will add all objects from the second tag. It can be either single string, regex (/regex/flags) or array of either.
remove([String](https://mods.latvian.dev/books/kubejs-legacy/page/string)\[\]/Regex ids)TagWrapper (itself)Removes an object from tag, works the same as add().
removeAll()TagWrapper (itself)Removes all entries from tag.
getObjectIds()Collection<ResourceLocation>Returns a list of all entries in a tag. Will resolve any sub-tags.
#### Examples ```JavaScript // Listen to item tag event onEvent('item.tags', event => { // Get the #forge:cobblestone tag collection and add Diamond Ore to it event.add('forge:cobblestone', 'minecraft:diamond_ore') // Get the #forge:cobblestone tag collection and remove Mossy Cobblestone from it event.remove('forge:cobblestone', 'minecraft:mossy_cobblestone') // Get #forge:ingots/copper tag and remove all entries from it event.removeAll('forge:ingots/copper') // Required for FTB Quests to check item NBT event.add('itemfilters:check_nbt', 'some_item:that_has_nbt_types') // You can create new tags the same way you add to existing, just give it a name event.add('forge:completely_new_tag', 'minecraft:clay_ball') // Removes all tags from this entry event.removeAllTagsFrom('minecraft:stick') // Add all items from the forge:stone tag to the c:stone tag, unless the id contains diorite const stones = event.get('forge:stone').getObjectIds() const blacklist = Ingredient.of(/.*diorite.*/) stones.forEach(stone => { if (!blacklist.test(stone)) { event.add('c:stone', stone) } }) }) ```

Recipes use item tags, not block or fluid tags, even if items representing those are blocks. Like `minecraft:cobblestone` even if it's a block, it will still be an item tag for recipes.

`tags.blocks` and `tags.fluids` are for adding tags to block and fluid types, they work the same way. You can find existing block and fluid tags if you look at a block with F3 mode enabled, on side. These are mostly only used for technical reasons, and like mentioned above, if its for recipes/inventory, you will want to use `tags.items` even for blocks.