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

Ядро
Paper

SpoGi

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

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


 
Последнее редактирование модератором:
Новый код (снова)
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 + " использовал тотем и потерял разрешение");
        }
    }
}
Я также пофиксил и теперь если эффект снимается из-за тотема, разрешение тоже снимается. Проверяй, теперь точно должно работать.
Объединено

вот плагин
Так я же говорю, не 1.20.1 версия сервера моего , А 1.21 ВЕРСИЯ моего сервера. не 1.20.1 ===> 1.21
 
Новый код (снова)
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 + " использовал тотем и потерял разрешение");
        }
    }
}
Я также пофиксил и теперь если эффект снимается из-за тотема, разрешение тоже снимается. Проверяй, теперь точно должно работать.
Объединено

вот плагин
Надо проверять новый эффект на нулл.
А вообще я бы получал длительность уже в блоке с проверкой на невидимость
 
Надо проверять новый эффект на нулл.
А вообще я бы получал длительность уже в блоке с проверкой на невидимость
я делал так, но тогда плагин ничего не делал.
Объединено

Понял, принял
Объединено


Я еще спрашивал, твой плагин нужно ставить вместе с HeadDrop?
да, конечно
Объединено

Вам необходимо зарегистрироваться для просмотра изображений-вложений
сейчас буду снова проверять.
 
Последнее редактирование:
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();
        if (q.getNewEffect() != null) {
            if (p instanceof Player) {
                if (pe.getName().equalsIgnoreCase("INVISIBILITY")) {
                    Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "lp user " + p.getName() + " permission settemp headdrop.player true " + q.getNewEffect().getDuration()/20 + "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
работает плагин?
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Если стоит TRUE, то голова игрока не выпадает, что в инвизе, что без него.

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Все настройки. Как ни менял, голова непадает.
 
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Если стоит TRUE, то голова игрока не выпадает, что в инвизе, что без него.

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Все настройки. Как ни менял, голова непадает.
подожди, какое разрешение нужно, если игрок под невидимостью?
 
ну значит все правильно, тебе в консоль что-то пишет?
А как оно может быть правильным, если голова не выпадает, когда игрок невидим?
В консоль выдает права мне в LuckPerms.
 
А как оно может быть правильным, если голова не выпадает, когда игрок невидим?
В консоль выдает права мне в LuckPerms.
ну правильно работает плагин, посмотри то разрешение выдаётся? может опечатка
 
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Если стоит TRUE, то голова игрока не выпадает, что в инвизе, что без него.

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Все настройки. Как ни менял, голова непадает.
попробуй включить Baby-HeadDrop и вообще работает ли выпадение если ты сам выдашь разрешение?
 
попробуй включить Baby-HeadDrop и вообще работает ли выпадение если ты сам выдашь разрешение?
В плагине есть режим. Что то врлде "нужно ли разрешение, чтобы выпадали головы" Если включить этот режим, то головы выпадать не будут даже под зелькой. Если же режим этот выключен, головы будут выпадать, как и без зельки, так и с зелькой.
 
В плагине есть режим. Что то врлде "нужно ли разрешение, чтобы выпадали головы" Если включить этот режим, то головы выпадать не будут даже под зелькой. Если же режим этот выключен, головы будут выпадать, как и без зельки, так и с зелькой.
то есть головы не падают даже если ты выдашь разрешение или что?
 
то есть головы не падают даже если ты выдашь разрешение или что?
так а зачем выдавать разрешение, если в твоем плагине и так оно выдается, когда пьешь зельку? :D

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


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

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

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

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

если выключить в плагине на выпадение головы, пермишен на выпедение головы (ужс), то головы будут выпадать, что с инвизкой, что без нее.
 
Назад
Сверху Снизу