1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Работа с торговым инвентарем

Тема в разделе "Разработка плагинов для новичков", создана пользователем Korvinius, 26 мар 2019.

  1. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Это не требуется с 1.13.
     
  2. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    я под 1.12.2 пишу, не подскажете, как в этой версии сделать?
     
  3. DeethzzCoder

    DeethzzCoder Активный участник Пользователь

    Баллы:
    76
    В методах equals и hashCode можно использовать EqualsBuilder HashCodeBuilder из apache commons lang3.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Да просто гетер сетер на durability
     
  5. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Стер, потому, что Damageable в meta, в версии 1.12.2 нет, да и прочность мне не нужна, мне нужно именно MaterialData, а вот запихать ее из своего класса обратно в ItemStack не получается.
     
  6. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Суть не в проверках, с этим все нормально, с сравнением как раз проблем нет, проблема в этом:
     
  7. DeethzzCoder

    DeethzzCoder Активный участник Пользователь

    Баллы:
    76
    Это совет просто, дабы сократить код.
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Сказал же setDurability getDurability если до 1.13. Работает с датой и прочностью сразу.
     
  9. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    аа, сори, невнимательно прочитал:)
     
  10. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Спасибо, все получилось, без Вас я бы не справился.
     
  11. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Если тебе нужен фейк житель, просто импорты обнови.
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Хотя в пепер апи вроде можно без фейк жителя делать.
     
  14. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    В этом куске кода:

    Код:
        public void addTrade(Villager villager, ItemStack stack1, ItemStack stack2, ItemStack stack3, int maxUses) {
            List<MerchantRecipe> recs = villager.getRecipes();
            if (stack2 != null) {
                MerchantRecipe rec = new MerchantRecipe(stack1, maxUses);
                rec.addIngredient(stack2);
                rec.addIngredient(stack3);
                recs.add(rec);
            } else {
                MerchantRecipe rec = new MerchantRecipe(stack1, maxUses);
                rec.addIngredient(stack2);
                recs.add(rec);
            }
            villager.setRecipes(recs);
        }
    ругалось на строку: "recs.add(rec);", заменил это: "List<MerchantRecipe> recs = villager.getRecipes();" на "List<MerchantRecipe> recs = new ArrayList<>();", все стало работать. Спасибо.

    Но все равно не совсем понятен новый инвентарь, похоже там добавилось что-то на подобии прокачки торговца, знать бы как это все стразу на максимум поставить... Вернее, где установить уровень и опыт понятно, где можно узнать какие они максимально возможные?
     
    Последнее редактирование: 23 янв 2021
  15. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Нашел, максимальный уровень торговца 5.
     
  16. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Но, этот вариант подходит только если у торговца один рецепт.
    Попробовал такой вариант:
    Код:
            List<MerchantRecipe> recs = villager.getRecipes();
            if (recs == null || recs.isEmpty()) recs = new ArrayList<>();
    Он не помогает, аналогичная ошибка, ругается на "recs.add(rec);" следующим образом:

    Код:
    org.bukkit.event.EventException: null
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1956) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(SourceFile:74) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(SourceFile:13) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(SourceFile:144) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(SourceFile:118) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:942) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:935) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeAll(SourceFile:103) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:918) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:851) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]
    Caused by: java.lang.UnsupportedOperationException
            at java.util.Collections$UnmodifiableCollection.add(Collections.java:1057) ~[?:1.8.0_232]
            at net.wealth_mc.mystery.specific.market.traders.VillTrade.addTrade(VillTrade.java:38) ~[?:?]
            at net.wealth_mc.mystery.specific.market.traders.TradesWork.onPlayerInteractEntityEvent(TradesWork.java:66) ~[?:?]
            at net.wealth_mc.mystery.listener.ListenerBukkit.onCheckClick(ListenerBukkit.java:245) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232]
            at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
            ... 18 more
    
    @alexandrage не подскажете что можно сделать?
     
  17. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Решил проблему следующим образом:
    Код:
    List<MerchantRecipe> recs = new ArrayList<MerchantRecipe>(villager.getRecipes());
    Еще есть непонятки какие-то с самими торгами, они почему-то ломаются, предметы из рецепта заменяются воздухом иногда и перезаписываются в БД, но пока не пойму на каком этапе это происходит
     

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