Update to 1.19.3-pre1, Note that API is NOT finalized

This commit is contained in:
shedaniel
2022-11-23 02:15:17 +08:00
parent e3b4376c5c
commit 3e5fdd4b38
17 changed files with 41 additions and 185 deletions

View File

@@ -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> PRE = EventFactory.createLoop();
/**
* @see Post#stitch(TextureAtlas)
*/
// Event<Post> 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<ResourceLocation, Resource> 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);
}
}

View File

@@ -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<ItemStack> 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<ItemStack> icon, CreativeTabFiller filler) {
public static CreativeModeTab.Builder builder(ResourceLocation name) {
throw new AssertionError();
}
@@ -100,8 +98,4 @@ public final class CreativeTabRegistry {
public static <I extends ItemStack, T extends Supplier<I>> void appendStack(CreativeModeTab tab, T... items) {
throw new AssertionError();
}
public interface CreativeTabFiller {
void fill(FeatureFlagSet flags, CreativeModeTab.Output output, boolean canUseGameMasterBlocks);
}
}

View File

@@ -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 <T> ResourceLocation getId(T object, @Nullable ResourceKey<Registry<T>> fallback) {
if (fallback == null)
return null;
return getId(object, (Registry<T>) Registry.REGISTRY.get(fallback.location()));
return getId(object, (Registry<T>) BuiltInRegistries.REGISTRY.get(fallback.location()));
}
/**

View File

@@ -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());

View File

@@ -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 = "<init>", 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<ResourceLocation, Resource> map = new HashMap<>();
ClientTextureStitchEvent.PRE.invoker().stitch(textureAtlas, resourceManager, map::put);
map.putAll(tmp.apply(resourceManager));
return map;
};
}
}

View File

@@ -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());

View File

@@ -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);

View File

@@ -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 + ")");
}

View File

@@ -40,18 +40,8 @@ public class CreativeTabRegistryImpl {
private static final Multimap<CreativeModeTab, Supplier<ItemStack>> APPENDS = MultimapBuilder.hashKeys().arrayListValues().build();
@ApiStatus.Experimental
public static CreativeModeTab create(ResourceLocation name, Supplier<ItemStack> 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 {

View File

@@ -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 <T> Registrar<T> get(ResourceKey<Registry<T>> key) {
return new RegistrarImpl<>(modId, (Registry<T>) java.util.Objects.requireNonNull(Registry.REGISTRY.get(key.location()), "Registry " + key + " not found!"));
return new RegistrarImpl<>(modId, (Registry<T>) java.util.Objects.requireNonNull(BuiltInRegistries.REGISTRY.get(key.location()), "Registry " + key + " not found!"));
}
@Override

View File

@@ -19,7 +19,6 @@
"client.MixinMouseHandler",
"client.MixinMultiPlayerGameMode",
"client.MixinScreen",
"client.MixinAtlasSet"
],
"mixins": [
"BiomeAccessor",

View File

@@ -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

View File

@@ -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<ParticleType<?>> PARTICLE_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registry.PARTICLE_TYPE_REGISTRY);
public static final DeferredRegister<ParticleType<?>> PARTICLE_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registries.PARTICLE_TYPE);
public static final RegistrySupplier<SimpleParticleType> TEST_PARTICLE = PARTICLE_TYPES.register("test_particle", () ->
new SimpleParticleType(false) {});

View File

@@ -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<TestInt> INTS = Registries.get(TestMod.MOD_ID).<TestInt>builder(new ResourceLocation(TestMod.MOD_ID, "ints"))
.syncToClients()
.build();
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(TestMod.MOD_ID, Registry.ITEM_REGISTRY);
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(TestMod.MOD_ID, Registry.BLOCK_REGISTRY);
public static final DeferredRegister<Fluid> FLUIDS = DeferredRegister.create(TestMod.MOD_ID, Registry.FLUID_REGISTRY);
public static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registry.ENTITY_TYPE_REGISTRY);
public static final DeferredRegister<MobEffect> MOB_EFFECTS = DeferredRegister.create(TestMod.MOD_ID, Registry.MOB_EFFECT_REGISTRY);
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZERS = DeferredRegister.create(TestMod.MOD_ID, Registry.RECIPE_SERIALIZER_REGISTRY);
public static final DeferredRegister<RecipeType<?>> RECIPE_TYPES = DeferredRegister.create(TestMod.MOD_ID, Registry.RECIPE_TYPE_REGISTRY);
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.ITEM);
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.BLOCK);
public static final DeferredRegister<Fluid> FLUIDS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.FLUID);
public static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.ENTITY_TYPE);
public static final DeferredRegister<MobEffect> MOB_EFFECTS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.MOB_EFFECT);
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZERS = DeferredRegister.create(TestMod.MOD_ID, net.minecraft.core.registries.Registries.RECIPE_SERIALIZER);
public static final DeferredRegister<RecipeType<?>> 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)

View File

@@ -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))) {

View File

@@ -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());

View File

@@ -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")));
}
});