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

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

Тебе никто не мешает сделать главный класс плагина implements Listener
и делать Bukkit.getPluginManager().registerEvents(this, this);
Действительно что-то протупил, но так или иначе потом нужно будет расширятся.
 
В будущем нужно будет запилить пару команд. Наверняка я потом и сам во всём разберусь, не не мог бы мне кто-то показать пару п̶р̶и̶м̶е̶р̶о̶в слов, куда копать, чтобы в памяти отложилось? С таб комплитером, алиасами, приоритетом над командами других плагинов, пермами, только из консоли и всё такое.
 
Последнее редактирование:
В будущем нужно будет запилить пару команд. Наверняка я потом и сам во всём разберусь, не не мог бы мне кто-то показать пару примеров, чтобы в памяти отложилось? С таб комплитером, алиасами, приоритетом над командами других плагинов, пермами, только из консоли и всё такое.
Все это элементарно гуглится. Никто не будет специально для тебя писать целый туториал
Начни с этого: https://www.spigotmc.org/wiki/create-a-simple-command/
 
Все это элементарно гуглится
Это и так понятно. Всё гуглится)
Я имел ввиду что-то типа:
таб комплитером, алиасами
Ответ: в plugin.yml
О: EventPriority
И т.д.
А о подробностях бы нагуглил.
Сорян, что написал не подумав.
 
Допустим у меня есть лист игроков и мне нужно удалить из этого списка игроков, которые попадают под определённые условия, а точнее игроки, которые находятся в определённом мире.

Каким способом лучше это сделать? У меня ещё нет опыта с листами.
 
Допустим у меня есть лист игроков и мне нужно удалить из этого списка игроков, которые попадают под определённые условия, а точнее игроки, которые находятся в определённом мире.

Каким способом лучше это сделать? У меня ещё нет опыта с листами.
list.removeIf(player -> player.getWorld().getName().equals("world"))
 
Доброго!

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

Гугл выдал вариант, при котором игрока высаживают из транспорта, телепортируют и обратно сажают в транспорт. Однако при этом персонаж начинает дергаться в конвульсиях.
Знаю, что уже есть setRotating() для версии 1.15.1. Переходить пока нет возможности.
 
Как преобразовать лист строк (список миров из конфига) в лист миров?
Через for получается, но хотелось бы уметь в Stream API
 
Как преобразовать лист строк (список миров из конфига) в лист миров?
Через for получается, но хотелось бы уметь в Stream API
list.stream().map(Bukkit::getWorld).collect(Collectors.toList());
Вроде так
 
Доброго!
Асинхронно подгружаю файл данных. Может сложиться такая ситуация, что файл еще не подгружен, а данные уже нужны. Хочу узнать можно ли "фризить" сервак при помощи while до момента, когда файл подгрузится?
 
Код:
    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
 
Код:
    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
Так у тебя ошибка же в PlayerCheckUtils#checkValidWorld
UPD: Исходники на гите вообще не совпадают с той версией, которую ты запускаешь
 
Если этот метод перенести в класс 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."

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

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

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

Назад
Верх