Жители торгуют по готовым спискам сделок. В обычной игре вы не задаете им «что именно продавать». Но есть 3 рабочих пути, в зависимости от версии и того, хотите ли вы мод или команды.
Сначала определитесь: это ваниль или моддинг
| Способ | Подходит для | Что получится | Ограничения |
|---|---|---|---|
| Команды NBT (через summon) | Java, тестовые миры | Житель появится с вашей сделкой | Это не «обучение», а готовая разовая настройка для конкретного NPC |
| Связывание профессии с торговлей через NBT | Java | Можно заранее задать сделку конкретному жителю | Нужны правильные id предметов и формат Offers |
| Мод (Forge/Fabric) | Модифицированный сервер | Добавляете сделку в существующую профессию и она появится у новых жителей | Старые NPC часто не меняются автоматически - их надо создавать заново |
Способ 1. Вручную задать сделку конкретному жителю (команда summon)
Подойдет, если вам нужен один NPC, который продает нужную вещь. Логика такая: вы создаете жителя с выбранной профессией и прописываете список сделок в NBT.
Пример команды (адаптируйте profession и id предметов):
/summon villager ~ ~ ~ {VillagerData:{profession:nitwit,level:5,type:savanna},PersistenceRequired:1,Silent:1,Offers:{Recipes:[{buy:{id:sunflower,Count:5},sell:{id:diamond,Count:1},rewardExp:0b,maxUses:9999999}]}}
Что важно понять по структуре:
- sell - это то, что житель продает (продаваемая вещь).
- buy - это то, что житель покупает (в обмен).
- buy и sell должны ссылаться на корректные item id (обычно в формате типа minecraft:diamond, но в командах часто используется краткий вариант).
- maxUses задает, сколько раз можно совершать сделка.
Типичная ошибка: вы меняете sell, но не трогаете profession/level. В результате вам кажется, что «не работает», хотя сделка действительно появилась, но вы смотрите не на того жителя или он уже торгует по другой записи. Проверьте, что вы открываете интерфейс именно у созданного NPC и что он не был пересоздан.
Источник по формату подобной команды встречается в обсуждениях по NBT-торговле жителя.
Способ 2. Использовать механику профессий через мод (Forge, Java)
Если вы хотите, чтобы житель определенной профессии стабильно продавал нужную вещь, чаще делают мод: добавляют запись в список торговля соответствующей профессии. В обсуждениях по Forge встречается подход через обработчик регистрации профессий и добавление trade в карьеру профессии.
Ключевая идея:
1) найти нужную профессию по ResourceLocation,
2) получить careerId,
3) добавить trade в карьеру через addTrade.
Пример каркаса на Java из практики моддинга (подставьте свой sell/buy и нужную профессию):
VillagerRegistry.VillagerProfession cleric =
ForgeRegistries.VILLAGER_PROFESSIONS.getValue(new ResourceLocation("minecraft", "priest"));
Random rand = new Random();
int careerId = cleric.getRandomCareer(rand);
cleric.getCareer(careerId).addTrade(1, new Trades());
И отдельный класс сделок, где вы задаете предметы. Пример показывает добавление обмена из изумруд на элитру:
public class Trades implements EntityVillager.ITradeList {
@Override
public void addMerchantRecipe(IMerchant merchant,
MerchantRecipeList recipeList,
Random random) {
recipeList.add(new MerchantRecipe(
new ItemStack(Items.EMERALD, 64),
new ItemStack(Items.ELYTRA, 1)
));
}
}
Важно:
- Старые жители часто не получают новые сделки автоматически. Встречается формулировка, что сделка добавляется только к новым NPC, которые появятся после загрузки мода и регистрации.
- Убедитесь, что у выбранной профессии действительно есть карьеры. Иначе при попытке получить careerId или career вы получите сбои на рантайме.
Полезный пример именно такого подхода с кодом и обсуждением его нюансов есть в сообществе разработчиков Forge.
Что можно и что нельзя в ванильной игре
- Нельзя «заставить» обычного жителя переучиться на любую торговля только командой в игровом чате без модификации его Offers.
- Нельзя гарантировать, что новый sell появится у всех жителей одной профессии в ваниле. В базовой игре списки сделок задаются разработчиками.
- Можно сделать нужного NPC под себя через summon и NBT: один житель, одна конкретная сделка - это ваш контроль.
Как быстро проверить результат
1) Создайте жителя выбранным способом (команда или через новый спавн после мода).
2) Закройте интерфейс.
3) Откройте торговлю снова у того же NPC.
4) Если сделка не появилась:
- проверьте profession и level в NBT,
- проверьте item id в buy/sell,
- при моде создайте нового жителя после установки мода (если старые не обновляются).
Типичные ошибки
- Путают buy и sell: в итоге вы видите, что житель покупает не то, что ожидали, а продает то, что прописали в buy.
- Используют неверный item id: сервер может создать NPC, но сделка окажется пустой или невалидной.
- Ставят мод, но смотрят на старых жителей: если сделка добавляется только при регистрации и влияет на новых NPC, старые не изменятся.
- Проверяют интерфейс не у того NPC: при спавне рядом легко открыть торговлю другого жителя.
Полезные ссылки
- https://forum.mcmodding.ru/threads/dobavlenie-sdelki-k-suschestvujuschej-professii-zhitelja.28021/page-2
- https://minecraft-archive.fandom.com/ru/wiki/%D0%A2%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D0%BB%D1%8F (списки сделок по профессиям, для сверки логики торговли)
- https://ru-minecraft.ru/forum/showtopic-23718/