v1 Custom Merging Rules#

Smithed defines a set of custom merging rules that can be applied to any JSON file by defining a custom field, __smithed__.

Motivation#

When defining resources for the vanilla namespace, pack creators have little choice than to override the vanilla file, manually injecting their intended changes. This means if multiple creators target the same file, the game will take the latest loaded pack which overrides the table, nullifying any changes other packs might have changes. This is especially apparent when dealing with loot tables since it's quite common to need to add new drops to mobs like zombies, etc.

Weld provides a solution to allow packs to specify custom behavior when targetting specific JSON files allowing multiple packs to inject their custom json without overriding each other.

Top-level fields#

At the base of __smithed__, you can define the following fields.

id str (defined by pack.mcmeta) - Should not be manually defined since this is automatically set.

version int (1) - The version of the __smithed__ data model. This is automatically specifed to the latest version. You only need to specify this if you need your pack to load an older version of these models.

override bool (false) - If true, the json file defining this will override other pack's json files with the same namespace. This should only be used for Smithed bundles as it defines destructive behavior (completely skipping the merging process).

rules list[Rule] (empty) - A list of rules that define the custom merging behavior. This is the main field you define for your custom merging rules.

priority Priority (empty) - A priority definition which specifies the ordering of when this file's merging rules should activate compared to other packs being welded.

Tip

The Smithed data model has a ton of reasonable defaults so there's no need to overwelm youself with every fields' functionality. The abundunce is here for flexibility when you need it!

Other#

Additionally, there are some extra details you can include in the pack.mcmeta of your project.