Technical wiki
This is a technical wiki intended for mod developers looking to integrate with tetra in some way, or for those making modpacks or datapacks that want to add, change or remove content from tetra.
If you are looking for guidance on how to play you should look at the ingame advancements.
You need some understanding of json and minecraft datapacks or this will be difficult to follow.
Getting started
Datapacks
- Set up a datapack (guide)
- Enable the output log, allows you to see if there are errors in your datapack (guide)
- Turn on tetra development mode in the config (config/tetra.toml, generates if you start minecraft with tetra installed)
- Set up resourcepack (needed in most cases) (guide)
- Test that both are loaded (run
/datapacks list
and check resource pack screen)
Mod integrations
- Add repository in
build.gradle
(Thanks Jared for hosting the artifacts <3)
repositories {
// ...
maven { url = 'https://maven.blamejared.com/' }
}
- Add tetra & mutil as dependencies in
build.gradle
dependencies {
// ...
implementation fg.deobf("se.mickelus.mutil:mutil:1.19-5.1.0")
implementation fg.deobf("se.mickelus.tetra:tetra:1.19-5.0.0")
}
- Add entry in
mods.toml
[[dependencies.example_mod]]
modId="tetra"
mandatory=true
versionRange="[5,]"
ordering="AFTER"
side="BOTH"
Overview
Attributes
Attributes represent most stats for entities in vanilla, e.g. attack damage, health and armor. Most tetra items modify the attributes of wielding entities when they're held in the mainhand or the offhand.
Documentation on the vanilla attributes can be found here: https://minecraft.wiki/w/Attributes.
Tetra adds four new attributes:
tetra:draw_strength
: damage for bows and crossbowstetra:draw_speed
draw speed for bows and crossbowstetra:ability_damage
damage for shieldstetra:ability_cooldown
cooldown for shields and the holosphere
Forge also adds the following:
forge:entity_gravity
: decides how much an entity is affected by gravityforge:reach_distance
: how far away an entity can break blocks (tetra changes this to also affects the range at which one can hit entities)forge:swim_speed
: How fast an entity can swim? (I have not tested this)forge:nametag_distance
: How far away an entity's nametag can be seen? (I have not tested this either)
Tools
Minecraft keeps track of what items can be used for with ToolActions
(used to be ToolTypes, added by forge) which tetra uses to determine which blocks a tool can break, and how fast those blocks are broken. ToolActions
are also used to determine which tools are required to craft modules and improvements.
Has a level and efficiency for each ToolAction
. The level determines which blocks the tool can break and which modules/improvements it can craft, the efficiency determines how fast it can break blocks (which require the tool).
Tetra uses ToolActions
for some in world block interactions, such as prying open a crate or for fixing a jammed forge hammer. It's possibly to new in world block interactions for other mods.
Minecraft adds support for some in world block interactions based on ToolActions
, such as tilling dirt or stripping a log.
This system is backed by strings, a tool action exists as long as it's referenced somewhere. Mods that want to add custom tools should keep a reference to their tools in the same way as vanilla does it, pack makers can create new tools by requiring them in a schematic and providing them in a module.
Item effects
Tetra introduces Item effects which are used to apply special effects when an item is used, e.g. bleeding, critical strike or intuit.
Item effects are currently used for right click abilities as well, e.g. bashing or blocking. This will probably change in the future.
There's a list of all item effects available here.
Aspects
(introduced in 1.18)
Modules can have Aspects
similar to ToolActions
and ItemEffects
. The Aspects
are intended to be used to control how the module can be modified, e.g. which improvements or enchantments it accepts.
Enchantments
Modular items can hold enchantments like any other, the item keeps a separate mapping between slots and enchantments to keep track of magic capacity use and to clear enchantments when modules are removed. Enchantments from other mods that use vanilla EnchantmentCategories
are supported out of the box, enchantments can otherwise be tagged with the tags listed here to further control which enchantments different types of modules can accept based on their Aspects
. New Aspect
to EnchantmentCategory
mappings can be added programatically with TetraEnchantmentHelper.registerMapping
.
Resources
Most content in tetra can be changed using datapacks, this works both for standalone datapacks and for other mods looking to integrate with tetra. Resources are often referred to as a resource, or as data. Resources exist in a folder structure, the file path for a resource within that structure is often called a resource location.
If there are resources at the same resource location in multiple datapacks they would either merge or be replaced based on the load order of the datapacks and the value of a special replace
field within those resources.
The following resources are available:
- Modules: Modular items are made up of a set of modules, module data defines the stats and effects that those modules should provide for the item.
- Schematics: Modules are typically crafted in a workbench, schematic data defines which modules can be crafted from which materials and what kind of tools that requires.
- Improvements: Some modules (based on the slot they go in) can be improved, improvement data defines the stats and effects that those improvements should provide for the item.
- Enchantments/Destabilization: Enchantment data defines mappings between minecraft enchantments and tetra improvements. Destabilization data defines how negative effects are applied to modules if the magic capacity is exceeded
- Materials: Material data defines properties for materials, that can then be referenced by modules and schematics to set up variants without lots of repetition
- Synergies: Some modules provide additional stats when used together, synergy data define which combinations of modules that should provide those bonuses and what those bonuses should be
- Tweaks: Some modules (like binding bolts) allow the stats of the items to be tweaked in more detail, tweak data defines some rules and which stats that can be tweaked
- Replacements: Most modular items are not crafted in the regular crafting grid, they're converted into modular items by placing and modifying a regular weapon/tool in the workbench. Replacement data defines which items that can be converted into modular items and which modules & improvements that modular item should start off with
- Repairs: Repair data can be used to add additional repair materials for a module variant
- Actions: The workbench allows for actions to be performed on some items (i.e. cracking a geode or repairing a modular item), action data defines simple loot-table based actions and for which items those can be performed
- Crafting effects: Crafting effects allows for additional effects to be apply based on the context when a module or improvement is crafted
Feel free to hop onto discord and ask for help if you're having issues: https://discord.gg/MyjK4Fx