Скинь пожалуйста как ты регистрируешь свои предметы.
Если ты изначально регистрируешь предмет как зелье, аля что типа этого:
public class HardModeItems {
public static final RegistryEntry<Potion> TEST_POTION = registerPotion("test_potion",
new Potion("test_potion", new StatusEffectInstance(StatusEffects.INSTANT_DAMAGE, 1, 1))); // тут может быть любой эффект
private static RegistryEntry<Potion> registerPotion(String name, Potion potion) {
return Registry.registerReference(Registries.POTION, Identifier.of(HardMode.MOD_ID, name), potion); // HardMode.MOD_ID это id твоего мода
}
public static void registerHardModeItems() {
HardMode.LOGGER.info("РЕГИСТРАЦИЯ ПРЕДМЕТОВ");
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK).register(entries -> {
entries.add(
PotionContentsComponent.createStack(
Items.POTION,
HardModeItems.TEST_POTION
)
);
});
}
}
то у тебя уже сразу же после выпивания будет оставаться бутылочка.
Если же ты регистрируешь сок как обычный предмет:
public class HardModeFood {
public record FoodEffect(
StatusEffectInstance effect,
float chance
) {}
public static final Item TEST_DRINK =
registerDrink(
"test_drink",
new FoodEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 600), 0.5F), // последнее число это шанс на срабатывание эфекта
new FoodEffect(new StatusEffectInstance(StatusEffects.SPEED, 600), 0.2F) // 1.0F = 100% , 0.5F = 50%
);
private static Item registerDrink(
String name,
FoodEffect... effects
) {
Item.Settings settings = new Item.Settings()
.registryKey(RegistryKey.of(RegistryKeys.ITEM, Identifier.of(HardMode.MOD_ID, name)))
.useRemainder(Items.GLASS_BOTTLE) // это и отвечает за то какой предмет останется после выпивания
.maxCount(1)
.component(DataComponentTypes.CONSUMABLE, ConsumableComponents.DRINK);
if (effects.length > 0) {
var builder = ConsumableComponents.drink();
for (FoodEffect effect : effects) {
builder.consumeEffect(
new ApplyEffectsConsumeEffect(
effect.effect(),
effect.chance()
)
);
}
settings.component(
DataComponentTypes.CONSUMABLE, // да тут немного повторений кода, но мне лень было, решил на всякий не убирать
builder.build()
);
}
return Registry.register(
Registries.ITEM,
Identifier.of(HardMode.MOD_ID, name),
new Item(settings)
);
}
public static void registerHardModeFood() {
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK).register(entries -> {
entries.add(TEST_DRINK);
});
}
}
public class HardMode implements ModInitializer {
public static final String MOD_ID = "твой_id";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
@Override
public void onInitialize() {
HardModeFood.registerHardModeFood();
}
}
то можно указать .useRemainder(Items.GLASS_BOTTLE) и это будет возвращать бутылочку воды после выпивания
версия на которой делал я 1 21 11 фабрик, на других скорее всего будет отличаться но там в принципе не должно быть сложно исправить))) сорян за непонятное объяснение)