Разблокировать рецепт созданный через код в книге знаний

Разблокировать рецепт созданный через код в книге знаний

Версия(и) Minecraft
1.12+
Доброго времени суток Земляне и Чужие!

Сегодня я расскажу как разблокировать рецепт созданный через код в книге знаний.


Рецепт
Для начала сделаем самый обычный форменный рецепт для получения кольчужных ботинок:
Java:
GameRegistry.addShapedRecipe(new ResourceLocation(Reference.MODID + ":" + "chainmail_boots"), new ResourceLocation(Reference.MODID + ":" + "chainmail_boots"),
                new ItemStack(Items.CHAINMAIL_BOOTS),new Object[]{
                "   ",
                "N N",
                "ILI",
                'N', Items.IRON_NUGGET,
                'I', Items.IRON_INGOT,
                'L', Items.LEATHER_BOOTS
                });
Как видите в new ResourceLocation мы указали наш Reference.MODID, а сделали мы это для того что бы в будущем можно было разблокировать только рецепты с нашим Reference.MODID.


Разблокировка рецептов в книге знаний
Этим способом со мной поделился пользователь @Thunder в беседе, у его способа был лишь один недостаток: Его способ разблокировал рецепты при каждом заходе в мир. Я же доработал его способ, и теперь можно при заходе в мир как это делают многие крупные моды, разблокировать свой рецепты в книге знаний. Давайте же узнаем как это сделать, а делается это очень просто, через событие входа в мир:
Java:
    @SubscribeEvent
    public void onBookUnlock(PlayerEvent.PlayerLoggedInEvent event) {
     
        NBTTagCompound entityData = event.player.getEntityData(); //НБТ
        EntityPlayer player = event.player; //Игрок
        List<IRecipe> recipe = new ArrayList<>(); //Списочный массив
        String key = "unlockBookRecipesPlusPlus"; //"Ключ"
     
        if (!player.world.isRemote) { //Проверка на сервер
            if (!entityData.getBoolean(key)) { //Проверка на "ключ"
            for (Map.Entry<ResourceLocation, IRecipe> entry : ForgeRegistries.RECIPES.getEntries()) { //Достаём рецепты
             
                if (entry.getKey().toString().startsWith(Reference.MODID)) { //Проверка на то что у рецептов есть наш modid
                 
                    recipe.add(entry.getValue()); //Добавляется значение из сохранненого
                 
                }
            }
            entityData.setBoolean(key, true); //Ставим значение нашего ключа на true
            player.unlockRecipes(recipe); //Открываем рецепты
            }
        }
    }


Конец!
Всё, теперь при первом заходе в мир у игрока будут автоматически разблокироваться наши рецепты !
Автор
Garik
Просмотры
1,383
Первый выпуск
Обновление
Оценка
4.67 звёзд 3 оценок

Другие ресурсы пользователя Garik

Последние рецензии

Полезностью особо не блещет, так как большинство используют JEI, но мне как поклоннику ванили понравилось, особо пригодится при своих рецептах с например как в торте, с возвращением вёдер и такое похожее.
Когда нибудь понадобиться
Сверху