Помогите Запретить крафт,а вместо него сделать другой

Статус
Закрыто для дальнейших ответов.

Merkelris

Новичок
Пользователь
Баллы
21
Ну смысл в название темы,но всё-равно скажу
Я хочу к примеру сделать крафт кварцевого блока не 4 кварца,а 9
Ну и запретил крафт блока,ток вот мой крафт тоже запрещён.
 
Запретить крафт,а вместо него сделать другой


К сожалению у меня был похожий проект но только это проект мода, а тебе ведь плагин нужен, это можно только через моды сделать! Так как невозможно через плагин модифицировать ITEM! Если запретить крафт, то ты по любому запрещаешь именно результат крафта, каким бы рецептом он не был создан, по любому на выходе будет один предмет, попавший под действие запрета! Иное дело если запрещать не результат, а сам рецепт с данными ингредиентами, но такого я не встречал в природе вообще! Если кто добудет такой метод - ему огромный RESPEKT! А вот если делать мод, то сперва запрещаешь результат стандартного крафта, затем создаешь модифицированный предмет с такой же иконкой но с другим ID и заменяешь как результат своего крафта стандартный ITEM на модифицированный! Что касается Item Meta , Set Lore то это не является модификацией, это добавление эффектов и имени и всего, но скрипту это ни о чем не говорит, он идентифицирует предмет только по своему стандартному ID. так как сервер обрабатывает именно данные ядра Bukkit! Для него не существует иного предмета кроме того который там прописан, какими бы эффектами этот предмет не пичкали!
 
Последнее редактирование:
Могу это реализовать! Создай проект конкретно! Какие крафты нужны и там все тонкости прочие пожелания!

Выложи это мне и я сделаю тебе все как надо!
Самому хочется всё-же,а так пошёл бы в другую тему.Но если напишешь пример сказал бы спасибо)
 
Вот, написал по фасту. Думаю, что это не самый оптимальный вариант, но всё-таки. Работает только для данного примера.
@EventHandler
public void Block_craft (PrepareItemCraftEvent e) {
CraftingInventory inv = e.getInventory();
if (inv.getResult().getType()!=Material.QUARTZ_BLOCK) return;
for (int i=1; i<10; i++)
if (inv.getItem(i)==null||inv.getItem(i).getType()!=Material.QUARTZ)
{
inv.setResult(null);
break;
}
}
 
Вот, написал по фасту. Думаю, что это не самый оптимальный вариант, но всё-таки. Работает только для данного примера.
@EventHandler
public void Block_craft (PrepareItemCraftEvent e) {
CraftingInventory inv = e.getInventory();
if (inv.getResult().getType()!=Material.QUARTZ_BLOCK) return;
for (int i=1; i<10; i++)
if (inv.getItem(i)==null||inv.getItem(i).getType()!=Material.QUARTZ)
{
inv.setResult(null);
break;
}
}
Слов нет..
 
К сожалению у меня был похожий проект но только это проект мода, а тебе ведь плагин нужен, это можно только через моды сделать! Так как невозможно через плагин модифицировать ITEM! Если запретить крафт, то ты по любому запрещаешь именно результат крафта, каким бы рецептом он не был создан, по любому на выходе будет один предмет, попавший под действие запрета! Иное дело если запрещать не результат, а сам рецепт с данными ингредиентами, но такого я не встречал в природе вообще! Если кто добудет такой метод - ему огромный RESPEKT! А вот если делать мод, то сперва запрещаешь результат стандартного крафта, затем создаешь модифицированный предмет с такой же иконкой но с другим ID и заменяешь как результат своего крафта стандартный ITEM на модифицированный! Что касается Item Meta , Set Lore то это не является модификацией, это добавление эффектов и имени и всего, но скрипту это ни о чем не говорит, он идентифицирует предмет только по своему стандартному ID. так как сервер обрабатывает именно данные ядра Bukkit! Для него не существует иного предмета кроме того который там прописан, какими бы эффектами этот предмет не пичкали!
Уверен что в плагине нельзя?(С модами у меня долгая история почему не делаю их);
 
Можно попробовать накостылить что-то, но не знаю будет ли работать. Удалить рецепт через RecipeIterator, и наново зарегистрировать со своим результатом.
 
Ну смысл в название темы,но всё-равно скажу
Я хочу к примеру сделать крафт кварцевого блока не 4 кварца,а 9
Ну и запретил крафт блока,ток вот мой крафт тоже запрещён.
Добавь новый крафт нового кварцевого блока(с названием главное чтобы чем-то отличался от обычного), а обычный запрети ставить обычным игрокам. Не совсем оптимально, но нормально.
 
Добавь новый крафт нового кварцевого блока(с названием главное чтобы чем-то отличался от обычного), а обычный запрети ставить обычным игрокам. Не совсем оптимально, но нормально.
То есть крафт будет не запрещён, но бесполезен!
 
Мда... просто нужно было подумать головой, а не другим местом.

Код:
    @EventHandler
    public void onPreItemCraft(PrepareItemCraftEvent e) {
        Recipe craft = e.getRecipe();
        if (craft==null) return;
        ItemStack result = craft.getResult();
        if (result==null || result.getType()!=Material.QUARTZ_BLOCK) return;
        ShapedRecipe shapedCraft = (ShapedRecipe) craft;
        if (shapedCraft.getIngredientMap().size()==4) {
            e.getInventory().setResult(null);
        }   
    }
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх