我正在制作一个仅服务器端的 Fabric 1.21.1 mod,它添加了具有香草效果的自定义药水。 我在没有注册物品/药水的情况下制作配方失败,这导致香草玩家在遇到物品时被踢,而布料玩家无法加入。
最初,我尝试使用
builder.registerPotionRecipe()
注册药水配方,但这会采用 RegistryEntry<Potion>
而不是我创建的 Potion
。
然后我开始使用builder.registerItemRecipe()
,但这导致服务器无法启动。
注册物品或药水会导致普通客户端在游戏中遇到该物品时被踢,而织物玩家将无法加入,因为客户端缺少注册表。
我确实看到了酿造配方的存在,因为我能够将翡翠块放入配料槽中,并且酿造台启动了。
@Override
public void onInitializeServer() {
ArrayList<StatusEffectInstance> RICH_POTION_EFFECTS = new ArrayList<>();
RICH_POTION_EFFECTS.add(new StatusEffectInstance(StatusEffects.HERO_OF_THE_VILLAGE, 480, 5));
RICH_POTION_EFFECTS.add(new StatusEffectInstance(StatusEffects.LUCK, 480, 3));
Item RICH_POTION = new Item(new Item.Settings().component(DataComponentTypes.POTION_CONTENTS, new PotionContentsComponent(Optional.empty(),Optional.empty(), RICH_POTION_EFFECTS)));
Item AWKWARD_POTION = new Item(new Item.Settings().component(DataComponentTypes.POTION_CONTENTS, new PotionContentsComponent(Potions.AWKWARD)));
FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> {
builder.registerItemRecipe(
AWKWARD_POTION,
Items.EMERALD_BLOCK,
RICH_POTION
);
});
}
[17:10:46] [main/ERROR] (Minecraft) Failed to start the minecraft server
java.lang.IllegalStateException: Some intrusive holders were not registered: [Reference{null=[unregistered]}, Reference{null=[unregistered]}]
at net.minecraft.registry.SimpleRegistry.freeze(SimpleRegistry.java:359) ~[minecraft-common-c2b31d572c-1.21.1-net.fabricmc.yarn.1_21_1.1.21.1+build.3-v2.jar:?]
at net.minecraft.registry.Registries.freezeRegistries(Registries.java:264) ~[minecraft-common-c2b31d572c-1.21.1-net.fabricmc.yarn.1_21_1.1.21.1+build.3-v2.jar:?]
at net.minecraft.registry.Registries.bootstrap(Registries.java:248) ~[minecraft-common-c2b31d572c-1.21.1-net.fabricmc.yarn.1_21_1.1.21.1+build.3-v2.jar:?]
at net.minecraft.server.Main.handler$zhp000$fabric-registry-sync-v0$afterModInit(Main.java:1547) ~[minecraft-common-c2b31d572c-1.21.1-net.fabricmc.yarn.1_21_1.1.21.1+build.3-v2.jar:?]
at net.minecraft.server.Main.main(Main.java:111) [minecraft-common-c2b31d572c-1.21.1-net.fabricmc.yarn.1_21_1.1.21.1+build.3-v2.jar:?]
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.5.jar:?]
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.5.jar:?]
at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.16.5.jar:?]
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?]
唯一的方法是使用
/give
定制药水,这不会注册该物品并且不会制作酿造配方。如果您想要带有酿造配方的药水,则需要注册。