<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.fabricmc.net/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.fabricmc.net/feed.php">
        <title>Fabric Wiki tutorial</title>
        <description></description>
        <link>https://wiki.fabricmc.net/</link>
        <image rdf:resource="https://wiki.fabricmc.net/_media/favicon.ico" />
       <dc:date>2026-05-15T16:58:31+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:accesswideners?rev=1763731864&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:accesswidening?rev=1774372130&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:adding_to_loot_tables?rev=1707149299&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:archived_pages?rev=1724593265&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:armor?rev=1720110742&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:armor_trim?rev=1764018888&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:atlauncher_modpacks?rev=1616254003&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:a_new_page?rev=1671173741&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:biomes_old?rev=1724592602&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blockappearance?rev=1776196277&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blockentity?rev=1764953008&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blockentityrenderers?rev=1764952889&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blockentity_modify_data?rev=1749658054&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blockentity_sync_itemstack?rev=1724726242&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blocks?rev=1765124032&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:blockstate?rev=1743499287&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:building_mod_basics?rev=1703682567&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:callbacks?rev=1764952968&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:chunkgenerator?rev=1739046512&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:codec?rev=1719756983&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:colorprovider?rev=1764954218&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:commands?rev=1751785850&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:command_argument_types?rev=1713165698&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:command_examples?rev=1700312765&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:command_exceptions?rev=1713163404&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:command_redirects?rev=1713163587&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:command_suggestions?rev=1700309190&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:concepts?rev=1653390375&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:containers?rev=1653667037&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:cooking_recipe_type?rev=1763731568&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:crops?rev=1743509148&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:cursegradle?rev=1617740405&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:custom_model?rev=1724733238&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:custom_portals?rev=1760634909&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:custom_resources?rev=1749403392&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:damagetypes?rev=1695581630&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_advancements?rev=1696288299&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_buckets?rev=1687368639&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_language?rev=1726092459&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_loot?rev=1743515240&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_model?rev=1751914913&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_recipe?rev=1685988485&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_setup?rev=1760632634&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:datagen_tags?rev=1729021870&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:dependency_overrides?rev=1732824110&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:dimensionconcepts?rev=1671427399&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:dimensions?rev=1695581793&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:directionalblock?rev=1733666675&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:dynamic_block_rendering?rev=1700296858&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:dynamic_model_generation?rev=1667649943&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:dynamic_recipe_generation?rev=1667649884&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:enchantments?rev=1724421151&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:entity-old?rev=1591905965&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:entity?rev=1775412175&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:events?rev=1766991646&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:event_index?rev=1759794808&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:extendedscreenhandler?rev=1671291537&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:ext_gh_commit?rev=1667649905&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:ext_lang?rev=1660682232&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:features?rev=1730138280&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:feature_procedure?rev=1583469219&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:fluids?rev=1771856785&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:gamerule?rev=1765307424&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:gametest?rev=1630713747&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:generator_types?rev=1763733551&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:global_data?rev=1759724877&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:hotswapping?rev=1730654814&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:installing_minecraft_fabric_server?rev=1623527549&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:install_java?rev=1593629154&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:install_with_minecraft_launcher?rev=1594229495&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:install_with_multimc?rev=1594229592&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:interface_injection?rev=1774735485&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:introduction?rev=1694640004&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:inventory?rev=1775412208&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:itemgroup?rev=1724418216&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:items?rev=1777047438&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:items_docs?rev=1686587157&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:jigsaw_old?rev=1724593388&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:keybinds?rev=1775412116&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:kotlin?rev=1691757860&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:lang?rev=1724596523&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:loader04x?rev=1703681918&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mappings?rev=1772409367&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mcupdater_modpacks?rev=1558458361&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:migratemappings?rev=1763251379&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mining_levels?rev=1664428063&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:minotaur?rev=1666482509&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixinheritance?rev=1615915149&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_accessors?rev=1764533283&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_choosing_the_right_mixin?rev=1761487092&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_examples?rev=1775649411&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_export?rev=1766661253&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_glossary?rev=1774794480&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_hotswaps?rev=1774373452&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_injects?rev=1767272586&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_introduction?rev=1774876737&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_override?rev=1767272310&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_redirectors?rev=1758579688&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_redirectors_methods?rev=1610684408&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_registration?rev=1758641702&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_tips?rev=1760920057&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:mixin_your_first_mixin?rev=1769197463&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:modding_tips?rev=1769295671&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:model_predicate_providers?rev=1743567623&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:networking?rev=1729975196&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:ores?rev=1730138155&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:particles?rev=1768340269&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:persistent_states?rev=1764953500&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:pixel_raycast?rev=1701383619&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:potions?rev=1694329724&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:primer?rev=1724586637&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:projectiles?rev=1709862966&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:propertydelegates?rev=1653667230&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:publishing_mods_using_github_actions?rev=1732055734&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:reading_mc_code?rev=1754791790&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:recipes?rev=1772408299&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:recipe_type?rev=1775936698&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:recipe_types_introduction?rev=1608502263&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:reflection?rev=1637275741&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:registry?rev=1724594789&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:registry_types?rev=1739046682&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:resource?rev=1569462164&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:screen?rev=1772408031&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:screenhandler?rev=1724734197&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:setup?rev=1764952822&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:shield?rev=1773399256&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:side?rev=1649824354&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:sidebar?rev=1775412582&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:skcraft_modpacks?rev=1616043857&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:sounds?rev=1719159791&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:spawn_egg?rev=1673746403&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:start?rev=1765958021&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:stats?rev=1767907876&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:status_effects?rev=1673507211&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:structures_old?rev=1724593924&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:tags?rev=1770762273&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:technic_modpacks?rev=1645791921&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:terms?rev=1761245599&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:tools?rev=1724419530&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:tooltip?rev=1752026126&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api?rev=1743372351&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api_fluid-containing-items?rev=1644604812&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api_fluid_implementation?rev=1643833720&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api_item_storage?rev=1766053091&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api_simpletank?rev=1677054133&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api_storage?rev=1635589508&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:transfer-api_transactions?rev=1689775206&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:trees?rev=1671586806&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:updating_yarn?rev=1659434613&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:upload_your_log?rev=1563648078&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:villager_activities?rev=1694637013&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:waterloggable?rev=1730039129&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.fabricmc.net/tutorial:world_presets?rev=1767888124&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.fabricmc.net/_media/favicon.ico">
        <title>Fabric Wiki</title>
        <link>https://wiki.fabricmc.net/</link>
        <url>https://wiki.fabricmc.net/_media/favicon.ico</url>
    </image>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:accesswideners?rev=1763731864&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-21T13:31:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Access Wideners</title>
        <link>https://wiki.fabricmc.net/tutorial:accesswideners?rev=1763731864&amp;do=diff</link>
        <description>Access Wideners

This page&#039;s url was moved to accesswidening, sorry for the inconvenience!</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:accesswidening?rev=1774372130&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-24T17:08:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Access Widening</title>
        <link>https://wiki.fabricmc.net/tutorial:accesswidening?rev=1774372130&amp;do=diff</link>
        <description>Access Widening

Access widening provides a way to loosen the access limits of classes, methods or fields. This includes making them public, or making them extendable (subclassable).

Access widening may be used instead of accessor mixins, and there are currently 2 cases where the functionality provided by mixin is not sufficient:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:adding_to_loot_tables?rev=1707149299&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-02-05T16:08:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding items to existing loot tables</title>
        <link>https://wiki.fabricmc.net/tutorial:adding_to_loot_tables?rev=1707149299&amp;do=diff</link>
        <description>Adding items to existing loot tables

Introduction

Sometimes you want to add items to loot tables, for example adding your own drops to a vanilla block or entity. The simplest solution, replacing the loot table file, can break other mods – what if they want to change them as well? We’ll take a look at how you can add items to loot tables without overriding the table.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:archived_pages?rev=1724593265&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T13:41:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Archived Pages</title>
        <link>https://wiki.fabricmc.net/tutorial:archived_pages?rev=1724593265&amp;do=diff</link>
        <description>Archived Pages

These pages have been replaced by better ones, or simply do not work on modern versions of Minecraft, they are simply for archival purposes - or if you need to do some backporting ect.

Advanced

	*  Using CrowdinTranslate to provide live community translations
	*  Using GitHub Actions to find errors in your commits
	*  Updating from Loader 0.3.x to 0.4.x

Dynamic Data Generation</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:armor?rev=1720110742&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-07-04T16:32:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Armor</title>
        <link>https://wiki.fabricmc.net/tutorial:armor?rev=1720110742&amp;do=diff</link>
        <description>Adding Armor

Introduction

While armor is a bit more complicated to implement than a normal block or item, once you understand it, it becomes simple to implement. To add armor, we&#039;ll first make a CustomArmorMaterial class, then register the items. We&#039;ll also take a look at how to texture them. There&#039;s a special chapter at the end of this document that explains how to add knockback to the armor, since the method is only accessible through a mixin (as of 1.16.3).</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:armor_trim?rev=1764018888&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-24T21:14:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding an Armor Trim</title>
        <link>https://wiki.fabricmc.net/tutorial:armor_trim?rev=1764018888&amp;do=diff</link>
        <description>Adding an Armor Trim

Introduction

!! THIS PAGE IS OUT OF DATE. LAST CONFIRMED WORKING VERSION: 1.20.1 !!

You&#039;re own your own!

In this page you will learn how to add a new armor trim. As many other tutorials, we will be using tutorial as the namespace. This page is really a heavy spell check since we need to make a lot of files with specific names.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:atlauncher_modpacks?rev=1616254003&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-03-20T15:26:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Publishing Fabric modpacks on ATLauncher</title>
        <link>https://wiki.fabricmc.net/tutorial:atlauncher_modpacks?rev=1616254003&amp;do=diff</link>
        <description>Publishing Fabric modpacks on ATLauncher

ATLauncher implemented a &#039;fabric&#039; loader in May 2019, which can be used by modpacks on the platform. Loader support is documented on the ATLauncher&#039;s Wiki.


&lt;version&gt;
    &lt;pack&gt;
        &lt;version&gt;1.0.0&lt;/version&gt;
        &lt;minecraft&gt;1.14&lt;/minecraft&gt;
    &lt;/pack&gt;
    &lt;loader type=&quot;fabric&quot; loader=&quot;0.4.8+build.154&quot; /&gt;
&lt;/version&gt;</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:a_new_page?rev=1671173741&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-12-16T06:55:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Example Page</title>
        <link>https://wiki.fabricmc.net/tutorial:a_new_page?rev=1671173741&amp;do=diff</link>
        <description>Example Page

Hey, you clicked the link!
But i’m afraid this is not the correct way to create a page, you need to specify your own page name instead of a_new_page, so go on, do it!</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:biomes_old?rev=1724592602&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T13:30:02+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Biomes [1.16.3]</title>
        <link>https://wiki.fabricmc.net/tutorial:biomes_old?rev=1724592602&amp;do=diff</link>
        <description>Adding Biomes [1.16.3]

	&quot; :!: The tutorial applies for only old versions! For versions 1.18 and beyond, biomes are made completely using JSON, see Minecraft Wiki page for more information.&quot;

There are 3 steps that are required to add a biome to the world.

	*  Creating a biome</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blockappearance?rev=1776196277&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-14T19:51:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Manipulating a Block&#039;s appearance</title>
        <link>https://wiki.fabricmc.net/tutorial:blockappearance?rev=1776196277&amp;do=diff</link>
        <description>Manipulating a Block&#039;s appearance

This is the 1.15+ version of this tutorial. For the 1.14 version, see Manipulating a Block&#039;s appearance (1.14).

Making a block transparent or translucent

You may have noticed that even if your block&#039;s texture is transparent or translucent, it still looks opaque. To fix this, you need to set your block&#039;s render layer to cutout or transparent.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blockentity?rev=1764953008&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-05T16:43:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a BlockEntity</title>
        <link>https://wiki.fabricmc.net/tutorial:blockentity?rev=1764953008&amp;do=diff</link>
        <description>Adding a BlockEntity

A block entity is primarily used to store data within blocks. Before creating one, you will need a Block. This tutorial will cover the creation of your BlockEntity class, and its registration.

Creating a block entity type

The simplest block entity simply extends</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blockentityrenderers?rev=1764952889&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-05T16:41:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Rendering blocks and items dynamically using block entity renderers</title>
        <link>https://wiki.fabricmc.net/tutorial:blockentityrenderers?rev=1764952889&amp;do=diff</link>
        <description>Rendering blocks and items dynamically using block entity renderers

This is the 1.15+ version of this tutorial. For the 1.14 version, see Rendering blocks and items dynamically using block entity renderers (1.14).

Make sure you added a block entity before reading this tutorial! 

Introduction

Blocks by themselves aren&#039;t that interesting, they just stay static at a certain location and a certain size until broken. We can use</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blockentity_modify_data?rev=1749658054&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-11T16:07:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Modify BlockEntity data</title>
        <link>https://wiki.fabricmc.net/tutorial:blockentity_modify_data?rev=1749658054&amp;do=diff</link>
        <description>Modify BlockEntity data

In the previous tutorial, we have created a block entity. But they are too boring as they do not have any data. Therefore, we try to add some data to it, and define ways of serializing and deserializing data.

Some notes about NbtCompound</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blockentity_sync_itemstack?rev=1724726242&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-27T02:37:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Syncing BlockEntity data with ItemStack</title>
        <link>https://wiki.fabricmc.net/tutorial:blockentity_sync_itemstack?rev=1724726242&amp;do=diff</link>
        <description>Syncing BlockEntity data with ItemStack

Introduction

When you create a block with block entity, you might want to place the block with predefined NBT data from an ItemStack (of your BlockItem), or save the BlockEntity data in the ItemStack after breaking the block.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blocks?rev=1765124032&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-07T16:13:52+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a Block</title>
        <link>https://wiki.fabricmc.net/tutorial:blocks?rev=1765124032&amp;do=diff</link>
        <description>Adding a Block

Adding blocks to your mod follows a similar process to adding an item. You can create an instance of Block or a custom class, and then register it under Registries.BLOCK (for 1.19.3 and above) or Registry.BLOCK (for 1.19.2 and below). You also need to provide a texture and blockstate/model file to give your block visuals. For more information on the block model format, view the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:blockstate?rev=1743499287&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-01T09:21:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Giving a block state</title>
        <link>https://wiki.fabricmc.net/tutorial:blockstate?rev=1743499287&amp;do=diff</link>
        <description>Giving a block state

Every type of block in Minecraft is represented by a singular Block instance. This makes it impossible to change a specific block&#039;s state by simply changing the Block instance&#039;s state, as every other block of that type will be affected! But, what if you</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:building_mod_basics?rev=1703682567&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-12-27T13:09:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Building a Mod Pt. 1 - Basics (DRAFT)</title>
        <link>https://wiki.fabricmc.net/tutorial:building_mod_basics?rev=1703682567&amp;do=diff</link>
        <description>Building a Mod Pt. 1 - Basics (DRAFT)

By falseresync, don’t change pls.

In this tutorial I’ll show you all of the basics of the modding through the creation of a real working mod! By the end of the tutorial you would be able to create items, blocks, give them textures and make them craftable.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:callbacks?rev=1764952968&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-05T16:42:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Listening to Events</title>
        <link>https://wiki.fabricmc.net/tutorial:callbacks?rev=1764952968&amp;do=diff</link>
        <description>Listening to Events

In this tutorial you will learn to:

	*  Understand Events and Callbacks
	*  Register a callback for an existing Event

Events

Events are represented by instances of net.fabricmc.fabric.api.event.Event which store and call callbacks. Often there is a single event instance for a callback, which is stored in a static field</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:chunkgenerator?rev=1739046512&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-08T20:28:32+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Custom Chunk Generators</title>
        <link>https://wiki.fabricmc.net/tutorial:chunkgenerator?rev=1739046512&amp;do=diff</link>
        <description>Custom Chunk Generators

ChunkGenerators are the mechanisms by which the game generates the world. They handle terrain shaping, surface building, and biome placement. 

Vanilla Minecraft&#039;s NoiseChunkGenerator is extremely powerful and configurable. Using</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:codec?rev=1719756983&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-06-30T14:16:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Codecs</title>
        <link>https://wiki.fabricmc.net/tutorial:codec?rev=1719756983&amp;do=diff</link>
        <description>Codecs

What is a codec

A codec, introduced in Java Edition 1.16, is a specification of conversion between any type of object (such as LootTable, Advancement or BlockPos) and any serialized form (nbt, json, etc.). A codec is a combination of encoder and decoder. An</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:colorprovider?rev=1764954218&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-05T17:03:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Color Providers</title>
        <link>https://wiki.fabricmc.net/tutorial:colorprovider?rev=1764954218&amp;do=diff</link>
        <description>Color Providers

Ever wonder how grass and leaves change hues depending on the biome, or how leather armor can have seemingly infinite color patterns? Meet color providers, which allow you to hue and tint block &amp; item model textures based on properties such as location, NBT, or block states.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:commands?rev=1751785850&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-07-06T07:10:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating Commands</title>
        <link>https://wiki.fabricmc.net/tutorial:commands?rev=1751785850&amp;do=diff</link>
        <description>Licensing: The code in this article is licensed under the “Creative Commons Zero v1.0 Universal” license. The license grants you the rights to use the code examples shown in this article in your own mods.

Creating Commands

Creating commands can allow a mod developer to add functionality that can be used through a command. This tutorial will teach you how to register commands, and the general command structure of Brigadier.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:command_argument_types?rev=1713165698&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-04-15T07:21:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Command Argument Types</title>
        <link>https://wiki.fabricmc.net/tutorial:command_argument_types?rev=1713165698&amp;do=diff</link>
        <description>Command Argument Types

Brigadier has support for custom argument types and this article goes into showing how to create an argument type. 

Warning: Custom arguments require client mod installation to be registered correctly! If you are making a server plugin, consider using existing argument type and a custom suggestions provider instead.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:command_examples?rev=1700312765&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-18T13:06:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Command examples</title>
        <link>https://wiki.fabricmc.net/tutorial:command_examples?rev=1700312765&amp;do=diff</link>
        <description>Command examples

These examples are available under the “CC Attribution-Noncommercial-Share Alike 4.0 International” license, which is the current license of the other wiki articles.

Broadcast a message


public final class BroadCastCommand {
  public static void register(CommandDispatcher&lt;ServerCommandSource&gt; dispatcher){
      dispatcher.register(literal(&quot;broadcast&quot;)
          .requires(source -&gt; source.hasPermissionLevel(2)) // Must be a game master to use the command. Command will not show…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:command_exceptions?rev=1713163404&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-04-15T06:43:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Command Exceptions</title>
        <link>https://wiki.fabricmc.net/tutorial:command_exceptions?rev=1713163404&amp;do=diff</link>
        <description>Command Exceptions

Brigadier supports command exceptions which can be used to end a command such as if an argument didn&#039;t parse properly or the command failed to execute, as well as including richer details of the failure.

There are two type of command exceptions:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:command_redirects?rev=1713163587&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-04-15T06:46:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Command Redirects</title>
        <link>https://wiki.fabricmc.net/tutorial:command_redirects?rev=1713163587&amp;do=diff</link>
        <description>Command Redirects

Redirects are Brigadier&#039;s form of aliases and subcommands. The redirect method takes a command node and an optional modifier of context. The command node can be a specific node after a registration of dispathcer, or just the root node.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:command_suggestions?rev=1700309190&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-18T12:06:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Command Suggestions</title>
        <link>https://wiki.fabricmc.net/tutorial:command_suggestions?rev=1700309190&amp;do=diff</link>
        <description>Licensing: The code in this article is licensed under the “Creative Commons Zero v1.0 Universal” license. The license grants you the rights to use the code examples shown in this article in your own mods. 

Command Suggestions

Brigadier allows specification of custom suggestions for arguments. In Minecraft, these suggestions are sent to the client as a user is typing out the command. Besides, some argument types can have their default suggestion providers calculated directly in client, which is…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:concepts?rev=1653390375&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-24T11:06:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Essential Minecraft Concepts</title>
        <link>https://wiki.fabricmc.net/tutorial:concepts?rev=1653390375&amp;do=diff</link>
        <description>Essential Minecraft Concepts

This section was designed as a 10,000m overview for beginners by beginners, covering essential concepts and definitions needed as background knowledge before you start your first mod.  Some concepts relate to elements visible in game, others to used files or classes that are frequently used while modding.  Understanding these terms and concepts will hopefully make it easier to understand the other sections of the Wiki.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:containers?rev=1653667037&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-27T15:57:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a Container Block (DRAFT)</title>
        <link>https://wiki.fabricmc.net/tutorial:containers?rev=1653667037&amp;do=diff</link>
        <description>Creating a Container Block (DRAFT)

We are going to make a bigger chest in this tutorial as an example.

Block and BlockItem

First we need to create the Block and register it as well as its BlockItem.


public class BiggerChestBlock extends BlockWithEntity {
    public BiggerChestBlock(Settings settings) {
        super(settings);
    }
    
    // A side effect of extending BlockWithEntity is it changes the render type to INVISIBLE, so we have to revert this
    @Override
    public BlockRende…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:cooking_recipe_type?rev=1763731568&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-21T13:26:08+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a custom cooking recipe type</title>
        <link>https://wiki.fabricmc.net/tutorial:cooking_recipe_type?rev=1763731568&amp;do=diff</link>
        <description>This page needs some revisions

Creating a custom cooking recipe type

Creating a cooking recipe type is just like creating a custom recipe type with extra steps.
Vanilla minecraft abstracts classes for furnaces and cooking recipe types so we&#039;ll use them to save some time and code!
If it is your first time creating a container block, you should go check this tutorial before:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:crops?rev=1743509148&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-01T12:05:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a Custom Crop</title>
        <link>https://wiki.fabricmc.net/tutorial:crops?rev=1743509148&amp;do=diff</link>
        <description>Adding a Custom Crop

This tutorial will cover adding a simple crop similar to carrots or wheat. When creating this custom crop you will need the following items:

	*  Custom Seed item
	*  Registry for the crop block and seed item
	*  A class for your crop block</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:cursegradle?rev=1617740405&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-04-06T20:20:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Publishing mods on CurseForge with CurseGradle</title>
        <link>https://wiki.fabricmc.net/tutorial:cursegradle?rev=1617740405&amp;do=diff</link>
        <description>Publishing mods on CurseForge with CurseGradle

To familiarize yourself with CurseGradle, please read the project&#039;s official wiki.

Note: in recent versions, it seems that the changes outlined in this article are not necessary and perhaps even harmful. 

Fabric-specific changes</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:custom_model?rev=1724733238&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-27T04:33:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Rendering Blocks and Items Dynamically using a custom Model</title>
        <link>https://wiki.fabricmc.net/tutorial:custom_model?rev=1724733238&amp;do=diff</link>
        <description>Rendering Blocks and Items Dynamically using a custom Model

It is possible to add models to the game using block model JSON files, but it is also possible to render them through Java code. In this tutorial, we will add a four-sided furnace model to the game.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:custom_portals?rev=1760634909&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-16T17:15:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a custom portal to access your dimension</title>
        <link>https://wiki.fabricmc.net/tutorial:custom_portals?rev=1760634909&amp;do=diff</link>
        <description>Creating a custom portal to access your dimension

So, you&#039;ve made your dimension, registered it, added biomes and filled it with cool creatures and features.

Lets make a portal that can allow survival players to access it!

Getting Started

Kyrptonaught has created a very useful library that allows you to easily create a custom portal to link your dimension to the overworld and other dimensions. For more infomation,</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:custom_resources?rev=1749403392&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-08T17:23:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Custom Data/Resource pack Resources</title>
        <link>https://wiki.fabricmc.net/tutorial:custom_resources?rev=1749403392&amp;do=diff</link>
        <description>Custom Data/Resource pack Resources

A Foreword

While not necessary to any extent, it is suggested that you first get accustomed to the basics of Fabric modding and Json parsing before diving into this. Going through the process of adding a recipe type is a good way to get a handle on Json.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:damagetypes?rev=1695581630&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-24T18:53:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a Damage Type (1.19.4+)</title>
        <link>https://wiki.fabricmc.net/tutorial:damagetypes?rev=1695581630&amp;do=diff</link>
        <description>Adding a Damage Type (1.19.4+)

Introduction

Sometimes you may want to add a custom damage type to your mod, for example if you&#039;re adding a custom damaging fluid similar to lava or a block like a magma block. Since 1.19.4, the creation of new damage types has become data-driven, meaning they are created using JSON files. To use your custom damage type in code however, you&#039;re going to need to get its</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_advancements?rev=1696288299&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-10-02T23:11:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Advancements Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_advancements?rev=1696288299&amp;do=diff</link>
        <description>Advancements Generation

One way to make a mod feel more integrated into Minecraft is for it to generate custom advancements. How do we do that?

Before continuing

Make sure you&#039;ve to read the first section of the Getting started with Data Generation page, have a class that implements</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_buckets?rev=1687368639&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-21T17:30:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating bucket textures with DataGen</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_buckets?rev=1687368639&amp;do=diff</link>
        <description>Creating bucket textures with DataGen

Overview

Version: 1.20+

This section will cover the process around creating bucket textures for your fluids utilizing FabricModelProvider. This is useful if you plan to have many fluids whose texture will be similar to the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_language?rev=1726092459&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-09-11T22:07:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Language Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_language?rev=1726092459&amp;do=diff</link>
        <description>Language Generation

You can generate translation entries from existing language files and classes that support translation keys.

Firstly, create a class that extends FabricLanguageProvider and implement the base methods like so:



Lets add some translation entries:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_loot?rev=1743515240&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-01T13:47:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Loot Table Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_loot?rev=1743515240&amp;do=diff</link>
        <description>Loot Table Generation

In this tutorial, you will learn how to generate loot tables for blocks and other contents. With data generation, you do not need to write JSONs for each block anymore. Before reading this, make sure you&#039;ve read Getting started with Data Generation, and have a class that implements</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_model?rev=1751914913&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-07-07T19:01:53+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Model Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_model?rev=1751914913&amp;do=diff</link>
        <description>Model Generation

:!: The page is translated from other pages and the translation may not be fully accurate.

We know that almost every item needs a corresponding item baked model (or item model for short), and an item models definition since 1.21.4. Each block needs a</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_recipe?rev=1685988485&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-05T18:08:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Recipe Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_recipe?rev=1685988485&amp;do=diff</link>
        <description>Recipe Generation

Before reading this, make sure you&#039;ve read Getting started with Data Generation, and have a class that implements DataGenerationEntrypoint

To begin, create a class that extends FabricRecipeProvider, and register it in your datagen entrypoint like so: 


private static class MyRecipeGenerator extends FabricRecipeProvider {
	private MyRecipeGenerator(FabricDataOutput generator) {
                super(generator);
        }
        
        @Override
	protected void generateReci…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_setup?rev=1760632634&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-16T16:37:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Getting started with Data Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_setup?rev=1760632634&amp;do=diff</link>
        <description>Getting started with Data Generation

Data Generation is a module of Fabric API which allows you to programmatically generate Recipes, Language Files, Loot Tables, Advancements and pretty much anything with Custom Providers. Every time you modify the code that generates advancements (or anything else datagen can make like loot tables and such) you&#039;ll have to run the gradle task</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:datagen_tags?rev=1729021870&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-15T19:51:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Tag Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:datagen_tags?rev=1729021870&amp;do=diff</link>
        <description>Tag Generation

The FabricTagProvider&lt;T&gt; class allows you to generate tag json files.

This page will follow you through all aspects of this provider.

To create a tag generator, create a class that extends FabricTagProvider&lt;T&gt;, where T is the type of tag you want to generate, and register it at your datagen entrypoint like so:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:dependency_overrides?rev=1732824110&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-28T20:01:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Dependency Overrides</title>
        <link>https://wiki.fabricmc.net/tutorial:dependency_overrides?rev=1732824110&amp;do=diff</link>
        <description>Dependency Overrides

Fabric Loader version 0.11.1 introduced a feature named “Dependency Overrides”.

Before you use it: This feature is designed to give modpack developers more control over mod dependencies.

As a regular player, you shouldn&#039;t use this, but ask the mod developers to do whatever is that you want to change.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:dimensionconcepts?rev=1671427399&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-12-19T05:23:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Dimension Concepts</title>
        <link>https://wiki.fabricmc.net/tutorial:dimensionconcepts?rev=1671427399&amp;do=diff</link>
        <description>Dimension Concepts

Creating a new dimension using vanilla datapack functionality is easy! However, if your want finer control over your dimension, you&#039;ll need to implement it in code. Here&#039;s a few useful concepts for this process:

World

The World class is the in-game representation of a world. It&#039;s what is mutated when you place or destroy blocks. It&#039;s not used during worldgen. Instead, a dimension is made of a few parts, as shown here:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:dimensions?rev=1695581793&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-24T18:56:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Minecraft 1.16 and later</title>
        <link>https://wiki.fabricmc.net/tutorial:dimensions?rev=1695581793&amp;do=diff</link>
        <description>FIXME In versions 1.16 and beyond, dimensions can be defined in data packs: More information about custom dimensions via JSON can be found in the Minecraft Wikia.

Minecraft 1.16 and later

The information below applies to Minecraft 1.15 and earlier.

However, you must still create a portal using fabric,</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:directionalblock?rev=1733666675&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-08T14:04:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Making a Directional Block</title>
        <link>https://wiki.fabricmc.net/tutorial:directionalblock?rev=1733666675&amp;do=diff</link>
        <description>Making a Directional Block

Making blocks directional (facing into certain directions) is also done using block states.
This example describes a vertical version of the andesite slab.




public class VerticalSlabBlock extends HorizontalFacingBlock {
	// the codec is required since 1.20.5 however not actually used in Minecraft yet.
	public static final MapCodec&lt;VerticalSlabBlock&gt; CODEC = Block.createCodec(VerticalSlabBlock::new);

	public VerticalSlabBlock(Settings settings) {
		super(settings);…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:dynamic_block_rendering?rev=1700296858&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-18T08:40:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Rendering Blocks and Items Dynamically</title>
        <link>https://wiki.fabricmc.net/tutorial:dynamic_block_rendering?rev=1700296858&amp;do=diff</link>
        <description>Rendering Blocks and Items Dynamically

There are two main ways to render blocks and items dynamically, depending on what you want to do.

	*  Custom Models can be used to dynamically render the block when the chunk mesh is rebuilt. This means that the model will be re-generated only when the chunk is updated, or when you force it to update.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:dynamic_model_generation?rev=1667649943&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-11-05T12:05:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Dynamic Model Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:dynamic_model_generation?rev=1667649943&amp;do=diff</link>
        <description>:!: This page has been replaced by the Fabric Data Generation API tutorials, which you can find here.

Dynamic Model Generation

Dynamically generated models can mainly be used to add models to items or blocks that are generated, or if you want to auto-create them for a large number of items or blocks.
As always, we will start off by first registering a new item.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:dynamic_recipe_generation?rev=1667649884&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-11-05T12:04:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Dynamic Recipe Generation</title>
        <link>https://wiki.fabricmc.net/tutorial:dynamic_recipe_generation?rev=1667649884&amp;do=diff</link>
        <description>:!: This page has been replaced by the Fabric Data Generation API tutorials, which you can find here.

Dynamic Recipe Generation

Dynamically added recipes are recipes added through code instead of .json files. This can be used for, for example, changing a recipe if a certain mod is installed alongside your mod, or changing the recipe to use tags from another mod.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:enchantments?rev=1724421151&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-23T13:52:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Enchantments</title>
        <link>https://wiki.fabricmc.net/tutorial:enchantments?rev=1724421151&amp;do=diff</link>
        <description>Adding Enchantments

Adding enchantments since 1.21

Since 1.21, enchantments has been data-driven, which means you should define them in data-packs, instead of in the codes. Please see Enchantment definition Minecraft page for details.

To use the enchantments in code, you should just store</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:entity-old?rev=1591905965&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-06-11T20:06:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding an Entity</title>
        <link>https://wiki.fabricmc.net/tutorial:entity-old?rev=1591905965&amp;do=diff</link>
        <description>Adding an Entity

Introduction

Entities are the next step to take after adding an item and block to your game. 

To add an entity, you will need 3 primary classes:

	*  an Entity class, which gives your creature logic/AI
	*  a Renderer class, which allows you to connect your entity to a model</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:entity?rev=1775412175&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-05T18:02:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating an Entity</title>
        <link>https://wiki.fabricmc.net/tutorial:entity?rev=1775412175&amp;do=diff</link>
        <description>Creating an Entity

The source code for this project can be found here.

Entities are a movable object in a world with logic attached to them. A few examples include:

	*  Minecarts
	*  Arrows
	*  Boats

Living Entities are Entities that have health and can deal damage. 
There are various classes that branch off `LivingEntity` for different purposes, including:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:events?rev=1766991646&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-29T07:00:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Custom Events</title>
        <link>https://wiki.fabricmc.net/tutorial:events?rev=1766991646&amp;do=diff</link>
        <description>Custom Events

Fabric API provides a system that allows mods to react to events that occur in the game. Events are hooks that satisfy common use cases and/or provide enhanced compatibility and performance between mods that hook into the same areas of the code. The use of events often substitutes the use of mixins. Fabric</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:event_index?rev=1759794808&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-06T23:53:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Event Index</title>
        <link>https://wiki.fabricmc.net/tutorial:event_index?rev=1759794808&amp;do=diff</link>
        <description>Event Index

This page is an index of all the events/callbacks provided in Fabric API, sorted by category. This page is a work in progress. Please help by contributing!

Descriptions for events should not begin with “An event...” as that is implied, and events should be sorted alphabetically in each category. Deprecated events should not be listed unless they have no replacement, in which case they should be marked as such.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:extendedscreenhandler?rev=1671291537&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-12-17T15:38:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Syncing Custom Data with Extended ScreenHandlers</title>
        <link>https://wiki.fabricmc.net/tutorial:extendedscreenhandler?rev=1671291537&amp;do=diff</link>
        <description>Syncing Custom Data with Extended ScreenHandlers

In this tutorial we will use the ExtendedScreenHandler to transfer arbitary data from the server to the client ScreenHandler when the ScreenHandler is opened.

In our example we will send the position of the block and render it as the container&#039;s title.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:ext_gh_commit?rev=1667649905&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-11-05T12:05:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Using GitHub Actions to find errors in your mod.</title>
        <link>https://wiki.fabricmc.net/tutorial:ext_gh_commit?rev=1667649905&amp;do=diff</link>
        <description>:!: This page does not make sense, errors can be found in the IDE on build, and usually are warned about before commits.

Using GitHub Actions to find errors in your mod.

GitHub actions is a very useful service that is provided free to public and private repositories. It allows you to automatically run commands or *actions* when an event happens.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:ext_lang?rev=1660682232&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-08-16T20:37:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Using Crowdin to create live translations.</title>
        <link>https://wiki.fabricmc.net/tutorial:ext_lang?rev=1660682232&amp;do=diff</link>
        <description>FIXME This page hasn&#039;t been updated in a while, and may not work in the future updates. 

Using Crowdin to create live translations.

Crowdin is a very good platform for getting translations. Luckily for us, a user has created a open source library that you can use in your mod to get translations from Crowdin and apply them when the game launches.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:features?rev=1730138280&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-28T17:58:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Features</title>
        <link>https://wiki.fabricmc.net/tutorial:features?rev=1730138280&amp;do=diff</link>
        <description>Adding Features

Rocks, trees, ores, and ponds are all examples of features.
They are simple generation additions to the world which generate depending on how they are configured.
In this tutorial, we&#039;ll generate a simple pillar feature.

If you want to do something similar to vanilla (like ores or flower patches), you should first look for an existing feature you can use.
In that case, skip the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:feature_procedure?rev=1583469219&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-03-06T04:33:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>The Fabric Feature Procedure</title>
        <link>https://wiki.fabricmc.net/tutorial:feature_procedure?rev=1583469219&amp;do=diff</link>
        <description>The Fabric Feature Procedure

So you want a feature to enter Fabric? Well then - here&#039;s a brief guide on how to best propose a feature in a way which won&#039;t get lost in noise and give some measurable results.

Friendly Advice

	*  We don&#039;t tend to ban people just for having ideas, no matter how outlandish. However,</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:fluids?rev=1771856785&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-23T14:26:25+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a fluid</title>
        <link>https://wiki.fabricmc.net/tutorial:fluids?rev=1771856785&amp;do=diff</link>
        <description>Creating a fluid

Overview

Here we&#039;ll cover creation of a custom fluid. If you plan to create several fluids, it is recommended to make an abstract basic fluid class where you&#039;ll set necessary defaults that will be shared in its subclasses. We&#039;ll also make it generate in the world like lakes.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:gamerule?rev=1765307424&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-09T19:10:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a Gamerule</title>
        <link>https://wiki.fabricmc.net/tutorial:gamerule?rev=1765307424&amp;do=diff</link>
        <description>Adding a Gamerule

Registering a Gamerule

To create a gamerule, build and register it using the GameRuleBuilder of the Fabric API:


// Create and register a boolean gamerule, enabled by default
private static final Identifier        GAMERULE_IDENTIFIER     = Identifier.of(&quot;custom_mod_name&quot;,&quot;gamerule_name&quot;);
public  static final GameRule&lt;Boolean&gt; CUSTOM_BOOLEAN_GAMERULE = GameRuleBuilder
    .forBoolean(true) //default value declaration
    .category(GameRuleCategory.MISC)
    .buildAndRegister…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:gametest?rev=1630713747&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-09-04T00:02:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>[STUB] Creating Automated Tests</title>
        <link>https://wiki.fabricmc.net/tutorial:gametest?rev=1630713747&amp;do=diff</link>
        <description>[STUB] Creating Automated Tests

(Explain GameTest framework)

Creating a test structure

(Explain /test create and /test export -&gt; NBT/SNBT)

Writing your test

(@GameTest, entrypoints, TestContext and optional fabric interface)

Running your tests</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:generator_types?rev=1763733551&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-21T13:59:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Generator Types</title>
        <link>https://wiki.fabricmc.net/tutorial:generator_types?rev=1763733551&amp;do=diff</link>
        <description>:!: This tutorial is outdated. For versions 1.18 and beyond, see Adding World Presets.

Adding Generator Types

Generator type is a wrapper around a chunk generator and shows up on the world generation menu as world type.
If you don&#039;t know what generator type is, you may want to scroll down and see the result section of this page first.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:global_data?rev=1759724877&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-06T04:27:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Global World Data</title>
        <link>https://wiki.fabricmc.net/tutorial:global_data?rev=1759724877&amp;do=diff</link>
        <description>Global World Data

Global World Data is data that is stored and synced between all clients such as Pillager raid information or Boss infomation.

Mojang uses PersistentStates to store global world data. You can check the Persistent States page for more information on how to save your data for use across different play sessions or server restarts.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:hotswapping?rev=1730654814&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-03T17:26:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Applying changes without restarting Minecraft</title>
        <link>https://wiki.fabricmc.net/tutorial:hotswapping?rev=1730654814&amp;do=diff</link>
        <description>Applying changes without restarting Minecraft

Restarting Minecraft can take a hefty amount of time. Thankfully, there are tools that allow you to apply some changes while the game is running, also called hotswapping.

Reload changed classes

In Eclipse or IntelliJ IDEA, run Minecraft in debug mode. To apply changes in code, click the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:installing_minecraft_fabric_server?rev=1623527549&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-06-12T19:52:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tutorial:installing_minecraft_fabric_server</title>
        <link>https://wiki.fabricmc.net/tutorial:installing_minecraft_fabric_server?rev=1623527549&amp;do=diff</link>
        <description>Moved to Installing a Fabric Server (Windows)</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:install_java?rev=1593629154&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-07-01T18:45:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tutorial:install_java</title>
        <link>https://wiki.fabricmc.net/tutorial:install_java?rev=1593629154&amp;do=diff</link>
        <description>Moved to Install/Verify Java (Windows)</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:install_with_minecraft_launcher?rev=1594229495&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-07-08T17:31:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tutorial:install_with_minecraft_launcher</title>
        <link>https://wiki.fabricmc.net/tutorial:install_with_minecraft_launcher?rev=1594229495&amp;do=diff</link>
        <description>Moved to Install Fabric - Minecraft Launcher</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:install_with_multimc?rev=1594229592&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-07-08T17:33:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tutorial:install_with_multimc</title>
        <link>https://wiki.fabricmc.net/tutorial:install_with_multimc?rev=1594229592&amp;do=diff</link>
        <description>Moved to: Install Fabric - MultiMC</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:interface_injection?rev=1774735485&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-28T22:04:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Interface Injection</title>
        <link>https://wiki.fabricmc.net/tutorial:interface_injection?rev=1774735485&amp;do=diff</link>
        <description>Interface Injection

Overview

Interface injection is a technique to add methods into a specific existing class.
More specifically, you can create an interface, and then inject this interface into the class.
As result the target class will acquire all the methods of the interface, as if it always had them.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:introduction?rev=1694640004&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-13T21:20:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Introduction to Modding with Fabric</title>
        <link>https://wiki.fabricmc.net/tutorial:introduction?rev=1694640004&amp;do=diff</link>
        <description>Introduction to Modding with Fabric

This is a quick introduction to some common techniques you can use while making Fabric mods.
To make mods for Minecraft, you&#039;ll often have to interact in non-standard ways with Minecraft&#039;s code.
While Minecraft has increasingly become flexible to changes, it&#039;s still not inherently built to be modded.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:inventory?rev=1775412208&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-05T18:03:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Storing items in a block as an Inventory</title>
        <link>https://wiki.fabricmc.net/tutorial:inventory?rev=1775412208&amp;do=diff</link>
        <description>Storing items in a block as an Inventory

:!: This page has been updated for mojmap. Because of this change, the class known as “Inventory” in yarn mappings is now called “Container.” See What&#039;s Going On With Mappings for more detail.

Make sure you&#039;ve made a block entity before reading this tutorial.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:itemgroup?rev=1724418216&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-23T13:03:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Item Groups</title>
        <link>https://wiki.fabricmc.net/tutorial:itemgroup?rev=1724418216&amp;do=diff</link>
        <description>Item Groups

This is the 1.20+ version of this tutorial. For the 1.19 version, see Creating an itemgroup (1.19).

So far, you have used /give @s tutorial:custom_item to obtain your item. However, unlike most vanilla items, it exists in none of the item group, and you cannot easily obtain it in Creative Mode! There are two ways of achieving this:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:items?rev=1777047438&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-24T16:17:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding an Item</title>
        <link>https://wiki.fabricmc.net/tutorial:items?rev=1777047438&amp;do=diff</link>
        <description>Adding an Item

Introduction

Adding a basic item is one of the first steps in modding. You&#039;re going to need to create an  object, register it, and give it a texture. To add additional behavior to the item you will need a custom  class. In this tutorial and all future ones, the “</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:items_docs?rev=1686587157&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-12T16:25:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Items</title>
        <link>https://wiki.fabricmc.net/tutorial:items_docs?rev=1686587157&amp;do=diff</link>
        <description>:!: This page is archived.

Items

Items are the pieces of content that appear in your inventory. They can perform actions when you click, act as food, or spawn entities. The following documentation will give you a rundown of the entire Item class and everything related to it.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:jigsaw_old?rev=1724593388&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T13:43:08+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Jigsaws</title>
        <link>https://wiki.fabricmc.net/tutorial:jigsaw_old?rev=1724593388&amp;do=diff</link>
        <description>Jigsaws

Jigsaws are good for advanced structures such as dungeons &amp; villages, and allow you to spend more time on actually building content vs. messing with procedural generation code. 

A repository with the finished code from this tutorial can be found</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:keybinds?rev=1775412116&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-05T18:01:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Custom Keybinds</title>
        <link>https://wiki.fabricmc.net/tutorial:keybinds?rev=1775412116&amp;do=diff</link>
        <description>Custom Keybinds

Keybinds: straight from the keyboard

Minecraft handles user input from peripherals such as the keyboard &amp; mouse using key-binds. When you press W your character moves forward, and when you press E your inventory opens. Every keybind can also be configured with the settings menu, so you can make your player move with arrow keys instead of WASD if you so desire.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:kotlin?rev=1691757860&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-08-11T12:44:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Using Kotlin with Fabric</title>
        <link>https://wiki.fabricmc.net/tutorial:kotlin?rev=1691757860&amp;do=diff</link>
        <description>Using Kotlin with Fabric

WARNING: this document assumes you have prior knowledge of Java (and a bit of JVM and Gradle). THIS IS NOT A KOTLIN LANGUAGE TUTORIAL, for that see the official Kotlin site.

Kotlin is a very powerful language which highly integrates with Java and can be executed on a JVM (it&#039;s compiled down to Java but you can write interop java and kotlin code in one project). This means, that you can use Kotlin for development of Minecraft fabric mods!</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:lang?rev=1724596523&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T14:35:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a lang file</title>
        <link>https://wiki.fabricmc.net/tutorial:lang?rev=1724596523&amp;do=diff</link>
        <description>Creating a lang file

Notice how your item has a weird display name, such as item.tutorial.my_item? This is because your item&#039;s name doesn&#039;t have a translation in your game&#039;s selected language. Translations are used to support multiple different languages for a single string.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:loader04x?rev=1703681918&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-12-27T12:58:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Loader 0.4.x and You!</title>
        <link>https://wiki.fabricmc.net/tutorial:loader04x?rev=1703681918&amp;do=diff</link>
        <description>:!: This page is irrelevant, most mods are now on Loader 0.4.x, and should be removed from the sidebar and kept archived for miscellaneous use.

Loader 0.4.x and You!

This tutorial lists what you need to know to update your mods to Loader 0.4.x (and beyond!?).</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mappings?rev=1772409367&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-01T23:56:07+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mappings</title>
        <link>https://wiki.fabricmc.net/tutorial:mappings?rev=1772409367&amp;do=diff</link>
        <description>Mappings

Introduction

Mappings defined the names of classes, fields and methods on obfuscated Minecraft versions including 1.21.11 and below. Developers using Fabric for these versions primarily use either Fabric&#039;s Yarn mappings, which provide meaningful names for the Minecraft codebase as decided by the community, or the official Mojang Mappings, available since 1.14 and providing official names for the entirety of Minecraft.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mcupdater_modpacks?rev=1558458361&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2019-05-21T17:06:01+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric MCUpdater Modpack Support</title>
        <link>https://wiki.fabricmc.net/tutorial:mcupdater_modpacks?rev=1558458361&amp;do=diff</link>
        <description>Fabric MCUpdater Modpack Support

Installing MCUpdater (User)

Just download MCUpdater from mcupdater.com! To add modpacks, press the “+” in the top-left corner and insert the .XML modpack definition URL provided by the modpack creator. To update a modpack, press</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:migratemappings?rev=1763251379&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-16T00:02:59+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Migrating to Yarn or Mojang Mappings in a Java codebase</title>
        <link>https://wiki.fabricmc.net/tutorial:migratemappings?rev=1763251379&amp;do=diff</link>
        <description>Migrating to Yarn or Mojang Mappings in a Java codebase

Loom allows semi-automatic updating of the mappings used in a Java codebase. This can be a useful tool for users wishing to keep their codebase up-to-date with the new changes in Yarn, or for users wishing to change to different mappings, including Mojang&#039;s own mappings. For more information, check out the dedicated</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mining_levels?rev=1664428063&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-09-29T05:07:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mining Levels</title>
        <link>https://wiki.fabricmc.net/tutorial:mining_levels?rev=1664428063&amp;do=diff</link>
        <description>Mining Levels

Introduction

The way mining levels and preferred tools are assigned has changed significantly in 1.17. Making your tools and blocks interact properly now requires adding them to specific tags.

Setting the preferred tool for your block</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:minotaur?rev=1666482509&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-10-22T23:48:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Publishing your mod on Modrinth using Minotaur</title>
        <link>https://wiki.fabricmc.net/tutorial:minotaur?rev=1666482509&amp;do=diff</link>
        <description>Publishing your mod on Modrinth using Minotaur

Minotaur is a Gradle plugin similar to CurseGradle.
This page only goes through the basics of Minotaur, and you should check out its GitHub documentation for further information.

Basic Implementation

First of all, add the Minotaur plugin to your plugins list in your</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixinheritance?rev=1615915149&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-03-16T17:19:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mixin Inheritance</title>
        <link>https://wiki.fabricmc.net/tutorial:mixinheritance?rev=1615915149&amp;do=diff</link>
        <description>DRAFT:

Mixin Inheritance

Motivation

The Mixin framework enables us as modders to make a number of precise changes to Minecraft&#039;s decompiled source code, including such things as:

	*  Adding new methods and fields to a vanilla class
	*  Implementing new interfaces onto classes</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_accessors?rev=1764533283&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-30T20:08:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Accessor Mixins</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_accessors?rev=1764533283&amp;do=diff</link>
        <description>Accessor Mixins

Accessor Mixins are special mixins defined as interfaces which must only contain @Accessor and @Invoker handlers. Unlike normal mixins however, Accessor Mixins are accessible via user code directly.

The @Accessor and @Invoker annotations allow you to access fields or invoke methods that are not visible (private) or mutable (final).</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_choosing_the_right_mixin?rev=1761487092&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-26T13:58:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mixin: choosing the right tool (DRAFT)</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_choosing_the_right_mixin?rev=1761487092&amp;do=diff</link>
        <description>:!: This page is currently only a draft! It is not intended to be read by Wiki users yet!

Mixin: choosing the right tool (DRAFT)

Preamble

This page should be read after having already read the Mixin Introduction page.

Mixins are a tool that is, by virtue of modifying potentially vastly different targets, a tool that changes its usage on a case-by-case basis. As such, which tool is right for the job, if Mixin is fitting in the first place, will change for every single case. This page will att…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_examples?rev=1775649411&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-08T11:56:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mixin Examples</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_examples?rev=1775649411&amp;do=diff</link>
        <description>FIXME The Fabric Wiki&#039;s Mixin segments is under heavy reviews, pages on the topic are subject to major edits or rewrites. This page in particular is noted as being unreliable to learn Mixin as a tool from. Learning by example should be used sparingly, as it may lead to a lack of understanding. Prioritize, if you are unable to learn through documentation, presenting your intention in detail in a Mixin support channel on the Fabric or SpongePowered Discord servers and discussing with experienced d…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_export?rev=1766661253&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-25T11:14:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Exporting and Dumping Mixin Targets</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_export?rev=1766661253&amp;do=diff</link>
        <description>Exporting and Dumping Mixin Targets

Exporting a Transformed Class

When debugging mixins, it&#039;s useful to be able to see the finalized classes with your changes and injects inserted. Mixin provides a flag that allows for this:

-Dmixin.debug.export=true</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_glossary?rev=1774794480&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-29T14:28:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mixin Glossary</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_glossary?rev=1774794480&amp;do=diff</link>
        <description>Mixin Glossary

About This Page

This page aims to address terms, acronyms, abbreviations, expressions, etc. and define them without instructing how to use the associated tools. It is complementary to actual documentation on how to use the tools and subsystem of Mixin and should only be used to get a quick, general idea of what a term means in the context of Mixin usage and learning.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_hotswaps?rev=1774373452&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-24T17:30:52+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hotswapping Mixins</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_hotswaps?rev=1774373452&amp;do=diff</link>
        <description>Hotswapping Mixins

Mixins can&#039;t be hot-swapped in a default Fabric environment. To enable this functionality, you&#039;ll have to specify the -javaagent flag inside your VM options.  

The only pre-requisite is having a copy of the sponge mixin jar. Fabric pulls this by default, so you should be able to locate it within your Gradle cache folder. IDEA users can look at the bottom of their project view on the left side of the screen to find the library:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_injects?rev=1767272586&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-01T13:03:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>@Inject</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_injects?rev=1767272586&amp;do=diff</link>
        <description>@Inject

Introduction

In the context of Mixins, when talking about injects, it is typically in reference to the specific @Inject injector(i.e. “an inject”). This is not to be confused with injectors as a whole or the general process of injection, which include other injectors such as</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_introduction?rev=1774876737&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-30T13:18:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Introduction to Mixins (WIP)</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_introduction?rev=1774876737&amp;do=diff</link>
        <description>FIXME The Mixin related pages of the Fabric Wiki are undergoing a more thorough review, and are subject to change, rewrites or being replaced. Many pages may be outdated, inaccurate, inactive or incomplete. It is strongly recommended to use the Fabric wiki and linked resources to get a rudimentary Mixin understanding, and then frequently ask questions in dedicated Mixin Support channels on the Fabric or SpongePowered Discord servers for any specific knowledge or specific issue-solving. Any help …</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_override?rev=1767272310&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-01T12:58:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Overriding a Mixin Target&#039;s parent</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_override?rev=1767272310&amp;do=diff</link>
        <description>Overriding a Mixin Target&#039;s parent

Introduction

When mixing into a class, you may want to create overrides for methods the target inherits from parents, as you would if it were your own class. However, there are specific design patterns that should be implemented to do so for Mixin targets in order to remain as compatible as possible with other mods wanting to do similar modifications. This page will go over both the approach of trying to directly create an override, and how it is problematic;…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_redirectors?rev=1758579688&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-22T22:21:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mixin redirectors</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_redirectors?rev=1758579688&amp;do=diff</link>
        <description>Mixin redirectors

introduction

Redirectors are methods that can replace method invocations, field accesses, object creation, and instanceof checks. Redirectors are declared by @Redirect annotations and generally look like this:


@Redirect(method = &quot;${signatureOfMethodInWhichToRedirect}&quot;,
          at = @At(value = &quot;${injectionPointReference}&quot;, target = &quot;${signature}&quot;))
public ReturnType redirectSomeMethod(Arg0Type arg0, Arg1Type arg1) {
    MyClass.doMyComputations();
  
    return computeSom…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_redirectors_methods?rev=1610684408&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-01-15T04:20:08+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Redirecting methods</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_redirectors_methods?rev=1610684408&amp;do=diff</link>
        <description>Redirecting methods

Method redirectors can use the following injection point references:

	*  INVOKE; and
	*  INVOKE_STRING.

INVOKE

The INVOKE injection point reference is used for invocations of target in method, which means that it can be used in order to redirect a method immediately before it is called.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_registration?rev=1758641702&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-23T15:35:02+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Registering Mixins</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_registration?rev=1758641702&amp;do=diff</link>
        <description>Registering Mixins

Introduction

In this tutorial, you will learn how to register your Mixins through the resources/fabric.mod.json.

Inside your resources folder is where your fabric.mod.json should be. 

Use this link to view the Fabric Example Mod&#039;s resources folder:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_tips?rev=1760920057&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-20T00:27:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mixin Tips (WIP)</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_tips?rev=1760920057&amp;do=diff</link>
        <description>FIXME This page is currently incomplete and still contains relatively very old edits, it may change at any time or contain incomplete or outdated advice!

Mixin Tips (WIP)

This is a collection of different tips some might find useful. It&#039;s recommended to read</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:mixin_your_first_mixin?rev=1769197463&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-23T19:44:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Tutorial: Making your first Mixin</title>
        <link>https://wiki.fabricmc.net/tutorial:mixin_your_first_mixin?rev=1769197463&amp;do=diff</link>
        <description>Tutorial: Making your first Mixin

Preamble

This is meant to be complementary to the Introduction to Mixins page, it is not required but highly recommended to read it before this tutorial. This tutorial intends to hold a newcomer&#039;s hand through each step of creating a very elementary Mixin. This intends to create familiarity with basic Mixin notions and syntax, reducing how strange Mixins can seem during an initial learning curve.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:modding_tips?rev=1769295671&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-24T23:01:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Modding Tips</title>
        <link>https://wiki.fabricmc.net/tutorial:modding_tips?rev=1769295671&amp;do=diff</link>
        <description>Modding Tips

Here&#039;s a collection of assorted Fabric-related modding tips gleaned from experiences on advising users of the API.

Basics (API)

	*  Due to the injection-based approach of Fabric&#039;s API development, we don&#039;t tend to patch classes outright in a way visible to the end user. As such, you may occasionally find Fabric extensions of vanilla classes when you run into something you cannot do. For example:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:model_predicate_providers?rev=1743567623&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-02T04:20:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Model Predicate Providers (before 1.21.4)</title>
        <link>https://wiki.fabricmc.net/tutorial:model_predicate_providers?rev=1743567623&amp;do=diff</link>
        <description>Model Predicate Providers (before 1.21.4)

:!: Model predicate providers are removed since 1.21.4. Since 1.21.4, please use items model definition instead. See Minecraft Wiki for details.

Introduction

Model providers are used to dynamically change the model of items based on data from</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:networking?rev=1729975196&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-26T20:39:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Networking</title>
        <link>https://wiki.fabricmc.net/tutorial:networking?rev=1729975196&amp;do=diff</link>
        <description>Note: This page has replaced the old networking page.
It is recommended to use the new networking API described on this page.
The old page can be found here.

For the even newer networking API introduced at 1.20.5, read the .

Networking

Networking in Minecraft is used so the client and server can communicate with each other. Networking is a broad topic so this page is split up into a few categories.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:ores?rev=1730138155&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-28T17:55:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Generating Custom Ores [1.19.3+]</title>
        <link>https://wiki.fabricmc.net/tutorial:ores?rev=1730138155&amp;do=diff</link>
        <description>If you are looking for 1.19.3, ores should be done completely in jsons. A helpful tool to know is: Configured Features and Placed Features

Generating Custom Ores [1.19.3+]

A lot of mods add their own ores, and you&#039;ll need a way to place them in existing biomes for players to find. In this tutorial, we&#039;ll look at adding ores to existing biomes. There are 2 steps that are required to add ores to biomes.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:particles?rev=1768340269&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-13T21:37:49+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Particles</title>
        <link>https://wiki.fabricmc.net/tutorial:particles?rev=1768340269&amp;do=diff</link>
        <description>Adding Particles

Particles are textures used for special events and additional VFX. They are used on explosions, torches, dripping water and more!

Adding Simple Particles

Simple Particles might only use Minecraft&#039;s own particle Factories. This means all behavior must be equal to an already-existing particle in vanilla. For this example, we&#039;ll do a green-variant of</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:persistent_states?rev=1764953500&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-05T16:51:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Persistent State</title>
        <link>https://wiki.fabricmc.net/tutorial:persistent_states?rev=1764953500&amp;do=diff</link>
        <description>Persistent State

Frequently in our mods we have information about the player, or about the state of the world that we would like to survive across player deaths and server restarts. For instance, let&#039;s say our mod keeps track of how many dirt blocks a player has broken:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:pixel_raycast?rev=1701383619&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-30T22:33:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Pixel raycast</title>
        <link>https://wiki.fabricmc.net/tutorial:pixel_raycast?rev=1701383619&amp;do=diff</link>
        <description>Pixel raycast

Suppose you want to know what block or entity corresponds to a pixel on the screen. This can be done with pixel raycast.

All of this is client side.

There are two cases, center pixel (crosshair) and arbitrary pixel.

Special case: Center pixel</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:potions?rev=1694329724&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-10T07:08:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Potions</title>
        <link>https://wiki.fabricmc.net/tutorial:potions?rev=1694329724&amp;do=diff</link>
        <description>Adding Potions

Introduction

Adding a custom potions to your mod follows a similar process to adding an item. However, in the case of creating new potions, it is easiest to create a custom class rather than creating an instance of the Potion class under ModInitializer</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:primer?rev=1724586637&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T11:50:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Minecraft Modding Primer</title>
        <link>https://wiki.fabricmc.net/tutorial:primer?rev=1724586637&amp;do=diff</link>
        <description>Minecraft Modding Primer

Note: This primer assumes no prior experience modding Minecraft. However, you will need to have a firm grasp on programming in Java to work with Minecraft (see the Prerequisites section). If you are coming to Fabric from another modloader, like Forge, the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:projectiles?rev=1709862966&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-03-08T01:56:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a Custom Projectile</title>
        <link>https://wiki.fabricmc.net/tutorial:projectiles?rev=1709862966&amp;do=diff</link>
        <description>Creating a Custom Projectile

 It is important to read through and understand this tutorial as well as this tutorial, as this will help you understand most of the elements included in this tutorial.


This tutorial will teach you how to create your own custom projectile, including the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:propertydelegates?rev=1653667230&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-27T16:00:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Syncing Integers with PropertyDelegates</title>
        <link>https://wiki.fabricmc.net/tutorial:propertydelegates?rev=1653667230&amp;do=diff</link>
        <description>Syncing Integers with PropertyDelegates

PropertyDelegate: A PropertyDelegate is a kind of Container which contains a specific amounts of integer values which can be read or changed.

In this Tutorial we will sync Integer values between the client and the server, an example for this in Vanilla would be the smelting progress of a furnace.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:publishing_mods_using_github_actions?rev=1732055734&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-19T22:35:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Publishing mods on CurseForge, Modrinth &amp; GitHub with MC-Publish</title>
        <link>https://wiki.fabricmc.net/tutorial:publishing_mods_using_github_actions?rev=1732055734&amp;do=diff</link>
        <description>Publishing mods on CurseForge, Modrinth &amp; GitHub with MC-Publish

MC-Publish is a GitHub Action by Kir-Antipov that communicates with GitHub, CurseForge and Modrinth APIs to upload your mod files. This page only goes through the basics of the set-up and you should</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:reading_mc_code?rev=1754791790&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-10T02:09:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Reading the Minecraft source</title>
        <link>https://wiki.fabricmc.net/tutorial:reading_mc_code?rev=1754791790&amp;do=diff</link>
        <description>Reading the Minecraft source

Reading the Minecraft source is an important skill in modding. This is mainly because

	*  Most of the Minecraft things are not documented
		*  Documentations/tutorials get outdated fairly quickly

To read the Minecraft source, you need to generate sources first. See the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:recipes?rev=1772408299&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-01T23:38:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Crafting recipes</title>
        <link>https://wiki.fabricmc.net/tutorial:recipes?rev=1772408299&amp;do=diff</link>
        <description>Crafting recipes

Adding a basic crafting recipe

Make sure you added an item before reading this tutorial, we will be using it.  

So far, our item is obtainable through the creative menu or commands.
To make it available to survival players, we&#039;ll add a crafting recipe for the item.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:recipe_type?rev=1775936698&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-11T19:44:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a Custom Recipe Type</title>
        <link>https://wiki.fabricmc.net/tutorial:recipe_type?rev=1775936698&amp;do=diff</link>
        <description>Creating a Custom Recipe Type

In this page, we will create our own custom recipe type, including the shapeless version!
We won&#039;t use any vanilla Minecraft classes, it will be a fully custom recipe type.

You can find and learn how to make other recipe types.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:recipe_types_introduction?rev=1608502263&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-12-20T22:11:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Introduction to RecipeTypes</title>
        <link>https://wiki.fabricmc.net/tutorial:recipe_types_introduction?rev=1608502263&amp;do=diff</link>
        <description>Introduction to RecipeTypes

What is a RecipeType

A RecipeType is different from a recipe itself. Let&#039;s see an example of a recipe to understand it better :


{
  &quot;type&quot;: &quot;minecraft:smelting&quot;,
  &quot;ingredient&quot;: {
    &quot;tag&quot;: &quot;minecraft:logs_that_burn&quot;
  },
  &quot;result&quot;: &quot;minecraft:charcoal&quot;,
  &quot;experience&quot;: 0.15,
  &quot;cookingtime&quot;: 200
}</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:reflection?rev=1637275741&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-11-18T22:49:01+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Reflection</title>
        <link>https://wiki.fabricmc.net/tutorial:reflection?rev=1637275741&amp;do=diff</link>
        <description>Reflection

Compared to regular Java development, since Minecraft has been remapped between official (obfuscated), intermediary, and mapped (yarn or mojmap) names, finding particular fields or methods for reflection and method handles require special caution. If classes are found by literal string names, as in</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:registry?rev=1724594789&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T14:06:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Intro to Registries</title>
        <link>https://wiki.fabricmc.net/tutorial:registry?rev=1724594789&amp;do=diff</link>
        <description>Intro to Registries

Minecraft uses the registry system to handle almost everything in the game. When developing mods, you will need to register most content you add to the game. This helps with:

	*  Letting the game know your content exists
	*  Verifying game content between client &amp; server</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:registry_types?rev=1739046682&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-08T20:31:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Standard Registries</title>
        <link>https://wiki.fabricmc.net/tutorial:registry_types?rev=1739046682&amp;do=diff</link>
        <description>Standard Registries

DELETEME Outdated page and not necessary.

Minecraft has registries for many kinds of objects, such as blocks, items or entities. These are the registries in vanilla:

	&quot; :!: The page is outdated. For version 1.19.3 and above, please replace</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:resource?rev=1569462164&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2019-09-26T01:42:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Resource</title>
        <link>https://wiki.fabricmc.net/tutorial:resource?rev=1569462164&amp;do=diff</link>
        <description>Resource

Resource system is the backbone of Minecraft resource and data pack contents. It is important for modders to learn to use the resource system correctly and efficiently.

Data and Resource Packs

Data Pack on Minecraft Wiki

Resource Pack on Minecraft Wiki

Using resource reload listener

When mods load content from data or resource packs, they need to use a resource reload listener.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:screen?rev=1772408031&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-01T23:33:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a screen</title>
        <link>https://wiki.fabricmc.net/tutorial:screen?rev=1772408031&amp;do=diff</link>
        <description>Creating a screen

A screen is a graphical user interface that extends Screen, allowing the user to interact and fulfill some functionalities. One example of a screen is a custom config screen of your mod. Screens only exist in the client, so if you are using split sources, make sure to place it in your `client` source set.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:screenhandler?rev=1724734197&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-27T04:49:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Creating a Container Block</title>
        <link>https://wiki.fabricmc.net/tutorial:screenhandler?rev=1724734197&amp;do=diff</link>
        <description>Creating a Container Block

In this tutorial we will create simple storage block similar to a dispenser, explaining how to build a user interface with the ScreenHandler API from Fabric and Vanilla Minecraft along the way.

Let us first explain some vocabulary:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:setup?rev=1764952822&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-05T16:40:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Setting up a mod development environment</title>
        <link>https://wiki.fabricmc.net/tutorial:setup?rev=1764952822&amp;do=diff</link>
        <description>Setting up a mod development environment

Prerequisites

Installing JDK

To develop mods, a Java Development Kit (JDK) is required. Visit &lt;https://adoptium.net/en-GB/temurin/releases&gt; for installers.

	*  Since 1.20.5, Java 21 or newer is required.
	*  Since 1.18, Java 17 or newer is required.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:shield?rev=1773399256&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-13T10:54:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Making a Custom Shield in Minecraft [1.19-1.21.5]</title>
        <link>https://wiki.fabricmc.net/tutorial:shield?rev=1773399256&amp;do=diff</link>
        <description>Making a Custom Shield in Minecraft [1.19-1.21.5]

:!: The tutorial depends on third-party libraries.

Congrats! You just learned how to create your custom tools in the last tutorial! Now imagine you want to shield yourself from that sword if your friend got it. If you made it too op, a regular shield won&#039;t do. So we will see how to make a custom shield.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:side?rev=1649824354&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-04-13T04:32:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Side</title>
        <link>https://wiki.fabricmc.net/tutorial:side?rev=1649824354&amp;do=diff</link>
        <description>Side

Minecraft uses the Client-server model, that is users install the game client and connect to a server to play the game. Fabric allows mods to target either the Minecraft client or the Minecraft server, but also both at the same time. 

The concept of client/server in Minecraft is ambiguous and may refer to either physical or logical sides. The terms client/server may be used to distinguish the different distributions of Minecraft (the Minecraft client vs. a dedicated Minecraft server) whic…</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:sidebar?rev=1775412582&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-05T18:09:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Tutorials</title>
        <link>https://wiki.fabricmc.net/tutorial:sidebar?rev=1775412582&amp;do=diff</link>
        <description>← Go back to the homepage

Fabric Tutorials

	*  Information On Tutorials

Basics

	*  Introduction to Fabric and Modding (older version)
	*  Setting up a Development Environment (older version)
	*  Reading the Minecraft source
	*  Modding with Fabric with Kotlin
	*  Basic Conventions and Terminology
	*  Server and Client Side
	*  Introduction to Registries
		*  Standard Registries

	*  Applying Changes without Restarting Minecraft
	*  Creating a language file

Items

Creation of items, such as …</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:skcraft_modpacks?rev=1616043857&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-03-18T05:04:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Using the SKCraft Launcher platform for Fabric modpacks</title>
        <link>https://wiki.fabricmc.net/tutorial:skcraft_modpacks?rev=1616043857&amp;do=diff</link>
        <description>Using the SKCraft Launcher platform for Fabric modpacks

See the notes on the Launcher wiki.

NOTE: The steps detailed below are not currently implemented.

	*  Open the Fabric download page.
	*  Click on “SKCraft Launcher” and pick your game &amp; loader version.
	*  Click the button to download the loader JAR.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:sounds?rev=1719159791&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-06-23T16:23:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Playing Sounds</title>
        <link>https://wiki.fabricmc.net/tutorial:sounds?rev=1719159791&amp;do=diff</link>
        <description>Playing Sounds

Ready to replace those zombie sounds with your own sounds? You&#039;ve come to the right place.   

Playing a pre-existing sound

Playing a pre-exisiting sound is fairly simple. Make sure you are on the logical server and call world.playSound</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:spawn_egg?rev=1673746403&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-01-15T01:33:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a Custom Spawn Egg</title>
        <link>https://wiki.fabricmc.net/tutorial:spawn_egg?rev=1673746403&amp;do=diff</link>
        <description>Adding a Custom Spawn Egg

So, you finally finished making your custom entity, but you don&#039;t want to use commands every single time you need to test something with your entity.
That&#039;s where a spawn egg comes in. Adding a custom spawn egg is actually much easier than you might think. (It&#039;s definitely much easier than creating an entity).</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:start?rev=1765958021&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-17T07:53:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Modding Tutorials</title>
        <link>https://wiki.fabricmc.net/tutorial:start?rev=1765958021&amp;do=diff</link>
        <description>← Go back to the homepage

Fabric Modding Tutorials

These pages contain tutorials on most aspects of modding with Fabric Loader and in most cases Fabric API.
A list of all topics can be found on the sidebar, ranging from blocks and items, to world generation and custom entities. The sidebar is a the left side for desktop view, and collapsed in a</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:stats?rev=1767907876&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-08T21:31:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Player Statistics</title>
        <link>https://wiki.fabricmc.net/tutorial:stats?rev=1767907876&amp;do=diff</link>
        <description>Adding Player Statistics

Statistics track time spend doing something, distance traveled or jumped, and how often the player interacted with blocks or performed certain actions.

To add a custom statistic, create an identifier which will be used to register and increase the stat:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:status_effects?rev=1673507211&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-01-12T07:06:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Status Effects</title>
        <link>https://wiki.fabricmc.net/tutorial:status_effects?rev=1673507211&amp;do=diff</link>
        <description>Adding Status Effects

To add status effects to your mod, you&#039;ll need to:

	*  create a class that extends StatusEffect
	*  add custom functionality
	*  register your status effect
	*  add translations and textures for your status effect

Creating Status Effect Class</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:structures_old?rev=1724593924&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-25T13:52:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Structure Features [1.16.3]</title>
        <link>https://wiki.fabricmc.net/tutorial:structures_old?rev=1724593924&amp;do=diff</link>
        <description>Adding Structure Features [1.16.3]

:!: For versions 1.18 and beyond, the Fabric Structure API no longer exists and structures can be done entirely in datapacks. See tutorials in Minecraft Wiki.  

We’re going to look at registering and placing structures in your world.

To view examples of vanilla structures in action,</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:tags?rev=1770762273&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-10T22:24:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Tags</title>
        <link>https://wiki.fabricmc.net/tutorial:tags?rev=1770762273&amp;do=diff</link>
        <description>Tags

Tags are groups of blocks, items, fluids, biomes or other registry objects which share similar properties. They can be used in recipes to allow for multiple items to be used in the same recipe interchangeably. Read more on what tags are on the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:technic_modpacks?rev=1645791921&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-02-25T12:25:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Using Technic for Fabric modpacks</title>
        <link>https://wiki.fabricmc.net/tutorial:technic_modpacks?rev=1645791921&amp;do=diff</link>
        <description>Using Technic for Fabric modpacks

	*  Open the Fabric download page.
	*  Use the button to download version.json and put it in a bin directory in your modpack ZIP.
NOTE The version.json will be the only file in bin/. If other guides tell you to add additional files to bin/, you&#039;re probably safe to just ignore that part and keep going.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:terms?rev=1761245599&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-23T18:53:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Basic Conventions &amp; Terminology</title>
        <link>https://wiki.fabricmc.net/tutorial:terms?rev=1761245599&amp;do=diff</link>
        <description>Basic Conventions &amp; Terminology

Before starting with Fabric modding, it&#039;s important to understand some of the key terms and phrases used in future tutorial pages. It&#039;s also good to know basic conventions for things such as package structure and modid naming. Knowing these early will help you to understand tutorials better and enable you to ask better questions when needed.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:tools?rev=1724419530&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-23T13:25:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Tools</title>
        <link>https://wiki.fabricmc.net/tutorial:tools?rev=1724419530&amp;do=diff</link>
        <description>Adding Tools

:!: This tutorial may be outdated as since 1.20.5, item components are used. For latest tutorial see corresponding page on Fabric Docs.

Creating a Tool Material

Tools require a , which defines the following behavior:

	*  durability
	*  mining speed
	*  attack damage</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:tooltip?rev=1752026126&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-07-09T01:55:26+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding a tooltip</title>
        <link>https://wiki.fabricmc.net/tutorial:tooltip?rev=1752026126&amp;do=diff</link>
        <description>Adding a tooltip

Item tooltip

Sometimes you want to add some extra information when showing the tooltip of the item. To achieve this, you should override your own  like so (see lang for how to translate the tooltip).

Here we assume you have created your own class (see</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api?rev=1743372351&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-30T22:05:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fluid, Item and Energy Transfer</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api?rev=1743372351&amp;do=diff</link>
        <description>Fluid, Item and Energy Transfer

Transactions

The Fabric Transfer API relies heavily on the concept of transactions.

	*  The Transaction system. Before looking at the details of how transfer works, we take a detour to discuss transactions.

The Fluid Transfer API

The Fabric Fluid Transfer</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api_fluid-containing-items?rev=1644604812&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-02-11T18:40:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Transfer API: Fluid-containing items</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api_fluid-containing-items?rev=1644604812&amp;do=diff</link>
        <description>Fabric Transfer API: Fluid-containing items

This article is part of a series on the Fabric Transfer API. Link to the home page of the series.

This tutorial focuses on “fluid-containing items”, i.e. items such as buckets or tanks.
This is a complex topic, so make sure you read the previous fluid and item tutorials first.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api_fluid_implementation?rev=1643833720&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-02-02T20:28:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Transfer API: How to implement Storage</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api_fluid_implementation?rev=1643833720&amp;do=diff</link>
        <description>Fabric Transfer API: How to implement Storage&lt;FluidVariant&gt;

This article is part of a series on the Fabric Transfer API. Link to the home page of the series.

Now that you understand how to find instances of Storage&lt;FluidVariant&gt; and how to use them, you are now ready to learn how it can be implemented.
It&#039;s possible to implement directly by implementing the interface and filling the methods, but Fabric</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api_item_storage?rev=1766053091&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-18T10:18:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Transfer API: Item transfer with Storage</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api_item_storage?rev=1766053091&amp;do=diff</link>
        <description>Fabric Transfer API: Item transfer with Storage&lt;ItemVariant&gt;

This article is part of a series on the Fabric Transfer API. Link to the home page of the series.

This tutorial aims to give an overview of the Fabric Item Transfer API. Please make sure that you read the various fluid tutorials before reading this one, since most concepts used in the Fluid Storage</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api_simpletank?rev=1677054133&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-02-22T08:22:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Transfer API: Creating a simple tank</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api_simpletank?rev=1677054133&amp;do=diff</link>
        <description>Fabric Transfer API: Creating a simple tank

This article is part of a series on the Fabric Transfer API. Link to the home page of the series.

But wait, what is a FluidVariant ?

A FluidVariant is what the Transfer API uses to represent the “type” of a fluid. It contains the Fluid</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api_storage?rev=1635589508&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-10-30T10:25:08+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Fabric Transfer API: Understanding Storage</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api_storage?rev=1635589508&amp;do=diff</link>
        <description>Fabric Transfer API: Understanding Storage&lt;FluidVariant&gt;

This article is part of a series on the Fabric Transfer API. Link to the home page of the series.

Storage&lt;FluidVariant&gt; is a thing that contains fluids, it is what tanks, buckets, etc... implement and it is what pipe mods and others use to move fluids between containers.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:transfer-api_transactions?rev=1689775206&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-07-19T14:00:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>The Transaction system</title>
        <link>https://wiki.fabricmc.net/tutorial:transfer-api_transactions?rev=1689775206&amp;do=diff</link>
        <description>The Transaction system

This article is part of a series on the Fabric Transfer API. Link to the home page of the series.

Motivation

When interacting with inventories, we often want to perform multiple related operations. For example, we might want to either perform all of the following actions, or none of them:</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:trees?rev=1671586806&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-12-21T01:40:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding Trees [1.19.2] (Advanced)</title>
        <link>https://wiki.fabricmc.net/tutorial:trees?rev=1671586806&amp;do=diff</link>
        <description>Adding Trees [1.19.2] (Advanced)

It is recommended that you learn how to create a Feature in Minecraft first before reading this tutorial.


Trees are a great way to expand Minecraft&#039;s world generation in your mod.

Beware that this topic is advanced and preferably you should have decent experience with modding world generation in Minecraft before starting.</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:updating_yarn?rev=1659434613&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-08-02T10:03:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Updating Yarn and intermediary to a new Minecraft version</title>
        <link>https://wiki.fabricmc.net/tutorial:updating_yarn?rev=1659434613&amp;do=diff</link>
        <description>Updating Yarn and intermediary to a new Minecraft version

Last updated 2020-05-20 by 2Xsaiko.

Definitions/Notes

	*  A refers to the starting version of the game; B refers to the target version. They should always use the official Mojang identifier for a version!</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:upload_your_log?rev=1563648078&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2019-07-20T18:41:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Upload your log</title>
        <link>https://wiki.fabricmc.net/tutorial:upload_your_log?rev=1563648078&amp;do=diff</link>
        <description>Upload your log</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:villager_activities?rev=1694637013&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-13T20:30:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Activities</title>
        <link>https://wiki.fabricmc.net/tutorial:villager_activities?rev=1694637013&amp;do=diff</link>
        <description>Activities

This is summary of how to add stuff for villagers to do. Here is the repo with the full code. The accessors are not explained here, they are at Mixin Accessors.
An activity is a set of tasks.
First register the activity:


    public static final Activity PRAY = Activity.register(&quot;pray&quot;);</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:waterloggable?rev=1730039129&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-27T14:25:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Make a Block Waterloggable</title>
        <link>https://wiki.fabricmc.net/tutorial:waterloggable?rev=1730039129&amp;do=diff</link>
        <description>Make a Block Waterloggable

To make blocks waterloggable, implement Waterloggable interface and override some methods.


public class VerticalSlabBlock extends HorizontalFacingBlock implements Waterloggable {
    [...]
}


In this case, we store the</description>
    </item>
    <item rdf:about="https://wiki.fabricmc.net/tutorial:world_presets?rev=1767888124&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-08T16:02:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Adding World Presets [1.19.x]</title>
        <link>https://wiki.fabricmc.net/tutorial:world_presets?rev=1767888124&amp;do=diff</link>
        <description>Adding World Presets [1.19.x]

A WorldPreset is a wrapper class around a ChunkGenerator that allows you to create a world with a preconfigured chunk generator. The preset is shown on the “More World Options” screen, on the “World Type” button. The vanilla world presets are Default, Large Biomes, AMPLIFIED, Single Biome, Superflat, and Debug Mode.</description>
    </item>
</rdf:RDF>
