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

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

Discussion in 'Разработка плагинов для новичков' started by Mastaxys, Apr 27, 2016.

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

    Mastaxys Новичок

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

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

    Спасибо.
     
    Last edited: Apr 27, 2016
  2. Хостинг MineCraft
    <
  3. MrTrojan

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

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

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

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

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

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

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Code:
    ///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 Активный участник Пользователь

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

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    P.S как "ru", так сразу говнокод.
     
    Last edited: Apr 27, 2016
  8. Автор темы
    Mastaxys

    Mastaxys Новичок

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

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

    Code:
    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();
                }
            }
        }
    }
     
    Last edited: Apr 27, 2016
  9. slavik123123123

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

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

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    :lol:
     

Share This Page