Poções são consumíveis que concedem efeitos a uma entidade. Um jogador pode preparar poções usando um Suporte de Poções ou obtê-las como itens através de várias outras mecânicas do jogo.
Poções Personalizadas
Adicionar uma poção é um processo similar ao de adicionar um item. Você criará uma instância de sua poção e a registrará chamando BrewingRecipeRegistry.registerPotionRecipe.
INFO
Quando o Fabric API está presente, BrewingRecipeRegistry.registerPotionRecipe se torna acessível através de um Acess Widener.
Criando a Poção
Vamos começar declarando um campo para armazenar sua instância de Potion. Utilizaremos a classe inicializadora diretamente para segurar isso.
java
public class ExampleModPotions implements ModInitializer {
public static final Potion TATER_POTION =
Registry.register(
BuiltInRegistries.POTION,
ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "tater"),
new Potion("tater",
new MobEffectInstance(
ExampleModEffects.TATER,
3600,
0)));1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Passamos uma instância de StatusEffectInstance, que leva 3 parâmetros:
StatusEffect type- Um efeito. Usamos nosso efeito personalizado aqui. Você também pode acessar efeitos vanilla através denet.minecraft.entity.effect.StatusEffects.int duration- Duração do efeito em ticks do jogo.int amplifier- Um amplificador para o efeito. Por exemplo, Pressa II teria um amplificador de 1.
INFO
Para criar seu próprio efeito, consulte o guia de Efeitos.
Registrando a Poção
No nosso inicializador, chamamos BrewingRecipeRegistry.registerPotionRecipe.
java
public void onInitialize() {1
registerPotionRecipe leva 3 parâmetros:
Potion input- A poção inicial. Normalmente isso pode ser uma Garrafa de Água ou uma Poção Estranha.Item item- O item que é o ingrediente principal da poção.Potion output- A poção resultante.
Se você usa a Fabric API, o invocador de mixin não é necessário e uma chamada direta do BrewingRecipeRegistry.registerPotionRecipe pode ser feita.
O exemplo completo:
java
public class ExampleModPotions implements ModInitializer {
public static final Potion TATER_POTION =
Registry.register(
BuiltInRegistries.POTION,
ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "tater"),
new Potion("tater",
new MobEffectInstance(
ExampleModEffects.TATER,
3600,
0)));
@Override
public void onInitialize() {
FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> {
builder.addMix(
// Input potion.
Potions.WATER,
// Ingredient
Items.POTATO,
// Output potion.
BuiltInRegistries.POTION.wrapAsHolder(TATER_POTION)
);
});
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Assim que registrada, você pode preparar uma poção Tater usando uma batata.

Registrando Poções usando um Ingredient
Com ajuda do Fabric API, é possível registrar uma poção usando um Ingredient em vez de um Item usando net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.
Registrando a Poção Sem o Fabric API
Sem o Fabric API, BrewingRecipeRegistry.registerPotionRecipe será privado. Para acessar este método, use o seguinte invocador de mixin ou use um Acess Widener.
java
Not Found: /home/runner/work/fabric-docs/fabric-docs/reference/latest/src/main/java/com/example/docs/mixin/potion/BrewingRecipeRegistryInvoker.java1


