Skip to content

What's New ​

NOTE

This wiki is for Almost Unified for Minecraft 1.21.1 and above. For previous versions, please refer to the old wiki.

This page lists the changes between Almost Unified for Minecraft 1.20.1 and Almost Unified 1.0.0 for Minecraft 1.21.1, which is the base for all future releases. It is not a changelog. For a detailed list of changes between releases, check the changelog.

Almost Unified 1.0.0 is a major rewrite. The goal of the unification is still the same, but the config structure, the API, and the KubeJS integration have changed. Old configs can't be reused. Delete the config/almostunified folder and let the mod generate new defaults, then transfer your changes with the help of the migration table below.

Major Changes ​

  • Data-driven unification configs
    The single unify.json config was split into multiple files. Unification settings now live in the config/almostunified/unification folder, where each JSON file is a separate unification config with its own mod priorities, stone variants, tags, and ignore lists. See Unification Config.
  • Custom placeholders
    The materials list was replaced by the Placeholder Config. The {material} placeholder still exists, but you can now define any number of custom placeholders.
  • Separate tag config
    All tag related options were moved to the new Tag Config. This includes custom tags, tag substitutions (formerly tag ownerships), and tag inheritance.
  • snake_case config keys
    All config keys now use snake_case instead of camelCase, e.g. modPriorities is now mod_priorities.
  • New API and plugin system
    The API was rewritten from scratch. Mods can now register their own recipe unifiers and custom ingredient unifiers through plugins, and query detailed unification information through the runtime. See the Developer Guide.
  • New terminology
    The dominant item is now called the target item, and all other items of a unification tag are called variant items. Stone strata are now called stone variants. See Terminology.
  • Common tag conventions
    Forge is no longer supported. On Minecraft 1.21, NeoForge and Fabric share the c tag namespace, so the default configs use tags like c:ingots/{material} on both platforms.

New Features ​

  • Loot unification to make loot tables drop target items
  • World generation unification to remove variant ores from world generation (NeoForge only)
  • /almostunified strip command to inspect ore generation (NeoForge only)
  • multiple unification configs with config-specific settings
  • custom placeholders
  • ignored_loot_tables option to exclude loot tables from the unification
  • emi_strict_hiding option to control how variant items are hidden in EMI
  • handle_implicit_counts option for duplicate rules, replacing shouldSanitize
  • log_invalid_tags and cache_recipe_conditions options in the Debug Config
  • a dedicated log file at logs/almostunified/almostunified.log that contains all output of the mod
  • a dedicated directory for debug dumps at logs/almostunified/debug
  • support for custom ingredient types, including NeoForge compound ingredients
  • recipes with unmet NeoForge conditions are skipped, which removes a lot of unfixable warnings
  • invalid configs are backed up as .bak files before they are regenerated
  • warnings for mods in mod_priorities that are not installed, tags that are defined in multiple unification configs, and items that are part of multiple unification tags

Removed Features ​

  • Forge support, replaced by NeoForge
  • the dumpUncoveredRecipes debug option
  • the built-in recipe unifier for Immersive Engineering, which is now part of the Immersive Engineering add-on
  • the built-in recipe unifiers for Modern Industrialization and Extended Industrialization
  • the KubeJS functions getItemIds and getUnifyConfig, see KubeJS

Config Migration ​

The following table maps the old config keys to their new counterparts. For explanations of each option, follow the links to the respective config pages.

unify.json ​

Old keyNew fileNew key
modPrioritiesunification/<name>.jsonmod_priorities
priorityOverridesunification/<name>.jsonpriority_overrides
stoneStrataunification/<name>.jsonstone_variants
tagsunification/<name>.jsontags
materialsplaceholders.jsonmaterial
ignoredTagsunification/<name>.jsonignored_tags
ignoredItemsunification/<name>.jsonignored_items
ignoredRecipeTypesunification/<name>.jsonignored_recipe_types
ignoredRecipesunification/<name>.jsonignored_recipe_ids
itemsHidingJeiReiunification/<name>.jsonrecipe_viewer_hiding
customTagstags.jsoncustom_tags
tagOwnershipstags.jsontag_substitutions
itemTagInheritanceModetags.jsonitem_tag_inheritance_mode
itemTagInheritancetags.jsonitem_tag_inheritance
blockTagInheritanceModetags.jsonblock_tag_inheritance_mode
blockTagInheritancetags.jsonblock_tag_inheritance

duplicates.json ​

Old keyNew key
ignoredRecipeTypesignored_recipe_types
ignoredRecipesignored_recipe_ids
defaultDuplicateRulesdefault_duplicate_rules
overrideDuplicateRulesoverride_duplicate_rules
ignoredFieldsignored_fields
shouldSanitizehandle_implicit_counts
strictModecompare_all

debug.json ​

Old keyNew key
dumpTagMapdump_tags
dumpDuplicatesdump_duplicates
dumpUnificationdump_unification
dumpOverviewdump_overview
dumpRecipesdump_recipes
dumpUncoveredRecipesremoved

startup.json ​

Old keyNew key
serverOnlyserver_only

KubeJS ​

Old functionNew function
getPreferredTagForItemgetRelevantItemTag
getReplacementForItemgetVariantItemTarget
getPreferredItemForTaggetTagTargetItem
getTagsgetTags
getItemIdsgetTagEntries
getUnifyConfigremoved