Вопрос HeadDrop, ConditionalEvents, InvisibleKill, Нужно связать 2 плагина в ConditionalEvents.

Ядро
Paper

SpoGi

Пользователь
Сообщения
152
Суть в чем.
Есть плагин на невидимое убийство. Оно работает, когда игрок под зелькой невидимости. (InvisibleKill)
Есть плагин на выпадение головы при убийстве. (HeadDrop)
Проблема заключается в том, что если просто включить выпадение головы, игроки просто засрут все головами. Если понизить шанс, не получится задумки.
Что хочу сделать:
В плагине на головы, есть разрешение (headdrop.player), которое позволяет выбивать голову.
Можно ли сделать так, чтобы когда игрок, пил зелье невидимости, ему на время (либо время действия зельки, либо фиксированное время) выдавалось право получения головы? Сделать это именно в ConditionalEvents, я пытался, у меня не получается никак. У меня вечные проблемы с этим плагином. Очень выручите, если поможете.

Ссылки на все плагины:


 
Последнее редактирование модератором:
так а зачем выдавать разрешение, если в твоем плагине и так оно выдается, когда пьешь зельку? :D

изначальная задумка:
Выпил зелье, убил игрока, твой ник не виден в чате (это другой плагин) и с убитого игрока выпадает голова.
Зелька заканчивает эффект, головы больше не выпадают.


Что происходит сейчас.
Без твоего плагина:
При выключенном в настройках параметре о пермишене на выпадение голов, головы выпадают постоянно и всегда.
При включенном пермишене, головы падают только тем, у кого есть разрешение.

С твоим плагином:
Пермишены никому не выданы. Так как твой плагин должен выдавать его на время сам.

В плагине на выпадение голов, включен режим, "нужно разрешение на выпадение головы"

Когда пьется зелька, выдается пермишен на выпадение голов, но головы не выпадают.

если выключить в плагине на выпадение головы, пермишен на выпедение головы (ужс), то головы будут выпадать, что с инвизкой, что без нее.
offtop не знаю что тебе сказать
 
offtop не знаю что тебе сказать
Если я выдам разрешение изначально, какой смысл в зелье, если все и так будут головы получать? Я вообще уже запутался. Что мне нужно сделать, чтобы оно заработало так как я хочу то?
 
Если я выдам разрешение изначально, какой смысл в зелье, если все и так будут головы получать? Я вообще уже запутался. Что мне нужно сделать, чтобы оно заработало так как я хочу то?
у тебя luckperms?
 
Если я выдам разрешение изначально, какой смысл в зелье, если все и так будут головы получать? Я вообще уже запутался. Что мне нужно сделать, чтобы оно заработало так как я хочу то?
Попробуй просто проверить работу плагина на выпадение голов: выдай себе нужный пермишн, если голова не выпадет, значит проблема с плагином на головы
 
ты решил проблему?
В описании вообще не правильно указаны пра
Вам необходимо зарегистрироваться для просмотра изображений-вложений
ва. Там нужно указывать headdrop.killer. Вместо Headdrop.player...
 
В описании вообще не правильно указаны пра
Вам необходимо зарегистрироваться для просмотра изображений-вложений
ва. Там нужно указывать headdrop.killer. Вместо Headdrop.player...
было бы хорошо если бы эффект выдавался только на 45 секунд.
и еще имел куллдаун.
 
было бы хорошо если бы эффект выдавался только на 45 секунд.
и еще имел куллдаун.
перепишу, но объясни что такое кулдавн, типо если разрешение выдавалось меньше минуты назад, то оно не выдаст
 
перепишу, но объясни что такое кулдавн, типо если разрешение выдавалось меньше минуты назад, то оно не выдаст
Ну типо запрет после одного использования, к примеру выпил, у него запрет на выдачу команды под зелькой на 3 часа. К примеру.
 
Ну типо запрет после одного использования, к примеру выпил, у него запрет на выдачу команды под зелькой на 3 часа. К примеру.
Изменено:
Действует 45 секунд
Добавлена задержка на 3 часа после прошлого получения разрешения
(Снять задержку "lp user nickname permission unsettemp cooldown.3h")
Выдаётся правильное разрешение.
Код
Изменен только класс с ивентами
Java:
package org.quenna.qheaddrop1;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.entity.EntityResurrectEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;

import static org.bukkit.ChatColor.*;

public class QEvents implements Listener {
    @EventHandler
    public void onPotionDrink(EntityPotionEffectEvent q) {
        Entity p = q.getEntity();
        PotionEffectType pe = q.getModifiedType();
        if (q.getNewEffect() != null) {
            if (!(p.hasPermission("cooldown.3h"))) {
            if (p instanceof Player) {
                if (pe.getName().equalsIgnoreCase("INVISIBILITY")) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission settemp headdrop.killer true 45s");
                    Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission settemp cooldown.3h true 3h");
                    Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " выпил зелье и получил разрешение.");
                } else {
                    p.sendMessage(GOLD + "| " + WHITE + "Прежде чем снова получить возможность получать головы, подождите 3 часа.");
                }
                }
            }
        }
    }
    @EventHandler
    public void fixMilk(PlayerItemConsumeEvent q) {
        Entity p = q.getPlayer();
        ItemStack milk = q.getItem();
        if (milk.getType() == Material.MILK_BUCKET) {
            if (p.hasPermission("headdrop.player")) {
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission unsettemp headdrop.killer");
                Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD +p.getName() + WHITE + " выпил молоко и потерял разрешение.");
            }
        }
    }
    @EventHandler
    public void fixDead(EntityDeathEvent q) {
        Entity p = q.getEntity();
        if (p instanceof Player) {
            if (p.hasPermission("headdrop.player")) {
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission unsettemp headdrop.killer");
                Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " умер и потерял разрешение");
            }
        }
    }
    @EventHandler
    public void fixTotem(EntityResurrectEvent q) {
        Entity p = q.getEntity();
        if (p.hasPermission("headdrop.player")) {
            Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission unsettemp headdrop.killer");
            Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " использовал тотем и потерял разрешение");
        }
    }
}
Огромное спасибо тебе, я потренировался в написании кода и заодно помог тебе, удачи (если надо будет, что-то дополнить, напиши)
файл плагина
 

Вложения

  • QHeadDrop1.21.x-1.0-SNAPSHOT.jar
    5.4 KB · Просмотры: 1
Изменено:
Действует 45 секунд
Добавлена задержка на 3 часа после прошлого получения разрешения
(Снять задержку "lp user nickname permission unsettemp cooldown.3h")
Выдаётся правильное разрешение.
Код
Изменен только класс с ивентами
Java:
package org.quenna.qheaddrop1;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.entity.EntityResurrectEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;

import static org.bukkit.ChatColor.*;

public class QEvents implements Listener {
    @EventHandler
    public void onPotionDrink(EntityPotionEffectEvent q) {
        Entity p = q.getEntity();
        PotionEffectType pe = q.getModifiedType();
        if (q.getNewEffect() != null) {
            if (!(p.hasPermission("cooldown.3h"))) {
            if (p instanceof Player) {
                if (pe.getName().equalsIgnoreCase("INVISIBILITY")) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission settemp headdrop.killer true 45s");
                    Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission settemp cooldown.3h true 3h");
                    Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " выпил зелье и получил разрешение.");
                } else {
                    p.sendMessage(GOLD + "| " + WHITE + "Прежде чем снова получить возможность получать головы, подождите 3 часа.");
                }
                }
            }
        }
    }
    @EventHandler
    public void fixMilk(PlayerItemConsumeEvent q) {
        Entity p = q.getPlayer();
        ItemStack milk = q.getItem();
        if (milk.getType() == Material.MILK_BUCKET) {
            if (p.hasPermission("headdrop.player")) {
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission unsettemp headdrop.killer");
                Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD +p.getName() + WHITE + " выпил молоко и потерял разрешение.");
            }
        }
    }
    @EventHandler
    public void fixDead(EntityDeathEvent q) {
        Entity p = q.getEntity();
        if (p instanceof Player) {
            if (p.hasPermission("headdrop.player")) {
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission unsettemp headdrop.killer");
                Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " умер и потерял разрешение");
            }
        }
    }
    @EventHandler
    public void fixTotem(EntityResurrectEvent q) {
        Entity p = q.getEntity();
        if (p.hasPermission("headdrop.player")) {
            Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission unsettemp headdrop.killer");
            Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " использовал тотем и потерял разрешение");
        }
    }
}
Огромное спасибо тебе, я потренировался в написании кода и заодно помог тебе, удачи (если надо будет, что-то дополнить, напиши)
файл плагина
Просто пушка на самом деле. Спасибо большое. Завтра протестирую его :)
 
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Спамит в чат, когда кто то убивает. не прекращая.
Объединено

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Спамит в чат, когда кто то убивает. не прекращая. Причем даже перезагрузка на сервер не помогает
 
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Спамит в чат, когда кто то убивает. не прекращая.
вот версия без сообщений
Объединено

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Спамит в чат, когда кто то убивает. не прекращая.
Объединено
теперь всё точно работает как нужно?
 

Вложения

  • QHeadDrop1.21.x-1.0-SNAPSHOT.jar
    5.3 KB · Просмотры: 1
Последнее редактирование:
Привет, написал плагин. Работает так, если игрок пьёт зелье невидимости, то ему выдаётся разрешение на столько времени сколько действует зелье.
Исходный код вот
Главный класс
Java:
package org.quenna.qheaddrop;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;

public final class QHeadDrop extends JavaPlugin {

@Override
    public void onEnable() {
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "Плагин qHeadDrop запущен, Плагин принадлежит Quenna");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "");

getServer().getPluginManager().registerEvents(new QEvents(), this);
    }

@Override
    public void onDisable() {
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "Плагин qHeadDrop выключен, Плагин принадлежит Quenna");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "");
    }
}

Вот код Ивента
Java:
package org.quenna.qheaddrop;

import org.bukkit.Bukkit;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.potion.PotionEffectType;

public class QEvents implements Listener {
@EventHandler
    public void onPotionDrink(EntityPotionEffectEvent q) {
        Entity p = q.getEntity();
        PotionEffectType pe = q.getModifiedType();
int ped = q.getNewEffect().getDuration()/20;
if (p instanceof Player) {
if (pe.getName().equalsIgnoreCase("INVISIBILITY")) {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission settemp headdrop.player true " + ped + "s");
            }
        }
    }
}
Объединено

Вот сам плагин, в прошлое сообщение забыл добавить
А если игрок выпьет молоко? Ил если он умрет???
 
Назад
Сверху Снизу