Вопрос Уникальный предмет типа ItemSack для ShapedRecipe

RpAhmed

Пользователь
Сообщения
17
Необходимо создать средствами API вещь, которую нельзя никак подделать или создать.
Мне нужен предмет, который будет использоваться в тех или иных кастомных крафтах.
Что-то вроде этого -
Есть ли какие-нибудь решения на этот счет?
 
Решение
Так в чем может быть проблема?
Java:
for (ItemStack s : e.getInventory().getContents()) {
    if (s.getType() == Material.AIR) continue;               
                
    if (s.getItemMeta().hasCustomModelData() && s.getItemMeta().getCustomModelData() == 200)
    {
        e.getInventory().setResult(null);
        continue;
    }
}
Попробуй, но у меня в данном случае крафт железа в самородки работает даже если есть NBT, в остальном не работает с NBT а без него крафты работают.
Необходимо создать средствами API вещь, которую нельзя никак подделать или создать.
Мне нужен предмет, который будет использоваться в тех или иных кастомных крафтах.
Что-то вроде этого -
Есть ли какие-нибудь решения на этот счет?
Добавь предмету NBT и делай проверку по нему при крафте
 
А как отследить эту модель дату? Ну или же как провести корректную проверку через ивент?
Получаешь предмет, проверяешь на наличие CustomModelData с помощью hasCustomModelData() т.к. может выдать Null, затем получаешь эту дату с помощью getCustomModelData() и сравниваешь с нужным тебе значением
 
Получаешь предмет, проверяешь на наличие CustomModelData с помощью hasCustomModelData() т.к. может выдать Null, затем получаешь эту дату с помощью getCustomModelData() и сравниваешь с нужным тебе значением
Java:
@EventHandler
    public void testCraft(PrepareItemCraftEvent e)
    {
        if (e.getRecipe() instanceof ShapedRecipe)
        {
            ShapedRecipe recipe = (ShapedRecipe) e.getRecipe();

            if (recipe == null) return;
            
            for (ItemStack s : e.getInventory().getContents()) {
                
                if (s.getItemMeta().hasCustomModelData()) continue;
                
                if (s.getItemMeta().getCustomModelData(). ???) // что должно быть вместо ???
                {
                    e.getInventory().setResult(null);
                    continue;
                }
            }
        }
    }

Как правильно найти модель дату?
 
if (s.getItemMeta().hasCustomModelData()) continue;
Поменяй на
if (!s.getItemMeta().hasCustomModelData()) continue;
Работать работает, но теперь обычный слиток не выводит свой обычный крафт
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Работать работает, но теперь обычный слиток не выводит свой обычный крафт
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Скинь весь код метода
 
Скинь весь код метода
Java:
@EventHandler
    public void testCraft(PrepareItemCraftEvent e)
    {
        if (e.getRecipe() instanceof ShapedRecipe)
        {
            ShapedRecipe recipe = (ShapedRecipe) e.getRecipe();

            if (recipe == null) return;
            
            for (ItemStack s : e.getInventory().getContents()) {
                
                if (!s.getItemMeta().hasCustomModelData()) continue;
                
                if (s.getItemMeta().getCustomModelData() == 200)
                {
                    e.getInventory().setResult(null);
                    return; // если заменить на continue, то выдаст ошибку null
                }
            }
        }
    }
 
Так в чем может быть проблема?
Java:
for (ItemStack s : e.getInventory().getContents()) {
    if (s.getType() == Material.AIR) continue;               
                
    if (s.getItemMeta().hasCustomModelData() && s.getItemMeta().getCustomModelData() == 200)
    {
        e.getInventory().setResult(null);
        continue;
    }
}
Попробуй, но у меня в данном случае крафт железа в самородки работает даже если есть NBT, в остальном не работает с NBT а без него крафты работают.
 
Java:
for (ItemStack s : e.getInventory().getContents()) {
    if (s.getType() == Material.AIR) continue;              
               
    if (s.getItemMeta().hasCustomModelData() && s.getItemMeta().getCustomModelData() == 200)
    {
        e.getInventory().setResult(null);
        continue;
    }
}
Попробуй, но у меня в данном случае крафт железа в самородки работает даже если есть NBT, в остальном не работает с NBT а без него крафты работают.
Что-то не сходится. Мне нужен предмет с NBT тегом(CustomModelData), из которого будет крафтиться еще один предмет с NBT тегами как тут -
 
Что-то не сходится. Мне нужен предмет с NBT тегом(CustomModelData), из которого будет крафтиться еще один предмет с NBT тегами как тут -
Ну так в setResult() поставь свой предмет который тебе надо. Но работать будет в том случае если он совпадает с рецептом(например из железа крафтишь железную броню), ну или наверное с кастомным крафтом который зарегистрирован. В принципе тебе ничего не мешает модифицировать код из видео...
 
Ну так в setResult() поставь свой предмет который тебе надо. Но работать будет в том случае если он совпадает с рецептом(например из железа крафтишь железную броню), ну или наверное с кастомным крафтом который зарегистрирован. В принципе тебе ничего не мешает модифицировать код из видео...
Решение (y)
 
Последнее редактирование:
Назад
Сверху Снизу