Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [FUN/MECH/DEV] PlayEffect v0.5.4 - Дыма мало! Нужны ещё эффекты![BukkitDev]

JustBlender, всё довольно просто.
Есть два метода в разных проявлениях - play и set.
Для проигрывания эффекта используем play.
Естественно, сначала нужно добавить в качестве сторонней библиотеки PlayEffect.
PlayEffectExternalLib.png

Ну и вот пример плагина, который реализует то, что ты хочешь:
Код:
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);
   }
}

В этом плагине, чтобы не было безумного спама эффектами они проигрываются только если игрок прошёл расстояние больше чем 0.7 блока. Т.е. когда игрок стоит на месте -- эффектов нет.
 
JustBlender, всё довольно просто.
Есть два метода в разных проявлениях - play и set.
Для проигрывания эффекта используем плей.
Естественно, сначала нужно добавить в качестве сторонней библиотеки PlayEffect.
Посмотреть вложение 16858

Ну и вот пример плагина, который реализует то, что ты хочешь:
Код:
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);
   }
}

В это плагине, чтобы не было безумного спама эффектами они проигрываются только если игрок прошёл расстояние больше чем 0.7 блока. Т.е. когда игрок стоит на месте -- эффектов нет.
Как все всегда ты хорош! Спасибо за хорошую помощь! Чувствую скоро будет плагин требующий PlayEffect ;)
fromgate, кстати, а почему нету эффекта BONE? Этот эффект воспроизводится когда пользуешься костной мукой
 
Как все всегда ты хорош! Спасибо за хорошую помощь! Чувствую скоро будет плагин требующий PlayEffect ;)
fromgate, кстати, а почему нету эффекта BONE? Этот эффект воспроизводится когда пользуешься костной мукой
По тому, что этот эффект называется не так, а HAPPY и в пакетах выглядит как happyVillager.
 
Ission, прикольно! Это что тот же самый эффект, да? А то я хотел срочно лезть в майнкрафт дробить кости и выращивать пшеницу :)
 
Доброго времени суток!
Вчера начал использовать ваше API у себя в плагине, и возник вопрос: почему для всех параметров используются строковые переменные, когда можно использовать ENUM?
Его вроде бы и сравнивать практичнее, и парсить не надо, да и шанс ошибиться мисскликнуть по клавиатуре значительно меньше.
Но это так, просто предложение :)

А так хочу сказать большое спасибо, и что все работает отлично ^_^
 
ql_Nik_lp, там разбор строк осуществляется на лету. Т.е. для того чтобы добавить эффект, мне достаточно в enum VisualEffect добавить новый класс, описать тут же начальные условия и обработкой параметров заниматься непосредственно в классе эффекта (туда они уже приходять в виде Map<String,String> и разбирать их уже не нужно ;))
Конечно, если бы можно было (я по крайней мере не знаю как) создавать ENUM'ы на лету, динамически, то на этом можно было бы попытаться построить более удобный вариант (хотя не факт - на этапе создания плагина ENUM'ы ещё не сгенерированы и парсинг просто ушёл бы в другое место), но... пока это, к сожалению невозможно. А создавать здоровенный enum в котором каждому эффекту будет соответствовать один-два вида параметра, на мой взгляд тоже неэффективно.
JustBlender, ql_Nik_lp, Вы хоть расскажите, что у Вас получится :) Интересно же :)
 
ql_Nik_lp, там разбор строк осуществляется на лету. Т.е. для того чтобы добавить эффект, мне достаточно в enum VisualEffect добавить новый класс, описать тут же начальные условия и обработкой параметров заниматься непосредственно в классе эффекта (туда они уже приходять в виде Map<String,String> и разбирать их уже не нужно ;))
Конечно, если бы можно было (я по крайней мере не знаю как) создавать ENUM'ы на лету, динамически, то на этом можно было бы попытаться построить более удобный вариант (хотя не факт - на этапе создания плагина ENUM'ы ещё не сгенерированы и парсинг просто ушёл бы в другое место), но... пока это, к сожалению невозможно. А создавать здоровенный enum в котором каждому эффекту будет соответствовать один-два вида параметра, на мой взгляд тоже неэффективно.
JustBlender, ql_Nik_lp, Вы хоть расскажите, что у Вас получится :) Интересно же :)

Ясно-понятно :)
Обязательно расскажу, но значительно позже, как будет хотя-бы на что смотреть)
 
ql_Nik_lp, там разбор строк осуществляется на лету. Т.е. для того чтобы добавить эффект, мне достаточно в enum VisualEffect добавить новый класс, описать тут же начальные условия и обработкой параметров заниматься непосредственно в классе эффекта (туда они уже приходять в виде Map<String,String> и разбирать их уже не нужно ;))
Конечно, если бы можно было (я по крайней мере не знаю как) создавать ENUM'ы на лету, динамически, то на этом можно было бы попытаться построить более удобный вариант (хотя не факт - на этапе создания плагина ENUM'ы ещё не сгенерированы и парсинг просто ушёл бы в другое место), но... пока это, к сожалению невозможно. А создавать здоровенный enum в котором каждому эффекту будет соответствовать один-два вида параметра, на мой взгляд тоже неэффективно.
JustBlender, ql_Nik_lp, Вы хоть расскажите, что у Вас получится :) Интересно же :)
Обязательно расскажу, но тоже позже (скажу одно, будет менее, более эпичная игра с элементами PvP) :)

ЗЫ. Плагин уже вроде как готов (я уже устал тестить xD), но незнаю, выкладывать ли это паблику... Писал же вроде для своего сервера, а хочется поделится =)

Ission, прикольно! Это что тот же самый эффект, да? А то я хотел срочно лезть в майнкрафт дробить кости и выращивать пшеницу :)
Кстати, это возможно другой эффект (так как этот эффект (Happy) проигрывается одной частицой), а с кость больше 3-4 частиц и они более хаотично появляются в радиусе блока. Может есть возможность спауна частиц в "разных" местах? Надеюсь вы меня поняли.
 
Последнее редактирование:
поэксперементируйте с параметрами num и offset
 
ql_Nik_lp, там разбор строк осуществляется на лету. Т.е. для того чтобы добавить эффект, мне достаточно в enum VisualEffect добавить новый класс, описать тут же начальные условия и обработкой параметров заниматься непосредственно в классе эффекта (туда они уже приходять в виде Map<String,String> и разбирать их уже не нужно ;))
Конечно, если бы можно было (я по крайней мере не знаю как) создавать ENUM'ы на лету, динамически, то на этом можно было бы попытаться построить более удобный вариант (хотя не факт - на этапе создания плагина ENUM'ы ещё не сгенерированы и парсинг просто ушёл бы в другое место), но... пока это, к сожалению невозможно. А создавать здоровенный enum в котором каждому эффекту будет соответствовать один-два вида параметра, на мой взгляд тоже неэффективно.
Пишу LokiDungeons, столкнулся с проблемой, что нужно использовать enum вместо строк, но он должен быть динамический т.к. теперь атаки грузятся из выделенных файлов классов. Путём долгих поисков по форумам, был обнаружен способ динамического дополнения enum'ов, но теряется возможность операторного сравнения. К сожалению я не могу показать, как это выглядит. Я удалил все ссылки и тот код, да и вообще отказался от этого. Но могу сказать, что делается это безобразие через рефлексии и скрытые конструкторы.
 
Но могу сказать, что делается это безобразие через рефлексии и скрытые конструкторы.

Я что-то подобное сегодня находил поиском на stackoverflow. Но даже не стал вникать в код. Вся прелесть энума в том, что можно написать xxx == Aaaa.BBBB (Или Aaaa.BBBB.ccc() — я помню был просто счастлив, когда осознал, что можно в enum'ы "внедрять" поля, методы и объекты), а если этого нельзя сделать, то лично для меня он ничем не отличается от Set, List или какого-нибудь массива.
 
У меня такая проблема, поставил плагины PlayEffect и Reactions, но при вводе команды допустим из playeffect пишет в чат /playeffect help, ввожу /playeffect help а он отвечает тем же, а у reactions работает только help на остальное жалуется something wrong(check command, permissions), никаких плагинов больше нет тем более PEX, лог говорит о какой то библиотеке и что не может загрузить классы из нее, ядро MCPC+, версия 1.6.4 Вот лог связаный с PlayEffect и Reactions
Код:
2014-01-16 18:30:44 [INFO] [PlayEffect] Enabling PlayEffect v0.2.2
2014-01-16 18:30:44 [INFO] [PlayEffect] Failed to initialize NMSLib! Some features of plugin will be disabled!
2014-01-16 18:30:44 [INFO] [PlayEffect] Please download compatible version from: http://dev.bukkit.org/bukkit-plugins/playeffect/
2014-01-16 18:30:44 [SEVERE] java.lang.ClassNotFoundException: net.minecraft.server.v1_6_R3.ChunkPosition
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader.java:441)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:234)
2014-01-16 18:30:44 [SEVERE]    at java.lang.ClassLoader.loadClass(Unknown Source)
2014-01-16 18:30:44 [SEVERE]    at java.lang.ClassLoader.loadClass(Unknown Source)
2014-01-16 18:30:44 [SEVERE]    at java.lang.Class.forName0(Native Method)
2014-01-16 18:30:44 [SEVERE]    at java.lang.Class.forName(Unknown Source)
2014-01-16 18:30:44 [SEVERE]    at me.fromgate.playeffect.NMSLib.init(NMSLib.java:59)
2014-01-16 18:30:44 [SEVERE]    at me.fromgate.playeffect.PlayEffect.onEnable(PlayEffect.java:36)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:467)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:383)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:277)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:259)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71243_i(MinecraftServer.java:525)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71222_d(MinecraftServer.java:489)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:432)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:224)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:634)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
2014-01-16 18:30:44 [INFO] [ReActions] Enabling ReActions v0.5.1
2014-01-16 18:30:44 [INFO] [ReActions] PlayEffect plugin is found!
P.S на счет "[INFO] [PlayEffect] Please download compatible version from" уже пробовал ставить другие версии плагина, не помогло
 
Последнее редактирование:
У меня такая проблема, поставил плагины PlayEffect и Reactions, но при вводе команды допустим из playeffect пишет в чат /playeffect help, ввожу /playeffect help а он отвечает тем же, а у reactions работает только help на остальное жалуется something wrong(check command, permissions), никаких плагинов больше нет тем более PEX, лог говорит о какой это библиотеке и что не может загрузить классы из нее, ядро MCPC+, версия 1.6.4 Вот лог связаный с PlayEffect и Reactions
Код:
2014-01-16 18:30:44 [INFO] [PlayEffect] Enabling PlayEffect v0.2.2
2014-01-16 18:30:44 [INFO] [PlayEffect] Failed to initialize NMSLib! Some features of plugin will be disabled!
2014-01-16 18:30:44 [INFO] [PlayEffect] Please download compatible version from: http://dev.bukkit.org/bukkit-plugins/playeffect/
2014-01-16 18:30:44 [SEVERE] java.lang.ClassNotFoundException: net.minecraft.server.v1_6_R3.ChunkPosition
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader.java:441)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:234)
2014-01-16 18:30:44 [SEVERE]    at java.lang.ClassLoader.loadClass(Unknown Source)
2014-01-16 18:30:44 [SEVERE]    at java.lang.ClassLoader.loadClass(Unknown Source)
2014-01-16 18:30:44 [SEVERE]    at java.lang.Class.forName0(Native Method)
2014-01-16 18:30:44 [SEVERE]    at java.lang.Class.forName(Unknown Source)
2014-01-16 18:30:44 [SEVERE]    at me.fromgate.playeffect.NMSLib.init(NMSLib.java:59)
2014-01-16 18:30:44 [SEVERE]    at me.fromgate.playeffect.PlayEffect.onEnable(PlayEffect.java:36)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:467)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:383)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:277)
2014-01-16 18:30:44 [SEVERE]    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:259)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71243_i(MinecraftServer.java:525)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71222_d(MinecraftServer.java:489)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:432)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:224)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:634)
2014-01-16 18:30:44 [SEVERE]    at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
2014-01-16 18:30:44 [INFO] [ReActions] Enabling ReActions v0.5.1
2014-01-16 18:30:44 [INFO] [ReActions] PlayEffect plugin is found!
P.S на счет "[INFO] [PlayEffect] Please download compatible version from" уже пробовал ставить другие версии плагина, не помогло
Какое ядро плагина? Ядро ругается на библиотеку
 
Какое ядро плагина? Ядро ругается на библиотеку

NMSLib - это класс в плагине, который отвечает за работу с пакетами средствами craftbukkit. Поскольку это происходит на более низком уровне чем BukkitAPI, то MCPC+ его не понимает.
Поэтому пока, к сожалению, под MCPC PlayEffect не заработает. Я планирую добавить поддержку ProtocolLib для отправки пакетов с эффектами, тогда по идее появится и совместимость с MCPC.
 
NMSLib - это класс в плагине, который отвечает за работу с пакетами средствами craftbukkit. Поскольку это происходит на более низком уровне чем BukkitAPI, то MCPC+ его не понимает.
Поэтому пока, к сожалению, под MCPC PlayEffect не заработает. Я планирую добавить поддержку ProtocolLib для отправки пакетов с эффектами, тогда по идее появится и совместимость с MCPC.
Жаль, тогда буду ждать, а с ReActions тоже самое?
 
Жаль, тогда буду ждать, а с ReActions тоже самое?
В ReActions несколько стандартных эффектов (дым, огоньки мобспавнера, что-то ещё ;)) которые работают без PlayEffect. Всё остальное работает используя PlayEffect API.

Вобщем, есть попытка подружить PlayEffect с ProtocolLib.
У меня работает, но нужно проверить на spigot'е и MCPC+. У кого есть возможность, проверьте пожалуйста
эффекты explosion и любой из "нестандартных", к примеру, lava или flamenew

https://dl.dropboxusercontent.com/u/64799811/PlayEffect/PlayEffect.jar
 
В ReActions несколько стандартных эффектов (дым, огоньки мобспавнера, что-то ещё ;)) которые работают без PlayEffect. Всё остальное работает используя PlayEffect API.

Вобщем, есть попытка подружить PlayEffect с ProtocolLib.
У меня работает, но нужно проверить на spigot'е и MCPC+. У кого есть возможность, проверьте пожалуйста
эффекты explosion и любой из "нестандартных", к примеру, lava или flamenew

https://dl.dropboxusercontent.com/u/64799811/PlayEffect/PlayEffect.jar
Код:
2014-01-16 22:17:31 [INFO] [PlayEffect] Enabling PlayEffect v0.3.1/2
2014-01-16 22:17:31 [INFO] [PlayEffect] ProtocolLib found and connected.
2014-01-16 22:17:31 [SEVERE] Error occurred while enabling PlayEffect v0.3.1/2 (Is it up to date?)
java.lang.NullPointerException
    at me.fromgate.playeffect.packet.NMSLib.log(NMSLib.java:103)
    at me.fromgate.playeffect.packet.NMSLib.init(NMSLib.java:94)
    at me.fromgate.playeffect.PlayEffect.onEnable(PlayEffect.java:37)
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:467)
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:383)
    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:277)
    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:259)
    at net.minecraft.server.MinecraftServer.func_71243_i(MinecraftServer.java:525)
    at net.minecraft.server.MinecraftServer.func_71222_d(MinecraftServer.java:489)
    at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:432)
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:224)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:634)
 
На это не обращайте внимание, запускайте пробуйте запустить эффекты. Эта библиотека при наличии ProtocolLib использоваться не будет. А он — подхватился нормально: "2014-01-16 22:17:31 [INFO] [PlayEffect] ProtocolLib found and connected."
 

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

Назад
Верх