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

Стартап Помощь новичкам и тем, кто мало писал плагины. (+ LifeHack'и)

EntityDamageByEntityEvent
Коротенький пример:
Java:
    @EventHandler
    public void on(EntityDamageByEntityEvent e)
    {
        Player p = (Player) e.getDamager();
      
        if(e.getEntityType() == EntityType.PLAYER)
        {
            String name = e.getEntity().getName();
          
            p.sendMessage("Вы ударили игрока " + name);
        }
    }
Очень тебе благодарен)
 
Раз Вы так просите: :good:
Java:
    @EventHandler
    public void on(EntityDamageByEntityEvent e)
    {
        Player p = (Player) e.getDamager();
     
        if(e.getDamager() instanceof Player)
        {
            if(e.getEntityType() == EntityType.PLAYER)
            {
                String name = e.getEntity().getName();
         
                p.sendMessage("Вы ударили игрока " + name);
            }
        }
    }
 
Я смотрю, вы все отзывчивые, классные кодеры, и думаю, вам не составит труда еще мне помочь.
Мои вопросики:
1. Вот я сделал плагин, который оповещает о заходе игрока. Мне бы хотелось, чтобы рядом с ником отображался префикс. Подскажите, пожалуйста, как это сделать. Если можно, объясните на пальцах)
2. Я более-менее научился работать с конфигом (Могу в нем сообщения менять :-)), интересно, как сделать, чтобы в конфиге можно было включать и выключать функцию оповещения, при заходе.
У меня еще куча вопросов, но для начала хотелось бы увидеть ответы на эти.
Заранее спасибо)

P.S. Я только начинающий, просьба, не обсирать.
 
это EntityDamageByBlockEvent.
А я злой кактус, который Entity.
Раз Вы так просите: :good:
Java:
    @EventHandler
    public void on(EntityDamageByEntityEvent e)
    {
        Player p = (Player) e.getDamager();
    
        if(e.getDamager() instanceof Player)
        {
            if(e.getEntityType() == EntityType.PLAYER)
            {
                String name = e.getEntity().getName();
        
                p.sendMessage("Вы ударили игрока " + name);
            }
        }
    }
И снова словишь исключение. Думай.
 
1. Вот я сделал плагин, который оповещает о заходе игрока. Мне бы хотелось, чтобы рядом с ником отображался префикс. Подскажите, пожалуйста, как это сделать. Если можно, объясните на пальцах)
API PermissionsEx (если у тебя он). Добавляешь его в библиотеки и далее так:
Java:
public void on(PlayerJoinEvent e)
{
    Player p = e.getPlayer();
    PermissionUser user = PermissionsEx.getUser(p);
    String prefix = user.getPrefix();
    String suffix = user.getSuffix();
}

2. Я более-менее научился работать с конфигом (Могу в нем сообщения менять :)), интересно, как сделать, чтобы в конфиге можно было включать и выключать функцию оповещения, при заходе.
Например, если конфиг такой:
Код:
enabled: true
то:
JavaScript:
public void on(PlayerJoinEvent e)
{
    boolean enabled = getConfig().getBoolean("enabled");
    if(enabled == true)
    {
        e.setJoinMessage(null);
        //Остальное...
    }
}
 
Раз Вы так просите: :good:
Java:
    @EventHandler
    public void on(EntityDamageByEntityEvent e)
    {
        Player p = (Player) e.getDamager();
    
        if(e.getDamager() instanceof Player)
        {
            if(e.getEntityType() == EntityType.PLAYER)
            {
                String name = e.getEntity().getName();
        
                p.sendMessage("Вы ударили игрока " + name);
            }
        }
    }
сначала проверяй instanceof, а уже только потом Player p = (Player) e.getDamager();
  • boolean enabled = getConfig().getBoolean("enabled");
  • if(enabled == true)
== true можно и не писать.
 
API PermissionsEx (если у тебя он). Добавляешь его в библиотеки и далее так:
Java:
public void on(PlayerJoinEvent e)
{
    Player p = e.getPlayer();
    PermissionUser user = PermissionsEx.getUser(p);
    String prefix = user.getPrefix();
    String suffix = user.getSuffix();
}


Например, если конфиг такой:
Код:
enabled: true
то:
JavaScript:
public void on(PlayerJoinEvent e)
{
    boolean enabled = getConfig().getBoolean("enabled");
    if(enabled == true)
    {
        e.setJoinMessage(null);
        //Остальное...
    }
}
С включение/выключением функции разобрался сам, не получалось из-за того, что потерял одно равно в условии. А за префиксы большое спасибо.
А что за API Pex? Сам плагин?

Все, понял, на этот вопрос можете не отвечать :)
 
Последнее редактирование:
В конфиге заменены "\u00a7" на "&", но, как теперь понятно, это на префикс не влияет.
Отсюда вопрос, как мне это поправить?
Заранее спасибо)
Ну так и на префиксе заменяй, в чем проблема?
 
Спасибо за ответы. Но при решении одной проблемы, появляются другие:
Префикс в сообщениях отображается некорректно.
В конфиге заменены "\u00a7" на "&", но, как теперь понятно, это на префикс не влияет.
Отсюда вопрос, как мне это поправить?
Заранее спасибо
upload_2017-5-7_21-50-7.png
Извините за флуд, залагало.
Ну так и на префиксе заменяй, в чем проблема?
А можно поподробнее?
 
Спасибо за ответы. Но при решении одной проблемы, появляются другие:
Префикс в сообщениях отображается некорректно.
В конфиге заменены "\u00a7" на "&", но, как теперь понятно, это на префикс не влияет.
Отсюда вопрос, как мне это поправить?
Заранее спасибо
Посмотреть вложение 46185
Извините за флуд, залагало.
JavaScript:
prefix = prefix.replace("&", "\u00a7");
 
JavaScript:
prefix = prefix.replace("&", "\u00a7");
Пробовал, ничего не получилось. Возможно, я допустил ошибку, сейчас проверю и напишу.

А данный код надо написать до вызова префикса или после? Или не имеет значения?
 
Пробовал, ничего не получилось. Возможно, я допустил ошибку, сейчас проверю и напишу.

А данный код надо написать до вызова префикса или после? Или не имеет значения?
Если не работает, кинь сюда часть кода что отвечает за джоинер
 
Заработало! Спасибо, наверное, до этого я допустил ошибку :-)
 
И снова здравствуйте. И снова у меня куча вопросов. :)
Начал делать вывод статистики игрока.
Вопросы:
1.Как сделать, чтобы выводилась статистика, как игрока онлайн, так и оффлайн, но чтобы не выводилась статистика игрока, которого не было на сервере, а вместо этого какое-то сообщение?
2.Как получить статистику убийств, смертей я догадался. Вот такой вопрос при работе с конфигом.
Вот фрагмент кода и конфига:
Код:
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(!sender.hasPermission("futurestats.use")) {
            sender.sendMessage("У вас недостаточно прав");
            return true;
        }
        if(args.length == 0) {
            sender.sendMessage("Недостаточно аргументов.\n/stat [nick]");
        }
        String name = args[0];
        Player p = Bukkit.getPlayer(name);
        int death = p.getStatistic(Statistic.DEATHS);
        int kills = p.getStatistic(Statistic.PLAYER_KILLS);
        int mobkills = p.getStatistic(Statistic.MOB_KILLS);
        String format = plugin.getConfig().getString("stat-format");
        sender.sendMessage(format);
        return true;
    }
Код:
config.yml:

stat-format: '
Убиства: {kills}
Смерти: {death}
Убийства мобов: {mobkills}'
Как это реализовать в конфиге правильно? replace не помогает, так как death, kills, mobkills - переменные типа "int"

P.S. Я новичок, многого не знаю. Не ругайтесь, если что-то не так в коде.
 
{kills} - String s = getConfig().getString(kills);
s = s.replace("{kills}", kills);
Писал от руки на форуме, не уверен что сработает.Я это так представляю.
Если число заменять не хочет, то valueOf(kills)
 
{kills} - String s = getConfig().getString(kills);
s = s.replace("{kills}", kills);
Писал от руки на форуме, не уверен что сработает.Я это так представляю.
Если число заменять не хочет, то valueOf(kills)
Первый способ не работает.
Второй, я не понял, как оформить..
Все, понял. Большое спасибо. Второй способ помог.
1.Как сделать, чтобы выводилась статистика, как игрока онлайн, так и оффлайн, но чтобы не выводилась статистика игрока, которого не было на сервере, а вместо этого какое-то сообщение?
.
Up
Как сделать, чтобы при убийстве игрока выполнялось какое-то действие?
 
Первый способ не работает.
Второй, я не понял, как оформить..
Все, понял. Большое спасибо. Второй способ помог.

Up
Как сделать, чтобы при убийстве игрока выполнялось какое-то действие?
Смотря какое тебе надо.
 
У меня снова вопрос. При вводе команды /stat nick у меня выводится статистика игрока(убийства, смерти), которые записаны в файле. Вопрос такой: Как сделать вывод статуса игрока, т.е. онлайн он или оффлайн. p.isOnline - не работает, т.к. когда игрок оффлайн, выводится ошибка "An internal..."
Пример:
Java:
String status = Какое-то условие ? "Онлайн" : "Оффлайн";

У меня снова вопрос. При вводе команды /stat nick у меня выводится статистика игрока(убийства, смерти), которые записаны в файле. Вопрос такой: Как сделать вывод статуса игрока, т.е. онлайн он или оффлайн. p.isOnline - не работает, т.к. когда игрок оффлайн, выводится ошибка "An internal..."
Пример:
Java:
String status = Какое-то условие ? "Онлайн" : "Оффлайн";
Решил.
 

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

Назад
Верх