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

Mastaxys

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

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

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

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

Спасибо.
Тоже не понимаю, зачем для этого использовать стороннее апи. Держитесь как можно дальше от сторонних апи и используйте - только когда уж очень нужно.
А, судя по вашей просьбе, вам просто нужно выставить имя мобу и сделать его видимым.

Или вам нужно сделать голограмму помимо ника?
 
Java:
///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();
        }
    }
}
както так. Не тестил.
 
Тоже не понимаю, зачем для этого использовать стороннее апи. Держитесь как можно дальше от сторонних апи и используйте - только когда уж очень нужно.
А, судя по вашей просьбе, вам просто нужно выставить имя мобу и сделать его видимым.

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

Кастомное имя я знаю как делать, но мне нужна именно голограмма, которая видна всегда, а не только с близкого расстояния и при наведении мышью.
както так. Не тестил.

Спасибо. Примерно так и представлял, но не смог разобраться в АПИ голограмм ))
Чуть позже протестирую код.
Странно, не хочет работать (
Хелп (
Для полноты картины, версия спигота 1.8.3
стоит ProtokolLib, HolographicDisplays

вручную голограммы ставятся через /hd , но через код никак (
Решение найдено. Его подсказал ув. 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();
            }
        }
    }
}
 
Последнее редактирование:
Назад
Верх