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

Ядро
Paper

SpoGi

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

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


 
Последнее редактирование модератором:
Привет, написал плагин. Работает так, если игрок пьёт зелье невидимости, то ему выдаётся разрешение на столько времени сколько действует зелье.
Исходный код вот
Главный класс
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");
            }
        }
    }
}
Объединено

Вот сам плагин, в прошлое сообщение забыл добавить
 

Вложения

  • qHeadDrop-1.0-SNAPSHOT.jar
    4.4 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");
            }
        }
    }
}
Объединено

Вот сам плагин, в прошлое сообщение забыл добавить
Я правильно понимаю, что после того, как у игрока заканчивается эффект зелья, разрешение снимается?
 
давай, очень жду. проверял на 1.16.5 (если надо скину версию плагина на 1.16.5), все работало как надо
У меня версия маинкрафта 1.21 ))
Объединено

давай, очень жду. проверял на 1.16.5 (если надо скину версию плагина на 1.16.5), все работало как надо
И да, папка новая не создалась
 
У меня версия маинкрафта 1.21 ))
Объединено


И да, папка новая не создалась
папка новая и не должна создаваться
Объединено

У меня версия маинкрафта 1.21 ))
Объединено


И да, папка новая не создалась
я знаю, что у тебя версия 1.20.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");
            }
        }
    }
}
Объединено

Вот сам плагин, в прошлое сообщение забыл добавить
Минус этого решения в том, что если игрок выпьет молоко, то разрешение будет действовать до того момента, когда по логике должно было закончиться время эффекта
 
Минус этого решения в том, что если игрок выпьет молоко, то разрешение будет действовать до того момента, когда по логике должно было закончиться время эффекта
сейчас исправлю
 
Новый код (переписал только файл с ивентами), добавил уведомление о выдаче разрешения и снятия + для автора темы добавил конфиг)
Java:
 package org.quenna.qheaddrop;

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.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
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");
                Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "Игрок " + ChatColor.GOLD + p.getName() + ChatColor.WHITE + " выпил зелье и получил разрешение.");
            }
        }
    }
    @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.player");
                Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| " + ChatColor.WHITE + "Игрок " + ChatColor.GOLD +p.getName() + ChatColor.WHITE + " выпил молоко и потерял разрешение.");
            }
        }
    }
}
 

Вложения

  • qHeadDrop-1.0-SNAPSHOT.jar
    5.1 KB · Просмотры: 0
А если игрок умрёт, то право тоже останется...

Вообще, в ивенте EntityPotionEffectEvent есть возможность проверить, что происходит с эффектом, метод -
 
А если игрок умрёт, то право тоже останется...

Вообще, в ивенте EntityPotionEffectEvent есть возможность проверить, что происходит с эффектом, метод -
ты меня в ступор поставил, я даже не знаю как с этим работать. типо при любом изменении снимать пермишн?
 
ты меня в ступор поставил, я даже не знаю как с этим работать. типо при любом изменении снимать пермишн?
Есть действие ADDED, выдавать пермишн, при действии CLEARED/REMOVED забирать
 
папка новая и не должна создаваться
Объединено


я знаю, что у тебя версия 1.20.1, файл который я скинул под твою версию ты так и не ответил работает плагин или нет?
1.21, не 1.20.1
Объединено

+ папка не создается. Никакой папки нет с конфигом плагина. Или ее типо вообще быть не должно? Поставить вместе с основным плагином да?
 
Последнее редактирование:
1.21, не 1.20.1
Объединено

+ папка не создается. Никакой папки нет с конфигом плагина. Или ее типо вообще быть не должно? Поставить вместе с основным плагином да?
Вообще не должно быть
 
1.21, не 1.20.1
Объединено

+ папка не создается. Никакой папки нет с конфигом плагина. Или ее типо вообще быть не должно? Поставить вместе с основным плагином да?
напиши в телеграмм и покажи логи консоли (тг @CucumberTwo)
1.21, не 1.20.1
Объединено

+ папка не создается. Никакой папки нет с конфигом плагина. Или ее типо вообще быть не должно? Поставить вместе с основным плагином да?
конфиг создаваться не должен, поставить можно без conditial events, можно с ним. да, с версией ошибся, сейчас перепишу на 1.20.1
 
Новый код (снова)
Java:
package org.quenna.qheaddrop1;

import org.bukkit.Bukkit;
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();
        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");
                Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " выпил зелье и получил разрешение.");
            }
        }
    }
    @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.player");
                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.player");
                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.player");
            Bukkit.getConsoleSender().sendMessage(GOLD + "| " + WHITE + "Игрок " + GOLD + p.getName() + WHITE + " использовал тотем и потерял разрешение");
        }
    }
}
Я также пофиксил и теперь если эффект снимается из-за тотема, разрешение тоже снимается. Проверяй, теперь точно должно работать.
Объединено

вот плагин
 

Вложения

  • QHeadDrop1.21.x-1.0-SNAPSHOT.jar
    5.3 KB · Просмотры: 1
Назад
Сверху Снизу