From 3e5fdd4b3888530a7d2c095a85daed41d3cc3776 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 23 Nov 2022 02:15:17 +0800 Subject: [PATCH] Update to 1.19.3-pre1, Note that API is NOT finalized --- .../client/ClientTextureStitchEvent.java | 68 ------------------- .../registry/CreativeTabRegistry.java | 10 +-- .../registry/registries/Registries.java | 3 +- .../fluid/fabric/FluidStackHooksImpl.java | 12 ++-- .../mixin/fabric/client/MixinAtlasSet.java | 56 --------------- .../fabric/client/MixinGameRenderer.java | 4 +- .../fabric/client/MixinKeyboardHandler.java | 7 +- .../networking/fabric/SpawnEntityPacket.java | 6 +- .../fabric/CreativeTabRegistryImpl.java | 14 +--- .../registries/fabric/RegistriesImpl.java | 5 +- .../main/resources/architectury.mixins.json | 1 - gradle.properties | 6 +- .../test/particle/TestParticles.java | 5 +- .../test/registry/TestRegistries.java | 15 ++-- .../dev/architectury/test/tags/TestTags.java | 5 +- .../architectury/test/trade/TestTrades.java | 5 +- .../test/worldgen/TestWorldGeneration.java | 4 +- 17 files changed, 41 insertions(+), 185 deletions(-) delete mode 100644 common/src/main/java/dev/architectury/event/events/client/ClientTextureStitchEvent.java delete mode 100644 fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinAtlasSet.java diff --git a/common/src/main/java/dev/architectury/event/events/client/ClientTextureStitchEvent.java b/common/src/main/java/dev/architectury/event/events/client/ClientTextureStitchEvent.java deleted file mode 100644 index e3cf69b6..00000000 --- a/common/src/main/java/dev/architectury/event/events/client/ClientTextureStitchEvent.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This file is part of architectury. - * Copyright (C) 2020, 2021, 2022 architectury - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package dev.architectury.event.events.client; - -import dev.architectury.event.Event; -import dev.architectury.event.EventFactory; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.renderer.texture.TextureAtlas; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.server.packs.resources.ResourceManager; - -import java.util.function.BiConsumer; - -@Environment(EnvType.CLIENT) -public interface ClientTextureStitchEvent { - /** - * @see Pre#stitch(TextureAtlas, ResourceManager, BiConsumer) - */ - Event
 PRE = EventFactory.createLoop();
-    
-    /**
-     * @see Post#stitch(TextureAtlas)
-     */
-//    Event POST = EventFactory.createLoop();
-    
-    @Environment(EnvType.CLIENT)
-    interface Pre {
-        /**
-         * Invoked before the texture atlas is stitched together.
-         * Equivalent to Forge's {@code TextureStitchEvent.Pre} event.
-         *
-         * @param atlas           The TextureAtlas.
-         * @param resourceManager The resource manager.
-         * @param spriteAdder     A consumer where you can add your own sprites to be stitched.
-         */
-        void stitch(TextureAtlas atlas, ResourceManager resourceManager, BiConsumer spriteAdder);
-    }
-    
-    @Environment(EnvType.CLIENT)
-    interface Post {
-        /**
-         * Invoked after the texture atlas has been fully stitched.
-         * Equivalent to Forge's {@code TextureStitchEvent.Post} event.
-         *
-         * @param atlas The ready-to-use TextureAtlas.
-         */
-        void stitch(TextureAtlas atlas);
-    }
-}
diff --git a/common/src/main/java/dev/architectury/registry/CreativeTabRegistry.java b/common/src/main/java/dev/architectury/registry/CreativeTabRegistry.java
index e6068760..2601c8bf 100644
--- a/common/src/main/java/dev/architectury/registry/CreativeTabRegistry.java
+++ b/common/src/main/java/dev/architectury/registry/CreativeTabRegistry.java
@@ -21,7 +21,6 @@ package dev.architectury.registry;
 
 import dev.architectury.injectables.annotations.ExpectPlatform;
 import net.minecraft.resources.ResourceLocation;
-import net.minecraft.world.flag.FeatureFlagSet;
 import net.minecraft.world.item.CreativeModeTab;
 import net.minecraft.world.item.ItemStack;
 import net.minecraft.world.level.ItemLike;
@@ -36,14 +35,13 @@ public final class CreativeTabRegistry {
     
     // I am sorry, fabric wants a resource location instead of the translation key for whatever reason
     public static CreativeModeTab create(ResourceLocation name, Supplier icon) {
-        return create(name, icon, (flags, output, canUseGameMasterBlocks) -> {
-        });
+        return builder(name).icon(icon).build();
     }
     
     // I am sorry, fabric wants a resource location instead of the translation key for whatever reason
     @ExpectPlatform
     @ApiStatus.Experimental
-    public static CreativeModeTab create(ResourceLocation name, Supplier icon, CreativeTabFiller filler) {
+    public static CreativeModeTab.Builder builder(ResourceLocation name) {
         throw new AssertionError();
     }
     
@@ -100,8 +98,4 @@ public final class CreativeTabRegistry {
     public static > void appendStack(CreativeModeTab tab, T... items) {
         throw new AssertionError();
     }
-    
-    public interface CreativeTabFiller {
-        void fill(FeatureFlagSet flags, CreativeModeTab.Output output, boolean canUseGameMasterBlocks);
-    }
 }
diff --git a/common/src/main/java/dev/architectury/registry/registries/Registries.java b/common/src/main/java/dev/architectury/registry/registries/Registries.java
index 8d7961cf..860fc79e 100644
--- a/common/src/main/java/dev/architectury/registry/registries/Registries.java
+++ b/common/src/main/java/dev/architectury/registry/registries/Registries.java
@@ -21,6 +21,7 @@ package dev.architectury.registry.registries;
 
 import dev.architectury.injectables.annotations.ExpectPlatform;
 import net.minecraft.core.Registry;
+import net.minecraft.core.registries.BuiltInRegistries;
 import net.minecraft.resources.ResourceKey;
 import net.minecraft.resources.ResourceLocation;
 import org.jetbrains.annotations.ApiStatus;
@@ -83,7 +84,7 @@ public final class Registries {
     public static  ResourceLocation getId(T object, @Nullable ResourceKey> fallback) {
         if (fallback == null)
             return null;
-        return getId(object, (Registry) Registry.REGISTRY.get(fallback.location()));
+        return getId(object, (Registry) BuiltInRegistries.REGISTRY.get(fallback.location()));
     }
     
     /**
diff --git a/fabric/src/main/java/dev/architectury/hooks/fluid/fabric/FluidStackHooksImpl.java b/fabric/src/main/java/dev/architectury/hooks/fluid/fabric/FluidStackHooksImpl.java
index 7eae2fe3..d21dfb7d 100644
--- a/fabric/src/main/java/dev/architectury/hooks/fluid/fabric/FluidStackHooksImpl.java
+++ b/fabric/src/main/java/dev/architectury/hooks/fluid/fabric/FluidStackHooksImpl.java
@@ -28,7 +28,7 @@ import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
 import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes;
 import net.minecraft.client.renderer.texture.TextureAtlasSprite;
 import net.minecraft.core.BlockPos;
-import net.minecraft.core.Registry;
+import net.minecraft.core.registries.BuiltInRegistries;
 import net.minecraft.nbt.CompoundTag;
 import net.minecraft.nbt.Tag;
 import net.minecraft.network.FriendlyByteBuf;
@@ -49,12 +49,12 @@ public class FluidStackHooksImpl {
     }
     
     public static String getTranslationKey(FluidStack stack) {
-        var id = Registry.FLUID.getKey(stack.getFluid());
+        var id = BuiltInRegistries.FLUID.getKey(stack.getFluid());
         return "block." + id.getNamespace() + "." + id.getPath();
     }
     
     public static FluidStack read(FriendlyByteBuf buf) {
-        var fluid = Objects.requireNonNull(Registry.FLUID.get(buf.readResourceLocation()));
+        var fluid = Objects.requireNonNull(BuiltInRegistries.FLUID.get(buf.readResourceLocation()));
         var amount = buf.readVarLong();
         var tag = buf.readNbt();
         if (fluid == Fluids.EMPTY) return FluidStack.empty();
@@ -62,7 +62,7 @@ public class FluidStackHooksImpl {
     }
     
     public static void write(FluidStack stack, FriendlyByteBuf buf) {
-        buf.writeResourceLocation(Registry.FLUID.getKey(stack.getFluid()));
+        buf.writeResourceLocation(BuiltInRegistries.FLUID.getKey(stack.getFluid()));
         buf.writeVarLong(stack.getAmount());
         buf.writeNbt(stack.getTag());
     }
@@ -72,7 +72,7 @@ public class FluidStackHooksImpl {
             return FluidStack.empty();
         }
         
-        var fluid = Registry.FLUID.get(new ResourceLocation(tag.getString("id")));
+        var fluid = BuiltInRegistries.FLUID.get(new ResourceLocation(tag.getString("id")));
         if (fluid == null || fluid == Fluids.EMPTY) {
             return FluidStack.empty();
         }
@@ -86,7 +86,7 @@ public class FluidStackHooksImpl {
     }
     
     public static CompoundTag write(FluidStack stack, CompoundTag tag) {
-        tag.putString("id", Registry.FLUID.getKey(stack.getFluid()).toString());
+        tag.putString("id", BuiltInRegistries.FLUID.getKey(stack.getFluid()).toString());
         tag.putLong("amount", stack.getAmount());
         if (stack.hasTag()) {
             tag.put("tag", stack.getTag());
diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinAtlasSet.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinAtlasSet.java
deleted file mode 100644
index 818737bc..00000000
--- a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinAtlasSet.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * This file is part of architectury.
- * Copyright (C) 2020, 2021, 2022 architectury
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-
-package dev.architectury.mixin.fabric.client;
-
-import dev.architectury.event.events.client.ClientTextureStitchEvent;
-import net.minecraft.client.renderer.texture.TextureAtlas;
-import net.minecraft.client.resources.model.AtlasSet;
-import net.minecraft.resources.ResourceLocation;
-import net.minecraft.server.packs.resources.Resource;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Mutable;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@Mixin(AtlasSet.AtlasEntry.class)
-public class MixinAtlasSet {
-    @Mutable
-    @Shadow
-    @Final
-    AtlasSet.ResourceLister resourceLister;
-    
-    @Inject(method = "", at = @At(value = "RETURN"), locals = LocalCapture.CAPTURE_FAILHARD)
-    private void preStitch(TextureAtlas textureAtlas, AtlasSet.ResourceLister resourceLister, CallbackInfo ci) {
-        AtlasSet.ResourceLister tmp = this.resourceLister;
-        this.resourceLister = resourceManager -> {
-            Map map = new HashMap<>();
-            ClientTextureStitchEvent.PRE.invoker().stitch(textureAtlas, resourceManager, map::put);
-            map.putAll(tmp.apply(resourceManager));
-            return map;
-        };
-    }
-}
diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGameRenderer.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGameRenderer.java
index 13cea79a..91ff77bf 100644
--- a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGameRenderer.java
+++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGameRenderer.java
@@ -48,7 +48,7 @@ public abstract class MixinGameRenderer {
     private Minecraft minecraft;
     
     @Inject(method = "render(FJZ)V",
-            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
+            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
                     ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
     public void renderScreenPre(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, Window window, Matrix4f matrix, PoseStack matrices, PoseStack matrices2) {
         if (ClientGuiEvent.RENDER_PRE.invoker().render(minecraft.screen, matrices2, mouseX, mouseY, minecraft.getDeltaFrameTime()).isFalse()) {
@@ -57,7 +57,7 @@ public abstract class MixinGameRenderer {
     }
     
     @Inject(method = "render(FJZ)V",
-            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
+            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
                     shift = At.Shift.AFTER, ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
     public void renderScreenPost(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, Window window, Matrix4f matrix, PoseStack matrices, PoseStack matrices2) {
         ClientGuiEvent.RENDER_POST.invoker().render(minecraft.screen, matrices2, mouseX, mouseY, minecraft.getDeltaFrameTime());
diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinKeyboardHandler.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinKeyboardHandler.java
index fe463d39..a0635cb0 100644
--- a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinKeyboardHandler.java
+++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinKeyboardHandler.java
@@ -42,9 +42,6 @@ public class MixinKeyboardHandler {
     @Final
     private Minecraft minecraft;
     
-    @Shadow
-    private boolean sendRepeatsToGui;
-    
     @ModifyVariable(method = {"method_1458", "lambda$charTyped$5"}, at = @At("HEAD"), ordinal = 0, argsOnly = true)
     private static GuiEventListener wrapCharTypedFirst(GuiEventListener screen) {
         if (screen instanceof ScreenInputDelegate delegate) {
@@ -66,7 +63,7 @@ public class MixinKeyboardHandler {
             ordinal = 0), cancellable = true)
     public void onKey(long long_1, int int_1, int int_2, int int_3, int int_4, CallbackInfo info) {
         if (!info.isCancelled()) {
-            if (int_3 != 1 && (int_3 != 2 || !this.sendRepeatsToGui)) {
+            if (int_3 != 1 && int_3 != 2) {
                 if (int_3 == 0) {
                     var result = ClientScreenInputEvent.KEY_RELEASED_PRE.invoker().keyReleased(minecraft, minecraft.screen, int_1, int_2, int_4);
                     if (result.isPresent())
@@ -87,7 +84,7 @@ public class MixinKeyboardHandler {
     public void onKeyAfter(long long_1, int int_1, int int_2, int int_3, int int_4, CallbackInfo info, Screen screen, boolean bls[]) {
         if (!info.isCancelled() && !bls[0]) {
             EventResult result;
-            if (int_3 != 1 && (int_3 != 2 || !this.sendRepeatsToGui)) {
+            if (int_3 != 1 && int_3 != 2) {
                 result = ClientScreenInputEvent.KEY_RELEASED_POST.invoker().keyReleased(minecraft, screen, int_1, int_2, int_4);
             } else {
                 result = ClientScreenInputEvent.KEY_PRESSED_POST.invoker().keyPressed(minecraft, screen, int_1, int_2, int_4);
diff --git a/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java b/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java
index b4de4c80..a394de38 100644
--- a/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java
+++ b/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java
@@ -25,7 +25,7 @@ import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
 import net.minecraft.client.Minecraft;
-import net.minecraft.core.Registry;
+import net.minecraft.core.registries.BuiltInRegistries;
 import net.minecraft.network.FriendlyByteBuf;
 import net.minecraft.network.protocol.Packet;
 import net.minecraft.network.protocol.game.ClientGamePacketListener;
@@ -43,7 +43,7 @@ public class SpawnEntityPacket {
             throw new IllegalStateException("SpawnPacketUtil.create called on the logical client!");
         }
         var buffer = PacketByteBufs.create();
-        buffer.writeVarInt(Registry.ENTITY_TYPE.getId(entity.getType()));
+        buffer.writeVarInt(BuiltInRegistries.ENTITY_TYPE.getId(entity.getType()));
         buffer.writeUUID(entity.getUUID());
         buffer.writeVarInt(entity.getId());
         var position = entity.position();
@@ -88,7 +88,7 @@ public class SpawnEntityPacket {
             // Retain this buffer so we can use it in the queued task (EntitySpawnExtension)
             buf.retain();
             context.queue(() -> {
-                var entityType = Registry.ENTITY_TYPE.byId(entityTypeId);
+                var entityType = BuiltInRegistries.ENTITY_TYPE.byId(entityTypeId);
                 if (entityType == null) {
                     throw new IllegalStateException("Entity type (" + entityTypeId + ") is unknown, spawning at (" + x + ", " + y + ", " + z + ")");
                 }
diff --git a/fabric/src/main/java/dev/architectury/registry/fabric/CreativeTabRegistryImpl.java b/fabric/src/main/java/dev/architectury/registry/fabric/CreativeTabRegistryImpl.java
index 37130db4..9fdd764d 100644
--- a/fabric/src/main/java/dev/architectury/registry/fabric/CreativeTabRegistryImpl.java
+++ b/fabric/src/main/java/dev/architectury/registry/fabric/CreativeTabRegistryImpl.java
@@ -40,18 +40,8 @@ public class CreativeTabRegistryImpl {
     private static final Multimap> APPENDS = MultimapBuilder.hashKeys().arrayListValues().build();
     
     @ApiStatus.Experimental
-    public static CreativeModeTab create(ResourceLocation name, Supplier icon, CreativeTabRegistry.CreativeTabFiller filler) {
-        return new FabricItemGroup(name) {
-            @Override
-            public ItemStack makeIcon() {
-                return icon.get();
-            }
-            
-            @Override
-            protected void generateDisplayItems(FeatureFlagSet flags, Output output, boolean canUseGameMasterBlocks) {
-                filler.fill(flags, output, canUseGameMasterBlocks);
-            }
-        };
+    public static CreativeModeTab.Builder builder(ResourceLocation name) {
+        return FabricItemGroup.builder(name);
     }
     
     static {
diff --git a/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java b/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java
index 25dba100..5100ac53 100644
--- a/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java
+++ b/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java
@@ -34,6 +34,7 @@ import net.fabricmc.fabric.api.event.registry.RegistryAttribute;
 import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback;
 import net.minecraft.core.MappedRegistry;
 import net.minecraft.core.Registry;
+import net.minecraft.core.registries.BuiltInRegistries;
 import net.minecraft.resources.ResourceKey;
 import net.minecraft.resources.ResourceLocation;
 import org.jetbrains.annotations.Nullable;
@@ -48,7 +49,7 @@ public class RegistriesImpl {
     
     private static void listen(ResourceKey resourceKey, ResourceLocation id, Consumer listener) {
         if (LISTENED_REGISTRIES.add(resourceKey)) {
-            Registry registry = java.util.Objects.requireNonNull(Registry.REGISTRY.get(resourceKey.location()), "Registry " + resourceKey + " not found!");
+            Registry registry = java.util.Objects.requireNonNull(BuiltInRegistries.REGISTRY.get(resourceKey.location()), "Registry " + resourceKey + " not found!");
             RegistryEntryAddedCallback.event(registry).register((rawId, entryId, object) -> {
                 RegistryEntryId registryEntryId = new RegistryEntryId<>(resourceKey, entryId);
                 for (Consumer consumer : LISTENERS.get(registryEntryId)) {
@@ -74,7 +75,7 @@ public class RegistriesImpl {
         
         @Override
         public  Registrar get(ResourceKey> key) {
-            return new RegistrarImpl<>(modId, (Registry) java.util.Objects.requireNonNull(Registry.REGISTRY.get(key.location()), "Registry " + key + " not found!"));
+            return new RegistrarImpl<>(modId, (Registry) java.util.Objects.requireNonNull(BuiltInRegistries.REGISTRY.get(key.location()), "Registry " + key + " not found!"));
         }
         
         @Override
diff --git a/fabric/src/main/resources/architectury.mixins.json b/fabric/src/main/resources/architectury.mixins.json
index fad372c8..79283ec2 100644
--- a/fabric/src/main/resources/architectury.mixins.json
+++ b/fabric/src/main/resources/architectury.mixins.json
@@ -19,7 +19,6 @@
     "client.MixinMouseHandler",
     "client.MixinMultiPlayerGameMode",
     "client.MixinScreen",
-    "client.MixinAtlasSet"
   ],
   "mixins": [
     "BiomeAccessor",
diff --git a/gradle.properties b/gradle.properties
index 1af076a9..47efe5e8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,8 +3,8 @@ org.gradle.daemon=false
 
 platforms=fabric
 
-minecraft_version=22w44a
-supported_version=1.19.3 (22w44a)
+minecraft_version=1.19.3-pre1
+supported_version=1.19.3-pre1
 required_version=1.19.3
 
 artifact_type=beta
@@ -15,7 +15,7 @@ base_version=7.0
 maven_group=dev.architectury
 
 fabric_loader_version=0.14.10
-fabric_api_version=0.66.0+1.19.3
+fabric_api_version=0.67.1+1.19.3
 mod_menu_version=3.1.0
 
 forge_version=43.0.0
diff --git a/testmod-common/src/main/java/dev/architectury/test/particle/TestParticles.java b/testmod-common/src/main/java/dev/architectury/test/particle/TestParticles.java
index dfa89af6..2dd47f4e 100644
--- a/testmod-common/src/main/java/dev/architectury/test/particle/TestParticles.java
+++ b/testmod-common/src/main/java/dev/architectury/test/particle/TestParticles.java
@@ -19,7 +19,6 @@
 
 package dev.architectury.test.particle;
 
-import dev.architectury.event.events.client.ClientLifecycleEvent;
 import dev.architectury.platform.Platform;
 import dev.architectury.registry.client.particle.ParticleProviderRegistry;
 import dev.architectury.registry.registries.DeferredRegister;
@@ -27,12 +26,12 @@ import dev.architectury.registry.registries.RegistrySupplier;
 import dev.architectury.test.TestMod;
 import dev.architectury.utils.Env;
 import net.minecraft.client.particle.HeartParticle;
-import net.minecraft.core.Registry;
 import net.minecraft.core.particles.ParticleType;
 import net.minecraft.core.particles.SimpleParticleType;
+import net.minecraft.core.registries.Registries;
 
 public class TestParticles {
-    public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registry.PARTICLE_TYPE_REGISTRY);
+    public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registries.PARTICLE_TYPE);
     
     public static final RegistrySupplier TEST_PARTICLE = PARTICLE_TYPES.register("test_particle", () ->
             new SimpleParticleType(false) {});
diff --git a/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java b/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java
index acad4725..140e4e75 100644
--- a/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java
+++ b/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java
@@ -36,7 +36,6 @@ import dev.architectury.test.recipes.TestRecipeSerializer;
 import dev.architectury.test.registry.objects.EquippableTickingItem;
 import dev.architectury.test.tab.TestCreativeTabs;
 import net.minecraft.core.BlockPos;
-import net.minecraft.core.Registry;
 import net.minecraft.resources.ResourceLocation;
 import net.minecraft.world.effect.MobEffect;
 import net.minecraft.world.effect.MobEffectCategory;
@@ -81,13 +80,13 @@ public class TestRegistries {
     public static final Registrar INTS = Registries.get(TestMod.MOD_ID).builder(new ResourceLocation(TestMod.MOD_ID, "ints"))
             .syncToClients()
             .build();
-    public static final DeferredRegister ITEMS = DeferredRegister.create(TestMod.MOD_ID, Registry.ITEM_REGISTRY);
-    public static final DeferredRegister BLOCKS = DeferredRegister.create(TestMod.MOD_ID, Registry.BLOCK_REGISTRY);
-    public static final DeferredRegister FLUIDS = DeferredRegister.create(TestMod.MOD_ID, Registry.FLUID_REGISTRY);
-    public static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registry.ENTITY_TYPE_REGISTRY);
-    public static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(TestMod.MOD_ID, Registry.MOB_EFFECT_REGISTRY);
-    public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(TestMod.MOD_ID, Registry.RECIPE_SERIALIZER_REGISTRY);
-    public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registry.RECIPE_TYPE_REGISTRY);
+    public static final DeferredRegister ITEMS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.ITEM);
+    public static final DeferredRegister BLOCKS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.BLOCK);
+    public static final DeferredRegister FLUIDS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.FLUID);
+    public static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.ENTITY_TYPE);
+    public static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.MOB_EFFECT);
+    public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.RECIPE_SERIALIZER);
+    public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.RECIPE_TYPE);
     
     public static final ArchitecturyFluidAttributes TEST_FLUID_ATTRIBUTES = SimpleArchitecturyFluidAttributes.ofSupplier(() -> TestRegistries.TEST_FLUID_FLOWING, () -> TestRegistries.TEST_FLUID)
             .convertToSource(true)
diff --git a/testmod-common/src/main/java/dev/architectury/test/tags/TestTags.java b/testmod-common/src/main/java/dev/architectury/test/tags/TestTags.java
index ec592d4d..be10f410 100644
--- a/testmod-common/src/main/java/dev/architectury/test/tags/TestTags.java
+++ b/testmod-common/src/main/java/dev/architectury/test/tags/TestTags.java
@@ -24,6 +24,7 @@ import dev.architectury.event.events.common.BlockEvent;
 import dev.architectury.test.TestMod;
 import net.minecraft.core.Registry;
 import net.minecraft.core.particles.ParticleTypes;
+import net.minecraft.core.registries.Registries;
 import net.minecraft.resources.ResourceLocation;
 import net.minecraft.server.level.ServerLevel;
 import net.minecraft.tags.TagKey;
@@ -31,9 +32,9 @@ import net.minecraft.tags.TagKey;
 public class TestTags {
     public static void initialize() {
         // This will not be present, but it should return an empty tag
-        var heartParticles = TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(TestMod.MOD_ID, "heart_particles"));
+        var heartParticles = TagKey.create(Registries.BLOCK, new ResourceLocation(TestMod.MOD_ID, "heart_particles"));
         // This will act like a normal tag, we have emerald block here
-        var heartParticles2 = TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(TestMod.MOD_ID, "heart_particles2"));
+        var heartParticles2 = TagKey.create(Registries.BLOCK, new ResourceLocation(TestMod.MOD_ID, "heart_particles2"));
         
         BlockEvent.BREAK.register((world, pos, state, player, xp) -> {
             if (player != null && !world.isClientSide() && (state.is(heartParticles) || state.is(heartParticles2))) {
diff --git a/testmod-common/src/main/java/dev/architectury/test/trade/TestTrades.java b/testmod-common/src/main/java/dev/architectury/test/trade/TestTrades.java
index f6929c26..f20330c2 100644
--- a/testmod-common/src/main/java/dev/architectury/test/trade/TestTrades.java
+++ b/testmod-common/src/main/java/dev/architectury/test/trade/TestTrades.java
@@ -21,15 +21,14 @@ package dev.architectury.test.trade;
 
 import dev.architectury.registry.level.entity.trade.SimpleTrade;
 import dev.architectury.registry.level.entity.trade.TradeRegistry;
-import net.minecraft.core.Registry;
-import net.minecraft.world.entity.npc.VillagerProfession;
+import net.minecraft.core.registries.BuiltInRegistries;
 import net.minecraft.world.entity.npc.VillagerTrades;
 import net.minecraft.world.item.ItemStack;
 import net.minecraft.world.item.Items;
 
 public class TestTrades {
     public static void init() {
-        for (var villagerProfession : Registry.VILLAGER_PROFESSION) {
+        for (var villagerProfession : BuiltInRegistries.VILLAGER_PROFESSION) {
             TradeRegistry.registerVillagerTrade(villagerProfession, 1, TestTrades.createTrades());
         }
         TradeRegistry.registerTradeForWanderingTrader(false, TestTrades.createTrades());
diff --git a/testmod-common/src/main/java/dev/architectury/test/worldgen/TestWorldGeneration.java b/testmod-common/src/main/java/dev/architectury/test/worldgen/TestWorldGeneration.java
index e6ef953c..4f78fe8e 100644
--- a/testmod-common/src/main/java/dev/architectury/test/worldgen/TestWorldGeneration.java
+++ b/testmod-common/src/main/java/dev/architectury/test/worldgen/TestWorldGeneration.java
@@ -22,7 +22,7 @@ package dev.architectury.test.worldgen;
 import dev.architectury.event.events.common.LifecycleEvent;
 import dev.architectury.registry.level.biome.BiomeModifications;
 import dev.architectury.test.TestMod;
-import net.minecraft.core.Registry;
+import net.minecraft.core.registries.Registries;
 import net.minecraft.resources.ResourceKey;
 import net.minecraft.resources.ResourceLocation;
 import net.minecraft.tags.BiomeTags;
@@ -34,7 +34,7 @@ public class TestWorldGeneration {
             BiomeModifications.addProperties((ctx, mutable) -> {
                 if (ctx.hasTag(BiomeTags.IS_FOREST)) {
                     mutable.getGenerationProperties().addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION,
-                            ResourceKey.create(Registry.PLACED_FEATURE_REGISTRY,
+                            ResourceKey.create(Registries.PLACED_FEATURE,
                                     new ResourceLocation(TestMod.MOD_ID + ":diamond_blocks")));
                 }
             });