1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Прошу помочь с кодом для эффектов.

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

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

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    Прошу помочь мне с кодом Java в общем мне нужно воспроизводить эффекты как сердца,ангри,ноты ...
    Примеры вот:
    Smoke_Trail
    PlayerTrails
    ParticlePack
    Если кто то знает как это сделать прошу написать полную информацию.
     
  2. JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Различные пакеты в помощь! Я если честно, для своего сервера всегда использую API PlayEffect, и не разу не заморачивался.
     
  3. Автор темы
    _Danger_

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    У меня не получается с PlayEffect !
     
  4. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    Качай PlayEffect от @fromgate, а в своём плагине пиши:
    Код:
    PlayEffect.play(VisualEffect.ТВОЙ_ЕФФЕКТ, new Location(МИР, X,Y,Z), "Парамеры, типа:draw:circle и так далее.");
    и вуаля.
     
    fromgate нравится это.
  5. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Как делаешь?
    Вот простой пример:
    https://github.com/fromgate/PlayEffectRailgun

    Вот ещё простейший пример:
    Код:
    package me.fromgate.playeffectplayermove;
    
    import java.util.HashMap;
    import java.util.Map;
    import me.fromgate.playeffect.PlayEffect;
    import me.fromgate.playeffect.VisualEffect;
    import org.bukkit.Location;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class PlayEffectPlayerMove extends JavaPlugin implements Listener{
        Map<String,Location> playerLocations;
       
        @Override
        public void onEnable(){
            if (getServer().getPluginManager().getPlugin("PlayEffect")==null){
                getLogger().info("[PlayEffectPlayerMove] PlayEffect plugin required!");
                return;
            }
            playerLocations = new HashMap<String,Location>();
            getServer().getPluginManager().registerEvents(this, this);
        }
       
        private Location getPreviousLocation (PlayerMoveEvent event){
            String playerName = event.getPlayer().getName();
            return playerLocations.containsKey(playerName) ? playerLocations.get(playerName) : event.getFrom();
        }
       
        @EventHandler
        public void onPlayerMove(PlayerMoveEvent event){
            Location currentLocation = event.getTo();
            Location previousLocation = getPreviousLocation(event);
            if (currentLocation.getWorld().equals(previousLocation.getWorld())&&
                    (currentLocation.distance(previousLocation)<0.7)) return;
            PlayEffect.play(VisualEffect.MOBSPELL, currentLocation, "num:20 speed:0.5 offset:0.8");
            playerLocations.put(event.getPlayer().getName(), currentLocation);
        }
    }
    
     
    Hilgert и lexa_kiker нравится это.
  6. Автор темы
    _Danger_

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    Давно забросил тему со злости потому что у меня не получалось.
    А кто сможет конкретно помочь прошу добавить в скайп
    ceburatorkoderov854564
     
  7. JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Сколько тебе писал об этом... Все равно не понял
     
  8. Автор темы
    _Danger_

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    Я новичёк. я перешел с Delphi на Java и по ка что не знаю что к чему.
    Писал писал и всё бес толку потому что мне нужны настоящие эффекты а не
    PlayEffect - визуальные и звуковые эффекты на Вашем сервере!
     
  9. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Hilgert нравится это.
  10. Автор темы
    _Danger_

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    Визуальные, их вижу лишь я !
     
    Likeobot нравится это.
  11. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    Визуальные - имеется в виду не то что только ты их видишь! их видят все! [​IMG]
     
    fromgate и JustBlender нравится это.
  12. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    _Danger_, мммм.... а вы плагин-то пробовали? Все видеть должны. У большей части эффектов есть правда ограничение по расстоянию видимости - 16 блоков, но это расстояние без мода не увеличить (я уже кучу народа просил написать соответствующий мод, но пока без результата).
     
  13. StealerSlain

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

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    Юзаю это (не мой класс)
    Код:
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    public enum ParticleEffect {
        HUGE_EXPLOSION("hugeexplosion", 0), LARGE_EXPLODE("largeexplode", 1), FIREWORKS_SPARK("fireworksSpark", 2), BUBBLE("bubble", 3), SUSPEND("suspend", 4), DEPTH_SUSPEND("depthSuspend", 5), TOWN_AURA("townaura", 6), CRIT("crit", 7), MAGIC_CRIT("magicCrit", 8), MOB_SPELL("mobSpell", 9), MOB_SPELL_AMBIENT("mobSpellAmbient", 10), SPELL("spell", 11), INSTANT_SPELL("instantSpell", 12), WITCH_MAGIC("witchMagic", 13), NOTE("note", 14), PORTAL("portal", 15), ENCHANTMENT_TABLE("enchantmenttable", 16), EXPLODE("explode", 17), FLAME("flame", 18), LAVA("lava", 19), FOOTSTEP("footstep", 20), SPLASH("splash", 21), LARGE_SMOKE("largesmoke", 22), CLOUD("cloud", 23), RED_DUST("reddust", 24), SNOWBALL_POOF("snowballpoof", 25), DRIP_WATER("dripWater", 26), DRIP_LAVA("dripLava", 27), SNOW_SHOVEL("snowshovel", 28), SLIME("slime", 29), HEART("heart", 30), ANGRY_VILLAGER("angryVillager", 31), HAPPY_VILLAGER("happyVillager", 32), ICONCRACK("iconcrack", 33), TILECRACK("tilecrack", 34);
        private String name;
        private int id;
        ParticleEffect(String name, int id) {
            this.name = name;
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public int getId() {
            return id;
        }
        private static final Map<String, ParticleEffect> NAME_MAP = new HashMap<String, ParticleEffect>();
        private static final Map<Integer, ParticleEffect> ID_MAP = new HashMap<Integer, ParticleEffect>();
        static {
            for (ParticleEffect effect : values()) {
                NAME_MAP.put(effect.name, effect);
                ID_MAP.put(effect.id, effect);
            }
        }
        public static ParticleEffect fromName(String name) {
            if (name == null) {
                return null;
            }
            for (Entry<String, ParticleEffect> e : NAME_MAP.entrySet()) {
                if (e.getKey().equalsIgnoreCase(name)) {
                    return e.getValue();
                }
            }
            return null;
        }
        public static ParticleEffect fromId(int id) {
            return ID_MAP.get(id);
        }
        public static void sendToPlayer(ParticleEffect effect, Player player, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) throws Exception {
            Object packet = createPacket(effect, location, offsetX, offsetY, offsetZ, speed, count);
            sendPacket(player, packet);
        }
        public static void sendToLocation(ParticleEffect effect, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) throws Exception {
            Object packet = createPacket(effect, location, offsetX, offsetY, offsetZ, speed, count);
            for (Player player : Bukkit.getOnlinePlayers()) {
                sendPacket(player, packet);
            }
        }
        public static void sendCrackToPlayer(boolean icon, int id, byte data, Player player, Location location, float offsetX, float offsetY, float offsetZ, int count) throws Exception {
            Object packet = createCrackPacket(icon, id, data, location, offsetX, offsetY, offsetZ, count);
            sendPacket(player, packet);
        }
        public static void sendCrackToLocation(boolean icon, int id, byte data, Location location, float offsetX, float offsetY, float offsetZ, int count) throws Exception {
            Object packet = createCrackPacket(icon, id, data, location, offsetX, offsetY, offsetZ, count);
            for (Player player : Bukkit.getOnlinePlayers()) {
                sendPacket(player, packet);
            }
        }
        public static Object createPacket(ParticleEffect effect, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) throws Exception {
            if (count <= 0)
                count = 1;
            Object packet = getPacket63WorldParticles();
            setValue(packet, "a", effect.name);
            setValue(packet, "b", (float) location.getX());
            setValue(packet, "c", (float) location.getY());
            setValue(packet, "d", (float) location.getZ());
            setValue(packet, "e", offsetX);
            setValue(packet, "f", offsetY);
            setValue(packet, "g", offsetZ);
            setValue(packet, "h", speed);
            setValue(packet, "i", count);
            return packet;
        }
        public static Object createCrackPacket(boolean icon, int id, byte data, Location location, float offsetX, float offsetY, float offsetZ, int count) throws Exception {
            if (count <= 0)
                count = 1;
            Object packet = getPacket63WorldParticles();
            String modifier = "iconcrack_" + id;
            if (!icon) {
                modifier = "tilecrack_" + id + "_" + data;
            }
            setValue(packet, "a", modifier);
            setValue(packet, "b", (float) location.getX());
            setValue(packet, "c", (float) location.getY());
            setValue(packet, "d", (float) location.getZ());
            setValue(packet, "e", offsetX);
            setValue(packet, "f", offsetY);
            setValue(packet, "g", offsetZ);
            setValue(packet, "h", 0.1F);
            setValue(packet, "i", count);
            return packet;
        }
        private static void setValue(Object instance, String fieldName, Object value) throws Exception {
            Field field = instance.getClass().getDeclaredField(fieldName);
            field.setAccessible(true);
            field.set(instance, value);
        }
        private static Object getEntityPlayer(Player p) throws Exception {
            Method getHandle = p.getClass().getMethod("getHandle");
            return getHandle.invoke(p);
        }
        private static String getPackageName() {
            return "net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
        }
        private static Object getPacket63WorldParticles() throws Exception {
            Class<?> packet = Class.forName(getPackageName() + ".Packet63WorldParticles");
            return packet.getConstructors()[0].newInstance();
        }
        private static void sendPacket(Player p, Object packet) throws Exception {
            Object eplayer = getEntityPlayer(p);
            Field playerConnectionField = eplayer.getClass().getField("playerConnection");
            Object playerConnection = playerConnectionField.get(eplayer);
            for (Method m : playerConnection.getClass().getMethods()) {
                if (m.getName().equalsIgnoreCase("sendPacket")) {
                    m.invoke(playerConnection, packet);
                    return;
                }
            }
        }
    }

    а в своих классах пишу это (пример):
    Код:
    ParticleEffect.sendToPlayer(ParticleEffect.ENCHANTMENT_TABLE, player, player.getLocation(), 0, -1, 0, 1f, 50);
     
  14. Автор темы
    _Danger_

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    Уфффф как же тяжело работать с этими эффектами а какой бы SRC не качал с гитхаба везде ошибки а рубакит не охота засерать !
     
  15. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    А зачем вам качать SRC?
    Качаете библиотеку от fromgate(PlayEffect, меня никогда не достанет эту библиотеку кому-то предлагать :D), ставите его на сервер(как плагин!), в своём плагине пишите:
    1. PlayEffect.play(VisualEffect.FLAMENEW, Location, "Твои_Параметры");
    И всё! Никаких проблем!
     
  16. StealerSlain

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

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    Что ты мне пытаешься сказать? Я ТС советую использовать мой предложенный PlayEffect, а не прошу что-то.
     
  17. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    Вот блин, сорри, только пришёл домой сразу за комп, перепутал тебя с TC [​IMG]
     
  18. _Rufu5_

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

    Баллы:
    48
    Имя в Minecraft:
    _Rufu5_
    player.getWorld().playEffect(player.getLocation(), Effect.CLICK2, this);
     
  19. Автор темы
    _Danger_

    _Danger_ Активный участник

    Баллы:
    68
    Skype:
    heyqweel
    Имя в Minecraft:
    _Danger_
    Руфу не будь умным. в общем это совсем другое .
     
  20. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Это пример проигрывания звуков кликанья кнопки.
    Подобным способом можно проигрывать и визуальные эффекты, но их количество ограниченно: дым, сигнал эндера, мобспавнеровские огоньки, разбивающиеся бутылки и что-то там ещё. Но поскольку эффектов мало и затевается чехарда с пакетами и дополнительными библиотеками.
     

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