Minecraft 1.19.3 is almost here, with big changes to game internals. Beginning with this update, Mojang have changed their versioning scheme such that ‘minor’ releases like this one may contain larger changes under the hood. As such, the changes in this version affect almost all mods (not even comparable to the changes in 1.18.2, and significantly bigger than 1.19). Here are the list of all major modder-facing changes in this version.
As usual, we ask players to be patient, and give mod developers time to update to this new version.
Fabric changes
Developers should use Loom 1.0 (at the time of writing) to develop for Minecraft 1.19.3.
Minecraft 1.19.3 introduces numerous breaking changes to major developer-facing APIs.
Fabric API Mod ID change
The mod ID of Fabric API is now fabric-api
. The old ID fabric
still works in fabric.mod.json
, such as depends
; however, the new ID is recommended for better user experience when Fabric API is missing.
New Fabric API features
Fabric API added many features since the last update blog post:
- Item API: support stack-aware recipe remainders. (AlphaMode)
- Content Registries: register villager interactions, sculk sensor frequencies, and path node types (aws404, Shnupbups, devpelux)
- Client Tags: allow client-side mods to rely on tags not present on the server. (dexman545)
- Entity Events: add
AFTER_DEATH
,AFTER_DAMAGE
, andALLOW_DEATH
events. (Technici4n) - Resource Conditions: support all tags. (apple502j)
- Sound API: play custom sounds. (SquidDev)
- Resource Loader: support
Text
as pack display name. (apple502j) - Block Appearance API: groundwork for cross-mod connected textures. (Technici4n)
FabricLanguageProvider
: easily generate language JSON files with data generation. (mineblock11)- Overwriting Screen Handler Factory: open new screen handlers without re-centering the mouse pointer. (apple502j)
- Transfer API: add several helper APIs for fluid interactions and storage. (Technici4n)
Minecraft changes
Registries
There are several changes to registries.
The most impactful change is that the Registry
class is now split into 3 different classes:
RegistryKeys
holds theRegistryKey
instances used for registries, previously held inRegistry
’sstatic final
fields.Registries
holds all static registry instances.Registry
is now an interface and holds everything else.
Together with this change, the KEY
suffixes for registry key fields have been removed.
- Registry.register(Registry.BLOCK_KEY, new Identifier("test", "dirt"), DIRT_BLOCK);+ Registry.register(Registries.BLOCK, new Identifier("test", "dirt"), DIRT_BLOCK);
In many parts of the code, Registry
is now replaced with RegistryEntryLookup
or Registerable
. RegistryEntryLookup
is a read-only view of a registry, while Registerable
is a write-only view. The BuiltinRegistries
class no longer holds the built-in registry; it instead holds the builder to create a RegistryEntryLookup.RegistryLookup
(a lookup of registry lookups, similar to DynamicRegistryManager
). See below for migrating old worldgen code.
Since virtually all registry-related code needs a rewrite, Yarn used this opportunity to repackage the registry and tag packages under net.minecraft.registry
and net.minecraft.registry.tag
respectively. Note, if you are using Mojang Mappings or other third-party mappings, this does not affect you. A simple find-and-replace should be enough:
- import net.minecraft.tag.TagKey;- import net.minecraft.util.registry.Registry;- import net.minecraft.util.registry.RegistryEntry;+ import net.minecraft.registry.tag.TagKey;+ import net.minecraft.registry.Registry;+ import net.minecraft.registry.entry.RegistryEntry;
Fabric API’s DynamicRegistrySetupCallback
was changed to take a new context object DynamicRegistryView
instead of a DynamicRegistryManager
. This API allows easy registration of events, while preventing crashes caused by the misuse of previous API.
Item Groups
One of the major changes in this version involve the Creative inventory screen. Items can now appear in multiple tabs and the display order no longer relies on the item registration order. Item groups got a significant refactor during this process.
The fabric-item-groups-v0
module is replaced with fabric-item-group-api-v1
. This is now required for adding items to vanilla item groups; you can no longer specify the item group using Item.Settings
.
To add an item to a vanilla or other existing item group, use ItemGroupEvents
.
// 1.19.2Item MY_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));// 1.19.3ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register(entries -> entries.add(MY_ITEM));// Instead of ItemGroup, you can also specify an Identifier for modded item groups.
To create a new item group, use FabricItemGroup.builder()
. This allows adding items directly, without using ItemGroupEvents
:
ItemGroup ITEM_GROUP = FabricItemGroup.builder(new Identifier("example", "test_group")) .displayName(Text.literal("Example Item Group")) .icon(() -> new ItemStack(Items.DIAMOND)) .entries((enabledFeatures, entries, operatorEnabled) -> { entries.add(Items.DIAMOND); }) .build();
The changes also made it possible to add items at a specific position in the Creative inventory. Check the FabricItemGroupEntries javadoc for details.
Data generation
A number of breaking changes have been made to the Data Generation API.
Data generators now have to create a “pack” and add providers to the pack. (It’s like a resource pack - the provider generates a resource for a specific pack.) This can be done with FabricDataGenerator#createPack
, or createBuiltinResourcePack
for packs loadable by ResouceManagerHelper#registerBuiltinResourcePack
.
FabricDataGenerator.Pack pack = dataGenerator.createPack();pack.addProvider(YourProvider::new);
Data generator constructors now take FabricDataOutput
as an argument instead of DataGenerator
. generateStuff
methods (e.g. generateBlockLootTables
) are now provided from the vanilla game and renamed to generate
. They are also now public, not protected.
public class TestBlockLootTableProvider extends FabricBlockLootTableProvider { public TestBlockLootTableProvider(FabricDataGenerator dataGenerator) { super(dataGenerator); } @Override // Renamed from generateBlockLootTables and now public public void generate() { addDrop(SIMPLE_BLOCK); }}
For tag generators, the constructor must also take CompletableFuture<RegistryWrapper.WrapperLookup>
. FabricTagProvider.DynamicRegistryTagProvider
is now replaced with just FabricTagProvider
. The configure
method is used to add tags.
public class TestBiomeTagProvider extends FabricTagProvider<Biome> { public TestBiomeTagProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) { super(output, RegistryKeys.BIOME, registriesFuture); } @Override protected void configure(RegistryWrapper.WrapperLookup registries) { getOrCreateTagBuilder(TagKey.of(RegistryKeys.BIOME, new Identifier(MOD_ID, "example"))) .add(BiomeKeys.BADLANDS); }}
Custom world generation
In the registry section we briefly mentioned that BuiltinRegistries
no longer holds the actual registries; more specifically, BuiltinRegistries
is no longer used during actual world generation. If your biome mod, structure mod, 1.19 message type mod etc. registers stuff into BuiltinRegistries
, you now need to generate its JSON and include it in the mod as a data pack.
You can override the new DataGeneratorEntrypoint.buildRegistry(RegistryBuilder registryBuilder)
in your data gen entrypoint to add your modded entries the registry used for datageneration. buildRegistry
is invoked asynchronously and the resulting RegistryWrapper.WrapperLookup
can be passed to your data providers using a CompletableFuture
.
public class DataGeneratorEntrypoint implements net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint {// onInitializeDataGenerator goes here@Overridepublic void buildRegistry(RegistryBuilder registryBuilder) { registryBuilder.addRegistry(RegistryKeys.BIOME, ExampleBiomes::bootstrap);}}// Minecraft's BuiltinBiomes class is another good example.public final class ExampleBiomes { public static final RegistryKey<Biome> MODDED_BIOME_KEY = RegistryKey.of(RegistryKeys.BIOME, new Identifier("modid", "biome_name")); public static void bootstrap(Registerable<Biome> biomeRegisterable) { biomeRegisterable.register(MODDED_BIOME_KEY, createBiome()); }}
A new data generator, FabricDynamicRegistryGenerator
, allows generating the JSON files from the previously-registered objects.
public class WorldgenProvider extends FabricDynamicRegistryProvider { public WorldgenProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) { super(output, registriesFuture); } @Override protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) { final RegistryWrapper.Impl<Biome> biomeRegistry = registries.getWrapperOrThrow(RegistryKeys.BIOME); entries.add(ExampleBiomes.MODDED_BIOME_KEY, biomeRegistry.getOrThrow(ExampleBiomes.MODDED_BIOME_KEY).value()); }}
Textures
The performance optimizations in 1.19.3 include texture loading changes. By default, textures used in a certain atlas (such as block texture atlas) must now be in the folder for the type of the atlas (such as textures/block
). This affects some resource packs, which might be bundled in a mod.
To use custom textures located elsewhere, an atlas configuration file should be added to the resource pack. See the 22w46a update blogpost for more details.
Fabric Textures API is removed entirely; ClientSpriteRegistryCallback
is replaced with atlas configuration files, and DependentSprite
was practically unused.
Resource loading
There are many refactors to resource loading, such as using a custom filesystem to improve performance. However they should not affect most mods.
One change made in the refactor is that resource packs now allow Text
to be used as the display name. With this change,ResourceManagerHelper#registerBuiltinResourcePack
method can now take Text
. The old String
based method is now deprecated; use Text#literal
for a hard-coded name.
Mods that support additional resource types should now use ResourceFinder
. This, when given a resource manager, returns the map of IDs to Resource
s.
public static final ResourceFinder JSON_FINDER = ResourceFinder.json("tiny_potatoes");public static final ResourceFinder PNG_FINDER = new ResourceFinder("tiny_potatoes", ".png");// to use:JSON_FINDER.findResources(resourceManager).forEach((id, resource) -> {});
Command changes
Several command argument types are removed and consolidated. They include: EnchantmentArgumentType
, EntitySummonArgumentType
, and StatusEffectArgumentType
. There are 2 new argument types that replace those.
RegistryEntryArgumentType
, which is an argument type ofRegistryEntry<T>
RegistryEntryPredicateArgumentType
, which works likeRegistryPredicateArgumentType
but the entry is either namedRegistryEntryList
(tags) orRegistryEntry
(one entry)
Move to JOML
Mojang has started using the JOML library for rendering-related math. Vec3f
is now replaced with JOML Vector3f
. Many of the functions have slightly different names. For example:
- import net.minecraft.util.math.Vec3f;+ import org.joml.Vector3f;- Vector3f vec;- float x = vec.getX();+ Vec3f vec;+ float x = vec.x();
Vec3d
and Vec3i
are unaffected.
Sounds
During the pre-release phase of 1.19.3, there were changes to how sounds are referenced and played.
- Introduction: there are two ways a sound is referred to - “sound asset” defined by the client and identified by sound ID, and “sound event” used by the server and registered in a registry.
- Previously, to play a registered sound event,
PlaySoundS2CPacket
was used, and to play a custom (resource pack-defined) sound,PlaySoundIdS2CPacket
was used. - References to
SoundEvent
are mostly replaced withRegistry<SoundEvent>
. SoundEvent
should now be constructed usingSoundEvent.of
, which is transitively access-widened by Fabric API.PlaySoundIdS2CPacket
was removed. To play a custom sound, use direct registry entry (RegistryEntry.of(SoundEvent)
).- Biome Modification API received a breaking change to accept
RegistryEntry<SoundEvent>
instead ofSoundEvent
.
Other changes
Here are other miscellaneous changes in 1.19.3:
- Feature flags were introduced. Currently, blocks, items, and entity types can be hidden behind a flag. “Experimental” features that aren’t enabled by a feature flag are still registered in a registry, but are ignored in most methods. Resource Condition API can now check feature flags.
- For those who use the vanilla system for GUIs (instead of third-party APIs): a new grid-based GUI system is added. This can be used in place of the old way of positioning widgets, and reduces the need for hard-coded display positions.
ButtonWidget
is now constructed using a builder.- Tooltips got a refactor to support item group related changes.
Screen#setTooltip
methods are added; there are three overloads. They all have to be called at every render call.setTooltip
method is also available forClickableWidget
andButtonWidget.Builder
. - Networking changes: chat preview was removed, and the game no longer requires a header packet to be sent when blocking messages. The client-side
sendChatMessage
andsendCommand
methods have been moved fromClientPlayerEntity
toClientPlayNetworkHandler
. - Mobs using
Brain
for control can now take advantage of functionalTask
creation. This resembles React Hooks and is replacing the previous subclass-based approach in vanilla. See javadoc for examples. ItemStack#isItemEqualIgnoreDamage
andItemStack#areItemsEqualIgnoreDamage
were removed. Either use standardisItemEqual
/areItemsEqual
or compare yourself.JsonHelper#deserialize
no longer permitsnull
. UsedeserializeNullable
instead.
Yarn renames
If you are using Mojang Mappings or other third-party mappings, you can skip this section.
There are dozens of renames to fix wrong names and improve code readability. Here are some of the major renames:
createAndScheduleBlockTick
/createAndScheduleFluidTick
is now simplyscheduleBlockTick
/scheduleFluidTick
.OreBlock
is renamed toExperienceDroppingBlock
as it is used by a Sculk block.WallStandingBlockItem
is renamed toVerticallyAttachableBlockItem
because it can now be used for hanging blocks as well.AbstractButtonBlock
is renamed to ButtonBlock as it is no longerabstract
ScreenHandler#transferSlot
is renamed toquickMove
to be more descriptive.- Shaders and programs were renamed. A program is composed of vertex and fragment shaders; this was previously swapped. See the pull request for details.
FAQs
Which Fabric version is 1.19 3? ›
Fabric changes. Developers should use Loom 1.0 (at the time of writing) to develop for Minecraft 1.19.3.
Do Fabric 1.19 2 mods work on 1.19 3? ›they aren't! according to the minecraft wiki, they wouldn't be compatible.
Is Fabric better than forge? ›Forge is the most popular and holds most of the more extensive mods, but Fabric and Quilt can run efficiently and allow more minor mods to run with any Minecraft version. Ultimately, the choice comes down to which mods each player would like to use and play through.
Can you use OptiFine with fabric? ›OptiFine also doesn't officially support running on Fabric (Though you can use the OptiFabric mod for OptiFine compatibility.)
What did 1.19 3 add? ›This release includes the WorldUnloaded event, a required event, as well as several opt-in events. Diagnostic tracking is a tool that helps us understand what you like about Minecraft, which allows us to make those things better.
What is the biggest Minecraft mod? ›What Is the Most Downloaded Minecraft Mod? The mod called 'Just Enough Items' (or JEI for short) has been downloaded over 131 million times, making it one of the most popular Minecraft mods out there.
How do I install better MC fabric? ›- Download and install the launcher: Launcher Twitch / Curse.
- Run the launcher.
- Click Mods .
- Search for the modpack Better Minecraft [FABRIC] .
- Select the version of Better Minecraft [FABRIC] that is matching the server version where you want to connect and install it.
Fabric Breakdown
Features a slimmed-down and lightweight API compared to Forge. This makes Fabric simpler to use in many respects but also prohibits it from implementing some heavier mods.
Can Quilt load Fabric mods? In most cases, yes. As Quilt is a fork, most Fabric mods should be compatible with Quilt.
Can I have both Fabric and Forge? ›No, they are incompatible. It is theoretically possible to make a means of running Forge mods on Fabric, but it's no simple task; there are a lot of hurdles.
What Minecraft mods work with Fabric? ›
Mod (Link) | Description | Downloads |
---|---|---|
Amethyst Mod (Fabric) | Adds another level of tools and armor. | 32,752 |
Amethyst Mod for Fabric | Adds another level of tools and armor. | 1,477 |
amogus | add amogus texture to everything | 1 |
Amogus Imposter | Rare Imposter mob mod for minecraft | 10 |
Fabric, like Forge, is a version of Minecraft that allows for mods to be run on both the server and client. For clients, Fabric offers many mods such as minimaps, HUD improvements, OptiFine integrations, and more. Download any mods you want to install onto your client.
What is the Fabric equivalent to OptiFine? ›OpalFab is a Fabric based Modpack for Minecraft versions 1.17. 1, 1.18. 2 & 1.19. 2 that features mods that are great alternatives to the functions of OptiFine.
What version of Fabric is for 1.19 2? ›Players should use Fabric Installer 0.11.0 and Fabric Loader 0.14.6 (at the time of writing) to play on Minecraft 1.19.
Is Fabric mc net safe? ›Browsers display this warning when you download any jar file. That's because they contain executable code. As long as you make sure you're downloading from reputable sources like curseforge and the official fabric website, you'll be fine.
Does Optifine work with 1.19 3? ›Here are the steps that you need to follow to get Optifine for the latest version: Step 1: Head over to the official Optifine webpage and navigate to the downloads section. Step 2: Under Minecraft 1.19. 3, click on '+Preview versions' and click on the download button next to the latest available version.
Does 1.19 3 have shaders? ›Shaders cannot be installed directly into the game, and players will have to install a second mod that allows them to run. For this task, a majority of players have used Optifine. However, since Optifine is yet to be released for Minecraft 1.19. 3, the next best option would be Iris.
Is Minecraft 1.20 out? ›The Minecraft 1.20 is available to download now. It went live on Wednesday 7th June 2023 across both Java and Bedrock versions of the game. Its UK launch time was 3pm BST on 7th June.
What did 1.19 3 change? ›The update adds new spawn eggs in the creative mode of the game. Earlier players could not add spawn eggs for certain mobs such as Ender Dragon, Iron Golem and more, but now players will be able to find their spawn eggs as well.
What is the hardest mod to run in Minecraft? ›RLCraft. No list of challenging modpacks would be complete without the immensely popular RLCraft. A true hard mode for Minecraft! Turning the difficulty up to realism, players will find that survival is not so easy when food, water, and temperature all play an important role.
What is RLCraft in Minecraft? ›
RLCraft is a Minecraft modpack consisting of approximately 169 separate mods that have been bundled and tweaked to create a challenging Minecraft fantasy world. The modpack is currently on version 2.9.2, and runs on Minecraft version 1.12.2.
How strong is Witherzilla? ›If fought in any dimension other than the VOID Dimension, Witherzilla is nigh unstoppable. Players in Adminium Armor wielding the Ultima Blade still die within 2 seconds of attacking him.
What was the first big Minecraft mod? ›Beta. Towards the end of 2010, Minecraft was preparing to move into its beta development phase, and popular mods such as IndustrialCraft, Railcraft and BuildCraft were first released. As opposed to their predecessors, these mods had the potential to change the entire game instead of simply tweaking minor aspects of it.
Is Minecraft Giant a mod? ›Giant is an entity in the «Game of Thrones» mod for Minecraft.
How much RAM do you need for better Minecraft Fabric? ›Better Minecraft [FABRIC] Memory Requirements & Player Slots
To avoid lag or memory errors, order a minimum of 8GB of memory. If you are playing with friends or planning on hosting a public server consider ordering 9GB or more.
To add a mod to your Fabric client, navigate to the mods folder inside your Minecraft directory. If it does not exist, create it now. Download the JAR of the mod you want, and drop it into this folder. Most mods will require Fabric API ; you can place the JAR for the API in /mods as well.
What is the trick to find diamonds in Minecraft 1.19 2? ›Gamers usually couple this with strip or branch mining. It's the process where you also mine a few blocks sideways at 2-3 block intervals while digging a straight tunnel. You saw that! So this is tunneling to find diamonds in Minecraft.
What is the max Y level in Minecraft 1.19 2? ›Prior to the update, world height had a range of y values from 0 to 256 . With the update, world height now has a range of y values from -64 to 320 .
Is carpet mod vanilla? ›X, 1.16. X and above. Carpet Mod is a mod for vanilla Minecraft that allows you to take full control of what matters from a technical perspective of the game.
What version of Java does Minecraft 1.19 3 use? ›What is the minimum Java version for Minecraft 1.19 3? The official Minecraft system requirements list Java 8 as the minimum version to run Java.
What version of fabric is for 1.18 2? ›
[1.18. 2] Fabric API 0.76.
Can you use shaders on 1.19 3? ›Shaders cannot be installed directly into the game, and players will have to install a second mod that allows them to run. For this task, a majority of players have used Optifine. However, since Optifine is yet to be released for Minecraft 1.19. 3, the next best option would be Iris.
Does 1.19 3 have bamboo blocks? ›Using the new toggles, players can access upcoming features expected to be fully released in 2023's major content update. With this new snapshot, Minecraft fans will finally have the opportunity to work with bamboo wood blocks and many other aspects of update 1.20 when the "experimental features" toggle is activated.
Does fabric work with Java 18? ›Fabric API has been fully updated to Java 17 and 1.18. Since 1.17 released, we have added a number of new APIs that can be used: Fluid and Item Transfer API.
Does OptiFine have a fabric version? ›OptiFine also doesn't officially support running on Fabric (Though you can use the OptiFabric mod for OptiFine compatibility.)
What is the Fabric version for 1.19 4? ›Players should install the latest stable version of Fabric Loader (currently 0.14.14) to play 1.19.4.
How do I install better MC Fabric? ›- Download and install the launcher: Launcher Twitch / Curse.
- Run the launcher.
- Click Mods .
- Search for the modpack Better Minecraft [FABRIC] .
- Select the version of Better Minecraft [FABRIC] that is matching the server version where you want to connect and install it.
Step 1: Head over to the official Optifine webpage and navigate to the downloads section. Step 2: Under Minecraft 1.19. 3, click on '+Preview versions' and click on the download button next to the latest available version. Once the stable versions are released, you should download them.