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

Стартап Помощь новичкам и тем, кто мало писал плагины. (+ LifeHack'и)

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

  1. HauserGrim

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

    Баллы:
    96
    Действительно что-то протупил, но так или иначе потом нужно будет расширятся.
     
  2. HauserGrim

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

    Баллы:
    96
    В будущем нужно будет запилить пару команд. Наверняка я потом и сам во всём разберусь, не не мог бы мне кто-то показать пару п̶р̶и̶м̶е̶р̶о̶в слов, куда копать, чтобы в памяти отложилось? С таб комплитером, алиасами, приоритетом над командами других плагинов, пермами, только из консоли и всё такое.
     
    Последнее редактирование: 16 ноя 2019
  3. Studenikin

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

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Все это элементарно гуглится. Никто не будет специально для тебя писать целый туториал
    Начни с этого: https://www.spigotmc.org/wiki/create-a-simple-command/
     
  4. HauserGrim

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

    Баллы:
    96
    Это и так понятно. Всё гуглится)
    Я имел ввиду что-то типа:
    Ответ: в plugin.yml
    О: EventPriority
    И т.д.
    А о подробностях бы нагуглил.
    Сорян, что написал не подумав.
     
  5. HauserGrim

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

    Баллы:
    96
    Допустим у меня есть лист игроков и мне нужно удалить из этого списка игроков, которые попадают под определённые условия, а точнее игроки, которые находятся в определённом мире.

    Каким способом лучше это сделать? У меня ещё нет опыта с листами.
     
  6. alexandrage

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

    Баллы:
    173
    list.removeIf(player -> player.getWorld().getName().equals("world"))
     
  7. HauserGrim

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

    Баллы:
    96
    Спасибо.
     
  8. volk_alex

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

    Баллы:
    61
    Имя в Minecraft:
    volk_alex
    Доброго!

    Хочу узнать, есть ли способы повернуть игрока, находящегося в транспорте, на версии 1.14.4.

    Гугл выдал вариант, при котором игрока высаживают из транспорта, телепортируют и обратно сажают в транспорт. Однако при этом персонаж начинает дергаться в конвульсиях.
    Знаю, что уже есть setRotating() для версии 1.15.1. Переходить пока нет возможности.
     
  9. HauserGrim

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

    Баллы:
    96
    Как преобразовать лист строк (список миров из конфига) в лист миров?
    Через for получается, но хотелось бы уметь в Stream API
     
  10. TrashCode

    TrashCode Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TrashCode
    list.stream().map(Bukkit::getWorld).collect(Collectors.toList());
    Вроде так
     
  11. HauserGrim

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

    Баллы:
    96
    Пытался примерно так, но в обоих случая получил стак оверфлоу эррор, по этому сюда и обратился.
     
  12. volk_alex

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

    Баллы:
    61
    Имя в Minecraft:
    volk_alex
    Доброго!
    Асинхронно подгружаю файл данных. Может сложиться такая ситуация, что файл еще не подгружен, а данные уже нужны. Хочу узнать можно ли "фризить" сервак при помощи while до момента, когда файл подгрузится?
     
  13. HauserGrim

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

    Баллы:
    96
    Код:
        public static boolean checkDXLWorld(Player player) {
            return (settingsManager.getProperty(HooksSettings.DUNGEONSXL) && player.getWorld().toString().contains("DXL_"));
        }
    
    Если настройка включена в конфиге и игрок находится в мире, название которого включает в себя "DXL_", должно возвращать true, но по факту NPE. Хелп.

    Код:
    [18:50:48 ERROR]: Could not pass event EntityDamageByEntityEvent to Guilds v3.5.3.9.3-RELEASE
    java.lang.NullPointerException: null
            at me.glaremasters.guilds.utils.PlayerCheckUtils.checkValidWorld(PlayerCheckUtils.java:28) ~[?:?]
            at me.glaremasters.guilds.listeners.EntityListener.onDamage(EntityListener.java:178) ~[?:?]
            at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor680.execute(Unknown Source) ~[?:?]
            at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.13.2.jar:git-Paper-653]
            at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.13.2.jar:git-Paper-653]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:66) ~[patched_1.13.2.jar:git-Paper-653]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:520) ~[patched_1.13.2.jar:git-Paper-653]
            at org.bukkit.craftbukkit.v1_13_R2.event.CraftEventFactory.callEvent(CraftEventFactory.java:104) ~[patched_1.13.2.jar:git-Paper-653]
            at org.bukkit.craftbukkit.v1_13_R2.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:834) ~[patched_1.13.2.jar:git-Paper-653]
            at org.bukkit.craftbukkit.v1_13_R2.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:733) ~[patched_1.13.2.jar:git-Paper-653]
            at org.bukkit.craftbukkit.v1_13_R2.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:866) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityLiving.damageEntity0(EntityLiving.java:1520) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityHuman.damageEntity0(EntityHuman.java:904) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityLiving.damageEntity(EntityLiving.java:993) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityHuman.damageEntity(EntityHuman.java:817) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityPlayer.damageEntity(EntityPlayer.java:704) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityArrow.b(EntityArrow.java:341) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityArrow.a(EntityArrow.java:284) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityArrow.tick(EntityArrow.java:209) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.EntityTippedArrow.tick(EntityTippedArrow.java:85) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.World.entityJoinedWorld(World.java:1561) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.World.g(World.java:1528) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.World.tickEntities(World.java:1339) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.WorldServer.tickEntities(WorldServer.java:599) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:1107) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:439) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:940) ~[patched_1.13.2.jar:git-Paper-653]
            at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:837) ~[patched_1.13.2.jar:git-Paper-653]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
    Коммит с моим говнокодом: https://github.com/HauserGrim/Guilds/commit/b0ac0cc64bae1f96161e1c85d96351b53597270f
     
  14. TrashCode

    TrashCode Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TrashCode
    Так у тебя ошибка же в PlayerCheckUtils#checkValidWorld
    UPD: Исходники на гите вообще не совпадают с той версией, которую ты запускаешь
     
  15. HauserGrim

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

    Баллы:
    96
  16. TrashCode

    TrashCode Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TrashCode
    Ну значит у тебя либо player == null, либо settingsManager == null
     
  17. HauserGrim

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

    Баллы:
    96
    Думаю так и есть. Ладно, вечером попробую посмотреть что у меня там.
     
    Последнее редактирование: 5 янв 2020
  18. HauserGrim

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

    Баллы:
    96
    Если этот метод перенести в класс EntityListener (в котором должен вызываться метод), то всё ок. Единственное отличие, что он листенер.
    Может я в глаза долблюсь, но они должны работать одинаково в обеих случаях и я не могу понять в каком месте у меня руки погнулись.

    UPD
    Спросил у разраба плагина на прямую, к удивлению, ответил
    "You're not initializing it anywhere.
    If you look in claim utils, I pass it through the static method parameters
    I don't actually have it as a field in the class itself."

    Понял, пойду чинить

    (починил)
     
    Последнее редактирование: 28 янв 2020
  19. HauserGrim

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

    Баллы:
    96
    Как лучше сохранять определённые предметы / слоты при смерти? (какие могут понадобится ивенты, методы, вся фигня)
    Так, чтобы предмет не пропал, если игрок во время смерти перезайдёт или сервер перезапустится.
    Или есть ли готовые плагины или код, в которые можно подсмотреть?
    Знаю, что в новых версиях появился setKeepInventory, но, на сколько я понял, он работает на весь инвентарь.
    Собираюсь использовать апи версии 1.13.2, позже переходить на 1.15.2 и опираться лучше на него (мало-ли)
     
  20. Exception_Prototype

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

    Баллы:
    96
    PlayerRespawnEvent - восстанавливаешь предметы
    PlayerDeathEvent - удаляешь предметы из дропа и запоминаешь для игрока
    Между этим делом можно куда то их писать в файлик для игрока, чтобы инфа не пропала после рестарта.
     

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