Несколько вопросов по Bukkit API

Studenikin

Старожил
Пользователь
Баллы
123
Имя в Minecraft
stuvanya
Всем доброго времени суток. Пишу мини-игру (для меня это первый раз), и во время ее написания возникло несколько вопросов.
1) Пытаюсь таким кодом заспавнить моба, но он не появляется (ошибок в логе нет, спавн мобов на сервере включен)
Java:
Location loc = new Location(null,0,0,0);
        loc.setWorld(Bukkit.getWorld(Main.instance.getConfig().getString("king.world")));
        loc.setX(Main.instance.getConfig().getDouble("king.X"));
        loc.setY(Main.instance.getConfig().getDouble("king.Y"));
        loc.setZ(Main.instance.getConfig().getDouble("king.Z"));
        loc.setYaw((float)Main.instance.getConfig().getLong("king.Yaw"));
        loc.setPitch((float)Main.instance.getConfig().getLong("king.Pitch"));
        Bukkit.broadcastMessage("заспавнили короля");
        Zombie king2 = (Zombie)loc.getWorld().spawnEntity(loc, EntityType.ZOMBIE);
        king2.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 999999999, 999999999));
        king2.setCanPickupItems(false);
        king2.setMaxHealth(100);
        king2.setHealth(100);
        king2.setCustomName("§c§lКОРОЛЬ");
        king2.getEquipment().setBoots(new ItemStack(Material.GOLD_BOOTS));
        king2.getEquipment().setHelmet(new ItemStack(Material.GOLD_HELMET));
        king2.getEquipment().setChestplate(new ItemStack(Material.GOLD_CHESTPLATE));
        king2.getEquipment().setLeggings(new ItemStack(Material.GOLD_LEGGINGS));
        king2.setCustomNameVisible(true);
2) Игрок стреляет из лука в другого игрока/моба, при попадании стрелы вызывается EntityDamageByEntityEvent, как мне в нем получить игрока, который стрелял?
3) Использую последнюю версию плагина LibsDisguise, в начале игры таким кодом:
Java:
MobDisguise d = new MobDisguise(DisguiseType.SKELETON);
DisguiseAPI.disguiseToAll(p, d);
превращаю игрока в скелета. После смерти игрока во время вызова PlayerRespawnEvent опять использую этот же код для превращения игрока, но он в моба не превращается
 
Последнее редактирование:
2)if (event.getDamager() insatnceof Arrow) {
Arrow ar = (Arrow) event.getDamager();
Player p = (Player) ar.getShooter();
}
Взял это из головы.
3) Попробуй через шедулер с задержкой в 1 секунду.
 
2)if (event.getDamager() insatnceof Arrow) {
Arrow ar = (Arrow) event.getDamager();
Player p = (Player) ar.getShooter();
}
Взял это из головы.
3) Попробуй через шедулер с задержкой в 1 секунду.
спасибо, а с первым вопросом помочь не можешь?
 
event.getDamager() insatnceof Arrow
Никогда так не делайте. У всех сущностей в Bukkit API есть EntityType, используйте event.getDamager().getType()==EntityType.ARROW
По поводу первого вопроса: вы уверены, что в этом мире можно спавнить мобов? А уровень сложности позволяет?
 
Никогда так не делайте. У всех сущностей в Bukkit API есть EntityType, используйте event.getDamager().getType()==EntityType.ARROW
По поводу первого вопроса: вы уверены, что в этом мире можно спавнить мобов? А уровень сложности позволяет?
А разница? Что случится плохого то может изза insatnceof?
 
А разница? Что случится плохого то может изза insatnceof?
instanceof -- самая долгая и дорогая операция в Java, чтобы она отработала, ей нужно пройти и посмотреть по всем наследуемым классам и интерфейсам, чтобы её использовать нужно иметь очень вескую причину или халатное отношение ко времени исполнения кода, когда не важно отработает он за пол дня или за десять дней.
 
instanceof -- самая долгая и дорогая операция в Java, чтобы она отработала, ей нужно пройти и посмотреть по всем наследуемым классам и интерфейсам, чтобы её использовать нужно иметь очень вескую причину или халатное отношение ко времени исполнения кода, когда не важно отработает он за пол дня или за десять дней.
Хм.. Спасибо. Пойду исправлю в своих плагинах.
 
instanceof -- самая долгая и дорогая операция в Java,... ...чтобы её использовать нужно иметь очень вескую причину или халатное отношение ко времени исполнения кода, когда не важно отработает он за пол дня или за десять дней.
Вы преувеличиваете.
 
Никогда так не делайте. У всех сущностей в Bukkit API есть EntityType, используйте event.getDamager().getType()==EntityType.ARROW
По поводу первого вопроса: вы уверены, что в этом мире можно спавнить мобов? А уровень сложности позволяет?
Да, проверял командой summon
 
c19830be20dcf1403e0d392e2b645ba6.png
Java:
       Location loc = new Location(null,0,0,0);
       loc.setWorld(Bukkit.getWorld("World"));
       loc.setX(80);
       loc.setY(80);
       loc.setZ(80);
      // loc.setYaw((float)"king.Yaw");
      // loc.setPitch((float)Main.instance.getConfig().getLong("king.Pitch"));
       Bukkit.broadcastMessage("заспавнили короля");
       Zombie king2 = (Zombie)loc.getWorld().spawnEntity(loc, EntityType.ZOMBIE);
       king2.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 999999999, 999999999));
       king2.setCanPickupItems(false);
       king2.setMaxHealth(100);
       king2.setHealth(100);
       king2.setCustomName("§c§lКОРОЛЬ");
       king2.getEquipment().setBoots(new ItemStack(Material.GOLD_BOOTS));
       king2.getEquipment().setHelmet(new ItemStack(Material.GOLD_HELMET));
       king2.getEquipment().setChestplate(new ItemStack(Material.GOLD_CHESTPLATE));
       king2.getEquipment().setLeggings(new ItemStack(Material.GOLD_LEGGINGS));
       king2.setCustomNameVisible(true);
Хм. У меня твой код работает.
 
Вы преувеличиваете.
Со временем? Ни чуть. Вопрос только в том, где он используется: в сложных аналитических программах или для проверки флажка. В таких простых вещах, как проверить тип монстра, не стоит использовать такое сравнение, оно здесь лишнее. Опять же кто мне мешает занаследоваться от CraftArrow или чуть поглубже, чтобы сковать свою стрелу, тогда instanceof вернёт false для моих стрел, что может привести к интересным последствиям.
 
Хм. У меня твой код работает.
наверняка запихнул это в какой-нибудь листенер, который не зарегистрировал) а Bukkit.broadcastMessage("заспавнили короля"); там для мебели. оно хоть выводится куда-нибудь?
 
наверняка запихнул это в какой-нибудь листенер, который не зарегистрировал) а Bukkit.broadcastMessage("заспавнили короля"); там для мебели. оно хоть выводится куда-нибудь?
да, оно выводится
 
upload_2016-4-16_23-12-41.png
Я еще специально отключил какие-либо ограничения на спавн мобов, и все равно
 
Тогда хз. Может моб под землю проваливается? Или вообще в обычном мире заспавнился?
 
Назад
Верх