@keborg

В плагине Майнкрафт ошибка, что делать?

Кароч я хотел сделать тп лук, у меня получилось разместить его на 3 файла:

Описание лука:
package com.na.ru.noneadmin.utils;


import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.ArrayList;

public class TPBowUtil {


    public static ItemStack getTPBow(){
        ItemStack bow = new ItemStack(Material.BOW);

        ItemMeta meta = bow.getItemMeta();
        meta.addEnchant(Enchantment.ARROW_INFINITE, 1, true);
        meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
        meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&b[&eTP BOW&B]&r"));
        ArrayList<String> lore = new ArrayList<>();
        lore.add("This bow can");
        lore.add("teleport you!");
        meta.setLore(lore);
        meta.setUnbreakable(true);
        bow.setItemMeta(meta);

        return bow;
    }

}


Комманда выдачи лука:
package com.na.ru.noneadmin.commands;

import com.na.ru.noneadmin.utils.TPBowUtil;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

public class tpbowCMD implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {

        if (!(sender instanceof Player)){
            sender.sendMessage(ChatColor.RED+"This command only for players!");
            return true;
        }
        Player p = (Player) sender;
//        TPBowUtil item = new TPBowUtil();
//        ItemStack thing = item.getTPBow();
        ItemStack thing = TPBowUtil.getTPBow();
        if (!(p.getInventory().contains(thing))){
            p.getInventory().addItem(thing);
            if (!(p.getInventory().contains(new ItemStack(Material.ARROW)))){
                p.getInventory().addItem(new ItemStack(Material.ARROW));
            }
            p.playSound(p.getLocation(),Sound.ENTITY_EXPERIENCE_ORB_PICKUP,2.0f,2.0f);
            return true;
        }
        p.sendMessage(ChatColor.YELLOW+"U also have tp bow!");



        return true;
    }
}


Евент на стрелу:
package com.na.ru.noneadmin.events;

import com.na.ru.noneadmin.utils.TPBowUtil;
import org.bukkit.Sound;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.inventory.ItemStack;

public class onEntityFFallToDown implements Listener {

    @EventHandler
    public void onMagicArrow(ProjectileHitEvent e){
        if (e.getEntity().getType() == EntityType.ARROW){
            if (e.getEntity().getShooter() instanceof Player){
                Player p = (Player) e.getEntity().getShooter();
                ItemStack item = TPBowUtil.getTPBow();
                if (p.getInventory().getItemInMainHand().isSimilar(item)) {
                    if (e.getHitEntity() == null){
                        p.teleport(e.getEntity().getLocation());
                        e.getEntity().remove();
                        p.playSound(p.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 1.5f,1.5f);
                    }else {
                        LivingEntity ent = (LivingEntity) e.getHitEntity();
                        double hel = ent.getHealth() + ((LivingEntity) e.getHitEntity()).getLastDamage();
                        ent.setHealth(hel);
                        e.getEntity().remove();
                        p.getInventory().remove(item);
                        p.playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK,1.5f,1.5f);
                    }


            }}
        }
    }

}

+ регистратор евента и комманды
и + комманда в plugin.yml

И как бы это всё работает, но не идеально
То есть у меня в файле Евента прописано, что при поподании стрелы в сущность (включая игрока), лук будет исчезать из инвентаря, но из 10 раз не работает раза 2, выдавая ошибку:

[21:29:52] [Server thread/ERROR]: Could not pass event ProjectileHitEvent to NoneAdmin v1.0
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callProjectileHitEvent(CraftEventFactory.java:803) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.EntityArrow.a(EntityArrow.java:259) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.EntityArrow.B_(EntityArrow.java:194) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.EntityTippedArrow.B_(EntityTippedArrow.java:86) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.World.entityJoinedWorld(World.java:1631) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.World.h(World.java:1601) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.World.tickEntities(World.java:1435) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.WorldServer.tickEntities(WorldServer.java:668) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:817) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_361]
Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0(24.666667938232422)
at org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:97) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
at com.na.ru.noneadmin.events.onEntityFFallToDown.onMagicArrow(onEntityFFallToDown.java:33) ~[?:?]
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_361]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_361]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-f4830a1]
... 16 more

Ошибка вылезает редко, и вроде только при попадании в Ентити
(При попадании в Ентити, должен удяляться лук, воспроизводится звук ломания предмета и возвращать хп, которые отнялись)
Сразу говорю что всё подключено, и работает стабильно кроме этого
Есть предположения в чём дело?
Кста, ядро и плагин на 1.12.2
+ не обращайте внимание на то что я использую проверку только на главную руку, потом на вторую тоже добавлю
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
@rPman
твоя ошибка
Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0(24.666667938232422)

ты пытаешься дать больше жизней чем это возможно, ограничивай

p.s. я правильно понимаю, что если я выстреливаю из лука и тут же меняю оружие в руке, пока стрела летит, то у меня просто ничего не сломается?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект