Изменение атрибутов лошади - PullRequest
0 голосов
/ 10 ноября 2018

Недавно я делал плагин для «переносной лошади», и я очень близок к тому, чтобы закончить, мои лошади появляются и исчезают так, как я этого хочу.Тем не менее, единственное, с чем я сталкиваюсь со значительными проблемами, это изменение атрибутов лошади, таких как скорость, цвет, высота прыжка и вариант.Вот мой код:

package io.github.bxnie.events;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Donkey;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.inventory.ItemStack;

public class HorseSpawn implements Listener {

    @SuppressWarnings({ "deprecation" })
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent e) {
        if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
            Player p = e.getPlayer();
            ItemStack item = e.getItem();

            if(item.getItemMeta().getDisplayName().equals(ChatColor.GRAY + "Donkey")) {
                Donkey donkey = (Donkey) p.getWorld().spawn(p.getLocation(), Donkey.class);
                donkey.setAdult();
                donkey.setTamed(true);
                donkey.setOwner(p);
                donkey.getInventory().setSaddle(new ItemStack(Material.SADDLE));
                donkey.setCustomName(ChatColor.GRAY + "Donkey");
                donkey.setPassenger(p);
            }

            if(item.getItemMeta().getDisplayName().equals(ChatColor.RED + "Brown Horse")) {
                Horse horsebrown = (Horse) p.getWorld().spawn(p.getLocation(), Horse.class);
                horsebrown.setAdult();
                horsebrown.setTamed(true);
                horsebrown.setOwner(p);
                horsebrown.getInventory().setSaddle(new ItemStack(Material.SADDLE));
                horsebrown.setCustomName(ChatColor.RED + "Horse");
                horsebrown.setPassenger(p);
            }

            if(item.getItemMeta().getDisplayName().equals(ChatColor.DARK_GRAY + "Black Horse")) {
                Horse horseblack = (Horse) p.getWorld().spawn(p.getLocation(), Horse.class);
                horseblack.setAdult();
                horseblack.setTamed(true);
                horseblack.setOwner(p);
                horseblack.getInventory().setSaddle(new ItemStack(Material.SADDLE));
                horseblack.setCustomName(ChatColor.DARK_GRAY + "Horse");
                horseblack.setPassenger(p);
            }

            if(item.getItemMeta().getDisplayName().equals(ChatColor.WHITE + "White Horse")) {
                Horse horsewhite = (Horse) p.getWorld().spawn(p.getLocation(), Horse.class);
                horsewhite.setAdult();
                horsewhite.setTamed(true);
                horsewhite.setOwner(p);
                horsewhite.getInventory().setSaddle(new ItemStack(Material.SADDLE));
                horsewhite.setCustomName(ChatColor.WHITE + "Horse");
                horsewhite.setPassenger(p);
            }
        }
    }
    @EventHandler
    public void onPLayerDismount(VehicleExitEvent e) {
        if(e.getExited() instanceof Player) {
            if(e.getVehicle() instanceof Donkey) {
                Donkey donkey = (Donkey) e.getVehicle();
                if(donkey.getCustomName() != null) {
                    if(donkey.getCustomName().equals(ChatColor.GRAY + "Donkey")) {
                        donkey.remove();
                    }
                }
            }
            if(e.getVehicle() instanceof Horse) {
                Horse horse = (Horse) e.getVehicle();
                if(horse.getCustomName() != null) {
                    if(horse.getCustomName().equals(ChatColor.RED + "Horse")) {
                        horse.remove();
                    }
                    if(horse.getCustomName().equals(ChatColor.DARK_GRAY + "Horse")) {
                        horse.remove();
                    }
                    if(horse.getCustomName().equals(ChatColor.WHITE + "Horse")) {
                        horse.remove();
                    }
                }
            }
        }
    }
}

Я провел массу исследований, но, похоже, ничто не может помочь моему делу, есть ли способ, чтобы кто-нибудь из вас знал, что он появляется на лошади с пользовательскими атрибутамиЯ упоминал выше?

1 Ответ

0 голосов
/ 10 ноября 2018

Когда вы считаете, что вы достаточно исследовали, изучите немного больше, я искал "bukkit change horse speed" и , один из лучших ответов отлично работает . С учетом сказанного, давайте попробуем решить вашу проблему.

Все, что вам нужно, прямо в API horse , более конкретно # setColor () , # setStyle () , # setJumpStrength и # setVariant () . Изменение варианта может не работать с использованием этого метода из-за устаревания, вместо этого вам нужно создать другую сущность, например skeletonHorse

Эти методы действительно просты:

Horse horseblack = (Horse) p.getWorld().spawn(p.getLocation(), Horse.class);
horseblack.setJumpStrength(2.0);
horseblack.setColor(Color.BLACK);

SkeletonHorse skeletonHorse = (SkeletonHorse) p.getWorld().spawn(p.getLocation(), SkeletonHorse.class);

Изменение скорости немного отличается, но метод работает для любых мобов.

entity.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(yourValue);
...