Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Holographic Displays для мобов

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mastaxys, 27 апр 2016.

  1. Автор темы
    Mastaxys

    Mastaxys Новичок

    Баллы:
    16
    Приветствую, подскажите как с помощью этого плагина http://dev.bukkit.org/bukkit-plugins/holographic-displays/ через API сделать следующее:
    - во время спавна кастомного моба повесить над ним голограмму, и чтобы она висела над ним постоянно, в не зависимости от того стоит он или ходит.
    - во время смерти моба удалять голограмму.

    PS. Версия спигота 1.8.3

    Спасибо.
     
    Последнее редактирование: 27 апр 2016
  2. Хостинг MineCraft
    <
  3. MrTrojan

    MrTrojan Активный участник Пользователь

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    entity.setDisplayName(...); - вот тебе.
     
  4. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Тоже не понимаю, зачем для этого использовать стороннее апи. Держитесь как можно дальше от сторонних апи и используйте - только когда уж очень нужно.
    А, судя по вашей просьбе, вам просто нужно выставить имя мобу и сделать его видимым.

    Или вам нужно сделать голограмму помимо ника?
     
  5. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
    ///Main.java
    package ru.govnokod;
    
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.World;
    import org.bukkit.entity.Entity;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDeathEvent;
    import org.bukkit.event.entity.EntitySpawnEvent;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.gmail.filoghost.holographicdisplays.api.Hologram;
    import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
    
    public class Main extends JavaPlugin implements Listener,Runnable
    {
        Logger log;
        Main plugin;
        Hologram hologram;
        public Main() {
            this.log = Bukkit.getLogger();
        }
     
        public void onEnable() {
            this.log.info("[ASD] By Leymooo включён!");
            plugin = this;
            if (!Bukkit.getPluginManager().isPluginEnabled("HolographicDisplays")) {
                getLogger().severe("*** HolographicDisplays is not installed or not enabled. ***");
                getLogger().severe("*** This plugin will be disabled. ***");
                this.setEnabled(false);
                return;
            }
            Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, plugin, 1L, 1L);
            Bukkit.getPluginManager().registerEvents(this, this);
        }
     
        public void onDisable() {
            this.log.info("[ASD] отключён!");
        }
       
        //Тут спавнишь моба//
       
        @EventHandler
        //Тута делаем голограму
        //Это можно не использовать, если будешь в методе где спавнишь моба, сразу создавать голограму.
        public void Spawn (EntitySpawnEvent e){
            if (e.getEntity().getCustomName() == "TestMob") {
                hologram = HologramsAPI.createHologram(plugin, e.getEntity().getLocation().add(0.0, 2.0, 0.0));
                hologram.appendTextLine("TEST");
            }
        }
        @Override
        //Тута двигаем голограму
        public void run() {
            for (World w : Bukkit.getWorlds()) {
                for (Entity ent : w.getEntities()) {
                    if (ent.getCustomName() == "TestMob") {
                        hologram.teleport(ent.getLocation().add(0.0, 2.0, 0.0));
                    }
                }
            }
           
        }
        @EventHandler
        public void Death (EntityDeathEvent e){
            if (e.getEntity().getCustomName() == "TestMob") {
                hologram.delete();
            }
        }
    }
    както так. Не тестил.
     
  6. MrTrojan

    MrTrojan Активный участник Пользователь

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Строки так сравнивать плохо, нужно через equals или equalsIgnoreCase.
     
  7. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    P.S как "ru", так сразу говнокод.
     
    Последнее редактирование: 27 апр 2016
  8. Автор темы
    Mastaxys

    Mastaxys Новичок

    Баллы:
    16
    Кастомное имя я знаю как делать, но мне нужна именно голограмма, которая видна всегда, а не только с близкого расстояния и при наведении мышью.[DOUBLEPOST=1461753900,1461753655][/DOUBLEPOST]
    Спасибо. Примерно так и представлял, но не смог разобраться в АПИ голограмм ))
    Чуть позже протестирую код.[DOUBLEPOST=1461759929][/DOUBLEPOST]Странно, не хочет работать ([DOUBLEPOST=1461761081][/DOUBLEPOST]Хелп ([DOUBLEPOST=1461762163][/DOUBLEPOST]Для полноты картины, версия спигота 1.8.3
    стоит ProtokolLib, HolographicDisplays

    вручную голограммы ставятся через /hd , но через код никак ([DOUBLEPOST=1461773525][/DOUBLEPOST]Решение найдено. Его подсказал ув. slavik123123123

    Код:
    package ru.govnokod;
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Zombie;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDeathEvent;
    import org.bukkit.event.player.PlayerCommandPreprocessEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import com.gmail.filoghost.holographicdisplays.api.Hologram;
    import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
    public class Main extends JavaPlugin implements Listener,Runnable
    {
        Logger log;
        Main plugin;
        Hologram hologram;
        Hologram hologram2;
        public Main() {
            this.log = Bukkit.getLogger();
        }
        public void onEnable() {
            this.log.info("[ASD] By Leymooo включён!");
            plugin = this;
            if (!Bukkit.getPluginManager().isPluginEnabled("HolographicDisplays")) {
                getLogger().severe("*** HolographicDisplays is not installed or not enabled. ***");
                getLogger().severe("*** This plugin will be disabled. ***");
                this.setEnabled(false);
                return;
            }
            Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, plugin, 1L, 1L);
            Bukkit.getPluginManager().registerEvents(this, this);
        }
        public void onDisable() {
            if (hologram != null) {
            hologram.delete();
            }
            this.log.info("[ASD] отключён!");
        }
        @EventHandler
        //Тут спавнишь моба//
        //Тута делаем голограму
        //Это можно не использовать, если будешь в методе где спавнишь моба, сразу создавать голограму.
        public void Test (PlayerCommandPreprocessEvent e){
            if (e.getMessage().startsWith("/testmob")) {
                Location loc = new Location(null,0,0,0);
                loc.setWorld(Bukkit.getWorld("World"));
                loc.setX(80);
                loc.setY(80);
                loc.setZ(80);
                Zombie king2 = (Zombie)loc.getWorld().spawnEntity(loc, EntityType.ZOMBIE);
                king2.setCustomName("TestMob");
                hologram = HologramsAPI.createHologram(plugin, loc.add(0.0, 2.0, 0.0));
                hologram.appendTextLine("TEST");
            }
        }
        @Override
        //Тута двигаем голограму
        public void run() {
            for (Entity w : Bukkit.getWorld("World").getEntities()) {
                if (w.getCustomName() != null && w.getCustomName().equalsIgnoreCase("testmob")) {
                    if (hologram != null && !hologram.isDeleted()) {
                        hologram.teleport(w.getLocation().add(0.0, 2.5, 0.0));
                    }
                }
            }
        }
        @EventHandler
        public void Death (EntityDeathEvent e){
            if (e.getEntity().getCustomName() != null && e.getEntity().getCustomName().equalsIgnoreCase("TestMob")) {
                if (hologram != null) {
                    hologram.delete();
                }
            }
        }
    }
     
    Последнее редактирование: 27 апр 2016
  9. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Просто это бы единственный свободный проект в еклипсе, а новый создавать не хотел, т.к их и так много.
     
  10. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    :lol:
     

Поделиться этой страницей