Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Крафт из кастомных предметов и их переплавка

Так переделай без бага, проблем? Не я же кодил за тебя.
К сожалению, я не знаю его причину. Если бы понимал, в чем там проблема, за помощью бы не обращался. Притом, проблема такая не только у меня. А вот решения я не нашел.
 
К сожалению, я не знаю его причину. Если бы понимал, в чем там проблема, за помощью бы не обращался.
Значит рано тебе плагины писать, если ты даже не понимаешь как написанный тобою код работает.
 
Значит рано тебе плагины писать, если ты даже не понимаешь как написанный тобою код работает.
Как работает код-то я понимаю, и в теории он работает правильно, оттуда и проблема, что ничего, что могло бы спровоцировать проблему я не добавлял. Никаких операций с ингредиентами, кроме сравнения meta, я не проводил. И, повторюсь, не только я с этим сталкивался, http://rubukkit.org/threads/nekorrektnaja-rabota-preparecraftitemevent-resheno.162371/ . Даже вы этот тред комментировали. Но, по итогу, решение так и не было представлено. Я, безусловно, много чего еще не понимаю, но, все же с чего-то начинали. Что же, в любом случае, спасибо за советы, буду пытаться это как-то решать.
 
Как работает код-то я понимаю, и в теории он работает правильно, оттуда и проблема, что ничего, что могло бы спровоцировать проблему я не добавлял. Никаких операций с ингредиентами, кроме сравнения meta, я не проводил. И, повторюсь, не только я с этим сталкивался, http://rubukkit.org/threads/nekorrektnaja-rabota-preparecraftitemevent-resheno.162371/ . Даже вы этот тред комментировали. Но, по итогу, решение так и не было представлено. Я, безусловно, много чего еще не понимаю, но, все же с чего-то начинали. Что же, в любом случае, спасибо за советы, буду пытаться это как-то решать.
Проблема точно в тебе, мой же плагин работает исправно, кидал выше.
 
Проблема точно в тебе, мой же плагин работает исправно, кидал выше.
Я не отрицаю, что во мне, лишь указываю на некую распространенность проблемы. И, раз даже более опытные люди с этим столкнулись, думаю, новичку это простительно, и плагины мне писать все же можно. Проблему, так или иначе, я устранил банальным локом количества предметов в ячейке на 1. Можно ли лучше? Да, наверняка, но как, мне пока неизвестно. Ваш код, в отличие от своего, я понимаю не до конца, потому и не прибегаю к нему. В любом случае, благодарю за помощь!
 
Я не отрицаю, что во мне, лишь указываю на некую распространенность проблемы. И, раз даже более опытные люди с этим столкнулись, думаю, новичку это простительно, и плагины мне писать все же можно. Проблему, так или иначе, я устранил банальным локом количества предметов в ячейке на 1. Можно ли лучше? Да, наверняка, но как, мне пока неизвестно. Ваш код, в отличие от своего, я понимаю не до конца, потому и не прибегаю к нему. В любом случае, благодарю за помощь!
Не понимаю о чем ты, я вообще не трогаю предметы в сетке крафта, только отменяю результат выставив воздух, если на предметах нету нужной метдаты. В этом нет никакой логики, зачем их вообще нужно подменять? Их же сам игрок кладет.
 
Не понимаю о чем ты, я вообще не трогаю предметы в сетке крафта, только отменяю результат, если на предметах нету нужной метдаты.
Мой алгоритм таков: я проверяю: 1) если материал в ячейка[n] == тому, чему мне надо, 2) этот материал имеет meta, 3) этот материал имеет определенную meta (кастомного предмета). При таком подходе, если предметов больше 1, возникал вышеописанный баг. Теперь же я добавил условие: 4) количество в ячейка[n] ! == 1. Опять же, это жуткие костыли, но хотя бы работает.
PHP:
        if(craft.getType() == InventoryType.WORKBENCH
                && matrix[0] == null
                && matrix[1] == null 
                && matrix[2] == null 
                && matrix[3] == null 
                && matrix[4] != null && matrix[4].getType() == Material.NAUTILUS_SHELL && matrix[4].hasItemMeta() && matrix[4].getItemMeta().equals(meta) && matrix[4].getAmount() == 1
                && matrix[5] == null 
                && matrix[6] == null
                && matrix[7] != null && matrix[7].getType() == Material.STICK && matrix[7].getAmount() == 1
                && matrix[8] == null) {
           

                    event.getInventory().setResult(woodendagge);
        }   
    }
 
Мой алгоритм таков: я проверяю: 1) если материал в ячейка[n] == тому, чему мне надо, 2) этот материал имеет meta, 3) этот материал имеет определенную meta (кастомного предмета). При таком подходе, если предметов больше 1, возникал вышеописанный баг. Теперь же я добавил условие: 4) количество в ячейка[n] ! == 1. Опять же, это жуткие костыли, но хотя бы работает.
PHP:
        if(craft.getType() == InventoryType.WORKBENCH
                && matrix[0] == null
                && matrix[1] == null
                && matrix[2] == null
                && matrix[3] == null
                && matrix[4] != null && matrix[4].getType() == Material.NAUTILUS_SHELL && matrix[4].hasItemMeta() && matrix[4].getItemMeta().equals(meta) && matrix[4].getAmount() == 1
                && matrix[5] == null
                && matrix[6] == null
                && matrix[7] != null && matrix[7].getType() == Material.STICK && matrix[7].getAmount() == 1
                && matrix[8] == null) {
         

                    event.getInventory().setResult(woodendagge);
        } 
    }
В этом реально смысла нет, число предметов не имеет значение, от слова совсем. Нет смысла его считать и сравнивать. if(stack1.isSimilar(stack2)) {todo}
 
В этом реально смысла нет, число предметов не имеет значение, от слова совсем. Нет смысла его считать и сравнивать. if(stack1.isSimilar(stack2)) {todo}
Не соглашусь, что не имеет смысла. Если в ячейку положить более одного предмета, то после крафта он останется, верно? Так вот, здесь этот самый остаток рассчитывается по некоторой формуле. Остаток = (n-1)*2, где n - исходное число предметов. То есть, как на скриншоте ниже, если я крафчу кинжал из одного материала, загружая в ячейку стак, то на выходе получу (64-1)*2 = 126 материала. При ограничении в один, остаток будет равен нулю ((1-1)*2), как и должен при нормальном крафте. Не знаю, как формула получилась, ведь я ничего подобного и близко не добавлял.
 

Вложения:

  • 2021-04-04_00.11.37.png
    2021-04-04_00.11.37.png
    Размер файла
    289,5 КБ
    Просмотров
    4

Поделиться этой страницей

Назад
Верх