Помогите Где ошибка?

Статус
Закрыто для дальнейших ответов.

Дан4ик_ёпт

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
hugo1pro
Писал плагин по видео на крафт и телепортацию, вроде бы всё правильно, но на сервере не работает. Когда убираю return; всё норм работает но можно юзать любой глаз для телепорта.
JavaScript:
public class palka implements Listener {
   
    @EventHandler
    public void use(PlayerInteractEvent e){
        if(e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if(e.getPlayer().getItemInHand().getType() != Material.EYE_OF_ENDER) return;
        Player p = e.getPlayer();
        ItemStack item = e.getPlayer().getItemInHand();
        if(!item.getItemMeta().hasDisplayName()) return;
        if(!item.getItemMeta().hasLore()) return;
        if(!item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "Палка-телепорталка")) return;
        if(!item.getItemMeta().getLore().equals("Я молюсь что получиться...")) return;
       
        e.setCancelled(true);
        removeItem(p);
        teleport(p);
    }
   
    private void removeItem(Player p){
        ItemStack item = p.getItemInHand();
        item.setAmount(item.getAmount() - 1);
        p.setItemInHand(item);
    }
   
   
    private void teleport(Player p){
        Location loc = p.getLocation();
        float yaw = loc.getYaw();
        float pitch = loc.getPitch();
        if(pitch < -40 || pitch > 40){
            vertical(p);
            return;
        }
        float y = toDegree(yaw);
        if(y > 315 || y < 45){
            south(p);
            return;
        }
        if(y > 45 && y < 135){
            west(p);
            return;
        }
        if(y > 135 && y < 225){
            north(p);
            return;
        }
        if(y > 225 && y < 315){
            east(p);
            return;
        }
       
    }
   
    private void vertical(Player p){
        Location loc = p.getLocation();
        float pitch = loc.getPitch();
        if(pitch < -40){
            loc.setY(loc.getY() + 4);
            if(block(loc)) p.teleport(loc);
            return;
        }
        if(pitch > 40){
            loc.setY(loc.getY() - 3);
            if(block(loc)) p.teleport(loc);
        }
    }
   
    private float toDegree(float y){
        if(y <= 360 && y >= 0) return y;
        while(!(y <= 360) || !(y >= 0)){
            if(y > 360){
                y = y - 360;
            }
            if(y < 0){
                y = y + 360;
            }
        }
        return y;
   
    }
   
    private boolean block(Location loc){
        int x = loc.getBlockX();
        int y = loc.getBlockY();
        int z = loc.getBlockZ();
        if(loc.getWorld().getBlockAt(x, y, z).getType() != Material.AIR) return false;
        if(loc.getWorld().getBlockAt(x, y + 1, z).getType() != Material.AIR) return false;
        return true;   
    }
   
    private void south(Player p){
        Location loc = p.getLocation();
        double z = loc.getZ();
        z = z + 2;
        loc.setZ(z);
        if(block(loc)) p.teleport(loc);
    }
   
    private void north(Player p){
        Location loc = p.getLocation();
        double z = loc.getZ();
        z = z - 2;
        loc.setZ(z);
        if(block(loc)) p.teleport(loc);

    }
   
    private void west(Player p){
        Location loc = p.getLocation();
        double x = loc.getX();
        x = x - 2;
        loc.setX(x);
        if(block(loc)) p.teleport(loc);
       
    }
   
    private void east(Player p){
        Location loc = p.getLocation();
        double x = loc.getX();
        x = x + 2;
        loc.setX(x);
        if(block(loc)) p.teleport(loc);
       
    }
   
   
   
}
 
Про какой из 17 (семнадцати) return-ов идёт речь?
можно юзать любой глаз для телепорта.
Я, возможно, отстал, а какие ещё глаза уже появились в майне?
Ну а Lore и DisplayName-то есть у глаза?
Может стоит добавить несколько else player.sendMessage("Никак, потому что <тут какая-то причина>"), например "нету lore"?
 
Про какой из 17 (семнадцати) return-ов идёт речь?
Я, возможно, отстал, а какие ещё глаза уже появились в майне?
Ну а Lore и DisplayName-то есть у глаза?
Может стоит добавить несколько else player.sendMessage("Никак, потому что <тут какая-то причина>"), например "нету lore"?
JavaScript:
private void Klaster(){
        ItemStack item = new ItemStack(Material.EYE_OF_ENDER);
        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName(ChatColor.BLUE + "Палка-телепорталка");
        List<String> lore = new ArrayList<String>();
        lore.add("Я молюсь что получиться...");
        meta.setLore(lore);
        item.setItemMeta(meta);
       
        ShapedRecipe s = new ShapedRecipe(item);
        s.shape(new String[] {"ABA", " C ", " C "});
        s.setIngredient('A', Material.EYE_OF_ENDER);
        s.setIngredient('B', Material.ENDER_PEARL);
        s.setIngredient('C', Material.STICK);
        Bukkit.getServer().addRecipe(s);
    }

}
 
Я никогда не работал с этой часть Bukkit, и могу ошибиться, но всё таки, имхо:

upload_2016-8-17_3-31-37.png
upload_2016-8-17_3-32-8.png
ОК.

upload_2016-8-17_3-32-47.png
upload_2016-8-17_3-33-28.png
НЕ ОК.

Найдёшь причину? ))
 
Я никогда не работал с этой часть Bukkit, и могу ошибиться, но всё таки, имхо:

Посмотреть вложение 42566
Посмотреть вложение 42567
ОК.

Посмотреть вложение 42568
Посмотреть вложение 42569
НЕ ОК.

Найдёшь причину? ))
Если, не ошибаюсь, а могу, т.к. с телефона, то нужно .contains()
Или же equals(lore)
 
Нужно проверить Lore с индексом 1 в InteractListener
 
Всё, я решил
Должно быть так:
JavaScript:
if(!its.toItemStack().getItemMeta().getLore().get(0).equals(ChatColor.BLUE + "Палка-телепорталка"));

было так:
JavaScript:
if(!item.getItemMeta().getLore().equals("Я молюсь что получиться...")) return;

Как тему закрыть?
 
Ты втираешь мне какую-то дичь...
Ну а как ты обьяснишь, что
Код:
List<String> l = new ArrayList<>();
l.add("zero");
l.add("zet");
if(l.equals("zero")){
    player.setHealth(0);
}else player.sendMessage("sss");
У меня выводило в чат "sss"???
 
Ну а как ты обьяснишь, что
Код:
List<String> l = new ArrayList<>();
l.add("zero");
l.add("zet");
if(l.equals("zero")){
    player.setHealth(0);
}else player.sendMessage("sss");
У меня выводило в чат "sss"???
Потому что ты дно и сравниваешь List с String. Кончено же будет false.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх