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

Плагин [INFO/DEV] AwesomeHolograms v1.0 - Создай свои голограммы! [1.7.2-R0.2]

Тема в разделе "Релизы плагинов", создана пользователем serega6531, 24 фев 2014.

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

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    AwesomeHolograms - Создай свои голограммы!
    Версия: 1.0

    Этот плагин позволяет вам создавать голограммы, висящие в воздухе, и содержит API для разработчиков. Вот примеры:
    [​IMG]


    Для работы нужен ProtocolLib 1.7.
    Плагин не работает на версиях ниже 1.7.2.

    Работа с API:
    1. Cоздайте новый экземпляр Hologram
      (Hologram(double x, double y, double z, double dy, String message) или
      Hologram(Location loc, double dy, String message))
    2. Используйте AwesomeHolograms.addHologram(Hologram)
    3. Для удаления - removeHologram(Hologram)
    Вы также можете использовать /ah add Your text для добавления голограмм от игрока. Она появится на месте головы игрока.

    Скачать плагин

    Особенности:
    • Создание голограмм.
    • API для разработчиков.
    Список изменений:
    • Релиз плагина
     
    Последнее редактирование: 13 мар 2014
  2. Хостинг MineCraft
    <
  3. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Исходный код:

    Код:
    package ru.serega6531.AwesomeHolograms;
    
    import java.io.File;
    import java.lang.reflect.InvocationTargetException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.ConfigurationSection;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.comphenix.packetwrapper.WrapperPlayServerAttachEntity;
    import com.comphenix.packetwrapper.WrapperPlayServerEntityDestroy;
    import com.comphenix.packetwrapper.WrapperPlayServerSpawnEntity;
    import com.comphenix.packetwrapper.WrapperPlayServerSpawnEntityLiving;
    import com.comphenix.protocol.ProtocolLibrary;
    import com.comphenix.protocol.wrappers.WrappedDataWatcher;
    
    public class AwesomeHolograms extends JavaPlugin implements Listener {
    
        static ArrayList<Hologram> holograms = new ArrayList<Hologram>();
        FileConfiguration config;
    
        private static int currentID = 9000;
    
        private void destroyHolograms(int[] ids){
            WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
        
            destroy.setEntities(ids);
        
            for (Player p : Bukkit.getOnlinePlayers()) {
                try {
                    ProtocolLibrary.getProtocolManager().sendServerPacket(p, destroy.getHandle());
                }
                catch (InvocationTargetException ex) {
                    Bukkit.broadcastMessage("Can not remove nameplates: " + ex.getCause());
                }
            }
        }
    
        private void destroyHologram(int id){
            destroyHolograms(new int[]{id});
        }
    
        public static void addHologram(Hologram hologram){
            hologram.setId(currentID);
            holograms.add(hologram);
            spawnHologramForOnline(hologram);
        }
    
        private void spawnHologram(Hologram hologram, Player player){
            spawnHologram(hologram, new Player[]{player});
        }
    
        private static void spawnHologramForOnline(Hologram hologram){
            spawnHologram(hologram, Bukkit.getOnlinePlayers());
        }
    
        private static void spawnHologram(Hologram hologram, Player[] players) {
            try {
                WrapperPlayServerSpawnEntityLiving horse = new WrapperPlayServerSpawnEntityLiving();
            
                horse.setEntityID(currentID);
        
                horse.setType(EntityType.HORSE);
        
                horse.setX(hologram.getX());
                horse.setY(hologram.getY()+ hologram.getDY() + 55);
                horse.setZ(hologram.getZ());
        
                WrappedDataWatcher wdw = new WrappedDataWatcher();
        
                wdw.setObject(10, hologram.getMessage());
                wdw.setObject(11, (byte) 1);
        
                wdw.setObject(12, -1700000);
        
                horse.setMetadata(wdw);
        
                for(Player player : players){
                    ProtocolLibrary.getProtocolManager().sendServerPacket(player, horse.getHandle());
                }
        
                WrapperPlayServerSpawnEntity skull = new WrapperPlayServerSpawnEntity();
        
                skull.setEntityID(currentID + 1);
        
                skull.setType(66);
        
                skull.setX(hologram.getX());
                skull.setY(hologram.getY() + hologram.getDY() + 55);
                skull.setZ(hologram.getZ());
        
                for(Player player : players){
                    ProtocolLibrary.getProtocolManager().sendServerPacket(player, skull.getHandle());
                }
        
                WrapperPlayServerAttachEntity attach = new WrapperPlayServerAttachEntity();
        
                attach.setEntityId(currentID);
                attach.setVehicleId(currentID + 1);
        
                for(Player player : players){
                    ProtocolLibrary.getProtocolManager().sendServerPacket(player, attach.getHandle());
                }
            
                currentID += 2;
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    
        public void removeHologram(Hologram hologram){
            destroyHologram(hologram.getId());
            holograms.remove(hologram);
        }
    
        public void onEnable(){
            if(!(Bukkit.getVersion().startsWith("git-Bukkit-1.7.2") || (Bukkit.getVersion().startsWith("git-Bukkit-1.7.4")))){
                getLogger().warning("AwesomeHolograms need 1.7+ server, but " + Bukkit.getVersion() + " found");
                this.setEnabled(false);
            }
            config = getConfig();
            getServer().getPluginManager().registerEvents(this, this);
            List<String> nholograms = getConfNamesList(config, "holograms");
            for(String name : nholograms){
                addHologram(Hologram.loadFromConfig(config, "holograms." + name));
            }
        }
    
        public void onDisable(){
            int[] ids = new int[holograms.size()];
            int i = 0;
            new File(getDataFolder() + "/config.yml").delete();
            for(Hologram hologram : holograms){
                hologram.saveToConfig(config, "holograms." + i);
                ids[i] = hologram.getId();
                i++;
            }
            saveConfig();
            destroyHolograms(ids);
        }
    
        @EventHandler
        public void onJoin(PlayerJoinEvent e){
            Player p = e.getPlayer();
            for(Hologram hologram : holograms){
                spawnHologram(hologram, p);
            }
        }
    
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if(command.getName().equalsIgnoreCase("ah") && args.length >= 2 && args[0].equalsIgnoreCase("add") && sender instanceof Player){
                addHologram(new Hologram(((Player) sender).getLocation(), 1, getTextFromArgs(args)));
                return true;
            }
            return false;
        }
    
        private String getTextFromArgs(String[] args){
            String result = "";
            for(int i = 1; i < args.length; i++){
                result = result + args[i];
                if(!(i == args.length - 1)){
                    result = result + " ";
                }
            }
            return result;
        }
    
        public static List<String> getConfNamesList(FileConfiguration config, String path){
            ConfigurationSection conf = config.getConfigurationSection(path);
            if(conf != null){
            Iterator<String> iterator = conf.getKeys(false).iterator();
            List<String> list = new ArrayList<String>();
            while (iterator.hasNext()) {
                list.add(iterator.next().toString());
            }
            return list;
            } else {
                return new ArrayList<String>();
            }
        }
    
    }
    Код:
    public class Hologram {
    
        double x, y, z, dy;
        String message;
        int id;
    
        public Hologram(double x, double y, double z, double dy, String message){
            this.x = x;
            this.y = y;
            this.z = z;
            this.dy = dy;
            this.message = message;
        }
    
        public Hologram(Location loc, double dy, String message){
            this.x = loc.getX();
            this.y = loc.getY();
            this.z = loc.getZ();
            this.dy = dy;
            this.message = message;
        }
    
        public int getId(){
            return id;
        }
    
        public void setId(int id){
            this.id = id;
        }
    
        public double getX(){
            return x;
        }
    
        public double getY(){
            return y;
        }
    
        public double getZ(){
            return z;
        }
    
        public double getDY(){
            return dy;
        }
    
        public String getMessage(){
            return message;
        }
    
        public void saveToConfig(FileConfiguration conf, String path){
            conf.set(path + ".x", x);
            conf.set(path + ".y", y);
            conf.set(path + ".z", z);
            conf.set(path + ".dy", dy);
            conf.set(path + ".message", message);
        }
    
        public static Hologram loadFromConfig(FileConfiguration conf, String path){
            return new Hologram(
                    conf.getDouble(path + ".x"),
                    conf.getDouble(path + ".y"),
                    conf.getDouble(path + ".z"),
                    conf.getDouble(path + ".dy"),
                    conf.getString(path + ".message"));
        }
    
    }
    [DOUBLEPOST=1393249877,1393249533][/DOUBLEPOST]Мне нужна помощь в создании многострочного текста. Подскажите, как это сделать? \n не работает.
     
    Последнее редактирование: 24 фев 2014
  4. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    на 1.5.2 такое реально реализовать? :3
     
  5. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    К сожалению , нет.
     
  6. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    На 1.5.2 и лошадей вроде нет.
     
  7. Cyber Owl

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

    Баллы:
    153
    Реально, модом.
     
  8. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Главное чтобы моджанги не пофиксили этот баг в прорисовке клиента.
     
    REZAYS, Mr_RoboMan и Mik1313 нравится это.
  9. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    Та ну, модом не интересно, мне для сервера без модов надо :D
     
  10. SHALK97

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

    Баллы:
    103
    Имя в Minecraft:
    SHALK97
    на баките такой же плагин есть, называется немного по-другому, случайно не твой?
     
  11. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Этих плагинов там сейчас тонны, по запросу holo вываливается штук 10.
     
    0bsid1 нравится это.
  12. 0bsid1

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

    Баллы:
    123
    Имя в Minecraft:
    Artarious_Empiroo
  13. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    С не очень большого. Сами попробуйте.
     
  14. Cyber Owl

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

    Баллы:
    153
    Зависит от дальности прогрузки чанка на клиенте.
    Это же обычный моб.
     
  15. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    У меня дальность на ультра (с optifine), и надпись довольно быстро пропадает.
     
  16. FedorNogopletov

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

    Баллы:
    173
    Если я не ошибаюсь, то если ты на сервере, ты не сможешь увеличить дальность (можно только в serv.prop. выставить)
     
  17. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Синглплеер.
     
  18. FedorNogopletov

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

    Баллы:
    173
    Ну тогда ясно
     
  19. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Что ясно?
     
  20. FedorNogopletov

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

    Баллы:
    173
    Я просто не понял, как ты регулировал дистанцию на сервере
     
  21. dragdy

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

    Баллы:
    103
    Skype:
    dimon.gurov
    Имя в Minecraft:
    dragdy
    А для работы требуются какие-то библиотеки?
     

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